買以太坊 買以太坊
Ctrl+D 買以太坊
ads
首頁 > UNI > Info

ODE:以太坊 Merkle Patricia Trie 是如何工作的_TRI

Author:

Time:1900/1/1 0:00:00

譯文出自:登鏈翻譯計劃

譯者:aisiji

校對:Tiny熊

介紹

MerklePatriciaTrie是以太坊存儲層的關鍵數據結構之一。我希望了解它到底是如何工作的,于是遍尋資料進行了深入研究,實現了這個算法。

在這篇博文里,我將分享我所學到的東西。解釋MerklePatriciaTrie究竟是如何工作的,并展示一個Merkle證明生成和驗證的demo。

算法的源代碼和本博文中使用的例子都是開源的:https://github

funcTestTransactionRootAndProof(t*testing.T){trie:=NewTrie()txs:=TransactionsJSON(t)fori,tx:=rangetxs{//keyistheencodingoftheindexastheunsignedintegertypekey,err:=rlp.EncodeToBytes(uint(i))require.NoError(t,err)transaction:=FromEthTransaction(tx)//valueistheRLPencodingofatransactionrlp,err:=transaction.GetRLP()require.NoError(t,err)trie.Put(key,rlp。//thetransactionrootforblock10467135//https://api.etherscan.io/api?module=proxy&action;=eth_getBlockByNumber&tag;=0x9fb73f&boolean;=true&apikey;=YourApiKeyTokentransactionRoot,err:=hex.DecodeString("bb345e208bda953c908027a45aa443d6cab6b8d2fd64e83ec52f1008ddeafa58")require.NoError(t,err)t.Run("merkleroothashshouldmatchwith10467135'stransactionRoot",func(t*testing.T){//transactionrootshouldmatchwithblock10467135'stransactionRootrequire.Equal(t,transactionRoot,trie.Hash()。)t.Run("amerkleproofforacertaintransactioncanbeverifiedbytheofficaltrieimplementation",func(t*testing.T){key,err:=rlp.EncodeToBytes(uint(30))require.NoError(t,err)proof,found:=trie.Prove(key)require.Equal(t,true,found)txRLP,err:=VerifyProof(transactionRoot,key,proof)require.NoError(t,err)//verifythatiftheverificationpasses,itreturnstheRLPencodedtransactionrlp,err:=FromEthTransaction(txs).GetRLP()require.NoError(t,err)require.Equal(t,rlp,txRLP。。

以太坊處于虧損狀態時的交易數量是盈利時的3.4倍,創3.5年以來新高:5月7日消息,Santiment發推稱,周五,以太坊處于虧損狀態時網絡上的交易數量是其處于盈利狀態時的約3.4倍。這是自2018年11月18日(或3.5年前)以來,ETH的投降交易比率(capitulation trading ratio)最高的一天。[2022/5/7 2:56:44]

上述測試案例通過了,并且表明如果我們將10467135區塊的所有193個交易加入到trie中,那么trie的哈希值與該區塊中公布的transactionRoot相同。而由我們的trie生成的索引為30的交易的merkle證明,被官方的golangtrie認為是有效的實現。

深入MerklePatriciaTrie-Trie節點

現在,讓我們來看看Trie的內部實現。

在內部,trie有4種類型的節點。空節點(EmptyNode)、葉節點(LeafNode)、分支節點(BranchNode)和擴展節點(ExtensionNode)。每個節點將被編碼并作為鍵值對存儲在鍵值存儲中。

讓我們以主網的區塊10593417為例,來說明一個TransactionTrie是如何建立的,以及它是如何存儲的。

Block10593417只有4個Roothash交易。0xab41f886be23cd786d8a69a72b0f988ea72e0b2e03970d0798f5e03763a442cc.因此,為了將4個交易存儲到一個trie,我們實際上是以十六進制字符串的形式存儲以下鍵值對。

(80,f8ab81a5852e90edd00083012bc294a3bed4e1c75d00fa6f4e5e6922db7261b5e9acd280b844a9059cbb0000000000000000000000008bda8b9823b8490e8cf220dc7b91d97da1c54e250000000000000000000000000000000000000000000000056bc75e2d6310000026a06c89b57113cf7da8aed7911310e03d49be5e40de0bd73af4c9c54726c478691ba056223f039fab98d47c71f84190cf285ce8fc7d9181d6769387e5efd0a970e2e9)(01,f8ab81a6852e90edd00083012bc294a3bed4e1c75d00fa6f4e5e6922db7261b5e9acd280b844a9059cbb0000000000000000000000008bda8b9823b8490e8cf220dc7b91d97da1c54e250000000000000000000000000000000000000000000000056bc75e2d6310000026a0d77c66153a661ecc986611dffda129e14528435ed3fd244c3afb0d434e9fd1c1a05ab202908bf6cbc9f57c595e6ef3229bce80a15cdf67487873e57cc7f5ad7c8a)(02,f86d8229f185199c82cc008252089488e9a2d38e66057e18545ce03b3ae9ce4fc360538702ce7de1537c008025a096e7a1d9683b205f697b4073a3e2f0d0ad42e708f03e899c61ed6a894a7f916aa05da238fbb96d41a4b5ec0338c86cfcb627d0aa8e556f21528e62f31c32f7e672)(03,f86f826b2585199c82cc0083015f9094e955ede0a3dbf651e2891356ecd0509c1edb8d9c8801051fdc4efdc0008025a02190f26e70a82d7f66354a13cda79b6af1aa808db768a787aeb348d425d7d0b3a06a82bd0518bc9b69dc551e20d772a1b06222edfc5d39b6973e4f4dc46ed8b196)

以太坊未確認交易為226,795筆:金色財經消息,據OKLink數據顯示,以太坊未確認交易226,795筆,當前全網算力為749.37TH/s,全網難度為10.18P,當前持幣地址為67,053,971個,同比增加189,383個,24h鏈上交易量為2,150,995ETH,當前平均出塊時間為13s。[2021/11/3 6:27:47]

80是無符號整數0的RLP編碼結果的十六進制形式:RLP(uint(0))。01是RLP(uint(1))的結果,以此類推。

密鑰80的值是第一個交易的RLP編碼的結果。鍵值01是第二個交易的值,以此類推。

因此,我們將把上述4個鍵值對添加到trie中,讓我們看看添加每一個鍵值對時,trie的內部結構如何變化。

為了更直觀,我將用一些圖來解釋它的工作原理。你也可以通過在測試案例中添加日志來檢查每一步的狀態。

EmptyTrie

trie結構只包含一個根字段,指向一個根節點。而節點類型是一個接口,它可以是4種類型的節點之一。

typeTriestruct{rootNode}

當一個trie被創建時,根節點指向一個EmptyNode。

添加第一筆交易

當添加第一個交易的鍵值對時,一個葉節點(LeafNode)被創建,交易數據存儲在其中。根節點被更新以指向該葉節點(LeafNode)。

添加第二筆交易

當添加第2個交易時,根部的葉節點(LeafNode)將變成一個分支節點(BranchNode),有兩個分支指向2個葉節點(LeafNode)。左邊的葉節點(LeafNode)持有剩余的nibbles-1,以及第2個交易的值。

以太坊上破2900美元/枚,日內漲18.80%:行情顯示,加密貨幣以太坊上破2900美元/枚,日內漲18.80%。[2021/5/20 22:26:13]

而現在根節點正指向新的分支節點(BranchNode)。

添加第三筆交易

添加第3個交易將使左側的葉節點(LeafNode)變成一個分支節點(BranchNode),與添加第2個交易的過程類似。雖然根節點沒有改變,但它的根哈希值已經改變了,因為它的0分支指向了不同的節點,有不同的哈希值。

添加第四筆交易

添加最后一個交易與添加第三個交易類似。現在我們可以驗證根哈希值是否與區塊中包含的transactionRoot相同。

獲得第三筆交易的默克爾證明

第3筆交易的Merkle證明只是通往存儲第3筆交易值的葉節點(LeafNode)的路徑。在驗證證明時,可以從根哈希值開始,解碼Node,匹配nibbles,然后重復,直到找到匹配所有剩余nibbles的Node。如果找到了,那么這個值就是與密鑰配對的那個值;如果沒有找到,那么Merkle證明就無效了。

更新trie的規則

在上面的例子中,我們已經建立了一個有3種類型節點的trie。空節點、葉節點和分支節點。然而,我們沒有機會使用擴展節點(ExtensionNode)。請找到其他使用ExtensionNode的測試案例。

一般來說,該規則是:

當停在一個空節點時,用一個新的葉子節點替換它的剩余路徑。

當停在一個葉節點(LeafNode)時,將其轉換為一個ExtensionNode并添加一個新的分支和一個新的葉節點(LeafNode)。

美國猶他州普羅沃利用以太坊區塊鏈為結婚證副本加密:美國猶他州普羅沃與內華達州區塊鏈公司Titan Seal合作,將數字文檔認證技術用于結婚證認證副本。政府將通過電子郵件將認證副本通過PDF文件發送給需要辦理該證書的人,用戶可通過電子郵件或其他方式將其發送給其他人。文件中包含針對接收機構的驗證 審核說明。該PDF文件在發送前由Titan Seal公司用以太坊區塊鏈上的加密哈希值加以密封。該哈希數字是唯一的,只能在用戶的結婚證的認證副本中生成。(美國猶他州政府官網)[2020/5/18]

當停在一個擴展節點時,將其轉換為另一個具有較短路徑的擴展節點,并創建一個新的分支節點指向該擴展節點。

有相當多的細節,如果你有興趣,你可以閱讀源代碼。

摘要

MerklePatriciaTrie是一個存儲鍵值對的數據結構,就像一個地圖。除此之外,它還允許我們驗證數據的完整性和鍵值對的包容性。

本翻譯由CellNetwork贊助支持。

來源:https://medium.com/@chiqing/merkle-patricia-tri-explained-ae3ac6a7e123

參考資料

登鏈翻譯計劃:https://github.com/lbc-team/Pioneer

aisiji:https://learnblockchain.cn/people/3291

Tiny熊:https://learnblockchain.cn/people/15

代碼庫:https://github.com/zhangchiqing/merkle-patricia-trie

聲音 | 律師Preston Byrne:以太坊2.0過渡意味著ETH將被更安全的新系統“降級”:ampStorm律師事務所高級合伙人Preston Byrne對以太坊(ETH)主網向2.0過渡提出了質疑。他表示,如果由發行者(以太坊基金會)做出轉讓的決定,整個系統就變成了一個清晰的中心化系統。這與Ethereum (ETH)的座右銘背道而馳。這種矛盾讓Preston Byrne感到困惑,即一個規則適用于以太坊,另一個規則適用于其他所有人。Preston Byrne還對人們期待已久的過渡的意識形態方面表示關切。他表示,這個過程意味著以太坊(ETH)將被某種更快、更便宜、更安全的新系統“降級”。(U.today)[2020/1/8]

代碼庫:https://github.com/zhangchiqing/merkle-patricia-trie

主網10467135區塊:https://etherscan.io/block/10467135

transactions.json:https://github.com/zhangchiqing/merkle-patricia-trie/blob/master/transactions.json

10593417:https://etherscan.io/block/10593417

Block10593417:https://etherscan.io/block/10593417

0xab41f886be23cd786d8a69a72b0f988ea72e0b2e03970d0798f5e03763a442cc:https://api.etherscan.io/api?module=proxy&action;=eth_getBlockByNumber&tag;=0xa1a489&boolean;=true&apikey;=YourApiKeyToken

源代碼:https://github.com/zhangchiqing/merkle-patricia-trie/blob/master/trie.go#L62

CellNetwork:https://www.cellnetwork.io/?utm_souce=learnblockchain

免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews立場無關。文章內的信息、意見等均僅供參考,并非作為或被視為實際投資建議。

本文來源于非小號媒體平臺:

登鏈社區

現已在非小號資訊平臺發布105篇作品,

非小號開放平臺歡迎幣圈作者入駐

入駐指南:

/apply_guide/

本文網址:

/news/10117827.html

免責聲明:

1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險

2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場

上一篇:

簡析三個典型DAO模型,揭示DAO社區的運作機制

Tags:TRIIONODERANtribe幣最新報價OptionRoomGODE價格Kranz Token

UNI
比特幣:楚悅辰:6.28比特幣周末砸盤不破30000美元,好起來了?_serum幣變成10億

沒有人是天生的強者,現在的強者也是經過不懈的努力,數千次的跌倒才攀上成功的巔峰,人生苦短,用心生活,幸福不是平臺施舍與你,而是來自于自己的奮斗和堅持,成功不是一天兩天就能完成.

1900/1/1 0:00:00
TAL:一周融資速遞 | 一級市場活躍度持續下降;數據服務賽道熱度攀升(6.21-6.27)_TAL

經Odaily星球日報不完全統計,6月21日-6月27日當周公布的海內外區塊鏈融資事件共16起,連續兩周呈減少趨勢,已披露融資總額約4.56億美元,較上周基本持平.

1900/1/1 0:00:00
COM:關于防范冒用中幣名義進行電話詐騙的風險提示_Strips Finance

尊敬的中幣客戶: ???近期,電信詐騙頻繁發生,我們接到用戶反饋,有不法分子冒用中幣名義進行電話詐騙,以各種借口要求用戶配合安全排查,解除賬戶風險,要求用戶下載第三方APP.

1900/1/1 0:00:00
ONI:6.29 ETH早間簡評_RON

行情觀點:小時級別來看,昨日早間以太短線拉升,直逼2000一線關口,遇壓1996.43一線回調走震蕩,經過長時間的震蕩調整,多頭再次反抽突破2000一線,遇壓2083.1一線,二連陰回調.

1900/1/1 0:00:00
HIV:薩爾瓦多公民不會被迫使用政府比特幣錢包\"Chivo\"_一個比特幣要挖多久電腦

據Cointelegraph6月29日消息,薩爾瓦多總統NayibBukele發布推文澄清,公民不會被迫使用政府發放的"Chivo"比特幣錢包.

1900/1/1 0:00:00
ASH:XT關于暫停TP充值的公告(2021/6/27)_htt幣價格今日行情

尊敬的XT用戶: 因TP錢包升級維護,XT現已暫停TP充值業務。給您帶來的不便,請您諒解!感謝您對XT.COM的支持與信任.

1900/1/1 0:00:00
ads