区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > 酷币 > 正文

DDR:Merkle树的逻辑和证明_DDRT币

作者:

时间:

什么是Merkle树

定义

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

如何生成Merkle树的数据

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

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

Hidden Road敦促客户出售FTX上所有头寸并兑换为美元:11月10日消息,加密货币经纪商Hidden Road已敦促客户出售FTX上所有头寸并兑换为美元,Hidden Road表示,FTX的情况已触发客户合同中的“交易所违约”条款。Hidden Road曾于7月宣布完成5000万美元融资,FTX Ventures参投。[2022/11/10 12:41:40]

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

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

NFT竞拍协议TopBidder将于4月15日开启BID LBP:4月14日消息,基于激进市场理论的NFT竞拍协议TopBidder Protocol发推称,BID代币的LBP将在UTC时间4月15日6点(北京时间14点)左右开始,72小时后结束。BID的权重最初是90%,在整个期间逐渐下降到50%。[2021/4/14 20:19:10]

总结来说就是把相对小的数值放到前面去这么来排序计算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));}

数据:Reddit超80%用户使用FortNite的Brick代币进行转账:Reddit的r / FortNiteBR社区进行的ERC-20代币转账的数量几乎是r / CryptoCurrency社区的五倍。DappRadar的Reddit Points Tracker显示,?在Reddit推出基于以太坊的社区积分系统仅仅两周后,超过15000名用户已经执行了近18000次代币传输,超过80%的用户使用了FortNite的Brick代币。注:此前消息,Reddit正在测试以太坊ERC-20代币形式的社区积分;最先发行$MOONS和$BRICKS两种以太坊代币,这两种代币将分别发行给/r/Cryptocurrency和/r/FortniteBR两个社区的成员,目前这两个板块分别拥有100万和130万订阅者。(Cointelegraph)[2020/5/28]

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

动态 | 网页浏览器Brave添加Reddit及推特打赏功能:据CCN援引CNET的报道,网页浏览器Brave计划在加密货币支付系统中添加Reddit和推特打赏功能,这意味着,有Reddit和推特账号的Brave用户可以直接用加密货币打赏。据悉,Brave由JavaScript的发明者、Mozilla前CEO Brendan Eich创立。可屏蔽广告,并支持内容生产者和消费者进行加密货币微交易。[2018/8/10]

如何来验证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字节,因此在叶子节点和父节点之间可能会发生哈希碰撞。

标签:ASHHASHADDDDRhashpowerEthash MinerADD价格DDRT币

酷币热门资讯
比特币:92% 的加密代币在过去七天里的表现优于比特币_ASH

来源/LongHash 在一轮令人瞩目的牛市之后,比特币价格在过去一周开始出现下滑。截至本文发稿时间,比特币兑美元汇率在过去七天里已经下跌了近12%.

P2E:E4C Final Salvation来自电子竞技与P2E的融合探索_HEARN价格

说到MOBA游戏,相信不少90后都印象深刻,比如像魔兽争霸还有各种魔改地图的魔兽/DOTA类游戏,曾经风靡游戏圈,甚至衍生了电子竞技这一新兴职业,直到现在.

数字货币:Pi币需求越来越低,主要原因是供应量太大?_区块链

Pi币是一种数字货币,它的市场需求量逐渐下降,其中一个主要原因是供应量过大。这个观点在区块链社区中已经得到了广泛的讨论和认可。随着时间的推移,Pi币的供应量不断增加,导致市场需求减少.

DDR:Pi网络的“父亲”为区块链生态系统提供动力_OLA

PiNetwork作为最有前途的加密货币项目之一,吸引了全世界许多人的注意。这个项目成功的背后,有一个被认为是PiNetwork之父的关键人物——NicolasKokkalis.

PICO:最新消息:沙特阿拉伯吉达的标志性坚果店接受Pi Coin全额付款_加密货币是不是局

在加密货币世界不断变化的发展中,沙特阿拉伯壮丽的城市吉达(Jeddah)一直受到有趣消息的关注。该市一家著名的咖啡店采取了大胆的一步,接受了Pi币的全额支付,这是一种正在引起全球关注的加密货币.

PIN:从智能合约到机器学习:NFT 与 AI 技术的结合_dose币前景和未来

作者:Zoey|NFTScanResearcher 上个月,由OpenAI推出的AI对话机器人ChatGPT上线2个月活跃用户破亿,成为史上用户增长速度最快的消费级应用程序.