化抽象语法树(Merklized Abstract Syntax Trees,MAST )是为比特币提出的升级,可以实现更小的交易体积、更好的隐私和更大的智能合约本文将阐述MAST的基本原理,说明其潜在优点,并总结目前包括该技术在内的一些建议。
如果指定脚本,则3354这是每个比特币钱包的基本操作,即由3354比特币网络强制执行的比特币协议,只要脚本不返回True,就不会让任何人使用该脚本管理的比特币这样可以指定资金的支出条件,称为“encumbrances”(财产条件)。 例如,要求支出的交易一定要用私钥签名。
更复杂的财产条件也是可以实现的。 例如,在下面的例子中,我们将其贯穿整个文章。 Alice随时愿意使用她的比特币,但如果她连续三个月没有使用自己的比特币,她希望自己的兄弟姐妹Bob和Charlie拥有自己的比特币,在任何人都能同意的地方使用这些财产
以下条件脚本将实现上述目标。 不仅需要验证Alice的公钥,还需要验证来自她的私钥的签名。 还包括超时条件以及Bob和Charlie的公钥。
在目前的比特币协议中,必须将上述所有数据添加到区块链中,包括Alice的比特币在花钱时,与花费特定费用的行为完全无关的脚本部分,都必须曝光。 例如,Alice使用自己的比特币时,Bob和Charlie的公钥也必须曝光。
未使用的条件数据增加了交易量,暴露了用户过多的隐私,同时以量而不是验证成本作为智能合约大小的主要限制因素。 为了改善这些情况,MAST的目的是消除区块链中直接包含未使用的脚本部分的需要。
另一方面,默克尔树可以用于验证要素是否属于集合,不需要知道集合整体的整体情况。 例如,比特币简易支付验证钱包(SPV wallet )使用默克尔树验证交易是否存在于某个区块,不需要下载完整的区块,因此可以节约带宽。
为了生成默克尔树,必须首先散列每个元素一次,每个元素都生成唯一的标识符,在这些标识符成对之后,再次散列,生成该标识符对的标识符; 如此重复,直到只剩下一个叫做“默克尔根”的标识符,它虽然短暂精悍,但却是标记了整个集合的标识符。
在验证某个元素不属于某个集合时,拥有整个集合的人可以提供从该元素到默克尔路线的路径上的所有标识符。 现在可以证明这个元素确实在这个集合中。
简单地说,AST背后的技术可以将一个程序分成多个小块。 的树可以验证这些小块是完整程序的一部分,不需要暴露整个程序。 这是MAST的基本原理,将一次交易中未使用的条件——替换为默克尔证书,可以减少交易体积,提高隐私,支持更大的合同。
Alice可以随时使用自己的比特币(左侧的脚本) )。
或者,如果连续3个月使用Alice的签名进行费用支付,则需要Bob和Charlie的签名来支付这其中的比特币。 (下图右侧的脚本) )。
基于这两个独立的脚本建立默克尔树。
这个默克尔树根最终识别出了Alice完整的财产条件,只有32字节的体积。 然后,Alice可以使用备选条件脚本,其中昂贵的交易提供了任何一个脚本连在默克尔根目录上的证据,并且可以仅在该子例程返回True时声明有效。
脚本默克尔的证据以图像形式绘制,如下图所示。 这取决于您使用的是哪个脚本。
在上例中,我们使用了一个带有两个子脚本的财产栏。 是Alice花自己的钱,还是Bob和Charlie等三个月再一起花她的钱。 想想无限扩展的版本吧。 第三个脚本显示,3个月和1天后,Dan和Edith可以使用这里的资金。 根据第四个脚本,Fred和George将在三个月和两天后使用这笔资金,等待
在这个思维实验中,可以得到下图。 这说明了脚本数量、需要添加到块中的条件数据量以及有和无MAST之间的关系。
下面是对数图,意思相同:
第一个MAST交易的体积会大于无MAST的同条件交易,例如两个脚本的条件,但非MAST交易的体积会线性增大(根据脚本的数量),而MAST交易的体积只会对数增大。
如果主要目标是节约数据量,也可以进一步优化。 在很多财产条件下,花钱的人有可能会更高频地使用其中一个条件。 例如,Alice想要自己长寿,所以她做的默克尔树把自己花的条件放在最接近的地方,其他所有条件都放在树的最下面:
这样设计的话,不同情况下MAST默克尔的证据体积不同,在最理想的情况下,Alice活着,在自己花钱的另一种情况下,Alice死亡,她的受益人来花这些钱。 我们在图上画了这些要素。
在使用Alice的时候,无论她的财产条件中有多少受益人,交易的数据量总是最佳的情况。 当她的受益人使用这笔资金时,交易的数据量也只比上述标准结构的默克尔树多几个字节。
无论Alice选择什么样的日程,MAST都可以减小多脚本财产条件交易的体积,所以用户可以减少手续费,在区块中放入很多高级交易。
光凭这些信息,我们不知道除了Alice之外还有没有人可以使用这里的资金,他们需要面对什么样的限制条件。 从MAST推测可能有几个不同的条件,但仅限于推测。 —— Alice只是假装默克尔树,可能还有其他需要花钱的部分。
与此相对应,如果看到另一个分支(即上图右侧的脚本),则不知道该资金是否需要超时,也不知道是否需要一把私钥。 也可以推测出有其他的费用条件,但是不能在区块链上确认那个。
防止未使用的财产条件暴露在某些时候是非常有用的。 例如,一些商人可能希望将自己的智能合约尽可能保密,以免被潜在的竞争对手看到。 他声称这是为智能合约设计的,但实际上与不能为这些合约提供隐私的山寨币正好相反。
隐私为所有比特币用户提供了额外的好处,即使一些用户不在乎财产条件的隐私性。 从这篇文章开始,我们假设Alice是唯一使用非MAST条件模板的人。 所有条件都已公布,任何人都可以跟踪Alice的昂贵行为。 只需观察该模板在区块链中的使用情况,Alice的隐私就会消失。
易于识别特定用户的设计使人们更容易区分自己的比特币和别人的比特币。 这被称为“同质性的缺失”。 谁知道Alice的财产条件是什么样的,谁就可以行贿,或者强迫矿工不要打包这些人的交易,阻止Alice使用自己的比特币。
MAST不能完全解决这个问题。 因为虽然Alice (或Bob和Charlie )仍然需要明确部分产权负担,但是其他许多复杂的财产条件可以解析为少量简单的MAST类型条件。
例如,由于Alice的默认支出行为看起来像只提供单签名的其他常见支付行为,因此Alice基于MAST的交易与其他基于MAST的单签名交易没有区别。 这反过来提高了Alice的隐私性,提高了她的资金同质性和所有使用基于MAST的单签名条件的用户的货币同质性。
MAST的这个好处也很可能与其他提高比特币隐私同质性的提案联系在一起。 一些提案比较复杂,包括Pieter Wuille和Gregory Maxwell的“公共阈值树”、Andrew Poelstra的“无脚本”和Thaddeus Dryja的“离散对数合同” MAST可以和这些方案结合起来。
但是,即使这些方案不能用比特币实现,MAST自身也可以向复杂财产条件的用户提供更多的隐私性和兼容性,既可以与现在进行比较,也可以与支持用户定制智能合约的山寨币进行比较。
即使是极端无限延长的例子,也可以看出MAST比现在的所有机制支持更多的条件分支。 事实上,MAST的可扩展性非常高,即使拥有目前可观测宇宙的所有能量,但如果只是用于建造标准的“平衡”默克尔树,默克尔的证据也只有8448字节。 即使是这么大的默克尔证据,现在的笔记本电脑也能在1毫秒内验证。
MAST消除了在整个节点上处理未使用的脚本的任务,因此也有助于比特币脚本绕过其他硬限制。 在这方面,MAST很好地保存和扩展了比特币智能合约的长期设计目标。 也就是说,合同的负担应尽可能由合同的参与者承担,节点支付了带宽、内存和处理能力,但无法补偿,因此应尽可能不承担。
因此,MAST真正的成果不是让比特币用户能够制定更高级的合同,而是打开了其可能性,不会给比特币的节点带来新的负担。
第一个提案是Johnson Lau (假名“jl2012”)提出的BIP114,它使用基于隔离证人的扩展特性,使本机隔离证人地址(bech32 )成为对MAST财产条件默克尔根的承诺。 因此,事务可以从树中选择一个脚本。
第二个提案是Mark Friedenbach (假名“maaku”)提出的两个未命名的bip(1、2 ),这样可以提高脚本语言的灵活性,程序员可以编写脚本验证基于MAST的财产条件如果用Friedenbach更喜欢的方法实现,比特币目前支持的三种脚本类型(裸脚、P2SH、隔离证言脚本)都可以使用默克尔证据。
这些方案各有优缺点,但都提供了上述MAST的优点(字节数可能会增加或减少)。 每个都可以用软叉激活。
到理念、提案、完整的实现、软叉的提案、软叉的活性化,道路是漫长的。 围绕隔离证词的升级,两年来的大戏清楚地表明了这一点。
但从我的角度看,MAST背后的基本理念已经在比特币技术社区得到广泛支持,对MAST最感兴趣的开发者也将继续开发,除非有人能证明这项技术完全不可靠。 如果有一天这些开发者成功提交了供同行审议的软分支代码,将轮到读者和其他比特币用户,决定MAST是否成为比特币协议的一部分。