1. 程式人生 > >第18講 | 智能合約與以太坊

第18講 | 智能合約與以太坊

圖靈 bitcoin 得到 bug 仲裁 edi asi 分叉 同時

  在前面的文章裏,我們介紹了區塊鏈的核心技術,也穿插介紹了一些項目。然而每個區塊鏈都有自己的特色,接下來我們將針對每個項目進行詳細講解。今天我們就來講講智能合約和以太坊項目。

  今天我們從智能合約這個概念入手,聊聊什麽是以太坊項目以及它的發展歷史。最後還會介紹幾款錢包給你,希望通過今天文章的講解,你也可以嘗試在以太坊上編寫簡單的智能合約。

智能合約的概念

  不同於法律意義上的合約概念,區塊鏈領域的合約表達的是可以“自治自理”的 計算機協議,這套協議具有自我執行、自我驗證的屬性。

  如果完全從技術角度來看,智能合約等價於一段事先就被規定好邏輯和條款的計算機代碼被激活運行的狀態,同時,智能合約也提供了通用的用戶接口,用戶可以通過接口與用戶交互。

  智能合約這一概念早在20世紀90年代就有人提出,這個人是從事智能合約和數字貨幣研究的尼克薩博(Nick Szabo)博士,尼克1996年在《Extopy》期刊上發表了對智能合約的描述,他認為智能合約是一個由數字表單指定的承諾,這個承諾包含關系到多方執行的一組協議。

  從定義中我們可以得知,智能合約由多個協議組成,這些協議包含了用戶接口,能表達用戶的承諾,它可以安全有效地確定公共網絡上的關系。

  換句話說,智能合約是一個由計算機處理、可執行合約條款的交易協議,其總體目標是滿足協議既定的條件,例如支付、抵押、保密協議。這可以降低合約欺詐造成的損失,降低仲裁和強制執行所產生的成本以及其他的交易成本。

  我們舉個實際的例子解釋一下,今年4月9日,上海某建設銀行支行開放了“無人銀行”,銀行中充斥了眾多機器和顯示屏,智慧櫃員機、VTM機、外匯兌換機、VR設備和兩臺機器人代替了傳統的櫃臺。

  這裏的智慧櫃員機、外匯兌換機器人眾多電子設備都可以認為是智能合約的一種表現形式,用戶在辦理銀行業務時,如辦理大額匯兌業務,業務流程和邏輯依據已經定在程序中,用戶只需要按照操作一步一步進行,辦理完成後即可獲得單據。

  這裏“既定的業務流程、機器人模樣的人機交互界面、雙方同意承諾”組成了智能合約的概念,它甚至具有一定的法律效力。

  薩博提出的是智能合約的概念,以及我們舉的例子,都是廣義的智能合約概念。智能合約具有多種實踐形式,而在區塊領域所說的智能合約概念,我們其實是指Blockchain-based這種形式。

  在薩博的智能合約概念中提到了開放式網絡,而我們知道開放式網絡的基本要求就是拜占庭容錯,通過前面文章的講解我們知道,區塊鏈天然具有拜占庭容錯特性。所以如果在區塊鏈上實踐智能合約這個概念,兩者會非常契合,天造地設。

  首先實踐了智能合約這一概念的是比特幣,比特幣腳本(bitcoin script)包含了5種標準交易腳本,這些腳本的功能不僅僅提供了普通單人支付的情況,它還提供了多方共同簽名支付的腳本,叫做多重簽名支付,多重簽名支付可以看成是薩博語義下的智能合約。

  除了比特幣,發揚光大智能合約這個概念的區塊鏈項目就是以太坊了,下面,我重點來介紹一下以太坊項目。

以太坊及其發展歷史

  以太坊Ethereum項目的目標是打造一個去中心化的新一代互聯網應用平臺,這個平臺稱作Dapp平臺。

  這些Dapp基於以太坊智能合約虛擬機開發、編譯、部署,並且可以自定義業務邏輯,部署後全網可見且自動執行,理想情況下不存在宕機、審查、欺詐、第三方幹預的情況。

  • 2013年底以太坊的創始人Vitalik在比特幣開發者社區提出了可以運行圖靈完備(Turing-complete)形式的應用,但這一思想並沒有得到比特幣社區的支持。
  • 2014年,Vitalik帶著自己的想法,宣布以太坊項目正式成立,2014年上半年開始籌集資金,聚攏一些早期開發者,同年7月份進行了為期42天的ICO,共籌集了超過1800萬美元的比特幣。
  • 2015年7月,第一個版本的以太坊發布,主網正式上線,這一階段Bug和設計缺陷較多,多是開發者在使用。
  • 2016年以太坊發布第二個大版本Homestead,用戶逐漸多了起來,同期也吸納了不少Dapp開發者。
  • 2016年6月,以太坊上發生了著名的黑天鵝事件——TheDAO事件,這打開了ICO市場,同時也造成了以太坊社區分叉,形成了以太坊和以太坊經典兩個代幣。
  • 2017年4月,ICO風靡中國,ERC20提供了低成本方便高效的資金募集方式,為ICO提供了極大的便利,趁著數字貨幣牛市,以太坊的價格漲幅達十多倍,2018年1月以太坊價格突破1000美元。 

以太坊的核心概念

  以太坊核心概念包括:智能合約虛擬機EVM和Solidity編程語言、賬戶模型、以太幣和Gas,交易和消息。

1.智能合約虛擬機EVM和Solidity編程語言

  以太坊的核心概念首先是智能合約。

  智能合約包含兩部分,一部分是開發語言,主要以Solidity為主,Solidity與Javascript語言在使用上十分接近,這極大地降低了Dapp開發人員的學習成本。

  Dapp開發者編寫好代碼以後,使用Solidity編譯成十六進制字節碼,然後部署到EVM上,也就是把合約廣播到全網,等礦工打包後就形成了常年運行的Dapp了。

  另一部分就是EVM。 EVM是以太坊智能合約虛擬機,我們可以等價理解它為Javascript、Python等腳本語言的執行引擎。

  它是一個輕量級的虛擬機隔離環境,它並不提供訪問本地網絡、進程、文件系統的功能,它更像是一個封閉的容器,這個容器裏面裝了一個正在運行Dapp,可以看成是無法和外界交互的Docker Container。

  Dapp在運行過程中,可以被請求或其他事件觸發,然後執行相應的邏輯,這些請求和事件是由以太坊上的交易產生的,不是來自本地操作系統的事件。

  Dapp運行過程中,每次狀態發生變化,則意味著全網同步更新,大家的計算結果都是一致的,這有兩個特性:

  1. 所有Dapp的計算結果經過全網共識,一旦確認過幾乎無法被偽造和篡改;
  2. 由於必須經過全網共識,所以這限制了整個網絡的容量。

2.賬戶模型

  以太坊並沒有采用UTXO模型,也不同於銀行賬戶,它是由以太坊開發者設計了自己的賬戶模型。

  以太坊上的賬戶有兩種類型,第一類叫做合約賬戶CA(Contracts Accounts),第二類叫做外部賬戶EOA(Externally Owned Accounts)。

  簡單理解就是:CA是智能合約代碼用的賬戶,EOA是人用的賬戶;所以CA可以存儲並執行智能合約代碼,它的智能被EOA激活,它也不保存和存儲私鑰,合約賬戶可以調用其他合約。

  EOA則是人們直接控制的賬戶,可以存儲以太幣,可以發送交易到合約賬戶,觸發既定的邏輯。EOA賬戶由公鑰標識,由對應的私鑰控制。

  當合約賬戶被調用時,存儲其中的智能合約可以在礦工處的虛擬機中自動執行,並消耗Gas,如果Gas不足則會觸發“Out of Gas”異常,被終止執行。

  無論是CA還是EOA,在以太坊內部都被看做狀態對象(state objects),意思就是說這些賬戶都有自己的狀態,EOA具有以太幣余額的狀態,而CA除了余額,還多了合約存儲狀態。

3.以太幣和Gas

  Gas是執行智能合約操作的燃料,智能合約的每一個步驟都會消耗Gas,Gas是由以太坊的平臺代幣以太幣轉化而來,最小單位是wei,1ETH 相當於 10的18次方 wei。

  以太幣可以通過PoW挖礦而產生,目前以太坊主要通過GPU挖礦。挖出一個塊可以換得5個以太幣,並且還有一定的交易費、以及叔伯塊的獎勵。今年4月6日爆出著名礦機芯片廠商比特大陸已經開發出針對以太坊的ASIC專業礦機,相比GPU的效率提升2.5倍。

4.交易和消息

  以太坊上的交易與比特幣中的UTXO交易不同,它是指EOA賬戶將一個經過簽名的數據包發送到另外一個賬戶的過程,這個過程產生的賬戶狀態變化將被存儲到以太坊區塊鏈上。

  以太坊上除了交易還有消息這個概念,消息指一個合約賬戶調用其他合約賬戶的過程,可以類比函數調用過程。

  所以以太坊上的Dapp如果被觸發,有兩種可能,第一種是交易觸發,第二種是消息觸發。

  這兩種的區別在於前者是EOA發起的,後者只能是其他合約賬戶發起的。

  狀態對象的狀態變化被以太坊共識機制的記錄下來,交易和消息驅動著狀態的變化,於是,在一個開放式的網絡中構建一個全球共享的Dapp變得十分方便。

  以太坊上智能合約具有全網準實時同步、準確執行、去中心化運行、較低的人為幹預風險等特性,EVM和Solidity為全球開發者提供了較低的進入門檻。

  與比特幣的主要區別

  以太坊項目又被稱作區塊鏈2.0項目,這裏2.0就是指智能合約。那麽以太坊與比特幣相比,到底智能在那裏呢?我們具體來看看。

  與比特幣相比,以太坊首先不是一個單純的數字貨幣項目,它可以提供全世界無差別的區塊鏈智能合約應用平臺,這個平臺基於我們前面文章所介紹的區塊鏈四大核心技術要素,即P2P網絡、共識機制、賬戶模型、加密模塊。

  除了以上的四個技術要素,以太坊還推出了EVM——以太坊智能合約虛擬機,並且,它還推出了自己的智能合約語言Solidity。

  於是,區塊鏈的開發者因為智能合約的出現開始分為兩類。第一類是公鏈底層開發者,主要是以C++和Go語言為主的全節點開發者,他們需要對區塊鏈各個技術模塊有很深的理解。

  第二類是智能合約開發者,也就是應用開發者,這類開發者對區塊鏈的運行原理不需要理解很深,只需要會編寫Solidity,了解規範即可。

  除了以太坊智能合約這個概念以外,它還設計了下面的內容。

  1. 研究並實現了自己的PoW挖礦算法——ETHASH,這是一個內存困難型的挖礦算法。
  2. 叔伯塊激勵機制,降低了挖礦中心化的趨勢。 取消了UTXO模型,采用了賬戶模型和世界狀態,提供了數據結構的可塑性。
  3. 設計了Gas機制,避免程序死循環消耗全網資源的情況出現。 研究並實現了自己的PoS共識算法——Casper,可防止Nothing-at-Stake攻擊。
  4. 以太坊提供了在區塊鏈自由編程的能力,智能合約讓所有人得以開發屬於自己的Dapp,這是與比特幣作為單純的數字貨幣所不具有的能力。

總結

  本篇我們介紹了智能合約的概念以及以太坊項目,並且講解了與比特幣的主要區別,以太坊上的一些核心概念,下一篇我們將結合實際案例講解智能合約,帶領你認識一些智能合約模板,並順便介紹一下其他區塊鏈智能合約平臺。

  參考鏈接:

https://en.wikipedia.org/wiki/Smart_contract http://tech.ifeng.com/a/20180413/44947993_0.shtml

第18講 | 智能合約與以太坊