如何使用 Merklized 抽象语法树压缩智能合约

 更新时间:2023年12月04日 16:30:06   作者:sCrypt Web3应用开发  
Merklized 抽象语法树 MAST(又名 Merklized 替代脚本树)是一种使用 Merkle 树压缩比特币智能合约的技术,这篇文章主要介绍了使用 Merklized 抽象语法树压缩智能合约,需要的朋友可以参考下

Merklized 抽象语法树 MAST(又名 Merklized 替代脚本树)是一种使用 Merkle 树压缩比特币智能合约的技术。我们在比特币 SV 上实施了 MAST。与所有其他实现不同,我们利用原始比特币协议,没有任何共识更改。

问题

通常有不止一种方法可以解锁锁定在比特币智能合约中的硬币。在 sCrypt 中,每种方式都被建模为一个公有函数,代表一种条件的解锁分支。例如,在 TimedCommit 合约中,可以通过 Alice 的原像和她的签名,或者通过 Alice 和 Bob 的签名来解锁合约。

contract TimedCommit {
  bytes aliceHash;
  PubKey alice;
  PubKey bob;
  public function open(bytes aliceNonce, Sig aliceSig) {
    require(sha256(aliceNonce) == this.aliceHash);
    require(checkSig(aliceSig, this.alice));
  }
  public function forfeit(Sig aliceSig, Sig bobSig) {
    require(checkSig(aliceSig, this.alice));
    require(checkSig(bobSig, this.bob));
  }
}

随着合约变得越来越复杂,一个合约中可能有数十个甚至数百个公有函数/分支。最终只调用其中一个,但所有这些都必须包含在区块链中,即使他们根本没有被执行。这会增加链上的足迹并增加交易费用。

contract ContractOfManyBranches {
    public function branchA() { }
    public function branchB() { }
    public function branchC() { }
    public function branchC() { }
    // ... more branches
}

MAST

抽象语法树 MAST 可以从区块链中删除未执行的分支。未压缩的合约(原始合约)被拆分为单独的分支并组织成 Merkle 树,其中每个分支的脚本都是一片叶子。压缩后的合约并不存储所有分支,只存储了所有分支的 merkle root,用于验证某个特定分支是否属于原始合约。

以下是 MAST 带来了巨大的好处,尤其是当分支数 n 很大时:

可扩展性: 部署的合约大小按 log(n)¹ 缩小,因为只需要选定的分支及其默克尔路径,而不是所有分支。在下面的例子中,当分支 Tc 被调用时,只需要黄色的默克尔路径。

隐私性: 未使用的分支不会在链上发布。在下面的示例中,仅显示 Tc,隐藏所有其他分支。

在这里插入图片描述

默克尔树和默克尔路径

实现

我们已经在比特币中实现了 MAST。当一个分支被执行时,它本身和它的默克尔路径被用来解锁。在压缩合约中,我们首先使用其默克尔根验证分支是否来自原始合约。接下来,使用 P2SH 技术,将当前支出交易中的新锁定脚本设置为该分支的脚本,该脚本将在后续交易中被解锁。合约代码如下:

contract MAST {
    static const int DEPTH = 4;
    Sha256 merkleRoot;
    public function main(bytes branchScript, MerklePath merklePath, SigHashPreimage txPreimage) {
        require(Tx.checkPreimage(txPreimage));
        // validate branchScript is from the merkle tree
        require(calMerkleRoot(branchScript, merklePath) == this.merkleRoot);
        // "P2SH": use branch script as the new locking script, while maintaining value
        bytes output = Util.buildOutput(branchScript, Util.value(txPreimage));
        require(hash256(output) == Util.hashOutputs(txPreimage));
    }
    static function calMerkleRoot(bytes leaf, MerklePath merklePath) : Sha256 {
        Sha256 root = sha256(leaf);
        loop (DEPTH) : i {
            Sibling s = merklePath[i];
            root = s.left ? sha256(s.hash + root) : sha256(root + s.hash);
        }
        return root;
    }
}

脚注

[1] 假设所有分支的大小相似。

到此这篇关于如何使用 Merklized 抽象语法树压缩智能合约的文章就介绍到这了,更多相关Merklized 抽象语法树内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • windows下Git安装教程(图文)

    windows下Git安装教程(图文)

    这篇文章主要介绍了windows下Git安装教程(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • ImageMagick免费开源图片批处理利器使用详解

    ImageMagick免费开源图片批处理利器使用详解

    这篇文章主要为大家介绍了ImageMagick免费开源图片批处理利器使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • git clone如何指定历史版本

    git clone如何指定历史版本

    这篇文章主要介绍了git clone如何指定历史版本问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • AES加密算法的原理详解与实现分析

    AES加密算法的原理详解与实现分析

    这篇文章主要介绍了高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,需要的朋友可以参考下
    2020-08-08
  • 使用Postman生成的okhttp代码依赖

    使用Postman生成的okhttp代码依赖

    这篇文章主要介绍了使用Postman生成的okhttp代码依赖,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Git下载、安装与环境配置的详细教程

    Git下载、安装与环境配置的详细教程

    这篇文章主要介绍了Git下载、安装与环境配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 关于图片存储格式的整理(JPEG格式介绍)

    关于图片存储格式的整理(JPEG格式介绍)

    这篇文章主要介绍了关于图片存储格式的整理(JPEG),需要的朋友可以参考下
    2016-01-01
  • 微信小程序 iPhoneX底部安全区域(底部小黑条)适配(一分钟解决)

    微信小程序 iPhoneX底部安全区域(底部小黑条)适配(一分钟解决)

    iPhone X 对于微信小程序的tabbar来说,会被底部小黑条覆盖,需要处理,大概思路是,得到手机型号、分别判断样式。这篇文章主要介绍了微信小程序 iPhoneX底部安全区域(底部小黑条)适配问题,需要的朋友可以参考下
    2019-10-10
  • 分享几道和「滑动窗口」有关的算法面试题

    分享几道和「滑动窗口」有关的算法面试题

    本文是小编和大家分享的几道和「滑动窗口」有关的算法面试题,需要的朋友可以参考下
    2019-08-08
  • git cherry-pick的具体使用

    git cherry-pick的具体使用

    Git cherry-pick用于将特定提交从其他分支应用到当前分支,常用于多分支开发中的部分提交转移,本文就来介绍一下解决方法,感兴趣的可以了解一下
    2024-09-09

最新评论