20 / 736BIP341

Taproot

让日常花费更简单,将备用条件留在幕后

一项比特币改进:密钥持有人可以协商后共同花费,只在启用替代规则时才公开它们。

Taproot 是设定并证明比特币花费权限的一种方式。它既支持用一个签名完成普通花费,也允许预先安排可选的替代条件。采用签名路径时,网络不必知道付款由一个人还是多人合作授权,也不必知道是否存在其他未使用的规则。

假设 Alice 和 Bob 共同管理一笔钱。双方意见一致时,他们希望一起批准付款。同时也可以事先约定另一种方式:达到指定区块高度后,Alice 可以单独花费。Taproot 能表达这种安排,而不必在普通共同付款时公开整个备用方案。这不是每个钱包自动提供的功能。软件必须支持所选条件,参与者也必须在收款前正确准备;Alice 随后确实会获得约定的独立花费权。 [1] [3]

较简单的方式叫 key path:网络检查一个有效的 Schnorr 签名,确认它对应输出花费条件中的密钥。输出是先前交易创建、现在准备花费的一笔具体金额。仅凭这个签名,看不出有多少人合作,也看不出是否存在备用脚本。另一种方式 script path 会提交所用脚本,也就是具体规则,以及满足规则的数据。它还提供名为 control block 的证明,说明这些规则属于原先的安排。其他脚本可以不公开,但所用脚本及其证明仍会透露信息。 [1]

Schnorr Signature 是一种数字签名:以数学方式证明相应密钥批准了付款。MuSig2 等合适的协议允许多个密钥持有人建立联合密钥,再生成联合签名。Alice 和 Bob 无需把私钥交给对方,但双方钱包必须支持该协议,并在签名时配合。Taproot 本身不会合并交易所有输入的签名,也不会自动将任意 Multisig 钱包变成一个签名。实现细节很重要:签名协议中被称为 nonce 的秘密数值如果被错误地重复使用,可能泄露私钥。 [2] [5]

在比特币主网上,Taproot 地址通常以 bc1p 开头,采用 Bech32m 编码。发送前,应检查钱包或服务是否支持这一格式,并核对完整地址。Taproot 可以减少公开的规则和花费所需的数据,但不会隐藏金额,也不会切断已花费输出之间的公开联系。所选路径和证明大小也会影响手续费,所以新格式并不自动意味着最便宜的付款。如果钱包用 Taproot 完成普通单密钥付款,你不必自己设计备用脚本。 [1] [4]

P2TR 是 Pay to Taproot 的缩写。规则将其定义为原生 SegWit 版本 1,使用代表输出公钥的 32 字节 witness 程序。可选脚本组成一棵树,其密码学指纹被纳入这个密钥。使用某一分支时,可以证明它属于这棵树,而不公开整棵树。BIP 340 规定 Schnorr 签名,BIP 341 规定 Taproot 规则,BIP 342 规定脚本路径使用的 Tapscript 语言。普通 Schnorr 签名占 64 字节;若显式选择另一种决定对交易哪些部分签名的模式,则会多一个字节。这些细节由钱包处理,不是靠手动修改地址实现的。 [1] [2] [3]

要获得更完整的理解,请将本词条与以下词条结合阅读: SegWit, Private Key, 交易, Lightning Network. 反向关联还来自: SegWit, Lightning Network, Hash, SHA-256.

DOC · 001BIP 341: Taproot一手来源 DOC · 002BIP 340: Schnorr signatures一手来源 DOC · 003BIP 342: Tapscript一手来源 DOC · 004BIP 350: Bech32m一手来源 DOC · 005BIP 327: MuSig2一手来源
修订日期: 来源优先 · 非投资建议