MAST

作者: 526ba0512193 | 来源:发表于2018-06-15 17:55 被阅读0次

    币王比特币,其实是个相对简单的区块链,就功能的多样性方面,相较于以太坊等,貌似是差点。

    为提高速度并降低交易相关费用,比特币于2017年8月实施了隔离见证(SegWit)。 虽说人们爱聊SegWit,仍有些其他的比特币改进提案(BIPs)致力于改善数字货币,MAST就是其中之一。

    MAST是抽象语法Merkle树算法的首字母缩写。MAST方案由三部分构成,分别是: 支付给脚本hash(P2SH)、 抽象语法树(AST)和Merkle树。

    分别看一下:

    支付给脚本hash(P2SH)

    比特币有两种常见脚本的格式:

    P2PKH:支付到公钥地址模式

    P2SH:支付到脚本模式,使用多重签名就需要用到这种模式

    这两个最大的区别是在输出脚本里面放公钥hash还是放脚本hash, 如果放公钥hash,其实就是地址,那么交易地址就是暴露的,如果放脚本hash,就无法知道转账给哪个地址了。这一步已经做到了隐藏地址,但是还需要隐藏脚本。

    抽象语法树(ASTs)

    抽象语法树(ASTs)是种算法,将程序分解成各组成部分,以便对其更好的理解并分两类, 这种拆分也有助于快速访问所有相关数据。

    我们来看一个例子:

    Alice希望能够随时使用比特币,若出于各种原因,她的比特币在三个月内没有用完,她希望自己的兄弟姐妹Bob和Charlie能够使用。

    这个脚本不仅包括Alice的公钥(需要从她的私钥中验证签名),还包括超时逻辑以及Bob和Charlie的公钥。

    当前,比特币要求交易数据中必须包含全部交易相关数据,甚至包括交易过程中未使用的数据。这样一来,账本交易数据会很笨重,自然拖慢了交易处理速度。在 AliceBobCharlie的例子中因为还包含了Bob和Charlie的公钥,也无意间披露更多的隐私。 引入MAST的初衷就是想对此类情形做出改善。

    要生成一个AST,可以将每个函数连接到它的依赖关系,直到所有的依赖关系都被映射出来为止。通过抽象语法树我们把一个复杂规则分解成一个个独立的简单条件,如果是Alice花费了这笔钱,就把Alice这部分条件上链;如果是她的兄弟花了这笔钱,就上链他的兄弟这个条件,这样即减少了上链的手续费,也隐藏了没有使用的信息。但是脚本变化了,脚本hash就不同了,为了确保脚本hash可以验证这种可以分拆的脚本,就需要用到Merkle树的概念。

    Merkle树

    Merkle树是种辅助压缩区块内数据的加密手段。 可以在不用下载全部数据的情形下,通过Merkle根判断Merkle树中数据的真伪。

    长这样子:

    特点如下:

    1.数据结构是一个树,可以是二叉树,也可以是多叉树。

    2.Merkle树叶子节点的值(value)是数据集的单元数据或者单元数据哈希。

    3.Merkle树非叶子节点的值是其所有子节点值的哈希。

    很明显,这种结构跟hash list相比较,根哈希不是用所有的数据块哈希拼接起来计算的,而是通过一个层级关系计算出来的。

    在上图中,叶子节点node7的value(v7) = hash(f1),是f1文件的哈希;而其父节点node3的value = hash(v7,v8),也就是其子节点node7、node8的值的哈希。

    我们继续看上面的例子,转换为Merkle树就是这个样子。如果是Alice花费了这笔钱就用左边的树,如果是她的兄弟花了这笔钱就用右边的树,而验证的时候只需要证明Merkle根hash相等就可以了。


    2016年11月,比特币开发者Luke-jr曾表示:“MAST的概念是使用Merkle树对脚本中的操作进行编码。 那么花比特币时,用户只需提供正在执行的分支以及将分支连接到固定大小Merkle根的哈希。”

    首席比特币开发者们一直致力于对MAST的不断研究和雕琢。 有三种方式可以将MAST引入比特币中。

    BIP114

    比特币首席开发者Johnson Lau在GitHub上提交了一份pull请求,叫BIP114,是这么说的:

    该BIP定义了一种新型见证程序,使用Merkle树对脚本中的互斥分支进行编码,从而实现:1. 目前尚不能的复杂赎回/兑换(redemption)条件;2. 隐藏未执行脚本,提高隐私性;3. 以零或非常低的成本包含非共识强制数据。

    Lau解释说,提案出于对当前稳定有余轻便不足(笨重)的比特币脚本系统改进的考量。若实施,将允许本地SegWit地址使用Merkle根见证交易。 Lau还进一步解释说BIP114基于MAST, 但不等同于MAST,确切的说应该叫脚本Merkle树。

    BIP114其实是MAST的简化定制版。 Merkle根编码的是相互排斥的条件脚本分支,而非单个操作。虽然不是MAST的完整实现,实现的隐私、扩容效果是一样的。

    别的MAST

    1. Mark Friedenbach提案

    比特币开发者Mark Friedenbach给出两项提案, 需要合并使用才能将MAST引入比特币。

    第一个是BIP116,允许“脚本编写者承诺(commit to)一组数据元素,赎回时仅提供一个或多个元素,不必披露整个数据集。”他把这个操作码称为MERKLE分支验证(MERKLEBRANCHVERIFY)。

    第二个是BIP117,标题为尾调用语义(Tail Call Semantics)。 Friedenbach是这么解释的:“BIP117与BIP116合并时,允许无限数量的脚本代码路径,但是会披露花费(比特币)时的代码路径。 这与一般MAST原理上是一样的:将复杂分支脚本拆分成一组无分支的扁平执行路径,可以显示整个路径集合,但是只显示花费时的路径。”

    Laus的提案只能在SegWit脚本中运行,但Friedenbachs提案可以在比特币中正在使用的所有脚本中实施。

    用MERKLE分支验证和单一尾部递归这些简易且强大的工具来够构建MAST,在实现了复杂功能的同时,也最大限度地减少了对共识代码的修改以及相应的后续审查负担和获得性技术债。

    2. Taproot

    一边有Lau和Friedenbach的专注MAST带来的效率提升。 一边Gregory Maxwell的注意力则放在MAST带来的隐私增强。

    Maxwell正在开发旨在保护交易隐私的Taproot协议。 要知道有条件交易(复杂交易)很容易被与简单交易区分开来,那么Maxwell提出了一种结构能让复杂的智能合约看起来像简单付款。

    Taproot是种特殊的Merkle根,作用是代表CHECKSIG(校验与某个打包关联的所有签名和摘要时有用)。 由于“签名路径的验证计算复杂度与任何简单签名相同(因为无法区分),那么将无法区分履行智能合约与简单交易。 验证分支兑换需要哈希以及与定点相乘,这就比签名验证效率高得多,而且还能有效地融合到批量签名验证中。”

    实施MAST有什么好处?

    MAST带来的最大好处是为智能合约以及扩容打开大门。 MAST允许花费时编写一长串条件,且不会导致数据的相应增长,那么这样一来,比特币上就可以创建非常复杂的智能合约。 此外,MAST还能帮助解决扩容问题,升级不会牺牲效率、功能和隐私等方面。

    区块链里经常提到的一个概念叫:tradeoff,就是为了升级或改进,不得不牺牲掉一部分功能或者招致各种评审和技术债。

    先参看一下前阵子比特币现金的硬分叉:

    分叉后的比特币现金块大小为32MB且具有智能合约功能。 分叉经过大概是这样的:

    为进一步区别于比特币(分析人士认为:网络升级的目的是应对比特币的闪电网络), 比特币现金尝试在协议中添加新功能,结果在第530350个块的地方又分叉了。

    分叉后有1/5的节点还在旧链上,但是比特币现金还没怎么着的时候,其他社区(以比特币为首)先爆了,揪着1/5的节点没升级劈头盖脸的一通损。

    通过硬分叉被添加至协议的智能合约被称为“OP_CAT”,还有,因为块大小升级,用户在比特币现金社媒Memo.cash上可以发表的内容也变得更长。

    但是,也有人觉得这次硬分叉不算理想的tradeoff。

    例如,增加块大小可能进一步降低用户未来运行全节点的可能性, 因为一般家用设备达不到那么高的存储要求。 关于这一点的争论也最热烈,因为加密货币爱好者始终认为运行全节点才是最安全、最去中心化的方式(正确用法)。

    上面说MAST能帮助解决扩容问题,升级不会牺牲效率、功能和隐私等方面,可以说是理想的tradeoff。

    此外,MAST会带来比特币交易相关的更高级别的隐私,因为交易数据中仅包含交易过程中使用的信息; 那些附带在比特币上但交易不使用的数据,比方说时间锁或条件, 就不用包含在交易数据中。 那么如果条件不包含在交易数据中,说明条件是不公开的,因此条件中的隐私相关数据也是不可见的。还有,MAST还可以恢复可互换性,因为无法判断哪些部分附属于智能合约,哪些部分属于简单花费。

    可互换性(fungibility):

    简单点说就是所有的BTC按道理都是一样的、可以互换的,A发给B 0.5 BTC,B再发给A 0.5 BTC,这俩个0.5 BTC可以互换,不影响后续使用。

    这里就涉及洗币问题, 例如某些币来自黑市,有人拿黑市0.5 BTC和你交换你的合法0.5 BTC,你肯定不干,这就不可互换了。

    现在部分比特币交易所会因为你的比特币可能来自参与了黑市交易的比特币而冻结你的账户, 这就违背了可互换性.

    所以做好币的匿名性有利于提高可互换性。

    最后,因为MAST中还有Merkle树这厮,能精简不少交易数据,因为Merkle根和Merkle证明这波操作可以避免包含全部数据集这种需要。因此,区块链上的交易也能处理的更快。

    虽然也不知道MAST何时实施,但综上看来,一旦实施,对数字货币的性能提升可期。

    https://btcmanager.com/what-is-mast-how-it-improves-bitcoin/

    https://www.jianshu.com/p/e8de7266aed7

    相关文章

      网友评论

        本文标题:MAST

        本文链接:https://www.haomeiwen.com/subject/hkimeftx.html