Bytom設計結構解讀

2022-07-09 17:30:16 字數 2681 閱讀 8143

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

bytom 為什麼要採用該技術點?

bytom 如何應用該技術點?

最後介紹綜合這些技術點如何實現bytom。

[patricial tree](

•pat樹具有[基數樹]( 的特點,內容可快速追蹤。

•pat樹具有[merkle樹]( 的特點,資料可快速證明。

在分布式系統中,一致性和有效性是十分關鍵的點。bytom採用pat樹,其中的資料可快速證明,可以快速證明每乙份狀態機是否一致。內容可快速追蹤,可以使bytom在每乙個快照狀態下,快速查詢其資料,並檢驗資料的有效性。

bytom 如何用pat樹?

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

bytom 的pat樹與ethereum 不同?

bytom 的pat樹是二叉基數樹。

bytom的pat樹是用來管理未花費的outputs。

為什麼要使用utxo?

utxo誕生於位元幣,和現實世界的rmb一樣,從央行誕生的那一刻起,他流轉無數人的賬戶,但他的價值面額始終和原來一樣,這樣以幣為中心,而不是以人為中心,資產便於監管和統計。bytom 就是用於資產的發布和管理的,所以,utxo的這種以資產為中心的設計模式,是很適合bytom上面的資產管理。

怎麼使用utxo?

相比位元幣的utxo, bytom的utxo多了三個字段

assertid, 因為bytom是乙個多資產發布與管理的平台,所以使用該字段來唯一確定各種資產。

accountid, 這是便於各賬戶對utxo的索引和管理,bytom 相比bitcoin,引入了賬戶模型,後面會介紹。

program, 擁有該utxo的賬戶可以用ivy語言編寫自己想要的程式放在該欄位,以便在交易時,圖靈完備的bvm會執行該程式。

bvm是在狀態機的轉化過程被啟動執行,也就是excute(transaction)這一步驟。

為什麼需要使用bvm?

bitcoin 中的非圖靈完備棧式指令碼語言,所表達的功能極少,很難實現一些稍微複雜的功能,如verify_spv(跨鏈錨定驗證的功能,如btc_relay),再如簡單的去實現multi_lock(m人加密,只要收集n人私鑰就能解密,0 < n < m)功能。

ethereum中的evm能簡單的用solidity語言編寫程式實現這些功能,但evm過於複雜,它號稱超級世界計算機,對於bytom這種只對資產有興趣的區塊鏈是沒必要的。因此bytom不如基於[chain]( 公司的能用[ivy]( 高階語言程式設計的cvm去做自己的擴充套件,靈活易用。

如何使用bvm?

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

為什麼要採用賬戶模型?

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

bytom怎麼去實現賬戶模型?

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

資產賬戶:

assetid 是全域性唯一的資產識別id。

alias 是資產的別名,可便於記憶,如(gold, silver) 。

vmversion 是為了軟分叉時,做到動態過度。

program 是指發布該資產時需要執行的程式。

initialblockhash 是指該資產是在哪個塊高度被登記。

signer 管理公私鑰對,以便用該資產的私鑰簽名,只有擁有該資產私鑰的人才能發布該資產。

definition 對該資產的解釋說明等。

個人賬戶:

accountid 全域性唯一可識別賬戶id。

alais 帳戶名。

signer, 私鑰對,用於傳送交易。

*utxos 該賬戶所有的未花費交易的索引,便於快速管理該賬戶下資產。

program, 該賬戶傳送交易時可插入需要的程式。

utxo的物理結構,用memcache 存著。utxo的邏輯結構則是用二叉pat樹來管理。

個人賬戶 根據accountid 能夠快速的索引其相關的utxo。資產賬戶根據assetid能夠快速的管理相關的utxo。

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

bytom用pat樹來組織utxo作為世界狀態樹。

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

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

在賬戶做交易時,每個賬戶都可以從世界狀態樹去查詢選擇自己的utxo,並編寫自己所需的資產程式,將其做為txinput。

在交易打包進塊時,驗證節點會去例項化bvm,並執行該交易中所有txinput中的程式。

Bytom設計結構解讀

設計bytom 資料結構,組合了許多技術點,如 patricia tree,utxo,bvm,account model,protobuf,sql,memcache 等。本文會對一些技術點做以下兩點分析。bytom 為什麼要採用該技術點?bytom 如何應用該技術點?最後介紹綜合這些技術點如何實現b...

Bytom設計結構解讀

設計bytom 資料結構,組合了許多技術點,如 patricia tree,utxo,bvm,account model,protobuf,sql,memcache 等。本文會對一些技術點做以下兩點分析。bytom 為什麼要採用該技術點?bytom 如何應用該技術點?最後介紹綜合這些技術點如何實現b...

Derek解讀Bytom原始碼 孤塊管理

本章介紹bytom 孤塊管理 作者使用macos作業系統,其他平台也大同小異 golang version 1.8 當節點收到了乙個有效的區塊,而在現有的主鏈中卻未找到它的父區塊,那麼這個區塊被認為是 孤塊 父區塊是指當前區塊的previousblockhash欄位指向上一區塊的hash值。接收到的...