宇宙链 宇宙链
Ctrl+D收藏宇宙链

Merkle树的逻辑和证明

作者:

时间:1900/1/1 0:00:00

什么是Merkle树

定义

MerkleTree,也叫默克尔树或哈希树,是区块链的底层加密技术,被以太坊区块链广泛采用。MerkleTree是一种自下而上构建的加密树,每个叶子是对应数据的哈希,而每个非叶子为它的2个子节点的哈希。

如何生成Merkle树的数据

在solidity中我们通过keccak256算法计算hash值:

keccak256(abi.encodePacked(toHashValue)e.g.:hash前0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2hash后0x999bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdb

全链抗MEV DEX聚合器Cashmere Labs将在Aptos部署合约:10月23日消息,基于LayerZero的全链抗MEV DEX聚合器Cashmere Labs发推称,Cashmere合约将部署至Aptos。目前Cashmere Labs产品暂未推出。

Aptos Bridge用户可以将USDC、USDT和ETH从Etheruem、Arbitrum、Arbitrum、Optimism、Avalanche、Polygon、BNB Chain跨链至Aptos。[2022/10/23 16:36:05]

在对叶子节点的值进行hash运算之后,再把相邻的节点再进行hash运算,直到只剩下一个根节点。假设存在两个相邻的节点A和B,那么在进行hash运算的时候到地址是hash(A+B)呢?还是hash(B+A)呢?其实这是由A和B的大小决定的,在openzeppelin对应的merkle代码中我们可以找到这么一段代码:

Bitcoin of America将ETH添加至其比特币ATM机:Bitcoin of America已在美国财政部 (FinCEN) 注册为货币服务业务。此外,还将以太坊添加至其比特币ATM机(BTM)。据悉,Bitcoin of America在31个州拥有1300多台比特币ATM机。(PRNewswire)[2021/9/29 17:13:50]

function_hashPair(bytes32a,bytes32b)privatepurereturns(bytes32){returna<b?_efficientHash(a,b):_efficientHash(b,a);}

总结来说就是把相对小的数值放到前面去这么来排序计算hash值。这个地方在自己动手实际运算的时候可能会有些许困惑。在实际的项目中一般只需要把计算的最后结果的根hash值存储到合约中,如果大量的地址都需要存到合约中的话会消耗大量的gas费。经过merkle树计算之后,大大的减少了需要存储的数据。通过一段foundry的setUp演示下如何计算和存储roothash值:

行情 | Emercoin与格鲁吉亚高校发布学历验证平台:Emercoin今天宣布成功实施与格鲁吉亚第比利斯的商业科技大学(BTU)的开源“可信文凭”区块链平台。Trusted Diploma平台使用区块链技术,为教育部门提供可加密和安全的应用程序的可验证文凭和其他证书。该应用程序确保毕业生的能力得到验证。[2018/8/2]

bytes32publicroot;bytes32publicleafs;bytes32publicl2;functionsetUp()public{addressmemoryaddrss=newaddress(4);addrss=0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2;addrss=0x2d886570A0dA04885bfD6eb48eD8b8ff01A0eb7e;addrss=0xed857ac80A9cc7ca07a1C213e79683A1883df07B;addrss=0x690B9A9E9aa1C9dB991C7721a92d351Db4FaC990;//通过地址列表计算叶子节点的hash值leafs.push(keccak256(abi.encodePacked(addrss)));leafs.push(keccak256(abi.encodePacked(addrss)));leafs.push(keccak256(abi.encodePacked(addrss)));leafs.push(keccak256(abi.encodePacked(addrss)));//计算第二层的hash值l2.push(keccak256(abi.encodePacked(leafs,leafs)));l2.push(keccak256(abi.encodePacked(leafs,leafs)));//计算根的hash值root=keccak256(abi.encodePacked(l2,l2));}

金色财经现场报道 石木资本Omer Ozden: 区块链的法律也等同于一种科技:金色财经现场报道,在世界区块链大会·三点钟峰会宏观经济探讨部分,石木资本董事长、真格基金海外投资首席顾问,优客工场联合创始人Omer Ozden作了题为“中美区块链进化论”的主题演讲。Omer Ozden指出:中国正在经历迄今发展最好的年代,Omer曾提出VIE模式帮助了中国众多互联网企业在美国融资。Omer说,法律科技是全球化的,是在全球范围内分布应用,法律发展要跟上科技发展的变化,区块链领域,每3-6个月法律环境就会改变,变化速度非常快,所以对区块链说,法律也是一种科技。当前世界区块链涌入部分国家地区正是看到了“法律就是一种科技”的价值。[2018/4/24]

为了演示方便我们值写了4个地址,实际项目中可能地址数量非常大。

如何来验证Merkle树

在合约中存储到roothash值之后我们如何去验证由客户端发过来的地址是否是有效地址或者说在白名单中的地址呢?首先我们需要将地址进行hash运算,作为第三个参数,然后将地址相邻的hash值作为proof传到验证函数中。proof列表对应下面图片中的红色标记区域

测试的验证方法:

functiontestVerify()public{addressproofAddress=0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2;bytes32memoryproof=newbytes32(2);proof=leafs;proof=l2;assert(MerkleProof.verify(proof,root,keccak256(abi.encodePacked(proofAddress))));}

在实际项目中的应用场景

发放空投

NFT的白名单

在合约审计中的常见漏洞

functionparentHash(bytes32a,bytes32b)publicpurereturns(bytes32){if(a<b){returnkeccak256(abi.encode(a,b));}else{returnkeccak256(abi.encode(b,a));}}

abi.encode(address,uint)将会输出64字节。由于abi.encode(bytes32,bytes32)也是64字节,因此在叶子节点和父节点之间可能会发生哈希碰撞。

标签:区块链以太坊NFT区块链工程专业学什么区块链存证怎么弄区块链技术发展现状和趋势以太坊币是什么币NFT价格NFT币

比特币交易热门资讯
支持Pi和GCV生态系统的成长:感谢Linda女士和其他社区人物的贡献

在创新和技术的世界里,社区领导人往往是先驱,他们为更大的变革提供方向和灵感。LindaIndonesia和其他社区领导人在支持和促进Pi和GCV生态系统方面发挥了重要作用.

1900/1/1 0:00:00
了解Pi网络供应和mainnet指标

Pi网络是一个全球性的区块链,旨在实现个人数据隐私保护和价值转移,通过分布式网络和去中心化技术,让每个人都可以参与其中并获得收益.

1900/1/1 0:00:00
太难了!本月Pi网络的挖掘速率已经是每小时0.0105Pi!

本月,Pi网络挖掘速率可真是让人头疼啊!每小时只挖掘0.0105Pi,显然是非常低效的。GitHub前CEO与YC前合伙人筹集超10亿美元基金,将投资AI领域:6月21日消息,GitHub前首席.

1900/1/1 0:00:00
作为四年多的Pi网络先锋,深度分析Pi网络为什么会成功!

作为四年多的Pi网络先锋,我深入分析了Pi网络成功的原因。从技术角度看,Pi网络采用了分布式、去中心化的技术,让每个人都有机会参与到网络中来,形成了真正意义上的公链.

1900/1/1 0:00:00
阿里巴巴集团参与Pi Network生态系统:PiBarterMall所有权揭晓

Pi网络一直在兴风作浪,最近的一个披露给它的故事增添了一个意想不到的转折。据了解,在阿里巴巴集团,一个国际巨头在企业对企业电子商务领域,拥有域名“PiBarterMall”.

1900/1/1 0:00:00
越南电视台、法律专家和记者对Pi Network给予积极评价!

在越南,PiNetwork受到了电视台、法律专家和记者的积极评价。币安P2P平台越南市场增加对TUSD的支持:4月20日消息,币安宣布其 P2P 平台在越南市场增加了对 TUSD 的支持,符合条.

1900/1/1 0:00:00