原文标题:《干货 | 详尽解释隔离见证》
作者:Magomed Aliev
隔离见证如何工作
在开始之前
后向兼容性
案例
Pay-to-Witness-Public-Key-Hash
而隔离见证之后的锁定脚本如下所示:
如你所见,隔离见证的输出比传统类型的输出要简单很多:只有两个值会被推入脚本执行栈中。如我们上面说得,旧版本的比特币客户端会以为这个输出是掉在地上的钱 —— 无需提供签名就能花费这个输出。不过,新的客户端会将第一个数字解释为版本号,而第二个则对应着一个锁定脚本(witness 程序)。在现实中,只有压缩公钥(compressed public key)的哈希值可以用在这里。这一点我们后面再说。
但是,在花费一个隔离见证输出的时候,交易的 scriptSig 将为空,而所有的签名都会放到一个专门的地方:
警告
Pay-to-Witness-Script-Hash
再来看看使用隔离见证后的发送者和接收者。输出的锁定脚本如下:
就像 P2PKH 交易一样,这个输出的脚本也变得更简单。第一个数值表示版本号,第二个是对应于赎回脚本(witness 程序)的 SHA256 哈希值(32位)。使用这个函数某种意义上是为了用长度来区分 P2WPKH 的见证程序以及 P2WSH 的见证程序(32 字节的 SHA256 哈希值 vs. RIPEMD160(SHA256(script)))。
在 P2SH 中嵌入隔离见证
P2SH(P2WPKH)
第一个数值是版本号,而第二个数值是 20 字节的公钥哈希值。这个脚本先做 SHA256 哈希运算,再做 RIPEMD160 运算,就可得到一个 20 字节的哈希值。
转化成一个地址:
发送给这个地址的输出的锁定脚本,看起来也就跟一个普通的 P2SH 地址的脚本没啥区别:
那么 Bob 花费输出的时候,交易的结构会像这样:
在一开始,我们创建的赎回脚本(也就是那个见证程序)会经过一次哈希计算,如果结果符合锁定脚本中的哈希值,这个脚本就会得到执行,程序会验证放在 witness 字段的签名。
P2SH(P2WSH)
第一个数值是版本号,第二个数值是 32 位的 SHA256 哈希值,对应于我们的签名脚本。然后我们拿这个见证程序的 HASH160 哈希值转成一个普通的 P2SH 地址。要使用发往这个地址的输出时,我们需在 scriptSig 字段公布这个见证程序,在 witeness 字段提供完整的多签名脚本。
隔离见证的好处
交易熔融性漏洞
网络和存储的扩展
可用的区块空间扩大,降低交易手续费
脚本版本
签名验证的效率优化
隔离见证也优化了签名算法的效率(如 CHECKSIG、CHECKMULTISIG,等等)。在 SegWit 之前,哈希计算的次数与签名数量的平方成正比,但有了隔离见证后,算法的计算复杂度就减低到了 O(n) (与签名的数量成正比)。
那还有啥问题呢?
结论
参考文献
冷萃财经原创,作者:Awing,转载请注明出处:https://www.lccjd.top/2021/08/26/%e8%a7%a3%e8%af%bb%e6%af%94%e7%89%b9%e5%b8%81%e7%9a%84%e5%8f%af%e6%89%a9%e5%b1%95%e6%80%a7%e6%96%b9%e6%a1%88%ef%bc%9a%e9%9a%94%e7%a6%bb%e8%a7%81%e8%af%81/
文章评论