术语表 /开发者参考
PP script
- PP script 是什么?
- PP script 曾是 BIP70 输出中的必填字段,包含付款方必须原样复现的原始锁定脚本,其字节与最终写入交易输出的字节相同。
规定于 BIP-70。
在 BIP70 通过网络传输的所有内容中,只有脚本这一部分最终留在了区块链上。证书、备注和到期时间都留在链下,而锁定脚本则原样写入交易,如今位于未花费输出集合之中。决定谁能花费这些比特币的,正是这些字节,请求中的其他内容都不决定这一点。
运作方式
状态:已成历史。该脚本是 Output 消息的字段2,也是商家唯一不能省略的部分,因为金额默认为零。Bitcoin Core 在2020年6月3日发布的0.20.0中停止解析其中的任何内容。
发送脚本而不是地址,是一个有意的选择。地址是面向人的传输格式:base58check 或 bech32,带有前缀、校验和,以及为便于书写和口述而选定的字符集。收到地址的钱包必须先将其解码为脚本,才能构建任何内容。BIP70 省去了这一来回转换,直接以网络实际使用的形式指明目的地。
标准形式的大小是固定的,了解这些大小会使区块浏览器更容易阅读:
- 支付到公钥哈希(Pay to public key hash),25字节:复制、哈希、压入20字节、验证相等、检查签名。
- 支付到脚本哈希(Pay to script hash),23字节:哈希、压入20字节、检查相等。
- 单密钥 segwit,22字节:一个为零的版本字节和一个20字节的哈希。
- 脚本哈希 segwit,34字节:版本零和一个32字节的哈希。
- Taproot,34字节:版本一和一个32字节的密钥。
这种格式放弃的是错误检测。Bech32 保证在最长89个字符的地址中,任意四个被替换的字符都能被发现,而 base58check 通过四字节的哈希发现数据损坏。原始脚本字节则两者都没有。地址中翻转一个比特,会得到钱包拒绝接受的字符串;脚本中翻转一个比特,则会得到一个有效但谁也无法花费的输出。
在哪里会遇到它
脚本类型是两笔大小相同的提币却可能收取不同手续费的原因。
允许您选择地址格式的交易所,实际上是在为您选择脚本。单密钥 segwit 输出占22字节,传统形式为25字节,差别微不足道,但日后花费它就不同了:该输入约需68虚拟字节,而传统输入约需148,因此您今天收到的比特币,会在其整个存续期间决定您的一部分手续费支出。在20 sat/vB 的费率下,您最终每花费一个输入,差额约为1,600聪。
区块浏览器会标明所显示的每个输出的类型,您可以据此核实自己实际收到的是哪种输出。较新的软件使用输出描述符来描述目的地,这是一种紧凑的文本形式,涵盖整个脚本系列及其派生方式,而不是一次只描述一个脚本。
从这一切中值得保留的习惯很简单:在自带屏幕的设备上确认目的地,因为替换剪贴板中地址的恶意软件十分常见,而显示真实收款方的硬件钱包正是能发现这种情况的检查手段。
PP script vs pubkey script
BIP70 的这个字段曾是一个容器,而 pubkey script 是内容本身。pubkey script 也称为 scriptPubKey 或锁定脚本,出现在已创建的每一个交易输出中,规定了花费者必须满足的条件。PP script 只是其中一份副本传输的一个具体位置,位于一个无人运行的协议之内。仅在阅读 BIP70 文档时使用该字段名称,其他情况下使用通用名称。