什么是Merkle樹
定義
MerkleTree,也叫默克爾樹或哈希樹,是區塊鏈的底層加密技術,被以太坊區塊鏈廣泛采用。MerkleTree是一種自下而上構建的加密樹,每個葉子是對應數據的哈希,而每個非葉子為它的2個子節點的哈希。
如何生成Merkle樹的數據
在solidity中我們通過keccak256算法計算hash值:
keccak256(abi.encodePacked(toHashValue)e.g.:hash前0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2hash后0x999bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdb
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運算,直到只剩下一個根節點。假設存在兩個相鄰的節點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);}
xFarmer CEO:目前正在向GameFi領域進軍:官方消息,xFarmer CEO Jody Raddack 近日接受外媒采訪表示目前正在帶領項目向GameFi領域進軍。首輪合作項目為:Legend (TLOD), PokeMine (PMD), Witch。
未來,xFarmer 將在致力于提供準確的價格數據及聚合交易的同時為了更多GameFi項目提供流量入口及NFT拍賣支持。[2021/11/1 21:15:54]
總結來說就是把相對小的數值放到前面去這么來排序計算hash值。這個地方在自己動手實際運算的時候可能會有些許困惑。在實際的項目中一般只需要把計算的最后結果的根hash值存儲到合約中,如果大量的地址都需要存到合約中的話會消耗大量的gas費。經過merkle樹計算之后,大大的減少了需要存儲的數據。通過一段foundry的setUp演示下如何計算和存儲roothash值:
動態 | Ripple合作伙伴MercuryFX計劃在2019年建立10條新的xRapid支付渠道:據Ambcrypto報道,Ripple合作伙伴MercuryFX計劃在2019年中期建立10條新的支付渠道,以支持和向其客戶提供xRapid及其原生數字資產XRP。MercuryFX首席執行官兼創始人Alastair Constance透露,這些渠道將從英國延伸到加拿大、中東、墨西哥和菲律賓。目前,他們為中東和加拿大制定的推廣計劃已經迫在眉睫了,而其他渠道可能需要更長的時間去建構。[2019/2/26]
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));}
動態 | 利比里亞總統正尋求通過新的加密貨幣Merit運作國家:根據bitcoinist消息,利比里亞總統正在尋求使用一種名為“優點”(Merit)的新加密貨幣,來支撐他對一個新國家的愿景。Vit Jedlicka希望通過一個分散的自治組織(DAO)來運作國家。DAO是一種結構,其中“通過書面計算機代碼或通過其成員的電子投票作出決定。”DAO將控制新的Merit加密貨幣向其公民分散。 這種方法是根據一個人擁有的Merit數量來權衡投票權。[2018/10/28]
為了演示方便我們值寫了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字節,因此在葉子節點和父節點之間可能會發生哈希碰撞。
Tags:區塊鏈以太坊NFT區塊鏈工程專業學什么區塊鏈存證怎么弄區塊鏈技術發展現狀和趨勢以太坊幣是什么幣NFT價格NFT幣
隨著區塊鏈和加密貨幣世界的不斷發展,新的項目不斷涌現,帶來創新的想法和解決方案。PiNetwork是一個充滿希望和雄心的項目,它以其獨特的方式挖掘和分發其原生令牌Pi,在加密社區掀起了波瀾.
1900/1/1 0:00:00最近幾個月,社交媒體上盛傳亞馬遜和特斯拉這兩大科技巨頭已經正式接受PiNetwork作為支付方式.
1900/1/1 0:00:00在沮喪和失望的浪潮中,許多用戶在該平臺上批評PiCoin遷移到PiNetwork的Mainnet的長時間延遲。一位用戶表達了他們的不滿,他指出,Pi網絡核心團隊承諾在完成知您的客戶流程.
1900/1/1 0:00:00近日,NFT數據基礎設施服務商NFTScan宣布正式成為BNBChainKickstartProgram官方NFT數據服務商。雙方將在NFT數據和生態建設方面進一步開展深度合作.
1900/1/1 0:00:00俄羅斯宣布,計劃從8月開始,對其國家貨幣盧布的數字版本進行消費者測試。該國央行透露了這一發展,強調其目的是跟上全球趨勢,應對比特幣等加密貨幣帶來的挑戰.
1900/1/1 0:00:00這個事情其實涉及到了一些更深層次的問題,尤其是涉及到創始人和早期貢獻者對于加密貨幣的控制權的問題.
1900/1/1 0:00:00