比特币支付协议 原

支付协议被视为已弃用,将在更高版本的比特币核心中删除。该协议在一些钱包中存在多个安全设计缺陷和实现缺陷。当使用BIP70 URI时,用户将开始在比特币核心版本0.18中接收弃用警告。商家应该从BIP70过渡到更安全的选项,如BIP21。商家不应该要求BIP70付款,并且应该提供BIP21后备。

比特币核心0.9支持新的支付协议。付款协议为付款请求添加了许多重要功能:

  • 支持X.509证书和SSL加密,以验证接收者的身份并帮助防止中间人攻击。
  • 提供有关所需支付给消费者的更多详细信息。
  • 允许消费者直接向接收者提交交易而无需通过对等网络。这可以加快支付处理速度并使用计划的功能,例如child-pays-for-parent交易费和离线NFC或基于蓝牙的支付。

不再被要求支付给无意义的地址,例如mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN,而是要求消费者从接收者的X.509证书中支付公共名称(CN)描述,例如www.bitcoin.org

要使用支付协议请求付款,你使用扩展(但向后兼容)bitcoin: URI。例如:

bitcoin:mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN\
?amount=0.10\
&label=Example+Merchant\
&message=Order+of+flowers+%26+chocolates\
&r=https://example.com/pay/mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN

除了r之外,上面提供的任何参数都不是支付协议所必需的,但是你的应用程序可能包含它们以便与尚未处理支付协议的钱包程序向后兼容。

r参数告知支持协议的钱包程序忽略其他参数并从提供的URL中获取PaymentRequest。浏览器,QR代码阅读器或处理URI的其他程序在URI上打开消费者的比特币钱包程序。

支付协议在BIP70,BIP71和BIP72中有详细描述。可以在支付协议中使用的所有参数的示例CGI程序和描述在开发者示例支付协议子部分中提供。在本小节中,我们将简要介绍故事格式如何使用付款协议。

客户Charlie在商人Bob经营的网站上购物。Charlie在他的购物车中添加了一些商品,点击Checkout With Bitcoin按钮。

Bob的服务器自动将以下信息添加到其采购数​​据库:

  • Charlie订单的详细信息,包括订购的物品和送货地址。
  • satoshis中的订单总数,通过将法定价格转换为satoshis中的价格并被创建。
  • 该总数不再被接受的到期时间。
  • Charlie应该向其发送付款的pubkey脚本。通常,这将是一个P2PKH或P2SH pubkey脚本,其中包含一个唯一的(从未使用过的)secp256k1公钥。

将所有信息添加到数据库后,Bob的服务器显示查询点击付费的bitcoin: URI。

Charlie点击了他的浏览器中的bitcoin: URI。他的浏览器的URI处理程序将URI发送到他的钱包程序。钱包知道支付协议,因此它解析r参数并向该URL发送HTTP GET以查找PaymentRequest消息。

返回的PaymentRequest消息可能包括私人信息,例如Charlie的邮件地址,但钱包必须能够访问它而不使用先前的身份验证,例如HTTP cookie,因此通常使用具有猜测部分的可公开访问的HTTPS URL。为支付请求创建的唯一公钥可用于创建唯一标识符。这就是为什么在上面的示例URI中,PaymentRequest URL包含P2PKH地址:https://example.com/pay/mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN

收到HTTP GET到上面的URL后,Bob的网络服务器上的PaymentRequest生成CGI程序从URL中获取唯一标识符,并在数据库中查找相应的详细信息。然后,它会创建一个PaymentDetails消息,其中包含以下信息:

  • satoshis中的订单数量和要支付的pubkey脚本。
  • 一份包含订购物品清单的备忘录,因此Charlie知道他要付的是什么。它可能还包括Charlie的邮寄地址,因此他可以仔细检查它。
  • PaymentDetails消息的创建时间加上它到期的时间。
  • Charlie的钱包应该向其发送完成的交易的URL。

PaymentDetails消息放在PaymentRequest消息中。付款请求允许Bob的服务器使用服务器的X.509 SSL证书对整个请求进行签名。(付款协议的目的是在将来允许其他签名方法。)Bob的服务器在对HTTP GET的回复中向Charlie的钱包发送付款请求。

Charlie的钱包收到PaymentRequest消息,检查其签名,然后将显示PaymentDetails消息中的详细信息给Charlie。Charlie同意付款,因此钱包构建了对Bob提供的服务器提供的pubkey脚本的付款。与传统的比特币支付不同,Charlie的钱包不一定会自动将此付款广播到网络。相反,钱包构造一个Payment消息,并将其作为HTTP POST发送到PaymentDetails消息中提供的URL。除其他外,付款消息包含:

  • 签约交易,Charlie付钱给Bob。
  • Charlie可以发送给Bob的可选备忘录。(不保证Bob会读它。)
  • 退款地址(pubkey脚本)如果Bob需要退回部分或全部Charlie的satoshis,可以支付。

Bob的服务器接收付款消息,验证交易将所请求的金额支付给所提供的地址,然后将该交易广播到网络。它还回复带有PaymentACK消息的HTTP POSTed Payment消息,其中包括来自Bob服务器的可选备忘录,感谢Charlie的赞助并提供有关订单的其他信息,例如预期到达日期。

Charlie的钱包看到了PaymentACK,并告诉Charlie付款已经发送。PaymentACK并不意味着Bob已经验证了Charlie的付款,请参阅下面的验证付款小节,但这确实意味着Charlie可以在交易得到确认时再做其他事情。Bob的服务器从区块链验证Charlie的交易已得到适当确认后,它授权运送Charlie的订单。

如果发生争议,Charlie可以从各种签名或其他证明的信息中生成经过加密验证的收据。

  • 由Bob的网络服务器签名的PaymentDetails消息证明Charlie收到一张发票​​,用于为备忘录字段中指定的货物支付指定数量的satoshis的指定pubkey脚本。
  • 比特币区块链可以证明Bob指定的pubkey脚本支付了指定数量的satoshis。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏区块链大本营

Facebook借稳定币取代美元?比特大陆8000万美元的矿机已就位;深圳千余家企业接入区块链发票 | 一分钟链圈

据CCN消息,Vitalik Buterin表示,考虑到以太坊引导协议通过的问题,目前的以太坊治理模型工作得相当好。但他认为以太坊的治理在这一点上被低估了。此外...

13410
来自专栏区块链大本营

阿桑奇被捕,“维基解密”官方BTC地址捐赠数剧增;芒果互娱《快乐大本营》引入区块链技术的IP数字化服务 | 一分钟链圈

据环球网消息,近日,芒果互娱与创无限就IP数字化达成合作,率先在《快乐大本营》落地。由国内专业数字资产登记服务机构中证数登,为《快乐大本营》提供IP数字化登记、...

13430
来自专栏区块链大本营

为什么比特币不可缺少?中本聪写了一封信告诉你

10年前,比特币的匿名创造者中本聪(Satoshi Nakamoto)说明了比特币不同于此前其他数字货币的原因。

12310
来自专栏区块链大本营

后悔! 曾经敲不出的代码, 如今竟如此简单, 都是因为不知道这个...

作为智能合约编程的高级语言,Solidity 让很多想转型区块链开发的程序员望而却步。尤其是作为一个初学者,部署时会经常失败,找不到原因,区块同步也十分缓慢,实...

11820
来自专栏区块链大本营

比特大陆的“新筹码”:IPO失效后,押注算力芯片,预示着什么?

今日,比特大陆在港交所的招股书显示失效。历经半年时间,比特大陆的赴港IPO之旅自此宣告终结。

13920
来自专栏区块链大本营

爆料! 18张图、55个链接, 证据都在这了, 你还说自己是中本聪?

很多人都对外宣称自己是中本聪,但最有话题性的“中本聪”还是 Craig S. Wright 这个人了。

13920
来自专栏申龙斌的程序人生

用NBitcoin进行区块链开发(5)

BTC的区块链(blockchain)存储着许多交易(transaction),transaction简单来讲是指BTC从某个地址到某个地址的转移记录。与我们平...

11120
来自专栏区块链大本营

必读!未来月薪10万的五大利器(二)

侧链(SideChain)的概念和实施方案源于侧链“白皮书”《用与比特币挂钩的侧链来提供区块链创新》。侧链协议本质上是一种跨区块链的解决方案,这种解决方案可以实...

12020
来自专栏iOS开发干货分享

程序员的大本营被黑客攻击了!10天内不交赎金,就公开用户私有代码

就在五一假期的最后一天,一些程序员查看自己托管到GitHub上的代码时发现,他们的源代码和Repo都已消失不见,取而代之的是黑客留下的一封勒索信!

10800
来自专栏区块链大本营

别的公司裁员996, 区块链公司一将难求, 什么样的公司最容易招到开发者?

当下整个互联网行业进入寒冬,公司为了活下去纷纷开始裁员、推行 996 的工作模式。而与之形成鲜明对比的是,区块链行业都在使出浑身解数招募开发人员。

9220

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励