跳转到正文
buybitcoinsmart

术语表 /开发者参考

PP merchant data

PP merchant data 是什么?
PP merchant data 曾是 BIP70 商家放入支付请求、并原样取回的一段不透明字节串,用于将收到的比特币与订单对应起来。

规定于 BIP-70。

匹配付款与订单,是每个结账环节都必须解决的枯燥问题,而比特币让它更难,因为一笔交易不携带发票编号。BIP70 的解决办法是把一个 cookie 交给客户的钱包,并要求它再传回来。如今的商家用每笔订单一个一次性地址来解决同一问题,这既更简单,也更私密。

运作方式

状态:已成历史。商家数据是 PaymentDetails 的字段7,也是随后返回的 Payment 消息的字段1,在 Bitcoin Core 0.20.0于2020年6月3日发布时,它连同 BIP70 的其余部分一并消失。

不透明正是其用意。钱包被告知将这些字节视为没有含义,并原样返回,这让每个商家都能自行设计方案,而无需其他任何人理解。

当时常见的方案有两种。一种是简短的查找键,例如16字节的订单标识符,它使请求保持精简,并把工作交给商家的数据库。另一种是自包含的数据块,装下整个购物车,使服务器无需保存状态,代价是体积更大。

第二种方案有一个漏洞,规范中已有警告。这些字节是从商家无法控制的软件那里返回的,因此从中读取的任何内容都是攻击者提供的输入。如果某家商店把价格或折扣码存放在其中,并信任返回的副本,就等于为自己做了一个优惠券生成器。补救办法是往返状态的常规做法:附上消息认证码,并在读取任何字段之前先加以校验。

体积比看上去更重要。整个已签名的请求必须送达客户,而将其渲染为二维码会带来严格的上限:最大的符号,即版本40、最低纠错等级,可容纳2,953字节的二进制数据。正是这一上限,使 BIP72 定义了 r= 参数,让一个短链接可以指向通过 HTTPS 提供的请求,而不必把请求本身带在链接里。

在哪里会遇到它

商家数据过去承担的工作,如今由地址本身完成。

BTCPay Server 等结账软件会为每张发票派生一个全新的地址,因此到账的付款自己就能标明所属订单,无需往返,也无需回传状态。这在两方面胜过 BIP70:付款方没有任何可篡改的内容,也避免了地址重复使用,否则任何查看区块链的人都能看到商家的全部收入。托管型平台的做法相同,这也是充币能进入您的账户而不是别人账户的原因。

从这一切中值得记住一条警告。其他一些网络要求在充币时附带备注或目的地标签,漏填会使您的资金进入一个汇集账户,且没有任何信息将其与您关联。比特币没有这样的字段。如果充币页面要求您为比特币交易附上标签、备注或参考码,那么该表单要么配置有误,要么是假的,而追回真正误转的充币既缓慢,又往往无法做到。

PP merchant data vs PP memo

商家数据是写给机器的,备注是写给人的。前者从不展示给客户,后者的存在就是为了展示。两者的失效方式也相应不同:未经检查的备注会误导正在查看确认界面的人,而未经检查的商家数据会误导商家自己的会计软件。在返回环节,两者都没有签名,这正是两者都必须被视为不可信的原因。

请勿混淆

常见问题

比特币充币是否需要备注或目的地标签?

不需要。比特币交易没有标签字段,正规平台会给您一个无人共用的地址,以此识别您的充币。要求为比特币充币填写备注的页面,要么配置有误,要么是欺诈页面。

商家如何得知一笔比特币付款属于哪个订单?

为每张发票生成一个单独的收款地址。地址就是订单的键,因此付款到账时就能自行标明身份,客户的钱包无需回传任何内容。

相关术语

开发者参考中的更多术语

阅读本页英文版