以太坊項目的基本設計與比特幣網絡類似。為了支持更復雜的智能合約,以太坊在不少地方進行了改進,包括交易模型、共識、對攻擊的防護和可擴展性等。
以太坊採用以太坊虛擬機作為智能合約的運行環境。以太坊虛擬機是一個隔離的輕量級虛擬機環境,運行在其中的智能合約代碼無法訪問本地網絡、文件系統或其它進程。
對同一個智能合約來說,往往需要在多個以太坊虛擬機中同時運行多份,以確保整個區塊鏈數據的一致性和高度的容錯性。另一方面,這也限制了整個網絡的容量。
以太坊為編寫智能合約設計了圖靈完備的高級編程語言,降低了智能合約開發的難度。
目前 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)機制來提高整個網絡的擴展性。
分片是一組維護和執行同一批智能合約的節點組成的子網絡,是整個網絡的子集。
支持分片功能之前,以太坊整個網絡中的每個節點都需要處理所有的智能合約,這就造成了網絡的最大處理能力會受限於單個節點的處理能力。
分片後,同一片內的合約處理是同步的,彼此達成共識,不同分片之間則可以是異步的,可以提高網絡整體的可擴展性。