原文标题:《干货 | 详尽解释隔离见证》
作者: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) (与签名的数量成正比)。
0 条评论
请「登录」后评论