什么是Merkle树
定义
MerkleTree,也叫默克尔树或哈希树,是区块链的底层加密技术,被以太坊区块链广泛采用。MerkleTree是一种自下而上构建的加密树,每个叶子是对应数据的哈希,而每个非叶子为它的2个子节点的哈希。
如何生成Merkle树的数据
在solidity中我们通过keccak256算法计算hash值:
keccak256(abi.encodePacked(toHashValue)e.g.:hash前0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2hash后0x999bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdb
CZ澄清CNBC著名“反指”Jim Cramer对币安“好评”的截图系P图:9月6日消息,币安创始人赵长鹏(CZ)在X平台(原推特)上澄清了一张社区流传的图片,称这张图片是P的,请不要相信。该图像系CNBC主持人Jim Cramer在2022年9月一段讲话的视频截图,图片字幕标注着Jim Cramer称“赵长鹏看起来是个好人,我很看好,购买他们的代币。”
据悉,Jim Cramer被广泛称为著名“反指”。[2023/9/6 13:20:32]
在对叶子节点的值进行hash运算之后,再把相邻的节点再进行hash运算,直到只剩下一个根节点。假设存在两个相邻的节点A和B,那么在进行hash运算的时候到地址是hash(A+B)呢?还是hash(B+A)呢?其实这是由A和B的大小决定的,在openzeppelin对应的merkle代码中我们可以找到这么一段代码:
Solana Summer Camp Hackathon在DoraHacks.io启动:7月14日消息,Solana夏季黑客马拉松 (Solana Summer Camp Hackathon) 在报名入口在DoraHacks.io开启。Solana生态开发者可以通过DoraHacks.io提交项目(BUIDL)。本次全球黑客马拉松包含支付、Defi、Web3、Gaming、DAO、Mobile六个赛道,全球总奖金池为500万美金。
Solana夏季黑客马拉松的时间是7月11日 - 8月16日。除线上黑客松以外,本次黑客松还将在全球九个城市举办现场活动,包括旧金山、芝加哥、盐湖城、伦敦、柏林、贝尔格莱德、里斯本、阿姆斯特丹和新加坡。[2022/7/14 2:13:25]
function_hashPair(bytes32a,bytes32b)privatepurereturns(bytes32){returna<b?_efficientHash(a,b):_efficientHash(b,a);}
NFT艺术家Pak的Merge NFT项目售出9200万美元:金色财经报道,NFT艺术家Pak为他在Nifty Gateway的实验性Merge NFT项目售出了价值近9200万美元的 \"大众 \"代币。Nifty Gateway的独特投放卖出了超过26.6万个代币,这些代币将被合并成动态的NFT收藏品。在两天的代币销售中,共有28984名买家总共花费了9180万美元。根据Gemini拥有的市场提供给Decrypt的最终统计数据,总共有266,444个大规模代币被购买。(decrypt)[2021/12/7 12:56:03]
总结来说就是把相对小的数值放到前面去这么来排序计算hash值。这个地方在自己动手实际运算的时候可能会有些许困惑。在实际的项目中一般只需要把计算的最后结果的根hash值存储到合约中,如果大量的地址都需要存到合约中的话会消耗大量的gas费。经过merkle树计算之后,大大的减少了需要存储的数据。通过一段foundry的setUp演示下如何计算和存储roothash值:
Tendermint推出的跨链门户Emeris测试版上线:Cosmos开发公司Tendermint推出的加密跨链门户Emeris的Beta测试版上线。Emeris目前提供跨链转账、交易、流动性池等功能,支持的代币包括ATOM、IRIS、REGEN、XPRT、AKT、CRO、ION、OSMO、DVPN,测试版仅支持Keplr钱包,后续会增加对多个钱包的支持。Emeris除了资产管理功能外,还支持基于Cosmos Hub的链间去中心化交易所Gravity DEX。[2021/8/19 22:25:00]
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));}
为了演示方便我们值写了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字节,因此在叶子节点和父节点之间可能会发生哈希碰撞。
最近有消息称,越南政府对Pi网络进行了调查,但是并没有发现任何违法行为。这个消息让许多人感到惊讶,因为Pi网络在越南非常受欢迎.
1900/1/1 0:00:00通过采用创新的技术手段和独特的挖矿机制,PiNetwork在保证交易速度和安全性的同时,实现了低门槛、低成本的特性,为普通用户提供了难得的机会参与到加密货币的挖矿和交易中来.
1900/1/1 0:00:00来源/LongHash 2020年末使这一年成为了比特币历史上令人惊叹的一年。在此,我们不妨回顾一下加密业内人士对BTC在2020年末的价格的一些预测.
1900/1/1 0:00:00这只可爱的NFT熊猫凭借其独特的形象和Pi网络的创新生态,吸引了众多明星的关注和支持。NuriFlex与AhnLab签署NuriTopia项目谅解备忘录:金色财经报道,NuriFlex Hold.
1900/1/1 0:00:00最近听到一些声音,说Pi网络社区似乎对官方充耳不闻,让人感到闹心。我的看法是,这个问题其实有些复杂,需要从多个角度来分析.
1900/1/1 0:00:00在CEX上,Pi币的价格一直在波动,引起了用户的极大关注。Exploit Network完成150万美元初轮融资,BlockCapital、HashFund等参投:多链隐私支付协议Exploit.
1900/1/1 0:00:00