天天看點

Bytom設計結構解讀

一、引文

設計Bytom 資料結構,組合了許多技術點,如 patricia tree,utxo, bvm, account model,protobuf,sql,memcache 等。本文會對一些技術點做以下兩點分析。

  1. Bytom 為什麼要采用該技術點?
  2. Bytom 如何應用該技術點?

最後介紹綜合這些技術點如何實作Bytom。

[patricial tree](

http://www.allisons.org/ll/AlgDS/Tree/PATRICIA/

)

二、為什麼要采用PAT樹?

•PAT樹具有[基數樹](

https://en.wikipedia.org/wiki/Radix_tree)

的特點,内容可快速追蹤。

•PAT樹具有[merkle樹](

https://en.wikipedia.org/wiki/Merkle_tree)

的特點,資料可快速證明。

在分布式系統中,一緻性和有效性是十分關鍵的點。bytom采用PAT樹,其中的資料可快速證明,可以快速證明每一份狀态機是否一緻。内容可快速追蹤,可以使bytom在每一個快照狀态下,快速查找其資料,并檢驗資料的有效性。

Bytom 如何用PAT樹?

Ethereum的PAT樹是16叉基數樹,分兩層,第一層管理的是所有的賬戶,第二層管理是各賬戶的存儲内容。

Bytom 的PAT樹與Ethereum 不同?

  1.  Bytom 的PAT樹是二叉基數樹。
  2.  Bytom的PAT樹是用來管理未花費的outputs。
http://cdn.8btc.com/wp-content/uploads/2017/06/bytom_pat.png

三、UTXO

為什麼要使用UTXO?

UTXO誕生于比特币,和現實世界的RMB一樣,從央行誕生的那一刻起,他流轉無數人的賬戶,但他的價值面額始終和原來一樣,這樣以币為中心,而不是以人為中心,資産便于監管和統計。Bytom 就是用于資産的釋出和管理的,是以,UTXO的這種以資産為中心的設計模式,是很适合Bytom上面的資産管理。

http://cdn.8btc.com/wp-content/uploads/2017/06/utxo_structure1.png

怎麼使用UTXO?

相比比特币的UTXO, bytom的UTXO多了三個字段

  1. assertid, 因為bytom是一個多資産釋出與管理的平台,是以使用該字段來唯一确定各種資産。
  2. accountid, 這是便于各賬戶對utxo的索引和管理,bytom 相比bitcoin,引入了賬戶模型,後面會介紹。
  3. program, 擁有該utxo的賬戶可以用Ivy語言編寫自己想要的程式放在該字段,以便在交易時,圖靈完備的BVM會執行該程式。

四、BVM

http://cdn.8btc.com/wp-content/uploads/2017/06/snapshot.png

BVM是在狀态機的轉化過程被啟動運作,也就是excute(transaction)這一步驟。

為什麼需要使用BVM?

bitcoin 中的非圖靈完備棧式腳本語言,所表達的功能極少,很難實作一些稍微複雜的功能,如verify_spv(跨鍊錨定驗證的功能,如btc_relay),再如簡單的去實作multi_lock(M人加密,隻要收集N人私鑰就能解密,0 < N < M)功能。

ethereum中的evm能簡單的用solidity語言編寫程式實作這些功能,但EVM過于複雜,它号稱超級世界計算機,對于bytom這種隻對資産有興趣的區塊鍊是沒必要的。是以bytom不如基于[Chain](

https://chain.com/

) 公司的能用[Ivy](

https://chain.com/docs/1.2/ivy-playground/docs

) 進階語言程式設計的CVM去做自己的擴充,靈活易用。

如何使用BVM?

使用者在發送每一筆交易時,可以自己編寫自己所需要的程式,等到交易打包進塊時,BVM會去執行該代碼,由于BVM是圖靈完備的虛拟機,是以需要加入feed計價機制(feed 等同于ethereum的gas * gasprice)來解決停機問題。

五、賬戶模型

為什麼要采用賬戶模型?

賬戶模型易于管理相關資料,是以人為中心,十分的直覺。對于BVM來說,基于賬戶代碼去執行也十分便捷。再者我們引入了資産模型,類似于賬戶模型,這樣易于資産的監管和查詢。

bytom怎麼去實作賬戶模型?

bytom 中的賬戶模型也分兩類,但不同于ethereum中的個人帳戶和合約賬戶, 它是指資産賬戶和個人賬戶。

資産賬戶:

  1. assetid 是全局唯一的資産識别id。
  2. alias 是資産的别名,可便于記憶,如(gold, silver) 。
  3. vmversion 是為了軟分叉時,做到動态過度。
  4. program 是指釋出該資産時需要執行的程式。
  5. initialblockhash 是指該資産是在哪個塊高度被登記。
  6. signer 管理公私鑰對,以便用該資産的私鑰簽名,隻有擁有該資産私鑰的人才能釋出該資産。
  7. definition 對該資産的解釋說明等。

個人賬戶:

http://cdn.8btc.com/wp-content/uploads/2017/06/bytom_account.png
  1. accountid 全局唯一可識别賬戶id。
  2. alais 帳戶名。
  3. signer, 私鑰對,用于發送交易。
  4. *utxos 該賬戶所有的未花費交易的索引,便于快速管理該賬戶下資産。
  5. program, 該賬戶發送交易時可插入需要的程式。

綜述

UTXO的實體結構,用memcache 存着。UTXO的邏輯結構則是用二叉PAT樹來管理。

個人賬戶 根據AccountId 能夠快速的索引其相關的utxo。資産賬戶根據AssetId能夠快速的管理相關的utxo。

上圖是描述bytom主要資料結構的uml圖。

Bytom用PAT樹來組織utxo作為世界狀态樹。

賬戶模型分兩種,資産賬戶和個人賬戶,賬戶可以索引管理其相關的utxo。

UTXO 池會采用如memcache的記憶體資料庫,落盤資料庫會選擇關系型資料庫,資料會選擇protobuf來序列化。

在賬戶做交易時,每個賬戶都可以從世界狀态樹去查找選擇自己的utxo,并編寫自己所需的資産程式,将其做為TxInput。

在交易打包進塊時,驗證節點會去執行個體化BVM,并執行該交易中所有TxInput中的程式。

繼續閱讀