跳转到正文
buybitcoinsmart

术语表 /地址与密钥

P2WPKH

又称原生 SegWit 地址、Pay-to-Witness-Public-Key-Hash、bc1q 地址。

P2WPKH 是什么?
P2WPKH 将签名和公钥从输入中移出,放入见证数据,其中每个字节计为1个权重单位,而不是4个。

规定于 BIP-141。

原生 SegWit 单密钥输出写作42个字符的 bc1q 地址。锁定脚本为22字节,花费一个输入约需68 vbytes,而传统格式的对应输入约需148。自版本0.20.0起,Bitcoin Core 默认使用这种格式,其他大多数钱包也随之跟进。

运作方式

P2WPKH 输出不含通常意义上的操作码。它是字节0x00,标明见证版本0,其后推入您压缩公钥的20字节 HASH160:共22字节,节点将其识别为见证程序,而不是作为脚本执行。花费它的输入会让 scriptSig 完全为空,并在见证字段中放入两项内容,即签名和公钥。

节省源于区块的计量方式。BIP-141将区块权重定义为基础大小乘以3再加上总大小,上限为4,000,000个权重单位,相当于非见证字节每个计4个单位,见证字节每个计1个单位。一个 P2WPKH 输入有41个非见证字节,权重为164个单位,另有约108个见证字节,权重为108,合计272个单位。除以4,就得到您实际支付的68 vbytes。

有两个次要影响与费用折扣同样重要。BIP-143替换了签名哈希算法,使签名所需的工作量随输入数量线性增长,而不是呈二次方增长,因此硬件钱包能快速处理较大的 SegWit 交易。此外,由于交易标识符不再覆盖见证数据,第三方无法再在传输途中修改签名以改变 txid。

在哪里会遇到它

打开最近几年发布的几乎任何钱包,收款界面都会显示以 bc1q 开头的字符串。这些钱包从 BIP-84分支派生地址,路径为 m/84'/0'/0',SLIP-132将其与 zpub 扩展密钥前缀配对,因此将备份恢复到不同的软件中,会得到相同的地址。

目前,基本上所有交易所的提币表单都接受 bc1q。如果某个交易所拒绝,说明它运行的是2017年之前编写的验证代码,实际的做法是提币到它接受的格式,再自行将资金转出。

bc1q 无法告诉您的一点是输出支付给谁。42个字符的 bc1q 地址是单个密钥;62个字符的则是脚本。两者都是见证版本0,都使用 bech32,因此长度是唯一可见的区别。

P2WPKH vs 嵌套 SegWit

P2WPKH 和嵌套 SegWit 花费同一个密钥,并承诺同一个20字节哈希。区别在于一层封装。嵌套 SegWit 把这个22字节的见证程序放入 P2SH 输出中,使地址可以是以3开头的 Base58 字符串,而花费输入中多出的23个非见证字节权重为92个单位,正是91 vbytes 与68 vbytes 之间的差距。安全性完全相同。您放弃了约三分之一可节省的手续费,换来的是一个古老软件也能接受的地址。

请勿混淆

常见问题

bc1q 就是原生 SegWit 吗?

对单密钥钱包而言是的。42个字符的 bc1q 地址是 P2WPKH 输出,即单个密钥的原生 SegWit 格式。62个字符的 bc1q 地址同样是原生 SegWit,但支付给的是脚本而不是密钥。

原生 SegWit 实际能节省多少?

花费成本大约减半。一个 P2WPKH 输入的权重为272个权重单位,即68 vbytes,而传统输入约为148 vbytes。节省发生在花费时,而不是收款时。

接着阅读

相关术语

地址与密钥中的更多术语

阅读本页英文版