什么是Merkle樹
定義
MerkleTree,也叫默克爾樹或哈希樹,是區塊鏈的底層加密技術,被以太坊區塊鏈廣泛采用。MerkleTree是一種自下而上構建的加密樹,每個葉子是對應數據的哈希,而每個非葉子為它的2個子節點的哈希。
如何生成Merkle樹的數據
在solidity中我們通過keccak256算法計算hash值:
keccak256(abi.encodePacked(toHashValue)e.g.:hash前0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2hash后0x999bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdb
LM Funding America出價260萬美元購買Symbiont的資產:金色財經報道,以加密挖礦和技術為基礎的專業金融公司LM Funding America, Inc.宣布其出價260萬美元收購Symbiont的資產。Symbiont目前處于第11章破產程序中,沒有人反對,預計將獲得破產法院的批準,預計拍賣可能包括其他投標,預計將于2023年5月26日舉行。LM Funding于2021年12月向Symbiont提供了200萬美元的擔保貸款,目前是Symbiont的唯一擔保債權人。
此前報道,Symbiont在2022年12月1日申請了破產保護。根據提交給紐約南區美國破產法院的文件,其資產和負債都在100萬美元到1000萬美元之間。LM Funding被列為有擔保的債權人,被拖欠200萬美元及利息和費用。[2023/5/23 15:21:25]
在對葉子節點的值進行hash運算之后,再把相鄰的節點再進行hash運算,直到只剩下一個根節點。假設存在兩個相鄰的節點A和B,那么在進行hash運算的時候到地址是hash(A+B)呢?還是hash(B+A)呢?其實這是由A和B的大小決定的,在openzeppelin對應的merkle代碼中我們可以找到這么一段代碼:
知情人士:Caroline已聘請華盛頓知名律師事務所Wilmer Hale作為代理律師:12月5日消息,加密KOL Autism Capital援引消息人士稱,Alameda Research投資部門前負責人Caroline Ellison已聘請華盛頓知名律師事務所Wilmer Hale作為代理律師。此前BAYC仿盤RR/BAYC創建者Ryder Ripps也曾聘請Wilmer Hale律師事務所代表他應對Yuga Labs的起訴。[2022/12/5 21:22:52]
function_hashPair(bytes32a,bytes32b)privatepurereturns(bytes32){returna<b?_efficientHash(a,b):_efficientHash(b,a);}
總結來說就是把相對小的數值放到前面去這么來排序計算hash值。這個地方在自己動手實際運算的時候可能會有些許困惑。在實際的項目中一般只需要把計算的最后結果的根hash值存儲到合約中,如果大量的地址都需要存到合約中的話會消耗大量的gas費。經過merkle樹計算之后,大大的減少了需要存儲的數據。通過一段foundry的setUp演示下如何計算和存儲roothash值:
OpenNode與Primer達成合作,幫助全球商家提供比特幣支付方式:金色財經消息,比特幣支付處理器和基礎設施提供商OpenNode宣布與Primer建立新的合作伙伴關系,將使世界各地的商家能夠接受比特幣作為產品和服務的支付方式。
據悉,Primer是在全球范圍內運營的商業和支付自動化平臺,提供易于使用的基礎設施來構建更好的購買體驗。通過其合作關系,使用Primer的商家現在可以通過一鍵式集成方案添加比特幣作為結賬支付選項。(Prweb)[2022/5/18 3:23:23]
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));}
Classy與Coinbase Commerce合作推出三個加密捐贈基金:金色財經報道,捐贈平臺Classy與Coinbase Commerce和圣地亞哥基金會合作推出了三個加密捐贈基金,使加密貨幣持有者更容易向非營利組織捐款。捐助者可以選擇捐贈給由圣地亞哥基金會管理的基金,該基金使三類各種有影響力的組織受益,包括食品救濟、醫院和健康以及社區支持。[2021/11/19 6:58:43]
為了演示方便我們值寫了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主網發布延遲的深層次原因。在此之前,讓我們先來了解一下PiNetwork.
1900/1/1 0:00:00最近,印度尼西亞的Pi網絡先鋒來到了中國,與當地的Pi社區成員進行了交流和分享。OpenAI:將打擊AI幻想 將用最新方法來訓練AI模型:金色財經報道, OpenAI發布的最新研究論文顯示,該公.
1900/1/1 0:00:00在數字革命的隆隆聲中,PiNetwork區塊鏈項目已經成為一個先驅,為更具包容性和用戶友好的加密采用鋪平了新的道路.
1900/1/1 0:00:00就在幾天前,加密貨幣市場在美國銀行業危機的高峰期飆升。然而,隨著全球加密貨幣市場下跌并反映在大多數代幣價格中,漲勢似乎已經停止。但盡管回調,GMX代幣繼續飆升,在過去24小時內價格上漲了14%.
1900/1/1 0:00:00在繁忙的硅谷,有一個神秘的博士,他對一個名為PiNetwork的項目充滿了信心。這位博士并非普通的技術專家,他是人工智能領域的資深研究員,擁有數十年積累的豐富經驗.
1900/1/1 0:00:00Pi網絡是一個不斷發展和創新的領域,每一位先鋒都需要保持學習的狀態,以跟上這個領域的最新進展。學習對于Pi網絡的重要性不言而喻,因為它不僅可以幫助先鋒理解更深層次的概念,還可以幫助他們更好地解決.
1900/1/1 0:00:00