以太坊中的Merkle Patricia Tree(1):基本概念

1. Trie/Radix樹(shù)

Trie樹(shù),又稱 前綴樹(shù)或字典樹(shù) ,是一種有序樹(shù),用于保存關(guān)聯(lián)數(shù)組. 其中的鍵通常是字符串 。與二叉查找樹(shù)不同, 鍵不是直接保存在節(jié)點(diǎn)中,而是由節(jié)點(diǎn)在樹(shù)中的位置決定 。一個(gè)節(jié)點(diǎn)的所有子孫都有相同的前綴,也就是這個(gè)節(jié)點(diǎn)對(duì)應(yīng)的字符串,而 根節(jié)點(diǎn)對(duì)應(yīng)空字符串 。

一般情況下,不是所有的節(jié)點(diǎn)都有對(duì)應(yīng)的值, 只有葉子節(jié)點(diǎn)和部分內(nèi)部節(jié)點(diǎn)所對(duì)應(yīng)的鍵才有相關(guān)的值 。 實(shí)際上trie每個(gè)節(jié)點(diǎn)是一個(gè) 確定長(zhǎng)度的數(shù)組 ,數(shù)組中每個(gè)節(jié)點(diǎn)的值是一個(gè)指向子節(jié)點(diǎn)的指針,最后有個(gè)標(biāo)志域, 標(biāo)識(shí)這個(gè)位置為止是否是一個(gè)完整的字符串.

常見(jiàn)的用來(lái)存英文單詞的trie每個(gè)節(jié)點(diǎn)是一個(gè) 長(zhǎng)度為27的指針數(shù)組,index0-25代表a-z字符,26為標(biāo)志域 。如圖:

image.png

2. Patricia 帕特里夏樹(shù)

Patricia樹(shù),或稱Patricia trie,或crit bit tree,壓縮前綴樹(shù),是一種更節(jié)省空間的Trie。對(duì)于基數(shù)樹(shù)的每個(gè)節(jié)點(diǎn),如果 該節(jié)點(diǎn)是唯一的兒子的話,就和父節(jié)點(diǎn)合并 。


image.png

3. Merkle 默克爾樹(shù)

  1. MT是一種樹(shù),大多數(shù)是 二叉樹(shù) ,也可以多叉樹(shù),無(wú)論是幾叉樹(shù),它都具有樹(shù)結(jié)構(gòu)的所有特點(diǎn);
  2. Merkle Tree的 葉子節(jié)點(diǎn)的value是數(shù)據(jù)集合的單元數(shù)據(jù)或者單元數(shù)據(jù)HASH
  3. 非葉子節(jié)點(diǎn)的value是根據(jù)它下面所有的葉子節(jié)點(diǎn)值 ,然后按照Hash算法計(jì)算而得出的。

4. MPT(Merkle Patricia Trees)

知道了Merkle Tree,知道了Patricia Tree,顧名思義,MPT(Merkle Patricia Tree)就是這兩者混合后的產(chǎn)物。

在以太坊中, 對(duì)于交易樹(shù)來(lái)說(shuō),二叉Merkle Tree是非常好的數(shù)據(jù)結(jié)構(gòu)。因?yàn)橐坏?shù)已經(jīng)建立,花多少時(shí)間來(lái)編輯這棵樹(shù)并不重要,它就會(huì) 永遠(yuǎn)存在并且不會(huì)改變 。

但是,對(duì)于狀態(tài)樹(shù),情況會(huì)更復(fù)雜些。

  • 以太坊中的狀態(tài)樹(shù)基本上包含了一個(gè) 鍵值映射 ,其中的 鍵是地址 ,而值包括賬戶的 聲明、余額、隨機(jī)數(shù)nonce、代碼以及每一個(gè)賬戶的存儲(chǔ) (其中存儲(chǔ)本身就是一顆樹(shù))。
  • 狀態(tài)樹(shù)需要經(jīng)常地進(jìn)行更新:
    • 賬戶余額和賬戶的隨機(jī)數(shù)nonce經(jīng)常會(huì)更變
    • 新的賬戶會(huì)頻繁地插入,存儲(chǔ)的鍵( key)也會(huì)經(jīng)常被插入以及刪除。

我們需要這樣的數(shù)據(jù)結(jié)構(gòu):

  1. 它能 在一次插入、更新、刪除操作后快速計(jì)算到樹(shù)根 ,而不需要重新計(jì)算整個(gè)樹(shù)的Hash。
  2. 樹(shù)的 深度是有限制 的,即使考慮攻擊者會(huì)故意地制造一些交易,使得這顆樹(shù)盡可能地深。不然,攻擊者可以通過(guò)操縱樹(shù)的深度,執(zhí)行拒絕服務(wù)攻擊(DOS attack),使得更新變得極其緩慢。
  • 樹(shù)的根只取決于數(shù)據(jù) ,和其中的更新順序無(wú)關(guān)。換個(gè)順序進(jìn)行更新,甚至重新從頭計(jì)算樹(shù),并不會(huì)改變根。

MPT是最接近同時(shí)滿足上面的性質(zhì)的的數(shù)據(jù)結(jié)構(gòu)。MPT的工作原理的最簡(jiǎn)單的解釋是:

  • 值通過(guò)鍵來(lái)存儲(chǔ)
  • 鍵被編碼到搜索樹(shù)必須要經(jīng)過(guò)的路徑中
  • 每個(gè)節(jié)點(diǎn)有 16個(gè)孩子 ,因此路徑由16進(jìn)制的編碼決定:例如,鍵‘dog’的16進(jìn)制編碼是6 4 6 15 6 7,所以從root開(kāi)始到第六個(gè)分支,然后到第四個(gè),再到第六個(gè),再到第十五個(gè),這樣依次進(jìn)行到達(dá)樹(shù)的葉子。
  • 當(dāng)樹(shù)稀少時(shí)需要一些額外的優(yōu)化。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簡(jiǎn)介 不管你們知不知道以太坊(Ethereum blockchain)是什么,但是你們大概都聽(tīng)說(shuō)過(guò)以太坊。最近在新...
    Lilymoana閱讀 3,995評(píng)論 1 22
  • Merkle Patricia Trie是完全確定性的,這意味著具有相同(鍵,值)綁定的Patricia trie...
    shi_qinfeng閱讀 1,961評(píng)論 0 2
  • 【中文版】以太坊白皮書(shū) 翻譯:少平、 Seven當(dāng)中本聰在 2009 年 1 月啟動(dòng)比特幣區(qū)塊鏈時(shí),他同時(shí)向世界引...
    __Seven__閱讀 4,446評(píng)論 0 10
  • 今天的文章對(duì)我很有啟發(fā),我就是不知道如何發(fā)朋友圈的人,哈哈。 其實(shí)是一直發(fā)現(xiàn)自己沒(méi)有做喜歡打開(kāi)朋友圈看別人發(fā)的動(dòng)態(tài)...
    蕭雅琴子閱讀 177評(píng)論 0 1
  • 平常要多閱讀歷代傳承祖師的教言和傳記, 這會(huì)給我們提供精進(jìn)修法的動(dòng)力。 知道歷代傳承祖師在成辦解脫的路上, 是如何...
    曾路閱讀 243評(píng)論 0 0

友情鏈接更多精彩內(nèi)容