区块链/等级 IV · 深入协议/4.2 升级/课程 2
Tapscript与脚本树(MAST)
隐藏合约的树
材料具备见证数据查看功能的区块浏览器一个支持脚本树且兼容 Taproot 的钱包用于绘制二叉默克尔树的方格纸
好奇
- 为什么按照合约中的某一条款花费,就要公开整份合约?
- 是什么让协作式花费与普通签名无法区分?
- 单个密钥如何承诺一整套隐藏的支出条件?
探索
- 默克尔化抽象语法树(MAST)最早由 Russell O'Connor 于2013年提出,并在2016年和2017年的提案中得到发展。该概念将备选支出条件放入一棵默克尔树,使花费方只需公开其实际使用的那个分支。“抽象语法树”一词原指编译器中每个条件都会生成新节点的结构,而比特币的实现走上了不同的道路。Anthony Towns 后来为其另造了一个逆向缩写“Merklized Alternative Script Tree”,用来描述实际采用的结构:一组完整、独立的脚本,花费时只选择其中一个。
- Taproot 通过 BIP341 将这种树结构纳入了共识规则。默克尔树的每个叶子都包含一个脚本,而树根则参与生成最终的输出密钥。当资金通过“脚本路径”花费时,花费方需要公开具体的叶子脚本、其输入以及默克尔证明——即每一层兄弟节点的哈希值。未使用的分支在链上保持隐藏,从而为多签或时间锁等复杂安排保护隐私,而这些安排过去只能封装在 P2SH 中。
- Tapscript(BIP342)是这些叶子脚本所使用的特定方言,它在几个关键方面与传统比特币脚本不同。Tapscript 禁用了 OP_CHECKMULTISIG。取而代之的 OP_CHECKSIGADD 会用一把密钥检查一个签名,并将累计计数加1;空签名不增加计数,而无效的非空签名会使整个脚本失败;脚本为每把密钥串联一次该操作码,再将计数与阈值进行比较。每个签名都对应一把已知的密钥,因此无需反复试配,签名也可以批量验证。
- Tapscript 还通过 OP_SUCCESS 操作码为升级预留了空间:目前,任何包含此类操作码的脚本都会无条件成功,因此没有人使用它们,未来的软分叉可以为其赋予限制性含义,而不会使任何正在使用的内容失效。Tapscript 取消了传统的10,000字节脚本大小限制;脚本大小仅受区块权重和策略规则的约束。此外,签名操作预算与见证数据的大小成比例,从而防止通过过量签名验证发起拒绝服务攻击。
- 举一个实际例子:用户将资金放在一个2-of-2密钥路径中用于日常支出,双方协作签名,链上只呈现一个标准的 Schnorr 签名。然而,脚本树中包含一个隐藏的叶子,允许在一年时间锁到期后由单独一把密钥花费。如果协作方失去响应,用户可以启用这一恢复分支。默克尔证明只会暴露这个特定的时间锁脚本,而其他潜在分支——例如社交恢复或哈希锁——则完全保持私密。
- 要验证这些机制,可打开区块浏览器,找到一笔通过脚本路径花费的 Taproot 交易。查看其见证数据:脚本的输入、叶子脚本本身,以及一个控制块——控制块的第一个字节由叶子版本(Tapscript 为0xc0)与一个奇偶校验位组合而成,其后是内部密钥,以及树的每一层对应的一个32字节哈希。将其与同类地址的一笔密钥路径花费进行比较:后者只包含一个64或65字节的签名,没有任何脚本数据,这说明复杂合约在未被使用时始终不可见。
关键事实
- MAST 代表 Merklized Alternative Script Tree,这是 Anthony Towns 创造的逆向缩写,用于描述 Taproot 的结构。
- Tapscript 取消了传统的10,000字节脚本大小限制,脚本大小仅受区块权重和策略规则约束。
- 在 Tapscript 中,OP_CHECKSIGADD 取代了 OP_CHECKMULTISIG,用于实现便于批量验证的门限检查。
- 脚本路径花费会公开叶子脚本、其输入,以及由兄弟节点哈希构成的默克尔证明。
- OP_SUCCESS 操作码为未来的软分叉预留了空间,且不会破坏现有的 Tapscript 脚本。
- 叶子版本0xc0表示 Tapscript;未知的叶子版本不受限制,留给未来的软分叉使用。
练习 九、六、三、一
9收集列出9种可应用于 Taproot 脚本树的不同支出条件(例如多重签名、时间锁、哈希锁),并说明每种条件的主要用途。
6归类根据这些条件对隐私的影响,将其分为6类:完全隐藏、部分显示、始终可见,或其他结构限制。
3提炼将这6组归纳为3个核心原因,说明为何隐藏特定脚本分支对链的效率和用户安全至关重要。
1凝结用一句话说明默克尔树如何让单个公钥承诺多条互斥的支出规则,而不暴露这些规则。
事实核查
日期、数字及数据均依据下方列出的已发表资料进行核实。
- BIP341: Taproot: SegWit version 1 spending rules
- BIP342: Validation of Taproot Scripts
- Bitcoin Optech, 'MAST' and 'Tapscript' topics
- Anthony Towns, 'Merklized Alternative Script Trees' proposal discussions