跳转到正文
buybitcoinsmart

术语表 /协议与升级

MAST

又称 Merkelized Alternative Script Tree、默克尔化备选脚本树。

MAST 是什么?
MAST 将您未使用的每一项花费条件隐藏在默克尔树之后,因此花费时只需揭示一个分支,其余分支便保持私密,也不会上链。

规定于 BIP-341。

这一构想早于其部署。BIP-114和 BIP-116两项提案分别在2016年和2017年描述了它,但都未激活;Taproot 于2021年将其落地,称为 taptree,其脚本路径花费会揭示一个叶节点,外加每层32字节的证明。对于具有多条恢复路径的钱包,链上只会得知您实际走过的那一条。

运作方式

一棵脚本树会折叠为单个哈希,地址所承诺的正是这个哈希。

先确定您想要的条件。比如四个:您的日常密钥、三取二的家庭签名阈值、闲置一年后生效的律师密钥,以及异地保管的应急密钥。每个条件写成各自的小脚本,并分别哈希为一个叶节点。叶节点两两配对并哈希,所得结果再两两配对并哈希,如此继续,最终得到一个32字节的根。

花费时会揭示您所用的叶节点、其脚本,以及从该叶节点到根这条路径上的兄弟哈希。两层树意味着两个兄弟哈希,即64字节,任何人都可以重新计算根,并确认该脚本确实已被承诺。其余三个条件始终不会出现。没有人会知道存在律师密钥,不会知道家庭签名阈值是三取二,也不会知道异地密钥曾是这一安排的一部分。

成本随条件数量的对数增长,这正是这种结构值得使用的原因。8个脚本的树会向见证数据增加3个哈希,128个脚本的树会增加7个,而 BIP-341允许的深度为128层,因此脚本路径花费所附带的控制块最多为4,129字节。

命名一向混乱。MAST 有时被展开为 merkelized alternative script tree,有时被展开为 merkelized abstract syntax tree,取决于作者是谁;后一种说法源自 BIP-114,其中的树装的是同一个脚本的各个片段,而不是一组备选脚本。实际上两者指的是同一种构造。

在哪里会遇到它

每一个有不止一种花费方式的 Taproot 地址都在运行 MAST,无论钱包是否使用这个词。

带时间锁的继承钱包是最典型的例子。例如 Liana,会向这样一个地址充币:其 taptree 包含一个常规花费密钥,以及一个在固定等待期后才可使用的恢复分支,而常规花费根本不会公开恢复分支。Lightning 在其较新的通道输出中采用同样的结构,在协作关闭期间将惩罚路径保持隐藏。

构建之前,还有一点与手续费有关,值得了解。平衡很重要:您预计会经常使用的叶节点应放在靠近树顶的位置,因为每多一层,经过它的每一次花费的见证数据就会增加32字节。允许您设置树结构的钱包通常会替您处理这一点,但如果协调软件把所有条件都倒进一棵扁平的平衡树,常用路径就要为罕见路径付出代价。

MAST vs Taproot

MAST 是树,Taproot 是树加上一个逃生出口。纯粹的 MAST 设计会迫使每次花费都揭示某个脚本,因此即使链上对未使用的分支一无所知,也总会得知存在一份合约。

Taproot 在根处增加了一个密钥。地址所承诺的是经默克尔根调整后的内部公钥,如果所有相关方都同意,他们用调整后的密钥签名,只发布一个签名,别无其他。这样的花费与一个人的普通支付无法区分。树依然存在,依然可以强制执行,只是从不展示。MAST 提供分支之间的隐私,Taproot 提供合约与普通支付之间的隐私。

请勿混淆

常见问题

MAST 花费比普通花费成本更高吗?

是的,脚本路径花费需要为所揭示的脚本付费,外加树的每一层32字节。节省之处是相对于另一种做法而言,即公开您写过的每一项花费条件。

MAST 是需要您另行启用的单独升级吗?

不是。MAST 以 taptree 的形式包含在 Taproot 之中,因此任何创建了带有不止一项花费条件的 bc1p 地址的钱包,都已经在使用它。

接着阅读

相关术语

协议与升级中的更多术语

阅读本页英文版