Taproot 常被概括成“一个公钥加一条脚本后路”,但这条后路并不是一条脚本,而是一棵可以挂很多叶子脚本的树。BIP-341 用一棵默克尔树把多条备选花费条件压缩进输出里的 32 字节承诺,用时只打开其中一片。这棵树的形状有硬性的尺寸纪律,也藏着真实的隐私代价——本篇只谈这棵树本身。
树长什么样:叶子、树枝与承诺
一个 v1 见证程序的 32 字节,可以是 tweaked 后的输出公钥 Q,也可以是纯脚本承诺;有树的场景里,Q 的计算是内部公钥 P 加上一个基于“P 与脚本树根 m”的 tagged hash 偏移量乘上曲线基点。换句话说,树不是附在地址旁边的说明书,它被直接揉进了那个公钥里:改任何一片叶子,整个地址都会变。
树的叶子是“脚本版本加脚本”的二元组,树枝是子节点的默克尔哈希。BIP-341 用带标签的哈希给三类节点分别命名——算 tweak 的、算叶子的、算树枝的——防止同一串字节在不同语境下被挪用。花钱走脚本路径时,见证里要交出控制块:33 字节的内部公钥,加上 32 字节一格的默克尔路径。规范给控制块定了死长度:33 加 32m,m 是零到一百二十八之间的整数,不满足直接判无效。也就是说,从叶子到树根的路径最多一百二十八跳,树本身的叶子数量以 2 的相应次方为天花板;标准文档的旁注解释过这个上限的来历:按哈夫曼思路排树,路径长到超过 128 意味着这条分支的触发概率低于 2 的 128 次方分之一——低于比特币的安全界,这种分支不如删掉。
树形不是玄学:概率与哈夫曼
同一套多签条件可以有很多棵树形。BIP-341 的建议是按“脚本被用到的概率”排布:高概率的脚本放浅层,见证更短、花费更便宜;概率未知时退化成平衡树。规范附录给出的排序细节还包括树枝哈希的配对规则——两个子哈希按字典序排定先后,这样同一棵树的任意遍历路径都能算出一致的根。
形状同时决定隐私。树完全没被打开时(走密钥路径),链上看不出你规划过几条后路、树有几层深;一旦走脚本路径,你交出的默克尔路径会把“这个脚本在树里的深度”和“哪些兄弟哈希与它同层”暴露给每一个观察者。同一棵按最优概率排出来的树,几乎等于一枚钱包软件指纹——不同签名方案的树形各有惯性,观察者可以拿深度与形状给地址聚类。规范为此明说:想改善隐私,可以故意偏离最优树形,用一点手续费换形状上的噪声。
对普通用户意味着什么
日常花费中你几乎不会亲手碰这棵树:钱包在生成 bc1p 地址时已经把内部公钥和脚本树定死,之后别人往这个地址打钱,你按密钥路径合意花掉,树形全程隐身。真正需要树形纪律的是自托管多签与合约化用例——比如“两条时间锁分支加一组多签分支”的继承方案:分支数量、每把钥匙的归属、哪条分支放浅层,在第一次收款前就是不可逆的决定,因为树根一旦揉进地址,任何改动都意味着让老资金换地址搬家。这也是 Taproot 与老式 P2WSH 的微妙分工:需要频繁改条款、条款本身要公开验证的场合,裸脚本方案反而灵活;条款集合稳定、平时只想走密钥路径的场合,树的承诺最省也最安静。
风险提示:本文为协议机制科普,涉及脚本与密钥的操作会实际影响资产安全,正式部署前请在测试环境完整演练各条分支的花费路径;不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。