什么是Merkle树
定义
MerkleTree,也叫默克尔树或哈希树,是区块链的底层加密技术,被以太坊区块链广泛采用。MerkleTree是一种自下而上构建的加密树,每个叶子是对应数据的哈希,而每个非叶子为它的2个子节点的哈希。
如何生成Merkle树的数据
在solidity中我们通过keccak256算法计算hash值:
keccak256(abi.encodePacked(toHashValue)e.g.:hash前0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2hash后0x999bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdb
Merit Circle新提案拟拨款7500万枚MC用于Beam主网节点运营、开发者赠款等用途:8月15日消息,链游公会Merit Circle发起新社区提案,提议从金库拨款多达总量11.8%的代币(7500万枚MC)用于Beam主网的节点运营、游戏/游戏发行商赠款,此外从MC DAO金库中使用高达270万枚USDC来开发Beam和某些生态系统产品(如果所有分配的资金未被使用,则应退还给MC DAO),其中20万美元建议用于Beam上AMM流动性。[2023/8/15 21:24:23]
在对叶子节点的值进行hash运算之后,再把相邻的节点再进行hash运算,直到只剩下一个根节点。假设存在两个相邻的节点A和B,那么在进行hash运算的时候到地址是hash(A+B)呢?还是hash(B+A)呢?其实这是由A和B的大小决定的,在openzeppelin对应的merkle代码中我们可以找到这么一段代码:
Jurrien Timmer:美联储量化紧缩政策的结束可能利好比特币和黄金:金色财经报道,富达全球宏观主管 Jurrien Timmer 讨论了美联储鸽派转向对股票、黄金和比特币的可能影响。Jurrien Timmer 表示,人们普遍预计美联储要么将利率维持在当前水平,要么开始降息。CME 的 FedWatch 工具显示,市场目前认为 3 月 25 日的基点加息是一段时间内最后一次加息的可能性为 50%。如果美联储停止加息,根据历史数据,股票等风险资产可能会出现积极反弹。自 1984 年以来上一次加息后,标准普尔 500 指数的平均一年回报率为 18.9%。降息将使公司和个人的信贷成本降低,从而改善市场的流动性。低利率制度通常与股票和加密货币等风险资产的牛市有关。[2023/4/4 13:43:03]
function_hashPair(bytes32a,bytes32b)privatepurereturns(bytes32){returna<b?_efficientHash(a,b):_efficientHash(b,a);}
Coinbase与支付服务商Primer合作,允许商家将加密货币作为标准支付方式:金色财经报道,Coinbase 旗下的商业平台 Coinbase Commerce 与支付服务商 Primer 合作,使用 Primer 的商家可以将加密货币支付添加到他们的结账页面作为标准支付方式。
据悉,Primer 是一个无代码自动化支付平台,此前与比特币基础设施支付公司 OpenNode 合作,允许商家在全球范围内实现一键式比特币支付方式。 (finextra)[2022/10/20 16:31:37]
总结来说就是把相对小的数值放到前面去这么来排序计算hash值。这个地方在自己动手实际运算的时候可能会有些许困惑。在实际的项目中一般只需要把计算的最后结果的根hash值存储到合约中,如果大量的地址都需要存到合约中的话会消耗大量的gas费。经过merkle树计算之后,大大的减少了需要存储的数据。通过一段foundry的setUp演示下如何计算和存储roothash值:
MerchDAO公布MRCH代币智能合约地址,今晚将上线Uniswap:MerchDAO公布MRCH代币智能合约,地址为0xbed4ab0019ff361d83ddeb74883dac8a70f5ea1e。根据官方此前公布的推文,北京时间3月27日20点开启Poolz IDO,21:30将上线Uniswap。
根据官网介绍,MerchDAO利用去中心化治理和NFT技术,为用户的稀有和独特物品提供市场。[2021/3/27 19:23:07]
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字节,因此在叶子节点和父节点之间可能会发生哈希碰撞。
随着加密货币和区块链技术的不断发展,目前NFT已经成为了一个备受关注的热点。NFT钱包是一种加密货币钱包,它可以帮助用户管理和交易NFT,以及保证用户的资产安全.
1900/1/1 0:00:00在技术日益先进的时代,创新继续创造一个无害环境的在线平台,为用户带来好处。引起关注的最新平台之一是OKBBS,这是一种基于WEB3的生态应用,它依赖于Pi网络作为基础.
1900/1/1 0:00:00Pi网络,这是一个全新的加密货币现象,正在全球范围内引发关注。通过其独特的分布式账本技术,Pi正在改变我们对加密货币的认知,将区块链的潜力带入日常生活中.
1900/1/1 0:00:00自成立以来,PiNetwork一直备受关注,其独特的挖矿方式和社区驱动的理念吸引了大量用户。去中心化交易协议 0x API 现已上线 Optimism:1月12日消息,去中心化交易协议 0x A.
1900/1/1 0:00:00孙正义,最近因为自行上架Pi币IOU而引发了一场争议。在他的辩护中,他强调了Pi币IOU的价值和潜力,并表示这是一个值得投资的机会.
1900/1/1 0:00:00来源/LongHash Tezos上新升级的“Delphi”大大提升了其区块链对DeFi应用程序的吸引力.
1900/1/1 0:00:00