什么是Merkle樹
定義
MerkleTree,也叫默克爾樹或哈希樹,是區塊鏈的底層加密技術,被以太坊區塊鏈廣泛采用。MerkleTree是一種自下而上構建的加密樹,每個葉子是對應數據的哈希,而每個非葉子為它的2個子節點的哈希。
如何生成Merkle樹的數據
在solidity中我們通過keccak256算法計算hash值:
keccak256(abi.encodePacked(toHashValue)e.g.:hash前0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2hash后0x999bf57501565dbd2fdcea36efa2b9aef8340a8901e3459f4a4c926275d36cdb
??bank和Commerzbank完成第二筆基于區塊鏈的國際貿易融資試點交易:土耳其銀行??bank和德國商業銀行Commerzbank及其公司客戶共同進行基于分布式賬本技術(DLT)的第二筆國際貿易融資試點交易。
據悉,??bank、?i?ecam、Kuraray Europe和Commerzbank在五月底完成第一筆基于區塊鏈的貿易融資交易。第二筆交易于2020年11月2日在??bank、Sanko Holding Super Film、Brückner Group和Commerzbank之間進行。此次交易支持從德國到土耳其的機器零件貿易。它與第一筆交易在商品類型、部門、交易方、金額和交易細節方面有所不同。這兩項交易都已使用Marco Polo的付款承諾解決方案成功完成。(The Paypers)[2020/11/11 12:20:44]
在對葉子節點的值進行hash運算之后,再把相鄰的節點再進行hash運算,直到只剩下一個根節點。假設存在兩個相鄰的節點A和B,那么在進行hash運算的時候到地址是hash(A+B)呢?還是hash(B+A)呢?其實這是由A和B的大小決定的,在openzeppelin對應的merkle代碼中我們可以找到這么一段代碼:
動態 | Cred聘請加州北部城市Emeryville市長Ally Medina擔任政府關系和商業發展主管:加密借貸平臺Cred已聘請加州北部城市Emeryville市長Ally Medina擔任政府關系和商業發展主管一職,Medina將負責領導該公司的公司的戰略政府關系和業務發展計劃。同時,Medina將繼續以兼職的方式履行其作為市議會成員的職責。(BusinessWire)[2019/12/3]
function_hashPair(bytes32a,bytes32b)privatepurereturns(bytes32){returna<b?_efficientHash(a,b):_efficientHash(b,a);}
總結來說就是把相對小的數值放到前面去這么來排序計算hash值。這個地方在自己動手實際運算的時候可能會有些許困惑。在實際的項目中一般只需要把計算的最后結果的根hash值存儲到合約中,如果大量的地址都需要存到合約中的話會消耗大量的gas費。經過merkle樹計算之后,大大的減少了需要存儲的數據。通過一段foundry的setUp演示下如何計算和存儲roothash值:
聲音 | Oppenheimer分析師:不應對Bakkt比特幣期貨交易量低迷感到“沮喪”:在10月1日的一份研究報告中,Oppenheimer鼓勵投資者不要對Bakkt比特幣期貨交易量低迷感到“沮喪”。 Oppenheimer高級分析師Own Lau和董事總經理Chris Kotowski寫道,一方面,其母公司洲際交易所(ICE)在固定收益分析和交易、抵押貸款和ETF中還有許多其他電子化計劃。分析師指出,雖然Bakkt的比特幣期貨在初期的交易量無法與CBOE和CME相比,但與這兩家芝加哥交易所不同,Bakkt的期貨以實物比特幣結算。[2019/10/3]
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));}
聲音 | Mercury FX首席執行官:正在擴大xRapid的商業用途:據dailyhodl報道,全球貨幣兌換服務商Mercury FX首席執行官Alastair Constance表示,正在擴大該公司對xRapid的商業用途。該公司目前從英國到墨西哥和菲律賓的xRapid支付渠道每周支付額為數萬美元,并且正在尋求讓一些最大的客戶參與其中。一旦渠道打開,交易額可能達到數十萬、數百萬、甚至數千萬美元。[2019/3/21]
為了演示方便我們值寫了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幣
過去幾天,Aave一直在穩步上漲。在過去24小時內,山寨幣上漲了近1.4%。每周漲幅沒有Aave高3%在過去的交易時段中,比特幣在28,000美元和28,500美元這兩個關鍵水平之間搖擺不定,因.
1900/1/1 0:00:00爐邊論壇:PiNetwork開創的Web3社交平臺不可否認,社交媒體的興起重塑了我們在數字時代的互動和溝通方式.
1900/1/1 0:00:00尊敬的觀眾們,大家好!今天,我想和大家分享一則與區塊鏈技術相關的消息。最近,有消息傳出,博士已經對私下交易Pi幣的賬戶進行了標記。這是一個非常重要的消息,因為它涉及到區塊鏈技術的監管問題.
1900/1/1 0:00:00在創新和技術的世界里,社區領導人往往是先驅,他們為更大的變革提供方向和靈感。LindaIndonesia和其他社區領導人在支持和促進Pi和GCV生態系統方面發揮了重要作用.
1900/1/1 0:00:00本期看點: 1.CRV清算危機中各平臺處理方案對比 2.BTC下測重要支撐 3.Bald騙局賺了590萬美元 01重要新聞 1.萊特幣完成減半.
1900/1/1 0:00:00眾所周知,PiNetwork是一項基于區塊鏈技術的去中心化應用,由斯坦福大學的一群學者創立。Huobi將考慮上線Pi Network(Pi):據官方公告,受Pi Network社區用戶強烈推薦關.
1900/1/1 0:00:00