编按:本文是QuarkChain创始人&CEO周期博士在以太坊技术论坛ethresear.ch发布的一篇技术文章,介绍了一个高效的Merkletree方案设计。
原地址:
https://ethresear.ch/t/effici...
简介
遵循以太坊2.0的无状态客户端的思想,我们实现了一个高效的链上动态Merkletree:
榕基软件:将利用区块链技术解决不动产登记相关问题:6月8日,榕基软件(002474.SZ)在回答投资者提问时表示,公司与信阳政府刚签订的区块链合同将区块链与不动产登记结合,利用区块链技术解决不动产登记所面临的具体问题。后续该业务有望在公司有优势的业务区域进行推广;区块链+政府服务,也有望推广到公司其他有优势业务领域。此前6月5日消息,榕基软件发布公告称,公司与河南省信阳市政务服务和大数据管理局签订了区块链项目框架协议。(新浪财经)[2020/6/8]
链上包含性验证;链上添加/就地更新;O(1)存储空间成本;更新/添加操作的O(1)存储写入成本。
声音 | Swift高管:Swift不打算直接利用DLT技术解决银行间转账问题:据dailyhodl报道,Swift亚太区总经理Lisa O'Connor在接受CNBC的采访时表示,其部分成员正在使用分类账技术(DLT)支持其基础设施,但Swift并不打算直接利用该技术来解决银行间转账问题。当被问及Swift是否担心Ripple和XRP会挑战其在金融领域的主导地位时,O'Connor表示,跨境支付的许多问题已经被克服,过去需要花费数天的时间来进行跨境支付的情况已不复存在。[2019/3/12]
背景
Merkletree广泛用于以极低存储成本在链上大量成员身份验证,例如Uniswap链上空投。无需上传链上所有用户大量的空投信息,空投可以通过以下方式显著节省成本:
动态 | 澳大利亚运用区块链技术解决残疾公民保险问题:据coindesk消息,澳大利亚联邦科学机构正与澳大利亚联邦银行合作,测试一项旨在让残疾公民更容易支付保险金的区块链申请。其目标是在该国的国家伤残保险计划(NDIS)中引入一个编号为区块链的智能合同令牌,以便参与者和服务提供商能够根据预先定义的条件执行支付,比如谁可以在什么截止日期前花掉某些资金。[2018/10/9]
将树的根哈希存储在链上使用链下计算证明用户奖励用户通过链上提交证明来获取奖励
此外,链上动态Merkletree正在引起人们的兴趣。著名的会计事务所安永(Ernst&Young,EY)开发了一种仅能在链上添加的动态Merkletree(https://github.com/EYBlockcha...5)。它通过只存储“边界”节点而不是树的所有节点来节省树的存储成本,但是,添加操作的写入成本为O(log2(N)),这可能会在EVM上消耗相当大的gas。
金色财经现场报道 ConsenSys创始人宣布了从根本上简化企业使用区块链技术解决方案:金色财经现场报道,今日在Coindesk 2018共识会议上,ConsenSys创始人Joseph Lubin宣布了从根本上简化企业使用区块链技术的ConsenSys解决方案,他表示这将改变我们如何共同建设社会,经济和系统。[2018/5/15]
基本想法
类似于现有的静态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;
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。