智慧合約相關設計
1.執行環境
以太坊採用以太坊虛擬機器作為智慧合約的執行環境。以太坊虛擬機器是一個隔離的輕量級虛擬機器環境,執行在其中的智慧合約程式碼無法訪問本地網路、檔案系統或其他程序。
對同一個智慧合約(檢視什麼是智慧合約)來說,往往需要在多個以太坊虛擬機器中同時執行多份,以確保整個區塊鏈資料的一致性和高度的容錯性。但另一方面,這也限制了整個網路的容量。
2.開發語言
以太坊為編寫智慧合約設計了圖靈完備的高階程式語言,降低了智慧合約開發的難度。目前,Solidity是最常用的以太坊合約編寫語言之一。
智慧合約編寫完畢後,用編譯器編譯為以太坊虛擬機器專用的二進位制格式(EVM bytecode),由客戶端上傳到區塊鏈當中,之後在礦工的以太坊虛擬機器中執行。
7.3.2 交易模型
出於智慧合約的便利考慮,以太坊採用了賬戶的模型,狀態可以實時地儲存到賬戶裡,而無需像比特幣的UXTO模型那樣去回溯整個歷史。UXTO模型和賬戶模型的對比如表7-1所示。
7.3.3 共識
以太坊目前採用了基於成熟的PoW共識的變種演算法Ethash協議作為共識機制。
為了防止ASIC礦機礦池的算力攻擊,跟原始PoW的計算密集型Hash運算不同,Ethash在執行時候需要消耗大量記憶體,反而跟計算效率關係不大。這意味著很難製造出專門針對Ethash的晶片,即通用機器可能更加有效。
雖然,Ethash對原始的PoW進行了改進,但仍然需要進行大量無效的運算,這也為人們所詬病。
社群已經有計劃在未來採用更高效的Proof-of-Stake(PoS)作為共識機制。相對於PoW機制來講,PoS機制無需消耗大量無用的Hash計算,但其共識過程的複雜度要更高一些,還有待進一步的檢驗。
7.3.4 降低攻擊
由於以太坊網路中的交易更加多樣化,也就更容易受到攻擊。
以太坊網路在降低攻擊方面的核心設計思想仍然是通過經濟激勵機制防止少數人作惡:
·所有交易都要提供交易費用,避免DDoS攻擊;
·程式執行指令數通過Gas來限制,所消耗的費用超過設定上限時就會被取消,避免出現惡意合約。
這就確保了攻擊者試圖消耗網路中虛擬機器的計算資源時,需要付出經濟代價(支付大量的以太幣);同時難以通過構造惡意的迴圈或不穩定合約程式碼來對網路造成破壞。
7.3.5 提高擴充套件性
可擴充套件性是以太坊網路承接更多業務量的最大制約。以太坊專案未來希望通過分片(sharding)機制來提高整個網路的擴充套件性。分片是一組維護和執行同一批智慧合約的節點組成的子網路,是整個網路的子集。
支援分片功能之前,以太坊整個網路中的每個節點都需要處理所有的智慧合約,這就造成了網路的最大處理能力會受限於單個節點的處理能力。
分片後,同一片內的合約處理是同步的,彼此達成共識,不同分片之間則可以是非同步的,可以提高網路整體的可擴充套件性。