本文的核心内容主要源自BIP141、BIP143、BIP144和BIP145。请将本文视为探索相关文献的基石,以及一个包含必须完成和应避免事项的参考清单。
### 基本隔离验证支持 为了确保钱包与基本隔离验证兼容,必须实现以下章节中描述的所有功能: - **P2SH支持**:一个隔离验证相容的钱包必须能够处理P2SH(BIP16)及其地址格式。在付款过程中,钱包需将P2SH地址转换为scriptPubKey,并构建交易。在收款方面,钱包需创建基于P2WPKH脚本(本文后将详细说明)的P2SH地址,并能够识别发送至该地址的交易。即便钱包仅支持单签名收付款,这些要求也是必须满足的。 ### 建立P2SH-P2WPKH地址 一个P2SH-P2WPKH地址与比特币原始的单签名P2PKH地址(前缀为1)类似。P2SH地址的前缀为3。只有在P2SH-P2WPKH UTXO被消耗并揭示redeemScript后,才能区分P2SH-P2WPKH地址与非SegWit P2SH地址(例如非SegWit多重签名地址)。当收款仅需一个公钥时(如P2PKH),应使用P2SH-P2WPKH地址。 P2SH-P2WPKH使用与P2PKH相同的公钥,但有一个关键区别:在P2SH-P2WPKH中,公钥必须是压缩形式,即33字节长,以0x02或0x03开头。使用未压缩的公钥格式可能导致资金不可追踪的损失。创建P2SH-P2WPKH地址的过程包括计算公钥经过SHA256和RIPEMD160后的值(keyhash),并避免重复使用keyhash以保护隐私和防止错误。 P2SH的redeemScript长度为22字节,以OP_0开始,后跟keyhash(即0x0014{20-byte keyhash})。与所有P2SH地址一样,scriptPubKey是OP_HASH160 hash160(redeemScript) OP_EQUAL,而地址则是前缀为3的P2SH地址。 ### 交易序列化 一个隔离验证相容的钱包必须支持原始的交易格式,如nVersion|txins|txouts|nLockTime。同时,钱包还需支持新的序列化格式,如nVersion|marker|flag|txins|txouts|witness|nLockTime,其中nVersion、txins、txouts和nLockTime的格式与原始格式相同。marker必须是0x00,flag必须是0x01,witness是所有交易见证数据的序列化结果。 ### 交易ID 在隔离验证中,每笔交易都会有两个ID。txid的定义保持不变:原始交易的序列化格式经过两次SHA256。一个新的wtxid定义为新的序列化格式加上witnes data经过两次SHA256。如果一个交易没有任何见证数据,其txid和wtxid是相同的。txid仍然是交易的主要标识符,必须用于txin中,以指向上一个output。 ### P2SH-P2WPKH签名生成和验证 对于消耗非SegWit UTXO,签名生成算法保持不变。对于消耗P2SH-P2WPKH,scriptSig必须仅包含redeemScript。对应的witness栏位必须包含一个签名和一个公钥。BIP143中描述了新的签名生成算法,开发者需谨慎遵循指示,并使用BIP143中的示例来确保可以重新生成sighash。 ### 网络服务(可选) 如果钱包通过比特币P2P网络进行交易收发,则网络服务是必需的。隔离验证相容的节点会通过message中的service栏位(NODE_WITNESS = (1 << 3))公布其支持隔离验证。 ### 使用者隐私 在隔离验证刚开始被激活时,比特币网络可能会有隔离验证交易数量的限制。在隔离验证还不普遍时,使用隔离验证交易可能会使比特币更易于追踪。使用P2SH-P2WPKH作为预设的找钱output也可能对隐私产生影响。 ### 交易手续费估计 一个新的测量标准“虚拟大小”(vsize)被定义以取代交易大小。交易的vsize等于原始序列化结果大小的三倍,加上新的序列化结果大小,再除以4并向上取整。开发者应避免在估计手续费时犯下四倍错误的错误。 ### 升级的安全性 在隔离验证完全激活之前,绝对不允许普通用户创建任何P2SH-P2WPKH或其他隔离验证的address。在激活前,使用P2SH-P2WPKH或其他隔离验证的address可能导致永久资金损失。同样,绝对不应该在激活前将找钱发送至隔离验证的output。 ### 隔离验证激活 隔离验证的激活由BIP9定义。在2016/11/15之后和2017/11/15之前,如果一个retarget cycle中的2016个block中有1916个block表示已准备好,隔离验证将在下一个retarget cycle中被激活。 ### 向后兼容 向后兼容性应保持对使用P2PKH(前缀为1)进行交易的支持。 --- 以上改写保持了原文的结构和关键词,同时提高了文段的流畅性和可读性。标签: 数字货币
文章来源: 酷玩网
版权声明: 本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任