技术解读:高效的链上动态 Merkle Tree-ODAILY_RC2:RC20

编按:本文是QuarkChain创始人&CEO周期博士在以太坊技术论坛ethresear.ch发布的一篇技术文章,介绍了一个高效的Merkletree方案设计。

原地址:

https://ethresear.ch/t/effici...

简介

遵循以太坊2.0的无状态客户端的思想,我们实现了一个高效的链上动态Merkletree:

动态 | 中国福彩管理中心将研究区块链技术解决开奖系统存在的问题:据深圳晚报消息,4月4日,中国政府采购网发布《中国福利彩票发行管理中心基于区块链智能合约技术的可公证性电子开奖技术研究与应用项目的招标公告》。公告中提到,中国福利彩票发行管理中心将研究把区块链智能合约技术应用到电子开奖系统的手段和模式,解决当前福利彩票行业电子开奖系统不可公正、不可审计的关键问题,对下一代摇奖与开奖系统技术进行研究。[2019/4/9]

链上包含性验证;链上添加/就地更新;O(1)存储空间成本;更新/添加操作的O(1)存储写入成本。

背景

声音 | 政协委员张占斌:可借助区块链等技术解决小微企业融资难问题:据新京报消息,近日,在两会经济策沙龙之“问道民营经济”上,全国政协委员、中共中央党校(国家行政学院)马克思主义学院院长张占斌表示,要想办法解决民营企业、小微企业融资难、融资贵的问题。有些地方服务民营经济、小微企业有一些创新的办法,例如借助于互联网、大数据、区块链等技术介入金融部门的创新。[2019/3/12]

Merkletree广泛用于以极低存储成本在链上大量成员身份验证,例如Uniswap链上空投。无需上传链上所有用户大量的空投信息,空投可以通过以下方式显著节省成本:

声音 | 浙商银行沈金方:通过区块链技术解决企业应收账款真伪等问题:据中国经济新闻网消息,浙商银行公司银行部副总经理沈金方近日提到了浙商银行在区块链的探索。通过区块链技术将企业的应收账款改造成可支付结算和融资的工具,从而解决真伪、确权和资金回笼的问题。这个业务已经做了将近一年多的探索,叫应收款内业务,成效非常明显,尤其对中小企业融资难和融资贵的问题都可以得到有效的解决。[2018/9/18]

将树的根哈希存储在链上使用链下计算证明用户奖励用户通过链上提交证明来获取奖励

此外,链上动态Merkletree正在引起人们的兴趣。著名的会计事务所安永(Ernst&Young,EY)开发了一种仅能在链上添加的动态Merkletree(https://github.com/EYBlockcha...5)。它通过只存储“边界”节点而不是树的所有节点来节省树的存储成本,但是,添加操作的写入成本为O(log2(N)),这可能会在EVM上消耗相当大的gas。

动态 | 外汇经纪商技术解决方案提供商推出MetaTrader 5交易处理器:外汇经纪商技术解决方案提供商Tools For Brokers近日推出MetaTrader 5交易处理器,该处理器允许加密货币和外汇交易在一个安全和多块化的系统中运行,并将无风险的资金流动性与做市商订单池相融合。[2018/7/17]

基本想法

类似于现有的静态Merkletree,它使用默克尔证明来验证包含性,链上动态树的基本思想是在包含验证后重用默克尔证明来更新树的根哈希。树更新的步骤如下:

给定LeafIndex、oldLeafHash、newLeafHash、oldRootHash、proof用oldLeafHash和proof计算rootHash。如果计算出的rootHash!=oldRoothHash,则包含验证失败;否则继续使用newLeafHash和proof计算newRootHash,其中证明被重用,newRootHash将是更新后树的根哈希

请注意,只有newRootHash被写入区块链,因此空间和写入的成本是O(1)。

应用

MerklizedERC20

ERC20标准可以修改为Merklize的树。任何造币/销毁/转移操作都需要Merkle证明。MerklizedERC20的应用或许可以:

链上投票——治理提案投票可以廉价地使用ERC20快照并根据快照计算链上投票,而不需要保留ERC20余额变化或链下快照的所有历史记录。远程流动性挖掘——远程链上的合约对本地ERC20用户进行空投/流动性挖矿,其中ERC20快照通过去中心化预言机定期转发到另一条链。

示例代码可以在这里找到:https://github.com/QuarkChain...

/SPDX-License-Identifier:MITpragmasolidity^0.8.0;import"hardhat/console.sol";import"@openzeppelin/contracts/token/ERC20/IERC20.sol";import"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";import"@openzeppelin/contracts/utils/Context.sol";import"./DynamicMerkleTree.sol";

contractMerklizedERC20isContext,IERC20,IERC20Metadata{mapping(address=>uint256)private_balances;mapping(address=>uint256)private_indices1;uint256private_totalSupply;stringprivate_name;stringprivate_symbol;

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金智博客

[0:0ms0-4:609ms