术语表 /开发者参考
PP amount
- PP amount 是什么?
- PP amount 曾是 BIP70 输出中以聪计价的字段,商家希望由付款方自行决定发送金额时,该字段设为零。
规定于 BIP-70。
支付错误往往源于单位。BIP70 的金额是以聪计的64位计数,而 BIP21 URI 中的 amount 参数是以比特币计的十进制数,因此同一笔支付在前者中写作250000,在后者中写作0.0025。在不同系统之间转移资金的人,应先核对字段期望的单位,再采信总额。
运作方式
状态:已成历史。该字段属于 BIP70,Bitcoin Core 于0.19版中将其弃用,并于2020年6月3日在0.20.0版中将其移除。
PaymentDetails 消息内的 Output 由两个字段构成:一个说明资金去向的脚本,以及一个说明金额的 amount。amount 是以聪计的无符号64位整数,默认值为零,而零有特定含义。它并不表示不支付任何金额,而是表示商家不指定数额,钱包应询问客户,捐赠页面就是这样运作的。
一个请求中可以出现多个输出,每个输出各有自己的金额,付款钱包必须在一笔交易中满足所有输出。这比听起来更有用。商家可以将一笔销售款的一部分直接转入冷存储,一部分转入用于退款的热钱包,一部分转给推广方,而客户无需发送三笔付款,也不必知道存在这样的分配。
数值范围从来不是限制。64位无符号整数的上限为18,446,744,073,709,551,615聪,约为将来全部2,100,000,000,000,000聪总量的8,800倍。值得注意的边界在另一端。低于粉尘阈值的金额会产生网络不会转发的输出,而 Bitcoin Core 的策略将该阈值定为:传统的 pay-to-public-key-hash 输出546聪,单密钥隔离见证输出294聪。
在哪里会遇到它
如今没有任何软件实现 BIP70 的 amount 字段,但其背后的单位混淆问题依然普遍存在。
三种规范,三种单位。BIP21 URI 以比特币报价。BIP70 以聪报价。闪电网络的 BOLT11 发票更精细,以毫聪报价,即一聪的千分之一。钱包界面还会在此之上增加显示设置,因此同一笔余额会显示为0.00250000或250,000,取决于您设置过一次便已忘记的偏好。
弄错的实际代价是真金白银。手续费估算以每虚拟字节的聪数给出,因此一笔约141虚拟字节、1个输入2个输出的隔离见证交易,在5 sat/vB 下需要705聪。如果把这个数字当成比特币来读,您会以为一笔普通交易的花费超过大多数人一年在手续费上的全部支出。
两个习惯可以解决这个问题。在钱包设置中选定一种计价单位并保持不变,这样您预期的数字位数就不会变化。在任何提币页面,先看单位标签,再看数字,因为交易所的最低限额、网络手续费和您的余额常常在同一页面上以不同的单位标示。
PP amount vs 比特币 URI 的金额
BIP70 的金额是以聪计的整数;BIP21 的金额是以比特币计的小数,两者之间的换算系数为100,000,000。这就是全部差别,但已足以造成影响。同一个字段在一种格式中为0.0025,在另一种格式中则为250000,软件在两者之间不经换算直接转换,就会产生相差八个数量级的错误,偏大还是偏小取决于转换的方向。现代格式胜出,因此您如今在支付链接中看到的数字以比特币计,除非另有明确标示为聪。