作者:qinyutong、chengyueqiang

智能合約 (smart contract) 是一種由事件驅動的、具有狀態的代碼合約和算法合同  [ 11 ] ,隨着以比特幣爲代表的區塊鏈技術的蓬勃發展 , 區塊鏈技術已經開始逐步超越可編程貨幣時代而進入智能合約時代。智能合約作爲區塊鏈的 核心部分,在技術中得到廣泛應用,也是令區塊鏈成爲具有一定顛覆性技術的原因之一。本文通過對智能合約的背景知識以及流程介紹,總結出當前智能合約的特點和應用領域,從而爲區塊鏈智能合約技術的發展提供一定參考。

1   引言

區塊鏈利用分佈式節點共識算法對數據進行生成和更新,使用由自動化腳本代碼組成的智能合約來編程和操作數據的一種全新的分佈式基礎架構與計算範式[ 10 ],本身具有去中心化的特性。

區塊鏈的發展主要分爲三大階段[ 6 ],第一階段爲以比特幣爲首的可編程貨幣,第二階段爲以智能合約爲首的可編程金融,第三階段爲以去中心化應用爲首的可編程社會。比特幣發展迅速,區塊鏈發展階段逐漸向第二階段過渡,以以太坊爲首的智能合約技術得到了廣泛關注。

1995 年,由密碼學家 Szabo 提出智能合約這一概念,由於當時缺少可信的執行環境,智能合約並沒有被應用到實際產業中。比特幣誕生後,由於比特幣的底層技術區塊鏈具有去中心化的特性,滿足智能合約所需的可信的執行環境,區塊鏈可以提供參與的各個節點的互信。

智能合約是一種計算機協議,在協議制定和部署後,不需要外加人爲干預,即可實現自我執行和自我驗證[ 4 ]。從技術角度來說,智能合約可以被看作一種計算機程序,這種程序可以自主地執行全部或部分和合約相關的操作,併產生相應的可以被驗證的證據,來說明執行合約操作的有效性。在部署智能合約之前,與合約相關的所有條款的邏輯流程就已經被制定好了。智能合約通常具有一個用戶接口,以供用戶與已制定的合約進行交互,這些交互行爲都嚴格遵守此前制定的邏輯。得益於密碼學技術,這些交互行爲能夠被嚴格地驗證,以確保合約能夠按照此前制定的規則順利執行,從而防止出現違約行爲。

1: 傳統合約和智能合約的比較

智能合約是在傳統合約基礎上對安全性、唯一性進行改進的一種合約,用數字形式定義的承諾來保障合約參與者的協議安全可靠。

區塊鏈的智能合約最早建立在以太坊,用一段代碼來實現條款在處理硬件和軟件中的應用,這段代碼運行在以太坊的虛擬機中,按照特定程序執行操作,在相應的時間節點完成條款內容。

以太坊是一個開源的具有智能合約功能的公共區塊鏈平臺,以太坊項目借鑑了比特幣區塊鏈的技術,對它的應用 範圍進行了擴展。如果說比特幣是利用區塊鏈技術的專用計算器,那麼以太坊就是利用區塊鏈技術的通用計算機。簡 單地講,以太坊 = 區塊鏈 + 智能合約。

與比特幣相比,以太坊最大的不同點是: 它可以支持更加強大的腳本語言,即使用一套圖靈完備的腳本語言來建 立應用,允許開發者在上面開發任意應用,實現任意智能合約,這也是以太坊的最強大之處。作爲平臺,以太坊可以類比於蘋果的應用商店,任何開發者都可以在上面開發應用,並出售給用戶。

2         智能合約類型

智能合約分爲廣義智能合約和狹義智能合約。廣義的智能合約是指運行在區塊鏈上的計算機程序,適用範圍較廣。 狹義的智能合約是運行在區塊鏈基礎架構上,基於約定規則,由事件驅動、具有狀態、能夠保存賬本上資產,利用程序代碼來封裝和驗證複雜交易行爲,實現信息交換、價值轉移和資產管理,可自動執行的計算機程序 [ 9 ]。

2.1       腳本型智能合約

將比特幣中的智能合約稱爲腳本型智能合約。由於比特幣中的腳本僅包含指令和數據兩部分,其中涉及到的腳本指令只需要完成有限的交易邏輯,不需要複雜的循環、條件判斷和跳轉操作,功能有限但編寫較爲容易,支持的指令不到 200 條。

2.2       圖靈完備型智能合約

將主要運行在以太坊和超級賬本中的智能合約稱爲圖靈完備型智能合約。腳本語言被設計成爲僅在有限範圍內執行有限功能的簡單執行語言,是非圖靈完備的語言。使用腳本語言編寫的交易指令雖然能夠滿足比特幣應用,但無法適應以太坊平臺的開發需求。目前,以太坊主要使用 Solidity 和 Serpent 兩種智能合約開發語言。

2.3       可驗證合約型智能合約

將正在研發中的 kadena項目中的智能合約稱爲可驗證合約型智能合約。可驗證語言的語法類似於 Lisp語言,用於編寫運行在區塊鏈 Kadena上的智能合約,可實現合約的數據存儲和授權驗證等功能。爲防止在複雜合約的編程過程中可能存在的安全漏洞以及因此而帶來的風險,可驗證合約型語言採用非圖靈完備設計,不支持循環和遞歸。該語言編寫的智能合約代碼可以直接嵌入在區塊鏈上運行,不需要事先編譯成爲運行在特定環境(如以太坊 EVM)的機器代碼。

3         智能合約語言

3.1       Solidity

Solidity 可以用來開發合約並編譯成以太坊虛擬機字節代碼,運行在Etheream 虛擬機(EVM)之上。是靜態類型語言,支持繼承、庫和複雜的用戶定義類型等特性。雖然 Solidity 語法與  Javascript 較爲接近,是一種面向對象的語言,但是兩者又有許多不同:

  1. 由於語言內嵌框架是支持支付的,所以可以提供如 payable之類的關鍵詞,實現在語言層面直接支持支付,更爲簡便;

  2. 由於以太坊底層是基於賬戶而非 UTXO,故存在特殊類型Address ,可以用於定位用戶和合約,並定位合約的代碼;

  3. 由於智能合約是將原來的一個簡單函數調用變成了網絡節點中的代碼執行,故在去中心化的網絡運行環境中,會更加強調合約或函數執行的調用方式;

  4. 由於爲了保證合約執行的原子性,以避免中間狀態出現的數據不一致, Solidity 的異常機制一旦出現異常,所有執行都會被回撤。

常用的 Solidity  集成有  Remix、Visual studio  Extension  等。以編譯器  Remix  爲例,Remix  是基於瀏覽器的IDE,集成了編譯器和 Solidity運行時的環境,不需要額外的服務端組件。這裏用 Solidity開發“HelloWorld”。

可以看到,在 decoded output 中返回 HelloW orld ! 。

圖1: 使用Solidity 開發“Hello World”

3.2       Serpent

Serpent和Python 類似,使用用 LLL 編譯,最終會被編譯爲 EVM 字節碼。可以用於開發合約編譯成以太坊虛擬機字節代碼。Serpent 是一種分組加密算法,更加簡潔,將低級語言在效率方面的優點和編程風格的操作簡易相結合,同時合約編程增加了獨特的領域特定功能。

3.3       Lisp LikeLanguage

LispLikeLanguage(LLL)是和 Assembly類似的低級語言。更爲簡單,本質上只是直接對以太坊虛擬機的一點包裝。是一門 Lisp風格的底層編程語言,持續更新,並且與 Solidity同屬一個資源庫。

4         智能合約運行機制

以以太坊開發平臺爲例,智能合約運行機制主要包含以下階段:

  1. 生成代碼:智能合約一般具有值和狀態兩個屬性,代碼中用 If-Then What-If語句預置了合約條款的相應觸發場景和響應規則,在合約各方面內容都達成一致的基礎上,評估確定該合同是否可以通過智能合約實現,即“可編程 ,然後由程序員利用合適的開發語言將以自然語言描述的合同內容翻譯爲成爲可執行的機器語言;

  2. 編譯:利用開發語言編寫的智能合約代碼一般不能直接在區塊鏈上運行,而需要在特定的環境 以太坊爲 EVM, 超級賬本爲 Docker容器 中執行,所以在將合約文件上傳到區塊鏈之前需要利用編譯器對原代碼進行編譯,生 成符合環境運行要求的字節碼。

  3. 提交:智能合約的提交和調用是通過“交易”完成,當用戶以交易形式發起提交合約文件後,通過  P2P   網絡進行全網廣播,各節點在進行驗證後存儲在區塊中;

  4. 確認:被驗證後的有效交易被打包進新區塊,通過共識機制達成一致後,新區塊添加到區塊鏈的主鏈。根據交易生成智能合約的賬戶地址,之後可以利用該賬戶地址通過發起交易來調用合約,節點對經驗證有效的交易進行處理,被調用的合約在環境中執行。

 

圖 2: 合約運行機制

5         智能合約項目

最簡單的合約是:信息上傳區塊鏈——雙方簽字確認——雙方達成共識——合約被存儲。

圖 3: 合約基本模型

Language   Language  是一種安全穩定的分佈式語言,符合  Szabo  對智能合約設計理念的特點,所有的遠程通信會被加密。

Hawk Hawk 是一種去中心化的智能合約系統,是一個用智能合約構建隱私保護的框架[ 2 ],在這個系統中不會以明確的方式將金融交易存儲在區塊鏈中,Hawk 編譯器負責將程序編譯爲區塊鏈和用戶之間的加密協議。

OpenBazzar    OpenBazzar  平臺是一家利用比特幣進行交易的去中心化電商平臺,是一個開源平臺,直接將用戶與用戶連接開展交易,實現點對點交易網絡,買賣雙方可以直接進行交易,不需要藉助中心化平臺,保證了隱私。

Ethereum    Ethereum  是具有圖靈完備編程語言的區塊鏈平臺,包含了公有鏈和私有鏈,可以創建任何應用。使用共識機制中的 PoW 機制,擁有更高的處理速度和精度,可以在沒有處理所有交易的情況下驗證應用狀態,目標成

爲分佈式應用平臺的脊樑。但區塊的構造時間受到交易處理速度的影響,建塊速度受到很大影響。

Codius   Codius 是由 Ripple 實驗室發佈的智能協議,具有去中心化、安全性高等特點,可以實現點對點交易網絡, 是一種開源平臺,應用於 Ripple 平臺上,實現的功能是引導貨幣流通。

Hyperledger Hyperledger是一種 Linux 基金會下的區塊鏈開源平臺,以容器的形式運行智能合約,具有較高安全性。

6         智能合約基本特點

6.1       優勢

可信性 智能合約的承諾包含兩方面,一是自動,無需信任和公正地執行合約;二是直接,在合約執行的各個環節中取消中間人這一角色[ 5 ]。智能合約的所有條款和執行過程是提前制定好的,並由計算機絕對執行。因此所有執行的結果都是準確無誤的,不會出現不可預料的結果。

交易無需第三方  智能合約不需要中心化的權威來仲裁合約是否按規定執行,合約的監督和仲裁都由計算機來完成[ 1 ]。在一個區塊鏈網絡中一般不存在一個絕對的權威來監督合約的執行,而是由共識機制來判斷合約是否按規定執行,監督方式通常由PoW 或 PoS 技術實現。由於智能合約的數字化特點,數據被存儲在區塊鏈中,使用加密代碼強制執行協議,保證交易可追蹤和不可逆轉。

高效的實時更新  由於智能合約的執行不需要人爲的第三方權威或中心化代理服務的參與,其能夠在任何時候響應用戶的請求,大大提升了交易進行的效率。用戶只需通過網絡對業務進行辦理,節省了人力、物力。

更低成本 智能合約具有去人爲干預的特點,其能夠大大減少合約履行、裁決和強制執行所產生的人力成本,要求合約制定人能夠將合約的各個細節在合約建立之初就確定下來。

6.2       目前存在的問題

不可撤銷性 智能合約自動履行合約內容,但在現實生活中,合同可能會因爲一些不可抗力、違法等原因解除。合 同法中,對於合同的要求是避免律師預測和協商可能出現結果的靈活性。但由於區塊鏈的不可修改性,智能合約一旦觸發就會自動履行,不可撤銷,具有一定的僵化特性。

法律效力 智能合約的起草需要通過第三方計算機程序員,而在合約出現問題時若判定是第三方計算機程序員的責 任,那麼對於錯誤的算法應該如何追究責任。在法律管轄權問題上,智能合約作爲一種新興合約方式,哪些法院可以受理訴訟、現有的法律條款應該如何修改等問題都是亟待解決的。

安全漏洞 智能合約的漏洞分爲交易順序依賴漏洞、時間戳依賴漏洞、處理異常漏洞和可重入缺陷漏洞 [ 3 ] ,依賴性 漏洞是由於智能合約的執行正確與否與以太坊的狀態有關,而有效的交易可能會影響以太坊的狀態。當一個新的區塊 含有兩筆交易時,交易的先後順序可能會引起以太坊的最終狀態不同,而交易的順序取決於礦工,從而導致智能合約 的執行依賴於礦工的操作 [ 8 ]。時間戳依賴漏洞是由於某些智能合約是根據區塊中的時間戳所執行的,而時間戳是由 礦工根據自身的時間所設置的,若時間被攻擊者所修改,可能會導致產生一定風險。在不同的智能合約相互調用時可 能出現處理異常漏洞,若被調用的合約產生錯誤返回值卻沒有被正確驗證時,可能會遭受到攻擊。若一個函數在執行 完成前被調用了數次,導致發生意料不到的行爲時,可重入漏洞就可能出現,可重入缺陷漏洞是指攻擊者可以利用調用了智能合約而狀態未改變的中間狀態對合約進行反覆的調用。

7         智能合約應用場景

7.1       法律方面

在法律層面,區塊鏈智能合約可以被看作爲智能合同[ 10 ],即運用區塊鏈技術來實現法律合同,將書面化的法律語言轉化爲可被自動化執行的技術。

以數字版權保護爲例,類似於自由文化影響下的知識共享協議的開放式版權協議不斷出現,如何保證版權的實用行爲,是數字版權保護的核心問題。由於傳統的版權保護具有時間、空間的限制,在版權登記、監管機制等方面容易受到影響,而數字版權保護的出現極大改善了這一問題,更好適應了數字資產形式變化多樣、易傳播的特點。

在版權登記方面,利用區塊鏈技術原理中計算值的唯一性和不可篡改性,對不同的作品生成不同的計算值,將計算值視爲作品的一種代表方式進行關聯,可以減少作品追溯和存儲的成本,簡化作品查詢流程。

在署名方式方面,使用數字身份對計算值對應的作品進行署名,使用加密技術對數字作品進行保護,保障作品不會被篡改。

根據合約代碼和自然語言的比例,智能合約有以下幾種表現形式:1、完全以代碼形式編寫的合約;2、以代碼和自然語言兩種形式書寫的合約。如果法律認爲無論是以自然語言書寫還是以計算機語言編寫,都視爲合同的書面形式,法律效力是相同的,那麼兩種語言編寫的合約構成了完整的合同。

智能合同可能面臨的問題有,第2 種合同是以兩種語言表現的,如果這兩個版本合約內容上有衝突,以哪一個版本爲準,無論是以自然語言版本爲準還是以代碼語言爲準,都需要法律進一步明確並給出司法解釋。

7.2       金融方面

在金融層面,因爲智能合約可以在區塊鏈中運作,從而充當很多角色。智能合約可以作爲經濟參與者,接受信息、存儲信息,消除人工參與,降低成本,保證合約交易的高效。

以物聯網爲例,當前社會物聯網包括數十億個通過互聯網共享數據的節點,通過物聯網、區塊鏈以及智能合約技術的融合應用,物聯網支持的物理設備或財產,如公寓、汽車、停車場、自行車等,都可以允許人們在沒有中間商的情況下出租、出售或共享[ 7 ]。

當前租房市場在押金方面存在很多爭議,一些不良房東在收到押金後就卷錢跑路。將智能合約引入到租房押金中, 在所有者設定出租房屋的金額後,用戶通過交易向區塊鏈支付押金,從而觸發許可,獲得房屋的智能鎖權限。與此同時,押金被鎖定在區塊鏈中,直到用戶決定向區塊鏈發送另一個交易來返回虛擬密鑰(如支付租金),智能合約自動執行,在扣除押金中的租金後將剩餘金額髮送給所有者,交易完成。這一過程將縮減不必要的時間,只需要通過手機進行操作,提高效率的同時降低風險。

但智能合約可能會帶來新的金融犯罪行爲和風險,例如機密信息泄漏、加密密鑰被盜等犯罪行爲,而當前的法院和監管機構暫時很難跟上這一技術的發展步伐,由於智能合約具有一定的複雜性,在一些消費者眼裏是難以理解的,這也是智能合約實施中需要解決的問題之一。

7.3       公益慈善

在公益慈善層面,當前面臨的最大問題是資金流向不透明,導致很多人並不會使用衆籌平臺來進行慈善捐款。衆籌是一種通過互聯網方式發佈籌款項目並籌集資金的方式,衆籌更爲開放,具有門檻低、依靠大衆力量等特點。如何解決資金信息公開透明,加強監管和監督,成爲當前公益慈善的熱點討論之一。

區塊鏈是遺傳使用密碼學方法產生關聯的數據塊,每一個數據塊中都涵蓋了一定時間的交易信息,每個數據塊都包含上一個塊的哈希值,以用於驗證其信息的有效性 [ 12 ]。智能合約可以通過代碼合約實現對衆籌系統價值流的控制,將衆籌業務流轉換爲智能合約代碼。區塊鏈的不可更改和共識機制保證了數據的真實和可靠性,可以提高衆籌平臺的公信力。

  圖4: 子系統節點部署

衆籌區塊鏈總體設計包含雙數據系統、雙私有鏈設計、高速與信譽機制、智能合約設計、審計與監督設計、可擴展鏈式設計。

由於區塊鏈的分佈式存儲架構,可以在不同用戶處放置不同權限的節點,讓不同用戶參與到管理中,對於發佈的消息實現可追蹤和不可修改。通過不斷互聯,使區塊鍊形成互聯鏈、鏈中鏈,按照統一標準進行管理監管,解決慈善公益的監管和監督問題。

參考文獻

[1]      Bartoletti, M.,and Zunino, R.  Bitml:  A calculus for bitcoin smart contracts.  pp.83–100.

[2]      Kosba, A., Miller, A., Shi, E., Wen, Z., and Papamanthou, C. Hawk: The blockchain modelof cryptographyandprivacy-preservingsmartcontracts.pp.839–858.

[3]      Luu, L., Chu, D.-H., Olickel,  H.,  Saxena, P.,  and  Hobor, A.  Making smart contractssmarter.  pp.254–269.

[4]      Mourouzis, T., and Tandon,  J. Introduction to decentralization and smart contracts, 03     2019.

[5]      Pfitzmann,  B.,  Schunter, M.,  and  Waidner,  M. Optimal efficiency of optimistic contractsigning.

[6]      V.Buterin.  Anext-generation smart contract and decentralized application platform.  white paper      (2014).

[7]      劉德林 區塊鏈智能合約技術在金融領域的研發應用現狀、問題及建議 海南金融 000 , 10(2016),27–31.

[8]      張傑 . 區塊鏈安全綜述 . 西安文理學院學報 ( 自然科學版 ) (2020),42–55.

[9]      王羣, 李馥娟, 王振力, 梁廣俊 , and 徐傑 . 區塊鏈原理及關鍵技術 . 計算機科學與探索 , 1–24.

[10]      賀小苗 . 區塊鏈技術的應用 : 智能合約及法律問題前瞻 . 現代商業 000 , 16(2018),153–154.

[11]      賀海武 , 延安 , and陳澤華 . 基於區塊鏈的智能合約技術與應用綜述 . 計算機研究與發展 55 , 11(2018),112–126.

[12]      黃潔華 , 高靈超 , and許玉壯 . 衆籌區塊鏈上的智能合約設計 . 信息安全研究 (2017).

*點擊圖片閱讀《區塊鏈共識機制介紹》

相關文章