官术网_书友最值得收藏!

1.3 比原鏈各模塊功能

我們將從圖1-1所示的比原鏈總架構圖中抽離出各個模塊,逐一分析及闡述。

1.3.1 用戶交互層

比原鏈的用戶交互層如圖1-2所示。

圖1-2 比原鏈架構之用戶交互層

1. bytomcli客戶端

bytomcli是用戶與bytomd進程在命令行下建立通信的RPC客戶端。在已經部署比原鏈的機器上,用戶能夠使用bytomcli可執行文件發起對比原鏈的多個管理請求。

bytomcli發送相應的請求,請求由bytomd進程接收并處理。bytomcli的一次完整生命周期結束。

2. bytom-dashboard

bytom-dashboard與bytomcli功能類似,都是發送請求與bytomd進程建立通信。用戶可通過Web頁面與bytomd進程進行更為友好的交互通信。

在已經部署比原鏈機器上,會默認開啟bytom-dashboard功能,無須再手動部署bytom-dashboard。實際上通過傳入的參數用戶可以決定是否開啟或關閉bytom-dashboard功能。如傳入--web.closed,則可以關閉該功能。項目源碼地址:https://github.com/Bytom/bytom-dashboard。

1.3.2 接口層

比原鏈接口層架構如圖1-3所示。

圖1-3 比原鏈架構之接口層

API Server是比原鏈中非常重要的一個功能,在比原鏈的架構中專門服務于bytomcli和dashboard,它的功能是接收、處理并響應與用戶和礦池相關的請求。默認啟動9888端口。API Server的總之主要功能如下:

? 接收并處理用戶或礦池發送的請求。

? 管理交易,包括打包、簽名、提交等接口操作。

? 管理本地錢包接口。

? 管理本地P2P節點信息接口。

? 管理本地礦工挖礦操作接口等。

API Server服務過程中,在監聽地址listener上接收bytomcli或bytom-dashboard的請求訪問,對每一個請求,API Server均會創建一個新的goroutine來處理請求。首先,API Server讀取請求內容,解析請求;其次,匹配相應的路由項;再次,調用路由項的Handler回調函數來處理;最后,Handler處理完請求之后給bytomcli響應該請求。

1.3.3 內核層

1.區塊和交易管理

內核層包括區塊和交易管理、智能合約、虛擬機。

比原鏈內核層架構如圖1-4所示。

圖1-4 比原鏈架構之內核層

內核層是比原鏈中最重要的功能,代碼量大約占總量的54%。

區塊鏈的基本結構是一個鏈表。鏈表由一個個區塊串聯組成。一個區塊鏈中包含成千上萬個區塊,而一個區塊內又包含一個或多個交易。在比原鏈內核層有一個重要的功能是對區塊和交易進行管理。

當網絡中的某個節點接收到一個新的有效區塊時,節點會驗證新區塊。當新的區塊并未在現有的主鏈中找到它的父區塊,這個新區塊會進入孤塊管理中等待父區塊。如果從現有的主鏈中找到了父區塊,則將其加入到主鏈。

當網絡中的某個節點接收到一筆交易時,節點會驗證交易的合法性。驗證成功后,該筆交易放入交易池等待礦工打包。一筆交易從發送到完成的整個生命周期需要經過如下過程:

1)A通過錢包向B發出一筆交易,交易金額為100比原幣(BTM)。

2)該筆交易被廣播到P2P網絡中。

3)礦工收到交易信息,驗證交易合法性。

4)打包交易,將多個交易組成一個新區塊。

5)新區塊加入到一個已經存在的區塊鏈中。

6)交易完成,成為區塊鏈的一部分。

2.智能合約

從傳統意義上來說,合約就是現實生活中的合同。區塊鏈中的智能合約是一種旨在以數字化的方式讓驗證合約談判或履行合約規則更加便捷的計算機協議。智能合約本質上是一段運行在虛擬機上的“程序代碼”,可以在沒有第三方信任機構的情況下執行可信交易。

智能合約具有兩個特性:可追蹤性和不可逆轉性。

智能合約是比原鏈中最核心、也是最重要的部分。在后面章節中,我們會詳細介紹智能合約模型(主流模型:UTXO模型、賬戶模型)、運行原理,以及BVM虛擬機工作機制。我們還將深入代碼,了解區塊鏈上智能合約如何在沒有第三方信任機構的情況下進行可信交易。

3.虛擬機

比原鏈虛擬機(Bytom Virtual Machine, BVM)是建立在區塊鏈上的代碼運行環境,其主要作用是處理比原鏈系統內的智能合約。BVM是比原鏈中非常重要的部分,在智能合約存儲、執行和驗證過程中擔當著重要角色。

BVM用Equity語言來編寫智能合約。比原鏈是一個點對點的網絡,每一個節點都運行著BVM,并執行相同的指令。BVM是在沙盒中運行,和區塊鏈主鏈完全分開。

1.3.4 錢包層

比原鏈錢包層架構如圖1-5所示。

圖1-5 比原鏈架構之錢包層

錢包可以類比于我們日常生活中的保險箱,我們關心保險箱的開門方式(密鑰)和其中保存的財產(UTXO)。比原鏈錢包層主要負責保存密鑰、管理地址、維護UTXO信息,并處理交易的生成、簽名,對外提供錢包、交易相關的接口。

比原鏈的交易發送分為三步:

1)Build:根據交易的輸入和輸出,構造交易數據。

2)Sign:使用私鑰對每個交易輸入進行簽名。

3)Submit:將交易提交到網絡進行廣播,等待打包。

1.3.5 共識層

比原鏈共識層架構如圖1-6所示。

圖1-6 比原鏈架構之共識層

共識層用于實現全網數據的一致性,區塊鏈是去中心化賬本,需要全網對賬本達成共識。共識層通過驗證區塊和交易,保證新的區塊在所有節點上以相同的方式產生。簡單說,共識機制就是通過某種方式競爭“記賬權”,得到記賬權的節點可以將自己生成的區塊追加到現有區塊鏈的尾部,其他節點可以根據相同的規則,驗證并接受這些區塊,丟棄那些無法通過驗證的區塊。

常見的共識機制有工作量證明(Proof-of-Work, PoW)、股權證明(Proof-of-Stake, PoS)等。

PoW共識機制利用復雜的數學難題作為共識機制,目前一般使用“hash函數的計算結果小于特定的值”。由于hash函數的特性,不可能通過函數值來反向計算自變量,所以必須用枚舉的方式進行計算,直到找出符合要求的hash值。這一過程需要進行大量運算。PoW的復雜性保證了任何人都需要付出大量的運算來產生新的塊,如果要篡改已有的區塊,則需要付出的算力比網絡上其他節點的總和都大。PoW優缺點對比如表1-1所示。

表1-1 PoW優缺點對比

PoS是另一種共識機制,這種方式要求節點將一部分加密貨幣鎖定,并根據數量和鎖定的時長等因素來分配記賬權。PoS一般不需要大量計算,所以比PoW更加迅速和高效。PoS優缺點對比如表1-2所示。

表1-2 PoS優缺點對比

目前還有少量加密數字貨幣采用其他共識機制,但PoW和PoS是共識機制的主流。由于比原鏈的特性,結合比原鏈崇尚“計算即權利”(一種已確定的利益分配的方式。只要計算力高或擁有更多的算力,那就擁有了某些控制權)的主張,需要在多節點上達成較強的共識,對全局一致性、去中心化要求較高,需要在一定程度上犧牲效率,所以比原鏈選擇了PoW作為公鏈的共識機制。

1.3.6 數據存儲層

比原鏈數據存儲層架構如圖1-7所示。

圖1-7 比原鏈架構之數據存儲層

比原鏈在數據存儲層上存儲所有鏈上地址、資產交易等信息。數據存儲層分為兩部分;第一部分為緩存,大部分查詢首先從緩存中進行,以減少對磁盤的IO壓力;第二部分為持久化存儲,當緩存中查詢不到數據時,轉而從持久化存儲中讀取,并添加一份到緩存中。

比原鏈默認使用LevelDB數據庫作為持久化存儲。LevelDB是Google開發的非常高效的鏈值數據庫。LevelDB是單進程服務,不能同時有多個進程對一個數據庫進行讀寫,同一時間只能有一個進程或一個進程以多并發的方式進行讀寫。

默認情況下,數據存儲在--home參數下的data目錄。以Darwin(即MacOS)平臺為例,默認數據存儲在$HOME/Library/Bytom/data。

數據庫包括:

? accesstoken.db:存儲token信息(錢包訪問控制權限)。

? core.db:存儲核心數據庫。存儲主鏈相關數據,包括塊信息、交易信息、資產信息等。

? discover.db:存儲分布式網絡中端到端的節點信息。

? trusthistory.db:存儲分布式網絡中端到端的惡意節點信息。

? txfeeds.db:存儲目前比原鏈代碼版本未使用該功能,暫不介紹。

? wallet.db:存儲本地錢包數據庫。存儲用戶、資產、交易、UTXO等信息。

1.3.7 P2P分布式網絡

比原鏈分布式網絡層的架構如圖1-8所示。

圖1-8 比原鏈架構之P2P分布式網絡

比原鏈作為一個去中心化的分布式系統,其底層個體間的通信機制對整個系統的穩定運行十分重要。個體間的數據同步、狀態更新都依賴于整個網絡中每個個體之間的通信機制。比原鏈的網絡通信基于P2P通信協議,又根據自身業務的特殊性做了特別的設計。比原鏈的P2P分布式網絡,主要分為四大部分:節點發現、區塊同步、交易同步和快速廣播。

1.節點發現

P2P節點發現主要解決新加入網絡的節點如何連接到區塊鏈網絡中。新加入的節點能夠快速地被網絡中其他的節點感知;同時節點自己也能夠獲得其他節點的信息,與其通信交換數據。比原鏈中的節點發現使用的是Kademlia算法實現的節點發現機制。Kademlia算法實現是一個結構化的P2P覆蓋網絡,每個節點都有一個全網唯一的標識,稱為Node ID。Node ID被分散地存儲在各個節點上。Kademlia將發現的節點存儲到k桶(k-bucket)中,每個節點只連接距離自己最近的n個節點。以此形成的網絡拓撲結構如下圖1-9所示。

圖1-9 P2P網絡拓撲架構

2.區塊同步

區塊鏈是一種去中心化的分布式記賬系統,全節點需要保存完整的區塊信息。當一個節點加入到網絡之后,需要做的第一件事情就是同步區塊,構建完整的區塊鏈。新加入的節點需要與網絡中其他節點同步,從高度為1的區塊開始到當前全網的最高高度,這樣才能構建成一條完整的區塊鏈。

節點啟用快速功能時,同步節點每次最多能夠同步1~128個區塊(當前高度到下一個checkpoint高度的區塊)信息。除了快速同步算法之外,還有普通同步算法。節點主要使用普通同步算法同步網絡中較新的區塊信息。普通同步算法主要為了保證節點中的區塊信息不落后,能夠及時同步新挖掘的區塊。

普通同步和快速同步的區別是快速同步使用get-headers批量獲取區塊,使用checkpoint的驗證來避免PoW工作量驗證,從而能極大提高速度;普通同步一次只能獲取一個區塊。

快速同步和普通同步可以解決不同場景的需求。快速同步使節點能夠快速地重建區塊鏈信息,快速地加入到網絡中,這是通過新塊廣播實現的。在不滿足快速同步條件時,則用普通同步,每次同步時請求一個區塊。

3.交易同步

比原鏈網絡為了保證交易的安全,每一筆交易達成后,節點需要將交易信息同步到網絡中其他的節點,這個過程稱作交易同步。交易同步驗證的目的是保證安全性,當交易同步到網絡中的其他的節點時,節點會驗證交易是否合法,只有當交易合法,節點才會將交易寫入自己的交易池中。另一方面,同步交易可以將交易同步到更多的節點,交易可以更快地被打包到區塊中。

4.快速廣播

為了保證交易信息能夠及時被確認和提交到主鏈上,比原鏈提供了快速廣播。對于接收到的新區塊和新交易信息,網絡中的節點會快速廣播到當前節點已知的其他節點。

主站蜘蛛池模板: 革吉县| 策勒县| 皮山县| 长丰县| 汽车| 滨海县| 西乌珠穆沁旗| 双江| 彭阳县| 永兴县| 修水县| 虹口区| 潞城市| 蓬安县| 集安市| 巴青县| 穆棱市| 昭通市| 天津市| 水富县| 屏东市| 芦溪县| 江西省| 儋州市| 赤水市| 金沙县| 榆中县| 洛浦县| 新疆| 福泉市| 长岭县| 湖口县| 宁阳县| 中山市| 柳州市| 漳州市| 衢州市| 罗江县| 盈江县| 庆城县| 教育|