以太坊將比特幣針對數字交易的功能進一步進行了拓展,面向更爲複雜和靈活的應用場景,支持了智能合約這一重要特性。算法
以太坊:項目最初的目標是打造以個智能合約的平臺,該平臺支持圖靈完備的應用,按照智能合約的約定邏輯自動執行,理想狀況下將不存在故障停機、審查、欺詐,以及第三方干預等問題編程
以太坊核心實現是基於比特幣網絡的核心思想進行了拓展,所以在不少設計特性上都與比特幣網絡十分相似。
基於以太坊項目,以太坊團隊目前運營了一個公開的區塊鏈平臺——以太坊網絡。智能合約開發者使用官方提供的工具和以太坊專用應用開發語言 Solidity,能夠很容易地開發出運行在以太坊網絡上的「去中心化」應用。網絡
以太坊區塊鏈底層也是一個相似比特幣網絡的P2P網絡平臺,智能合約運行在網絡中的以太坊虛擬機裏。網絡自身是公開可接入,任何人均可以接入並參與網絡中數據的維護,提供運行以太坊虛擬機的資源。異步
與比特幣項目相比,以太坊區塊鏈的技術特色主要包括:編程語言
基於比特幣的核心思想,以太坊提出了許多創新的技術概念:智能合約、基於帳戶的交易、以太幣和燃料函數
智能合約
智能合約是以太坊中最爲重要的一個概念,即以計算機程序的方式來締結和運行各類合約。工具
智能合約做爲運行在以太坊虛擬機中的應用,能夠接受來自外部的交易請求和事件,經過觸發運行提早編寫好的代碼邏輯,進一步生成新的交易和事件,能夠進一步調用其餘智能合約。區塊鏈
智能合約的執行結果可能對以太坊網絡上的帳本狀態進行更新。這些修改因爲通過了以太坊網絡中的共識,一旦確認後沒法被僞造和篡改spa
帳戶
以太坊直接用帳戶來記錄系統狀態,每一個帳戶存儲餘額信息、智能合約代碼和內部數據存儲等。以太坊支持在不一樣的帳戶之間轉移數據,以實現更爲複雜的邏輯。設計
以太坊帳戶分爲兩種類型:
當合約帳戶被調用時,存儲其中的智能合約會在礦工出的虛擬機中自動執行,並消耗必定的燃料。燃料經過外部帳戶中的以太幣進行購買
交易
交易在以太坊中是指從一個帳戶到另外一個帳戶的消息數據。消息數據能夠是以太幣或者合約執行參數。
以太坊採用交易做爲執行操做的最小單位。每一個交易包括以下字段:
以太幣
以太幣是以太坊網絡中的貨幣。以太幣主要用於購買燃料,支付給礦工,以維護以太坊網絡運行智能合約的費用。
燃料
燃料(Gas),控制某次交易執行指令的上限。每執行一條合約指令會消耗固定的燃料。當某個交易還未執行結束,而燃料消耗完時,合約執行終止並回滾狀態。
爲了支持更復雜的智能合約,以太坊在很多地方進行了改進,包括交易模型、共識、對攻擊的防禦和可擴展性
運行環境
以太坊採用以太坊虛擬機做爲智能合約的運行壞境。以太坊虛擬機是一個隔離的輕量級虛擬機環境,運行在其中的智能合約代碼沒法訪問本地網絡、文件系統或其餘進程。
對同一個智能合約來講,每每須要在多個以太坊虛擬機中同時運行多份,以確保整個區塊鏈數據額一致性和高度的容錯性。但這也限制了整個網絡的容量
開發語言
以太坊爲編寫智能合約設計了圖靈完備的高級編程語言。目前Solidity是經常使用的以太坊合約編寫語言之一。
智能合約代碼編寫完畢後,用編譯器編譯爲以太坊虛擬機專用的二進制格式(EVM bytecode),右客戶端上傳到區塊鏈中,以後在礦工的以太坊虛擬機中運行
以太坊採用了帳戶的模型,狀態能夠實時地保存到帳戶裏,而無需像比特幣的UTXO模型那樣去回溯整個歷史。
以太坊目前採用了基於成熟的PoW共識的變種算法Ethash協議做爲共識機制。爲了防止ASIC礦機礦池的算力攻擊,跟原始PoW的計算密集型Hash運算不一樣,Ethash執行時須要消耗大量內存,反而跟計算效率關係不大。
以太坊網絡在下降攻擊方面的核心設計思想仍然是經過經濟激勵機制防止少數人做惡:
可擴展性是以太坊網絡承接更多業務量的最大制約。以太坊項目將來但願經過分片機制來提升整個網絡的擴展性。
分片:是一組維護和執行同一批智能合約的節點組成的子網絡,是整個網絡的子集。
分片前,全部節點都須要處理全部的智能合約,節點的處理能力會限制網絡的最大處理能力。分片後,同一片內的合約處理是同步的,彼此達成共識,不一樣分片之間則能夠是異步的,能夠提升網絡總體的可擴展性。