比特幣、以太坊的區(qū)塊鏈架構(gòu)比較及淺析(下)

前言,下篇相對上篇主要就以太坊的區(qū)塊鏈架構(gòu)進行總結(jié),同時會結(jié)合同比特幣架構(gòu)的差異性進行比對分析。

一、以太坊區(qū)塊鏈架構(gòu)及要素

以太坊的架構(gòu)基于比特幣,但同時是將區(qū)塊鏈作為了一個可編程的分布式信用基礎設施,并支持智能合約應用,與僅作為虛擬貨幣支撐的比特幣區(qū)塊鏈有明顯優(yōu)化改進,基本架構(gòu)及要素參見下圖所示:

而相對比特幣的改進主要體現(xiàn)在以下幾方面

1.前端部分

包括去中心化應用、智能合約開發(fā)工具以及JS框架的引入,主要為解決相對比特幣更為復雜應用場景或全新的領域開發(fā),重點是對智能合約的支持。這部分會在后續(xù)關于智能合約開發(fā)的文章中講解,此處不展開說明。

這里僅簡單講一下DApp,DApp是由只能合約和客戶端代碼構(gòu)成,架構(gòu)上類似于傳統(tǒng)Web應用,但是這里智能邏輯部分是運行在區(qū)塊鏈上,客戶端代碼運行在特殊瀏覽器Mist中。相對于傳統(tǒng)錢包的簡單支付業(yè)務,為復雜的去中心化應用的設計引入。

2.賬戶

以太坊引入了賬戶概念,可劃分為兩種類型:1)外部所有賬戶(EOA),即一般意義上的用戶賬戶;2)合約賬戶(Contract),是一種特殊的可編程賬戶,是代碼和數(shù)據(jù)的集合,受代碼控制并由EOA賬戶激活。

如何理解外部所有賬戶和合約賬戶的基本區(qū)別?

一個EOA賬戶可以創(chuàng)建和使用自有私鑰對交易進行簽名,發(fā)送消息給另一個EOA賬戶或合約賬戶。兩個外部所有賬戶之間傳送的消息類似于比特幣的簡單支付交易僅為價值的轉(zhuǎn)移。但EOA賬戶到合約賬戶的消息會激活合約賬戶的代碼。

而合約賬戶可以執(zhí)行圖靈完備的計算任務,并可以在合約賬戶之間傳遞消息。調(diào)用時,EOA賬戶需要提供一些參數(shù):EOA地址、合約的地址以及數(shù)據(jù),數(shù)據(jù)部分則包括需要調(diào)用合約里的方法以及傳遞的參數(shù)。

不同于EOA賬戶,合約賬戶不可以自己發(fā)起一個交易。相反,合約賬戶只有在接收到一個交易之后(從一個EOA賬戶或另一個合約賬戶處),為了響應此交易而觸發(fā)一個交易。

直觀表示如下圖

3.區(qū)塊鏈管理及結(jié)構(gòu)

比特幣的區(qū)塊鏈組織是采用Merkle數(shù)將交易的哈希值按一定的算法組成二叉樹結(jié)構(gòu),頂層節(jié)點哈希值相當于整個交易清單的指紋用于驗證交易清單。因為以太坊引入了對象狀態(tài)管理(即上述賬戶)概念,除了交易清單還需要保存最新的狀態(tài),進而帶來了復雜的校驗和查詢需求:

(1)以太坊的狀態(tài)包含一個鍵值表,即(地址-賬戶聲明對的變量),變量包括余額、隨機數(shù)、代碼和賬戶的存儲,賬戶的狀態(tài)可以經(jīng)常改變,其余額、隨機數(shù)也經(jīng)常變。

(2)新的賬戶可以被插入,健在存儲里也可以被插入和刪除。

(3)基于上述兩點,需要引入一種可以在插入、更新和刪除操作后快速計算新的樹根哈希值,并不需要重新計算整棵樹的數(shù)據(jù)結(jié)構(gòu)。并需要具備:樹的深度是受限的以防止拒絕服務攻擊;樹的根哈希只是與樹的數(shù)據(jù)有關,而與更新的順序無關。

滿足上述要求的實現(xiàn)即為Patricia樹

而在區(qū)塊鏈的區(qū)塊報頭中,以太坊實現(xiàn)上則是存放了3個根哈希:1)交易的merkle根哈希值;2)狀態(tài)的根哈希值;3)收據(jù)的根哈希值(收據(jù)的作用會在后續(xù)部分講到)

直觀表示如下圖

還有一個和比特幣不一樣的地方,以太坊的區(qū)塊鏈中每個區(qū)塊保存區(qū)塊鏈號和區(qū)塊難度(引出一個問題:作用是什么?)

在區(qū)塊鏈的構(gòu)建上,以太坊也采用了一個不同于比特幣的算法——GHOST算法,中文直譯為“貪婪最重觀察子樹”,該算法使得以太坊的區(qū)塊鏈組織不是一個鏈條,而更像一棵樹。

4.工作量證明及收益

按照比特幣的挖礦設計難度,整個網(wǎng)絡產(chǎn)生新區(qū)塊的速度被動態(tài)控制在10分鐘左右,并且工作量證明僅是依靠CPU的計算難度來決定。而以太坊的pow(工作量證明)算法經(jīng)過優(yōu)化相比較比特幣的工作量證明相對簡單且更為靈活。首先,新區(qū)塊的產(chǎn)生被控制在每次15s左右,同時以太坊的工作量證明機制加入了內(nèi)存難度,該特點具有抵抗針對單哈希優(yōu)化的ASIC挖礦機屬性,避免了算力局部集中化的風險。

而在礦工的收益方面,以太坊的獎勵制度也要復雜一些。類似比特幣以太坊在產(chǎn)生一個新的區(qū)塊時會獲取一定的靜態(tài)收益(5個以太幣),礦工還可以依靠交易用戶支付的“燃料”來獲取收益,此外還會獲得一個產(chǎn)生“叔區(qū)塊”包含入鏈的額外獎勵。

這里有必要對“燃料”和“叔區(qū)塊”做一下解釋:

“燃料”——以太坊具有圖靈完備屬性,在此基礎上存在對無限循環(huán)和跳轉(zhuǎn)指令惡意使用的使用的可能,為了防止針對系統(tǒng)的惡意攻擊,規(guī)定需要每個交易給出最大的計算步驟,同時交易人需要支付一定的交易費用給與礦工將交易加入?yún)^(qū)塊,該費用即為“燃料”?!叭剂稀睕Q定了交易能否有效執(zhí)行,如果交易中的實際運行超過了最大計算步驟則燃料耗盡,交易終止同時交易費用歸屬挖到塊區(qū)的礦工所有。

“叔區(qū)塊”——也稱為“廢塊”,是指符合以太坊難度條件產(chǎn)生的區(qū)塊,但是該區(qū)塊里的交易未被確認而失效,這種情況通常發(fā)生在A、B礦工同時產(chǎn)生符合條件的區(qū)塊,之后因為網(wǎng)絡延遲確認及區(qū)塊重組導致一方區(qū)塊無效時出現(xiàn)?!笆鍏^(qū)塊”的引入一方面完善了因為以太坊網(wǎng)絡每15s一次更新可能產(chǎn)生大量非區(qū)塊的算力浪費的經(jīng)濟補償,另一方面增強了整個區(qū)塊量的安全性,使攻擊者不易模擬帶有廢塊的區(qū)塊鏈主鏈。

5.圖靈完備、EVM(以太坊虛擬機)和高級語言

以太坊相比比特幣的創(chuàng)新即引入圖靈完備,進而使智能合約的應用成為可能。同時,還具備一個基礎計算環(huán)境——以太坊虛擬機,合約代碼的執(zhí)行均在EVM上進行。

同時,以太坊提供高級語言便于編寫智能合約,最終高級語言會被編譯成為EVM中執(zhí)行的EVM字節(jié)碼,并部署在以太網(wǎng)區(qū)塊鏈上。目前有提供三種編程語言:

1)Solidity,類似JavaScript語言

2)Serpent,類似Python語言,整合了低級語言的效率及易用性

3)LLL(Lisp like language),是一個像Lisp的語言,設計簡約有些象匯編語言

6.合約執(zhí)行及事件

以太坊上的合約執(zhí)行是在區(qū)塊驗證時被交易觸發(fā)的,通常是接收到外部賬戶消息所激活,其執(zhí)行過程是異步的,即沒有返回值無法直接獲知結(jié)果。因此合約與外部的通信是通過日志事件實現(xiàn)的,該日志事件是交易執(zhí)行時產(chǎn)生的收據(jù)一部分。

而以太坊中的事件是一個日志和事件監(jiān)測協(xié)議的抽象,日志的記錄中提供合約的地址、一組最多4個議題和一些任意長度的二進制數(shù)據(jù)。事件可以利用現(xiàn)有ABI(Application Binary Interface)功能解析日志記錄。


總結(jié):比特幣、以太坊的架構(gòu)分析是建立在對系統(tǒng)構(gòu)成要素及基本概念、相互之間作用的基礎之上,其中涉及諸多的工作原理、流程等內(nèi)容都未深入展開及說明,后續(xù)文章中會針對各主要流程及原理進行闡述。


附參考文章:

以太坊的工作原理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容