跳转到正文
buybitcoinsmart

术语表 /地址与密钥

嵌套 SegWit

又称 Nested SegWit、Wrapped SegWit、P2SH-P2WPKH、3开头地址。

嵌套 SegWit 是什么?
嵌套 SegWit 将原生 SegWit 的密钥哈希封装在 P2SH 地址中,以每个输入多出约23 vbytes 为代价,换取与无法读取 bc1 字符串的软件的兼容性。

规定于 BIP-49。

2017年时,几乎没有交易所能够解析 bech32 地址,因此 BIP-141允许将见证程序放入普通的 pay to script hash 输出中。对发送方而言,其结果与任何其他以3开头的地址无异,花费时约占91 vbytes,而传统(legacy)输入为148,普通 bc1q 输入为68。它曾是一座桥梁,而这条通道已开放多年。

运作方式

嵌套 SegWit 输出是一个平平无奇的 P2SH 输出:OP_HASH160、一个20字节的哈希、OP_EQUAL。哈希背后的内容则不同寻常。赎回脚本其实根本不是脚本,而是那个22字节的见证程序本身,即版本字节0x00,后接对您压缩公钥的20字节 HASH160 的数据推送。

因此,花费时会同时用到两套体系。scriptSig 中恰好只有一个元素,即那个22字节的程序,它满足 P2SH 校验。签名和公钥进入见证数据,在那里享受折扣。加上推送操作码后,scriptSig 贡献了23个非见证字节,权重为92单位,而92除以四,就是相对于原生 SegWit 的全部23 vbytes 的额外开销。

钱包将这些地址保存在各自独立的分支上。BIP-49指定了派生路径 m/49'/0'/0',SLIP-132为该分支赋予了 ypub 扩展密钥前缀,因此恢复备份时生成的是以3开头的地址,而不是 bc1q 地址。恢复时前缀选错,即使助记词正确,钱包也会显示为空。

在哪里会遇到它

任何将"SegWit"和"Native SegWit"作为两个独立选项的充币或提币界面,提供的依次是嵌套和原生两种格式。Ledger 和 Trezor 的账户设置界面也是如此。早期采用 SegWit 的交易所将嵌套格式作为标准,许多从未更改,因此大量托管型冷存储仍然位于以3开头的地址之后。

迁移到原生 SegWit 是一笔链上交易,而不是设置更改,因为这两种格式来自同一助记词的不同分支。请在手续费较低时进行,先发送一笔小额测试,事后核实您的钱包显示的是 m/84'/0'/0' 账户。两者在安全性上没有差别,因此并不紧急。这只是手续费与兼容性之间的取舍,而兼容性已不再稀缺。

嵌套 SegWit vs P2SH 地址

嵌套 SegWit 是 P2SH 地址的一种,在链上,两者在被花费之前无法区分。以3开头的字符串可能承诺的是22字节的见证程序,也可能是2-of-3多重签名赎回脚本,或带时间锁的恢复条款,而未花费的输出不会透露任何信息。这种不透明性曾被视为隐私方面的好处。实际上,如今它意味着区块浏览器无法告诉您持有的是什么,发送方也无法提醒您,清空该地址的成本将高于清空 bc1q 地址。

请勿混淆

常见问题

所有以3开头的地址都是嵌套 SegWit 地址吗?

不是。嵌套 SegWit 是 P2SH 地址的一种,以3开头的地址同样可能隐藏着多重签名的签名阈值或带时间锁的合约。在这些币被花费之前,地址本身没有任何信息可以区分它们。

从嵌套 SegWit 迁移到原生 SegWit 值得吗?

仅在手续费较低时值得。两者的差距约为每个输入23 vbytes,因此持有少量币的钱包节省不多,而持有数十个小额输入的钱包,则在之后每次花费时都能节省可观的费用。

接着阅读

相关术语

地址与密钥中的更多术语

阅读本页英文版