摘要:一引文設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu),組合了許多技術(shù)點(diǎn),如,,,,,,等。采用樹,其中的數(shù)據(jù)可快速證明,可以快速證明每一份狀態(tài)機(jī)是否一致。四是在狀態(tài)機(jī)的轉(zhuǎn)化過程被啟動(dòng)運(yùn)行,也就是這一步驟。是指發(fā)布該資產(chǎn)時(shí)需要執(zhí)行的程序。的邏輯結(jié)構(gòu)則是用二叉樹來管理。
一、引文
設(shè)計(jì)Bytom 數(shù)據(jù)結(jié)構(gòu),組合了許多技術(shù)點(diǎn),如 patricia tree,utxo, bvm, account model,protobuf,sql,memcache 等。本文會(huì)對一些技術(shù)點(diǎn)做以下兩點(diǎn)分析。
Bytom 為什么要采用該技術(shù)點(diǎn)?
Bytom 如何應(yīng)用該技術(shù)點(diǎn)?
最后介紹綜合這些技術(shù)點(diǎn)如何實(shí)現(xiàn)Bytom。
[patricial tree](http://www.allisons.org/ll/AlgDS/Tree/PATRICIA/)
二、為什么要采用PAT樹??PAT樹具有[基數(shù)樹](https://en.wikipedia.org/wiki... 的特點(diǎn),內(nèi)容可快速追蹤。
?PAT樹具有[merkle樹](https://en.wikipedia.org/wiki... 的特點(diǎn),數(shù)據(jù)可快速證明。
在分布式系統(tǒng)中,一致性和有效性是十分關(guān)鍵的點(diǎn)。bytom采用PAT樹,其中的數(shù)據(jù)可快速證明,可以快速證明每一份狀態(tài)機(jī)是否一致。內(nèi)容可快速追蹤,可以使bytom在每一個(gè)快照狀態(tài)下,快速查找其數(shù)據(jù),并檢驗(yàn)數(shù)據(jù)的有效性。
Bytom 如何用PAT樹?
Ethereum的PAT樹是16叉基數(shù)樹,分兩層,第一層管理的是所有的賬戶,第二層管理是各賬戶的存儲(chǔ)內(nèi)容。
Bytom 的PAT樹與Ethereum 不同?
?Bytom 的PAT樹是二叉基數(shù)樹。
?Bytom的PAT樹是用來管理未花費(fèi)的outputs。
三、UTXO為什么要使用UTXO?
UTXO誕生于比特幣,和現(xiàn)實(shí)世界的RMB一樣,從央行誕生的那一刻起,他流轉(zhuǎn)無數(shù)人的賬戶,但他的價(jià)值面額始終和原來一樣,這樣以幣為中心,而不是以人為中心,資產(chǎn)便于監(jiān)管和統(tǒng)計(jì)。Bytom 就是用于資產(chǎn)的發(fā)布和管理的,所以,UTXO的這種以資產(chǎn)為中心的設(shè)計(jì)模式,是很適合Bytom上面的資產(chǎn)管理。
怎么使用UTXO?
相比比特幣的UTXO, bytom的UTXO多了三個(gè)字段
assertid, 因?yàn)閎ytom是一個(gè)多資產(chǎn)發(fā)布與管理的平臺(tái),所以使用該字段來唯一確定各種資產(chǎn)。
accountid, 這是便于各賬戶對utxo的索引和管理,bytom 相比bitcoin,引入了賬戶模型,后面會(huì)介紹。
program, 擁有該utxo的賬戶可以用Ivy語言編寫自己想要的程序放在該字段,以便在交易時(shí),圖靈完備的BVM會(huì)執(zhí)行該程序。
四、BVM
BVM是在狀態(tài)機(jī)的轉(zhuǎn)化過程被啟動(dòng)運(yùn)行,也就是excute(transaction)這一步驟。
為什么需要使用BVM?
bitcoin 中的非圖靈完備棧式腳本語言,所表達(dá)的功能極少,很難實(shí)現(xiàn)一些稍微復(fù)雜的功能,如verify_spv(跨鏈錨定驗(yàn)證的功能,如btc_relay),再如簡單的去實(shí)現(xiàn)multi_lock(M人加密,只要收集N人私鑰就能解密,0 < N < M)功能。
ethereum中的evm能簡單的用solidity語言編寫程序?qū)崿F(xiàn)這些功能,但EVM過于復(fù)雜,它號稱超級世界計(jì)算機(jī),對于bytom這種只對資產(chǎn)有興趣的區(qū)塊鏈?zhǔn)菦]必要的。因此bytom不如基于[Chain](https://chain.com/) 公司的能用[Ivy](https://chain.com/docs/1.2/ivy-playground/docs) 高級語言編程的CVM去做自己的擴(kuò)展,靈活易用。
如何使用BVM?
用戶在發(fā)送每一筆交易時(shí),可以自己編寫自己所需要的程序,等到交易打包進(jìn)塊時(shí),BVM會(huì)去執(zhí)行該代碼,由于BVM是圖靈完備的虛擬機(jī),所以需要加入feed計(jì)價(jià)機(jī)制(feed 等同于ethereum的gas * gasprice)來解決停機(jī)問題。
為什么要采用賬戶模型?
賬戶模型易于管理相關(guān)數(shù)據(jù),是以人為中心,十分的直觀。對于BVM來說,基于賬戶代碼去執(zhí)行也十分便捷。再者我們引入了資產(chǎn)模型,類似于賬戶模型,這樣易于資產(chǎn)的監(jiān)管和查詢。
bytom怎么去實(shí)現(xiàn)賬戶模型?
bytom 中的賬戶模型也分兩類,但不同于ethereum中的個(gè)人帳戶和合約賬戶, 它是指資產(chǎn)賬戶和個(gè)人賬戶。
資產(chǎn)賬戶:
assetid 是全局唯一的資產(chǎn)識(shí)別id。
alias 是資產(chǎn)的別名,可便于記憶,如(gold, silver) 。
vmversion 是為了軟分叉時(shí),做到動(dòng)態(tài)過度。
program 是指發(fā)布該資產(chǎn)時(shí)需要執(zhí)行的程序。
initialblockhash 是指該資產(chǎn)是在哪個(gè)塊高度被登記。
signer 管理公私鑰對,以便用該資產(chǎn)的私鑰簽名,只有擁有該資產(chǎn)私鑰的人才能發(fā)布該資產(chǎn)。
definition 對該資產(chǎn)的解釋說明等。
個(gè)人賬戶:
accountid 全局唯一可識(shí)別賬戶id。
alais 帳戶名。
signer, 私鑰對,用于發(fā)送交易。
*utxos 該賬戶所有的未花費(fèi)交易的索引,便于快速管理該賬戶下資產(chǎn)。
program, 該賬戶發(fā)送交易時(shí)可插入需要的程序。
綜述UTXO的物理結(jié)構(gòu),用memcache 存著。UTXO的邏輯結(jié)構(gòu)則是用二叉PAT樹來管理。
個(gè)人賬戶 根據(jù)AccountId 能夠快速的索引其相關(guān)的utxo。資產(chǎn)賬戶根據(jù)AssetId能夠快速的管理相關(guān)的utxo。
上圖是描述bytom主要數(shù)據(jù)結(jié)構(gòu)的uml圖。
Bytom用PAT樹來組織utxo作為世界狀態(tài)樹。
賬戶模型分兩種,資產(chǎn)賬戶和個(gè)人賬戶,賬戶可以索引管理其相關(guān)的utxo。
UTXO 池會(huì)采用如memcache的內(nèi)存數(shù)據(jù)庫,落盤數(shù)據(jù)庫會(huì)選擇關(guān)系型數(shù)據(jù)庫,數(shù)據(jù)會(huì)選擇protobuf來序列化。
在賬戶做交易時(shí),每個(gè)賬戶都可以從世界狀態(tài)樹去查找選擇自己的utxo,并編寫自己所需的資產(chǎn)程序,將其做為TxInput。
在交易打包進(jìn)塊時(shí),驗(yàn)證節(jié)點(diǎn)會(huì)去實(shí)例化BVM,并執(zhí)行該交易中所有TxInput中的程序。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/24172.html
摘要:此時(shí)節(jié)點(diǎn)將放入到孤塊管理緩存池中,等待彼此的父塊。判斷當(dāng)前塊是否存在于區(qū)塊鏈上或是否存在孤塊緩存池中,如果存在則返回。比如當(dāng)前區(qū)塊高度為,則在孤塊緩存池中查詢是否有區(qū)塊高度為的區(qū)塊。 作者:Derek 簡介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 本章介紹bytom...
摘要:作者簡介地址地址本章介紹代碼網(wǎng)絡(luò)中地址簿作者使用操作系統(tǒng),其他平臺(tái)也大同小異介紹用于存儲(chǔ)網(wǎng)絡(luò)中保留最近的對端節(jié)點(diǎn)地址在下,默認(rèn)的地址簿路徑存儲(chǔ)在地址簿格式地址類型在中存儲(chǔ)的地址有兩種標(biāo)識(shí)新地址,不可靠地址未成功連接過。 作者:Derek 簡介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomB...
摘要:作者簡介地址地址本章介紹代碼網(wǎng)絡(luò)中端口映射作者使用操作系統(tǒng),其他平臺(tái)也大同小異介紹通用即插即用。端口映射將一個(gè)外部端口映射到一個(gè)內(nèi)網(wǎng)。 作者:Derek 簡介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 本章介紹bytom代碼P2P網(wǎng)絡(luò)中upnp端口映射 作者使用Mac...
摘要:函數(shù)總共操作有兩步從緩存中查詢值,如果查到則返回如果為從緩存中查詢到則回調(diào)回調(diào)函數(shù)。回調(diào)函數(shù)會(huì)將從磁盤上獲得到塊信息存儲(chǔ)到緩存中并返回該塊的信息。回調(diào)函數(shù)實(shí)際上調(diào)取的是下的,它會(huì)從磁盤中獲取信息并返回。 作者:Derek 簡介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc......
摘要:函數(shù)總共操作有兩步從緩存中查詢值,如果查到則返回如果為從緩存中查詢到則回調(diào)回調(diào)函數(shù)。回調(diào)函數(shù)會(huì)將從磁盤上獲得到塊信息存儲(chǔ)到緩存中并返回該塊的信息。回調(diào)函數(shù)實(shí)際上調(diào)取的是下的,它會(huì)從磁盤中獲取信息并返回。 簡介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 本章介紹Dere...
閱讀 1076·2021-11-22 14:56
閱讀 1520·2019-08-30 15:55
閱讀 3359·2019-08-30 15:45
閱讀 1655·2019-08-30 13:03
閱讀 2868·2019-08-29 18:47
閱讀 3334·2019-08-29 11:09
閱讀 2641·2019-08-26 18:36
閱讀 2615·2019-08-26 13:55