本文做者爲萬向區塊鏈旗下萬雲平臺首席技術官奚海峯。他從以太坊第三屆DevCon大會回來後,對這趟會議之旅的所見所聞進行了總結,就以太坊的生態現狀和將來發展進行了全方位解讀。算法
做者簡介:奚海峯,萬雲首席技術官。清華大學自動化專業碩士,馬里蘭大學電器及計算機工程碩士。前後擔任IBM研究院工程師和高級諮詢顧問,Sempra Commodities主管架構師,Tudor Investment軟件開發主管等。榮獲了包括「IBM研究成就獎」在內的屢次嘉獎。在一流國際會議和雜誌上發表過多篇學術論文,並持有美國發明專利。如下爲正文,enjoy!編程
01 以太坊基礎概念安全
以太坊做爲一個區塊鏈產品和技術平臺,初衷是但願區塊鏈能夠像手機操做系統同樣,當開發者想構建應用時沒必要重複創造和維護區塊鏈,直接使用以太坊便可。如下是以太坊的一些基礎概念。網絡
帳戶數據結構
區塊鏈最基本的結構是帳戶體系,以太坊在原比特幣的外部控制帳戶基礎上增長了合約帳戶。合約帳戶是由一段代碼(智能合約)控制的帳戶。不一樣的帳戶間經過交易來實現交互,交易能夠從一個外部控制帳戶發到另外一個外部控制帳戶,實際上就是簡單的轉帳。架構
若是從外部帳戶發一個交易到合約帳戶,就是對這個合約帳戶裏包含代碼的某個函數進行調用。此外,一個合約帳戶也能夠嵌套式地調用另一個合約帳戶的代碼。併發
Gas和Gas Price異步
爲避免智能合約被惡意使用形成死循環,以太坊加入了燃料(Gas)的概念。執行智能合約的某個操做,或者存儲一些數據都要花費相應數量的Gas;在執行一個智能合約時,必須在必定Gas限度內完成,不然程序就會終止。Gas Price是智能合約調用者指定的,表示他願意爲每一個Gas支付多少以太幣,這種成本因素進一步約束黑客濫用以太坊資源的衝動。編程語言
交易函數
一個交易由若干關鍵字段構成:
Nonce:隨機數,它可用來避免交易被重放。
Startgas:指調用方願意爲此次調用支付的Gas上限,在調用以前從帳戶里扣除。若是調用結束時,Startgas沒有花完,剩下的就會退回到調用者帳戶。若是執行過程消耗的Gas超越了預先支付的Startgas,執行就停止。
To:指這個交易的目標地址。
Value:轉帳的以太幣數量。
Data:目標爲合約帳戶時,對調用函數名和參數的編碼。
狀態機
每一個帳戶實際上都維護一個狀態,這個狀態在執行代碼的時候發生轉移,能夠理解爲以太坊每一個節點都在維護一個巨大的狀態機。就是經過執行交易去觸發代碼的執行,代碼會修改帳戶的內部狀態,包括代幣裏面存儲的值,這樣使得整個以太坊從一個狀態轉到另外一個狀態。
以太坊虛擬機(EVM)
智能合約運行在虛擬機裏面,虛擬機至關於模擬的計算機,它有堆棧、內存、存儲、環境變量、日誌,因此它叫圖靈完備。用這個虛擬機能夠寫任意複雜的邏輯,這也正是爲何要引入Gas機制的緣由。
高級編程語言
虛擬機運行的智能合約代碼,是編譯爲EVM能夠理解的二進制碼部署在智能合約當中的。可是做爲編程人員直接用這種代碼寫程序較難,由於它是一個低級語言。因此以太坊提供了高級語言如Solidity、Viper、LLL、Bamboo來寫智能合約,而後編譯成EVM代碼。
ABI
應用二進制接口ABI是智能合約函數調用的二進制編碼格式。在向一個合約帳戶發送交易時,須要指明調用合約代碼裏的哪一個函數,若是這個函數帶參數,還要把參數值傳遞過去,這些東西都要有一個二進制編碼。
Merkle Tree
在以太坊裏有一個很是重要的概念「Merkle Tree」。在Merkle Tree裏,從根結點向下(葉子節點除外),每個節點的值都是下面節點的值合併後算哈希的結果。這樣的好處是能夠很容易造成對於葉子節點上的交易數據的驗證。以太坊對Merkle Tree作了改進,以便高效地進行插入和刪除操做。
02 以太坊面臨的安全挑戰
智能合約風險
以太坊做爲一個帶有圖靈完備虛擬機的區塊鏈平臺,它的優點很明顯,但優點每每也是它的劣勢。對於以太坊來說,由於它的虛擬機支持任意編程邏輯,在寫智能合約的時候頗有可能會引入bug,好比以前的The DAO事件形成以太坊的硬分叉,Parity錢包7月份和11月份兩次bug被黑客利用形成的資產損失等。因此面對這些安全風險,應該怎麼辦?
一是能夠經過以太坊的協議和EVM自己的升級來增強安全性。二是能夠應用代碼審計公司或者是本身編制嚴格的審計流程對本身的代碼進行審計。另外,可使用形式化驗證工具來增強安全性,如區塊鏈安全公司Zeppelin開發的工具,可使得區塊鏈上部署的智能合約代碼修改起來更方便。蘇黎士聯邦理工大學軟件可靠性實驗室開發的安全審查工具Securify,給開發人員提供了一個簡單的界面,能夠對輸入的智能合約代碼進行形式化驗證,而後找出裏面存在的漏洞。
隱私風險
咱們都知道,在區塊鏈社區中特別注重隱私保護,而zk-SNARKs(「簡明非交互零知識證實」)是這次DevCon上一個很是熱門的話題。這個機制是讓一個證實者,在不提供任何額外的有用信息的狀況下,使驗證者相信某個論斷是正確的,是一種機率證實而不是肯定性證實。
好比Alice有一把開門的鑰匙,她須要向Bob證實她擁有這個鑰匙。有兩種作法,第一種是Alice把鑰匙給Bob,Bob拿這個鑰匙開了門進去,Bob知道Alice確實擁有進門的鑰匙。另一種作法是,Bob知道這個房子裏有同樣東西,他告訴Alice,Alice到房間裏把這個東西拿出來給Bob看。因爲Alice能作到這一點,Bob知道Alice有開門的鑰匙。第二種方法就是所謂的零知識證實,能夠在不泄露鑰匙的狀況下,向Bob證實Alice擁有它。現階段,對隱私保護作得最好的是Zcash,Zcash對零知識證實應用得很是純熟。
03 以太坊面臨的擴容挑戰
以太坊面臨的另一個重大問題,就是它的性能擴展。以太坊上面如今已經部署了成百上千的智能合約,但它之初的設計是基於PoW共識機制,每秒只能處理幾十個交易,沒法知足不少應用對交易性能的實際要求。以太坊被認爲是第二代區塊鏈,如今第三代區塊鏈的崛起勢頭對以太坊造成了某種競爭壓力,因此當務之急是如何在保持以太坊平臺平穩運行的前提下,儘快把它切換到PoS的共識機制下,提升平臺的性能。
如今以太坊面臨的在性能擴展上的問題是,每個節點都要處理每個交易,這意味着整個區塊鏈的容量是被單一節點的處理能力和存儲能力所限制。另外,以太坊設計之初就不支持交易的並行處理,這些都限制了其性能的進一步提高。
04 以太坊的擴容之路
爲了解決擴展性,Vitalik提出了Sharding(分片)方案,即「一個區塊鏈,兩套系統」。Sharding具體方案是將以太坊網絡狀態分解爲衆多分片(shard),分片間僅能異步通信,每個分片僅處理全網絡的一部分交易,分片也分爲主分片與新分片。Vitalik 稱新分片爲「宇宙星系」。
主分片與新分片在共識與治理上會有不一樣處理方式,主分片採起保守的方式,依然是PoW,而後進入一種混合的PoS模式,實際上就是PoW加PoS,以保障網絡穩定性;新分片採起積極改進的方式,以便進行更多的試驗,但不影響主分片,新分片則直接使用PoS模式,實現權益證實。若是能實現這樣的治理構架,系統將會更穩定。
在新老分片中間的同步狀態是經過一個叫無狀態的客戶端來作的。所謂無狀態就是,當把新分片的一些局部狀態想要同步到主分片的時候,共識節點不須要存儲全部網絡狀態,僅存儲區塊頭部信息便可。另外發送交易時,提交Merkle 證實便可以改變狀態。由於Merkle是自洽的數據結構,它能夠向主分區證實這個交易確實是在新分區上發生過了。這樣在新分區上能夠作不少的優化,好比並發處理,包括區塊的大小,就再也不是個問題。若是要想嘗試不一樣區塊大小帶來的性能方面的影響,它能夠建立不一樣的新分片,在不一樣的新分片作不一樣的設置。
總結來講,這套機制使把以太坊將來的開發分紅兩層。第一層是現有的主分片,強調安全和保守。另一層是新的分片,直接用PoS協議,它能夠實現快速的算法和功能迭代。
若是要想實現分片制的設想,PoS扮演了很是重要的做用。不管是主分區裏從混合模式過渡到最終模式仍是新分區一步到位,PoS在以太坊接下來的發展中就很是重要。PoS是一種公有鏈的共識算法,是權益證實,它和PoW工做量證實不同的是,它不是解一個加密算題來給參與者進行獎勵的挖礦機制,而是在它的機制裏有一些驗證人,這些驗證人本身要持有區塊鏈上的代幣。這些驗證人按照必定的算法輪流提議出塊,全部的驗證人爲這個新的塊進行投票。在投票的時候,每個投票人的投票權重跟它的代幣數量成正比。若是驗證人的投票行爲是正確的,他就會獲得獎勵。若是他做弊,那麼他會被斷定爲以不符合協議的方式進行投票,他的代幣會被懲罰沒收。因此PoS基於經濟機制來得到共識,而且得到網絡的安全性。
PoS的優勢有三個。第一是明確的經濟安全性,由於它再也不是經過挖礦的競爭實現共識,因此在鏈上治理這塊就能夠制定很是明確並且有針對性的獎懲措施。在PoW的機制裏,要想進行51%攻擊,代價很低,僅需電力消耗和設備損耗。但PoS不一樣,它的懲罰很是嚴重,當你進行51%的攻擊,治理算法就會發現,你全部的代幣就會被沒收。因此它的經濟安全性,比PoW高。第二,減小集中化風險。由於PoW挖礦機制使得它有集中化傾向,在PoS裏面1塊錢就是1塊錢,你的錢和股份是平等的,減小了集中化風險。第三,提升能源效率。咱們都知道,比特幣挖礦消耗的能量至關於厄瓜多爾整個國家一年的耗電量。但切換到PoS上,綠色環保,很是值得提倡。
以太坊經過Casper的機制來實現PoS。Casper由兩個項目組成:Casper由兩個項目組成:Casper CBC和Casper FFG。FFG以保守的方式,在PoW 基礎上實施了權益證實。簡單地說,依然經過PoW 算法增長區塊,可是每50個塊有一個PoS 「檢查點」,經過網絡驗證人來評估區塊的最終有效性。FFG解決的是短時間內將主鏈遷移到PoS上,實現混合的PoS模式,只是過渡方案。而CBC是最終方案,從形式化的設計和形式化建設方面都是正確的算法。