最小可行性區(qū)塊鏈設(shè)計系列:Day 7 PatriciaTrie

前言

《最小可行性區(qū)塊鏈設(shè)計系列》的第六講(http://www.reibang.com/p/a5d0cde54990 ) 討論了網(wǎng)絡(luò)通訊的實現(xiàn)岸夯,本文繼續(xù)討論一個重要的數(shù)據(jù)結(jié)構(gòu):PatriciaTrie。

本文的代碼地址:(https://github.com/qikh/mini-block-chain/commit/442dbec3794c6e1a2da35fb9895f502e7acb9d8e) (開發(fā)語言為Kotlin朋腋,更簡潔的Java)

正文

PatriciaTrie是以太坊的一個重要的數(shù)據(jù)結(jié)構(gòu)他炊,也被成為Merkle Patricia Tree盯孙,被以太坊用來存儲賬戶的狀態(tài)(Account State)羽利。

以太坊和比特幣相比一個顯著的區(qū)別就是實現(xiàn)了用戶賬戶體系,而比特幣的賬戶余額是通過檢索賬戶相關(guān)的交易記錄(Transaction)序苏,然后把未消費余額統(tǒng)計后得到的余額手幢。從程序設(shè)計的角度來看,比特幣是無狀態(tài)(Stateless)設(shè)計忱详,而以太坊是有狀態(tài)(Statefull)設(shè)計围来。以太坊的賬戶體系更容易理解和使用,但是實現(xiàn)者需要解決一個技術(shù)問題:區(qū)塊鏈分叉匈睁。

當(dāng)比特幣網(wǎng)絡(luò)分叉發(fā)生時监透,賬戶余額的計算只需要根據(jù)新的交易記錄重新計算一遍。但是以太坊的賬戶狀態(tài)是隨著交易記錄而變化的航唆,如果出現(xiàn)網(wǎng)絡(luò)分叉(沒有分叉勝出)就意味著同一個賬戶出現(xiàn)了兩個甚至多個臨時狀態(tài)胀蛮,最長的分叉勝出后賬戶狀態(tài)才恢復(fù)為一個。一種直觀的實現(xiàn)方式可以給每個分叉分配一個臨時id糯钙,每個分叉上都保留賬戶的一個副本粪狼。但是這樣會帶來大量的臨時數(shù)據(jù)I/O,影響到系統(tǒng)的運行性能任岸。PatriciaTrie正是為了解決網(wǎng)絡(luò)分叉時的賬戶狀態(tài)問題而設(shè)計的再榄。

Trie是一種字典樹數(shù)據(jù)結(jié)構(gòu),其Key通常是字符串演闭,可以實現(xiàn)有序快速查找不跟,核心思想是以空間換區(qū)時間。中文資料可以看Merkle Patricia Tree (MPT) 樹詳解(http://ethfans.org/posts/Merkle-Patricia-Tree )米碰,英文資料可以看Understanding the ethereum trie(https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/ )和Climbing Ethereum Trie(http://ethereumj.io/blog/2015/07/05/Ethereum-Trie/

以太坊的PatriciaTrie是Radix trie的一種實現(xiàn)窝革,優(yōu)化了Trie的空間效率,并且把Trie節(jié)點的Hash值和節(jié)點數(shù)據(jù)存入到Key-Value數(shù)據(jù)庫(leveldb)中吕座,通過根節(jié)點Hash的切換可以實現(xiàn)狀態(tài)樹的切換(對應(yīng)區(qū)塊鏈的分叉功能)虐译,Vitalik Buterin在https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/ 一文中對PatriciaTrie的設(shè)計思路進行了說明。最終的PatriciaTrie實現(xiàn)不但具備快速檢索功能吴趴,還具備了不同版本的狀態(tài)轉(zhuǎn)換功能漆诽,通俗理解可以類比Git的版本實現(xiàn)或MacOS的Timemachine功能。

MiniBlockChain在實現(xiàn)PatriciaTrie時參考了
Understanding the ethereum trie一文的Python代碼(https://github.com/ebuchman/understanding_ethereum_trie )和EthereumJ的代碼锣枝。Python的代碼相比較EthereumJ的代碼結(jié)構(gòu)更加清晰合理厢拭,尤其是遞歸實現(xiàn)部分。Python的實現(xiàn)有三種節(jié)點類型:Leaf撇叁、Branch和Extension供鸠,節(jié)點插入、刪除和整理的邏輯比較復(fù)雜陨闹。EthereumJ只有Leaf和Branch節(jié)點楞捂,實現(xiàn)邏輯簡單很多薄坏,但是代碼結(jié)構(gòu)比較混亂。

大家可以對照著上文提到的中英文資料和代碼實現(xiàn)來理解PatriciaTrie的實現(xiàn)寨闹。

下文我們會繼續(xù)探討適合區(qū)塊鏈的智能合約語言設(shè)計胶坠。

注:

區(qū)塊鏈的企業(yè)端應(yīng)用場景(聯(lián)盟鏈和私鏈)通常不需要電子貨幣功能,也不需要代幣的激勵功能繁堡,因此區(qū)塊鏈層面的賬戶體系可有可無沈善。無狀態(tài)(Stateless)設(shè)計一方面可以降低空間占用,另一方面也降低了實現(xiàn)難度椭蹄,更加適合面向企業(yè)端的區(qū)塊鏈產(chǎn)品矮瘟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市塑娇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劫侧,老刑警劉巖埋酬,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異烧栋,居然都是意外死亡写妥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門审姓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珍特,“玉大人,你說我怎么就攤上這事魔吐≡玻” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵酬姆,是天一觀的道長嗜桌。 經(jīng)常有香客問我,道長辞色,這世上最難降的妖魔是什么骨宠? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮相满,結(jié)果婚禮上层亿,老公的妹妹穿的比我還像新娘。我一直安慰自己立美,他們只是感情好匿又,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悯辙,像睡著了一般琳省。 火紅的嫁衣襯著肌膚如雪迎吵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天针贬,我揣著相機與錄音击费,去河邊找鬼。 笑死桦他,一個胖子當(dāng)著我的面吹牛蔫巩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播快压,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼圆仔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蔫劣?” 一聲冷哼從身側(cè)響起坪郭,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脉幢,沒想到半個月后歪沃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡嫌松,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年沪曙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萎羔。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡液走,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贾陷,到底是詐尸還是另有隱情缘眶,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布髓废,位于F島的核電站磅崭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瓦哎。R本人自食惡果不足惜砸喻,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒋譬。 院中可真熱鬧割岛,春花似錦、人聲如沸犯助。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剂买。三九已至惠爽,卻和暖如春癌蓖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背婚肆。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工租副, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人较性。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓用僧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赞咙。 傳聞我的和親對象是個殘疾皇子责循,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 簡介 不管你們知不知道以太坊(Ethereum blockchain)是什么,但是你們大概都聽說過以太坊攀操。最近在新...
    Lilymoana閱讀 3,894評論 1 22
  • 前言 本系列的目的參考比特幣與以太坊的設(shè)計并加以簡化院仿,理清區(qū)塊鏈的基本概念和設(shè)計思路,一步步實現(xiàn)一個最小可行性區(qū)塊...
    大魚Whale閱讀 2,134評論 0 7
  • 溝通時對方只關(guān)心你是否關(guān)心他速和!對方并不關(guān)心你是否說了什么做了 什么意蛀? 傾聽是打開心門的技術(shù)! 你是否聽到言外之意健芭,...
    李欣霖閱讀 486評論 0 1
  • 第二章 捆綁?殺戮http://www.reibang.com/p/47a111e12449 三、捆綁?殺戮 賀...
    白妖葉甚閱讀 394評論 0 0
  • 兩天內(nèi),已經(jīng)有三個朋友跟我說最近比較煩躁省有,晚上睡不好痒留,長期失眠,心情抑郁蠢沿,感覺生活焦慮伸头。 不可否認(rèn),隨著生活節(jié)奏加...
    Vivian5125閱讀 270評論 0 0