跳转到正文
buybitcoinsmart

术语表 /地址与密钥

P2WSH

又称 Pay-to-Witness-Script-Hash。

P2WSH 是什么?
P2WSH 将币锁定在对见证脚本的32字节 SHA-256承诺上,为合约提供比 P2SH 大得多的空间,并在脚本公开时对脚本部分给予费用折扣。

规定于 BIP-141。

Pay to witness script hash 是 SegWit 版本0的输出类型,用于比单个密钥更复杂的任何场景,写作62个字符的 bc1q 地址。Bitcoin Core 会转发见证脚本最长达3,600字节、见证数据最多含100个堆栈项的花费交易,而 P2SH 的赎回脚本上限为520字节。多出的空间正是严肃的合约迁移到这里的原因。

运作方式

P2WSH 输出由字节0x00(表示见证版本0)加上一次32字节的数据推入组成,共34字节。这32字节是序列化见证脚本的普通 SHA-256哈希,而不是比特币其他地方使用的 SHA-256再加 RIPEMD-160的哈希。

这一选择是有意为之。160位的承诺提供约80位的抗碰撞能力,当交易对手参与决定脚本内容、并可能搜索共享同一哈希的两个脚本时,这样的强度令人不安。256位的承诺消除了这一顾虑。单密钥的 P2WPKH 保留较短的哈希,因为只有一方选择密钥,其地址也因此短20个字符。

花费时,参数被推入见证堆栈,最后推入序列化的脚本。节点对最后这一项计算哈希,与承诺比对,然后用剩余数据执行脚本。Bitcoin Core 的转发策略在 policy.h 中设定了边界:脚本3,600字节,堆栈100项,每项80字节。

手续费解释了这次迁移。此处一笔2-of-3花费约占104.5 vbytes,因为两个签名和整个105字节的脚本都放在见证数据中,每字节占一个权重单位。同样的策略在 P2SH 下约需297 vbytes。OP_CHECKMULTISIG 的共识上限为20个密钥,这一上限也可以达到,因为二十个密钥占用不到700字节。

在哪里会遇到它

每个闪电网络通道都注资到一个2-of-2的 P2WSH 输出中,这使它成为链上最常见的脚本类型之一,尽管很少有人输入过这种地址。机构托管、miniscript 策略和带时间锁的继承条款也使用它。

在区块浏览器上,未花费的 P2WSH 输出只是一串62个字符的 bc1q 字符串,别无其他。无论它保护两个密钥还是二十个密钥,看起来都一样,只有在币被转移时,条件才会显现。

备份必须包含脚本。助记词只能恢复密钥,不能恢复任意脚本,因此请把描述符或脚本的确切字节与助记词一并保管,并在该地址存入真实资金之前,确认您能够据此恢复。

P2WSH vs 见证脚本

P2WSH 是输出;见证脚本是它所承诺的内容。输出只包含32字节的哈希,不含其他内容,因此不透露任何附加条件,在花费交易公布脚本之前,脚本的任何部分都不会出现在链上。由此产生的义务并不对等。发送方只需要地址,不必了解任何内容即可付款。接收方则需要永久保存脚本的确切字节,因为一旦丢失,无论保留了多少私钥,这些币都无法花费。

请勿混淆

常见问题

为什么 P2WSH 地址比普通的 bc1q 地址更长?

因为它编码的是32字节的哈希,而不是20字节的哈希,因此地址为62个字符,而不是42个。更长的承诺使用普通的 SHA-256,当多方共同构建脚本时,碰撞仍然难以实现。

普通钱包需要 P2WSH 吗?

不需要。单密钥钱包使用 P2WPKH 或 Taproot,从不涉及它。P2WSH 适用于多重签名保管库、闪电网络通道注资,以及任何必须写成脚本的花费策略。

接着阅读

相关术语

地址与密钥中的更多术语

阅读本页英文版