主要設計

以太坊項目的基本設計與比特幣網絡類似。為了支持更復雜的智能合約,以太坊在不少地方進行了改進,包括交易模型、共識、對攻擊的防護和可擴展性等。

智能合約相關設計

運行環境

以太坊採用以太坊虛擬機作為智能合約的運行環境。以太坊虛擬機是一個隔離的輕量級虛擬機環境,運行在其中的智能合約代碼無法訪問本地網絡、文件系統或其它進程。

對同一個智能合約來說,往往需要在多個以太坊虛擬機中同時運行多份,以確保整個區塊鏈數據的一致性和高度的容錯性。另一方面,這也限制了整個網絡的容量。

開發語言

以太坊為編寫智能合約設計了圖靈完備的高級編程語言,降低了智能合約開發的難度。

目前 Solidity 是最常用的以太坊合約編寫語言之一。

智能合約編寫完畢後,用編譯器編譯為以太坊虛擬機專用的二進制格式(EVM bytecode),由客戶端上傳到區塊鏈當中,之後在礦工的以太坊虛擬機中執行。

交易模型

出於智能合約的便利考慮,以太坊採用了賬戶的模型,狀態可以實時的保存到賬戶裡,而無需像比特幣的 UXTO 模型那樣去回溯整個歷史。

UXTO 模型和賬戶模型的對比如下。

特性

UXTO 模型

賬戶模型

狀態查詢和變更

需要回溯歷史

直接訪問

存儲空間

較大

較小

易用性

較難處理

易於理解和編程

安全性

較好

需要處理好重放攻擊等情況

可追溯性

支持歷史

不支持追溯歷史

共識

以太坊目前採用了基於成熟的 PoW 共識的變種算法 Ethash 協議作為共識機制。

為了防止 ASIC 礦機礦池的算力攻擊,跟原始 PoW 的計算密集型 Hash 運算不同,Ethash 在執行時候需要消耗大量內存,反而跟計算效率關係不大。這意味著很難製造出專門針對 Ethash 的芯片,反而是通用機器可能更加有效。

雖然,Ethash 相對原始的 PoW 進行了改進,但仍然需要進行大量無效的運算,這也為人們所詬病。

社區已經有計劃在未來採用更高效的 Proof-of-Stake(PoS)作為共識機制。相對 PoW 機制來講,PoS 機制無需消耗大量無用的 Hash 計算,但其共識過程的複雜度要更高一些,還有待進一步的檢驗。

降低攻擊

以太坊網絡中的交易更加多樣化,也就更容易受到攻擊。

以太坊網絡在降低攻擊方面的核心設計思想,仍然是通過經濟激勵機制防止少數人作惡:

  • 所有交易都要提供交易費用,避免 DDoS 攻擊;

  • 程序運行指令數通過 Gas 來限制,所消耗的費用超過設定上限時就會被取消,避免出現惡意合約。

這就確保了攻擊者試圖消耗網絡中虛擬機的計算資源時,需要付出經濟代價(支付大量的以太幣);同時難以通過構造惡意的循環或不穩定合約代碼來對網絡造成破壞。

提高擴展性

可擴展性是以太坊網絡承接更多業務量的最大制約。

以太坊項目未來希望通過分片(sharding)機制來提高整個網絡的擴展性。

分片是一組維護和執行同一批智能合約的節點組成的子網絡,是整個網絡的子集。

支持分片功能之前,以太坊整個網絡中的每個節點都需要處理所有的智能合約,這就造成了網絡的最大處理能力會受限於單個節點的處理能力。

分片後,同一片內的合約處理是同步的,彼此達成共識,不同分片之間則可以是異步的,可以提高網絡整體的可擴展性。

Last updated