什么是Merkle樹
定義
MerkleTree,也叫默克爾樹或哈希樹,是區塊鏈的底層加密技術,被以太坊區塊鏈廣泛采用。MerkleTree是一種自下而上構建的加密樹,每個葉子是對應數據的哈希,而每個非葉子為它的2個子節點的哈希。
如何生成Merkle樹的數據
在solidity中我們通過keccak256算法計算hash值:
keccak256(abi.encodePacked(toHashValue)e.g.:hash前0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2hash后0x999bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdb
Rollup橋接方案Beamer完成新一輪融資,CoinIX參投:12月1日消息,Rollup橋接方案Beamer宣布完成新一輪融資,具體金額暫未披露,專注于數字資產和區塊鏈技術投資的德國風投coinIXGmbH&Co.KGaA參投。
據悉,Beamer橋接解決方案支持用戶將Token從以太坊Rollup橋接到其他協議,以更低成本轉移Token。Beamer已于10月啟動主網,其使命是創建以太坊L2生態系統中最快和最安全的跨鏈Rollup橋。(cryptonewsbtc)[2022/12/1 21:15:05]
在對葉子節點的值進行hash運算之后,再把相鄰的節點再進行hash運算,直到只剩下一個根節點。假設存在兩個相鄰的節點A和B,那么在進行hash運算的時候到地址是hash(A+B)呢?還是hash(B+A)呢?其實這是由A和B的大小決定的,在openzeppelin對應的merkle代碼中我們可以找到這么一段代碼:
Mercury宣布完成750 萬美元種子輪融資:金色財經報道,體育粉絲體驗平臺Mercury完成750萬美元種子輪融資,Multicoin Capital領投,North Island Ventures、Crosslink Capital 和 Brevan Howard Digital等參投。
新資金將用于擴大他們與新學校的合作伙伴關系,并繼續增加他們的學生運動員名冊。還將增加領導層的招聘。Mercury最近聘請了體育媒體名人Adam Breneman擔任NIL和媒體副總裁。將與頂尖運動員合作,在平臺以及Mercury的Next Up播客系列中培養他們的品牌。[2022/10/20 16:32:42]
function_hashPair(bytes32a,bytes32b)privatepurereturns(bytes32){returna<b?_efficientHash(a,b):_efficientHash(b,a);}
Avalanche子網Swimmer Network與LayerZero Labs達成合作關系:5月16日消息,Avalanche 子網 Swimmer Network 與 LayerZero Labs 達成橋接合作伙伴關系,鏈游 Crabada(CRA)、Treasure Under Sea(TUS)和 Crabada Amulets(CRAM)上受 Layer Zero 支持的 ERC-20 資產和 NFT 將能整合到 Swimmer Network。
此外,Avalanche 首席執行官 Emin Gun Sirer 表示,該子網上線后,Avalanche C-Chain 費用降至 25.1 nAVAX,創下歷史新低。[2022/5/16 3:18:20]
總結來說就是把相對小的數值放到前面去這么來排序計算hash值。這個地方在自己動手實際運算的時候可能會有些許困惑。在實際的項目中一般只需要把計算的最后結果的根hash值存儲到合約中,如果大量的地址都需要存到合約中的話會消耗大量的gas費。經過merkle樹計算之后,大大的減少了需要存儲的數據。通過一段foundry的setUp演示下如何計算和存儲roothash值:
社交投資平臺 Zignaly與Global Emerging Markets簽署至多5000萬美元融資協議:3月3日消息,社交投資平臺 Zignaly 宣布與 GEM Global Yield LLC SCS 簽署一項至多 5000 萬美元的融資協議。據悉,GEM Global Yield LLC SCS 來自投資集團 Global Emerging Markets (GEM)。Zignaly 首席執行官 Bartolome Bordallo 表示,該筆融資將用于新產品的開發和推動 Zignaly 平臺的全球推廣。(CoinDesk)[2022/3/3 13:35:40]
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字節,因此在葉子節點和父節點之間可能會發生哈希碰撞。
Tags:區塊鏈以太坊NFT區塊鏈工程專業學什么區塊鏈存證怎么弄區塊鏈技術發展現狀和趨勢以太坊幣是什么幣NFT價格NFT幣
這看似是一個不言自明的問題。比特幣,不就是加密貨幣嗎?那么,加密貨幣又是什么呢?顯然,這已經不是一句話兩句話能夠解答的了.
1900/1/1 0:00:001月4日10:54,金色財經數據顯示,BTC短線上漲,突破33500美元關口,BTC行情持續創新高,近7天上漲24.51%,近30天上漲71.92%.
1900/1/1 0:00:00巴基斯坦開伯爾·普赫圖赫瓦省成立了一個聯邦委員會,以制定新的加密貨幣政策,包括政府支持的加密貨幣挖礦.
1900/1/1 0:00:00小探本期為大家帶來的內容主題是“從孤島到協同:Web3原生數據管道的意義”歡迎大家關注小探,小探每天都會給您獻上關于幣圈的優質內容哦.
1900/1/1 0:00:00在數字世界的盡頭,知識的海洋中,有一位網友,他身處于無盡的虛擬世界,卻對現實世界中的一項重大進展感到深深的無奈.
1900/1/1 0:00:00在數字世界的遼闊海洋中,有一群冒險家在一顆被稱為PiNetwork的島嶼上留下了他們的足跡。香港東驥基金總經理:建議監管機構考慮限制散戶投資虛擬貨幣最多只占其資產30%:金色財經報道,四川省內江.
1900/1/1 0:00:00