什么是Merkle树
定义
MerkleTree,也叫默克尔树或哈希树,是区块链的底层加密技术,被以太坊区块链广泛采用。MerkleTree是一种自下而上构建的加密树,每个叶子是对应数据的哈希,而每个非叶子为它的2个子节点的哈希。
如何生成Merkle树的数据
在solidity中我们通过keccak256算法计算hash值:
keccak256(abi.encodePacked(toHashValue)e.g.:hash前0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2hash后0x999bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdb
元宇宙视觉内容数据公司Kimera Technologies完成66万欧元融资:金色财经报道,总部位于西班牙瓦伦西亚的元宇宙视觉内容数据公司Kimera Technologies宣布完成66万欧元融资,Addendum Capital、Adara Ventures、Bonsai Partners和BStartup Banco Sabadell等参投。该公司视觉内容(包括图像和视频)转换为更有用的数据,以更好地进行市场分析和趋势预测,帮助企业经营3D内容并进入虚拟现实和元宇宙领域。(novobrief)[2023/4/14 14:02:27]
在对叶子节点的值进行hash运算之后,再把相邻的节点再进行hash运算,直到只剩下一个根节点。假设存在两个相邻的节点A和B,那么在进行hash运算的时候到地址是hash(A+B)呢?还是hash(B+A)呢?其实这是由A和B的大小决定的,在openzeppelin对应的merkle代码中我们可以找到这么一段代码:
Cameron Winklevoss从Gemini欧洲董事会卸任:金色财经报道,Cameron Winklevoss从Gemini欧洲董事会卸任。Cameron Winklevoss和他的双胞胎兄弟Tyler Winklevoss仍然是Gemini公司的总裁兼首席执行官。两人于2014年建立了这家加密交易所。
10月14日,Gillian Lynch接任Gemini欧洲分公司的新主管,此前该主管Blair Halliday转投加密货币交易所Kraken。(the block)[2022/10/17 17:29:05]
function_hashPair(bytes32a,bytes32b)privatepurereturns(bytes32){returna<b?_efficientHash(a,b):_efficientHash(b,a);}
GameStop将发行首个官方NFT系列GMERICA:8月30日消息,GameStop在Twitter上表示,将于EST时间8月30日中午(北京时间8月30日晚间或8月31日凌晨)发行首个官方NFT系列GMERICA,该NFT系列由推特ID为@1TZAH的艺术家创作。[2022/8/30 12:57:59]
总结来说就是把相对小的数值放到前面去这么来排序计算hash值。这个地方在自己动手实际运算的时候可能会有些许困惑。在实际的项目中一般只需要把计算的最后结果的根hash值存储到合约中,如果大量的地址都需要存到合约中的话会消耗大量的gas费。经过merkle树计算之后,大大的减少了需要存储的数据。通过一段foundry的setUp演示下如何计算和存储roothash值:
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));}
Rollup桥接方案Beamer宣布上线测试网,已支持支持Boba和Metis:3月29日消息,Rollup桥接方案Beamer宣布启动测试网,允许用户无需通过L1,就能直接在与EVM兼容的Rollup之间转移ERC20资产。Beamer解决了Rollup孤岛效应,使用户能够跨rollup移动和整合资产,向其他Rollup上的收件人进行P2P付款,并访问其他Rollup上的dApp。Beamer目前支持Boba和Metis Rollup之间的桥接,计划接下来增加与EVM兼容的Optimism、Arbitrum和zkRollup。[2022/3/29 14:23:56]
为了演示方便我们值写了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字节,因此在叶子节点和父节点之间可能会发生哈希碰撞。
Odos是什么 Odos是一个带有专利的自动做市商路径查找算法,通过DEX为加密货币令牌兑换提供最佳路径,这样可以为交易者提供更具有竞争力的报价,交易者可以利用Odos进行套利等复杂交易.
1900/1/1 0:00:00欢迎来到由NFT基础设施NFTScan出品的NFT生态热点事件每周汇总。周期:2023.06.05~2023.06.11 NFTHotNews:NFT热点资讯01/数据:5月以太坊上NFT市场交.
1900/1/1 0:00:00熊市的几个阶段总结: 阶段1、牛市后的迅速崩盘阶段,这个阶段必须空仓,因为这个阶段是没有操作性可言的,市场表现为恐慌性杀跌,杀任何品种。直到杀至牛市主升浪的起点位置附近.
1900/1/1 0:00:00Pi网络一直在兴风作浪,最近的一个披露给它的故事增添了一个意想不到的转折。据了解,在阿里巴巴集团,一个国际巨头在企业对企业电子商务领域,拥有域名“PiBarterMall”.
1900/1/1 0:00:00PiNetwork是一个基于区块链技术的去中心化生态系统,致力于为用户提供更加安全、透明和自由的数字资产管理和交易服务.
1900/1/1 0:00:00PiNetwork强调全面KYC的原因是为了确保平台的安全和防止欺诈行为。全面KYC可以确保每个用户的身份的真实性,并减少虚假注册、恶意行为和欺诈行为的风险.
1900/1/1 0:00:00