术语表 /地址与密钥
P2TR
又称 Taproot 地址、Pay-to-Taproot、bc1p 地址。
- P2TR 是什么?
- P2TR 支付到一个32字节的调整后公钥,因此无论是一人签名,还是复杂合约经协作结算,密钥路径花费在链上看起来完全相同。
规定于 BIP-341。
Pay to taproot 是见证版本1,自2021年11月14日的区块709,632起生效,地址为以 bc1p 开头的62字符地址。协作花费只发布一个64字节的 Schnorr 签名,每个输入约占57.5 vbytes,是比特币上成本最低的输入。输出中内置的任何备用规则都不会显现,除非有人真正使用它们。
运作方式
P2TR 输出是 OP_1后接一个32字节的数据推送,共34字节,这些字节是一个仅含 x 坐标的公钥。仅含 x 坐标是指舍去 y 坐标并通过推算得出,与其他地方通用的33字节压缩公钥相比可节省一个字节。
您看到的公钥并不是任何人持有的公钥。它是一个内部公钥,经由其自身哈希值与一棵备用脚本树的默克尔根调整而成,因此公布的值同时承诺了协作路径和每一条备用路径。花费时有两条路线可选。密钥路径只产生一个针对调整后公钥的签名,不披露其他任何内容。脚本路径披露树中的一个叶子,以及证明该叶子属于此树的分支哈希,树的其余部分则永远保密。
BIP-340下的 Schnorr 签名使密钥路径成本低廉且保护隐私。其长度为64字节,而 DER 编码的 ECDSA 签名为71或72字节,并且签名可线性相加,因此多个签名者可以合并各自的公钥,通过 MuSig2 产生一个签名。协作完成的2-of-2安排,最终与一个人支付账单无法区分。
由于见证版本1要求使用 bech32m,bc1p 地址采用的是 BIP-350的校验和常数,而不是原始 bech32 的常数。
在哪里会遇到它
默认使用 Taproot 的钱包从 BIP-86分支派生,路径为 m/86'/0'/0'。Bitcoin Core 在22.0版中加入了该编码,并在23.0版中开始为新的描述符钱包生成 tr() 描述符。
铭文将任意数据放入 Taproot 脚本路径的见证数据中,因此 bc1p 的大量活动与支付无关。这是见证数据折扣带来的副产物,并非该地址类型本身的属性。
问题出在边缘环节。一些交易所仍然拒绝 bc1p 提币目标地址,一些较旧的支付终端也是如此。钱包内没有变通办法:请使用同一助记词生成的 bc1q 地址,之后如果希望全部资金都在 Taproot 下,再进行合并。
P2TR vs Taproot
Taproot 是升级,P2TR 是它创建的输出类型。这次软分叉包含三项规范:BIP-340定义了 Schnorr 签名,BIP-341定义了输出格式及其花费规则,BIP-342定义了 tapscript,即在树内使用的调整后脚本语言。P2TR 是您实际接触到的部分,即以 bc1p 开头的地址。说“我使用 Taproot”几乎总是指“我的钱包给我的是 P2TR 地址”,但这次升级也改变了您可能永远不会接触的脚本内部的签名验证方式。