朱巖 王靜 郭倩 劉國偉
摘 ? 要:智能合約被認為是第二代區(qū)塊鏈的技術核心,它是區(qū)塊鏈從虛擬貨幣、金融交易協(xié)議到通用工具發(fā)展的必然結(jié)果。然而,目前智能合約技術尚不完善,對智能合約概念及內(nèi)涵缺乏較為系統(tǒng)的分析,對基于區(qū)塊鏈的智能合約軟件系統(tǒng)也缺少體系上的歸納與總結(jié)。有鑒于此,文章從智能合約的基本定義入手,介紹了智能合約的發(fā)展歷史、分類、規(guī)范等概念,進而從抽象計算模型角度出發(fā)給出了智能合約的通用架構(gòu),并對智能合約語言與編譯機制、合約部署機制與合約運行過程予以詳盡分析,上述結(jié)果將有利于把握智能合約未來研究方向。
關鍵詞:智能合約;語言;框架;部署;運行機制
中圖分類號: TP312 ? ? ? ? ?文獻標識碼:A
Abstract: Smart contracts are considered to be the technical core of the second-generation blockchain, which is the inevitable result of the development of blockchain from virtual currency, financial transaction protocols to general tools. However, the current smart contract technology is not perfect, and there is a lack of a systematic analysis of the concept and connotation of smart contracts, as well as a systematic induction and summary of the smart contract software system based on blockchain. In view of this, this paper starts with the basic definition of smart contract, introduces the development history, classification, specification and other concepts of smart contract, and then gives the general framework of smart contract from the perspective of abstract computing model. Moreover, we provided a detailed analysis of the smart contract language and compilation mechanism, contract deployment mechanism and contract operation process. The above results will help to grasp the future research direction of smart contracts.
Key words: smart contracts; language; frame; disposition; operating mechanism
1 引言
智能合約(Smart Contract)被認為是第二代區(qū)塊鏈的技術核心,它是區(qū)塊鏈從虛擬貨幣、金融交易協(xié)議到通用工具發(fā)展的必然結(jié)果。目前幾乎所有的區(qū)塊鏈技術公司都已在其產(chǎn)品中支持智能合約產(chǎn)品,例如,以太坊基于虛擬機的智能合約平臺、基于Bitcoin區(qū)塊鏈的RSK平臺、IBM公司提出的企業(yè)級HyperLeger Fabric平臺等,這些產(chǎn)品的推出極大的豐富了智能合約技術的內(nèi)涵和范圍,為區(qū)塊鏈技術在不同領域的現(xiàn)實應用奠定了基礎,也代表了區(qū)塊鏈未來發(fā)展的方向。
目前智能合約技術尚不完善,對智能合約概念及其內(nèi)涵缺乏較為系統(tǒng)的介紹,對基于區(qū)塊鏈的智能合約軟件系統(tǒng)也缺少體系上的歸納與總結(jié)。有鑒于此,本文從智能合約的基本概念入手,介紹智能合約的歷史、分類、規(guī)范等基本概念,進而對智能合約的框架、語言與編譯、部署與運行進行闡述。本文研究結(jié)果將為相關領域研究提供系統(tǒng)的指導,有利于更好地把握智能合約未來研究方向。
2 智能合約概念
合約是特定人之間簽訂的契約,在生活中隨處可見,是一個使未取得彼此信任的各參與方具有安排權利與義務的商定框架。而智能合約在廣義上講是指任何符合多方之間約定的計算機協(xié)議。首先,智能合約是一種可由計算機處理的協(xié)議,與通常由單臺計算機執(zhí)行的算法不同,它需要兩名或多名參與者共同協(xié)作來完成計算任務;其次,計算機協(xié)議的運行必須滿足參與者事先的約定,這既體現(xiàn)了協(xié)議遵循的可信性與合規(guī)性(或合法性),又體現(xiàn)了為了保證協(xié)議合規(guī)性所必需的技術手段,包括協(xié)議驗證、存證、爭議解決等[1]。此外,與傳統(tǒng)紙質(zhì)協(xié)議相比較,多方協(xié)議的計算機化以及相應保障技術的采納間接體現(xiàn)了智能合約的智能化。
上述定義較為廣泛,幾乎能夠?qū)⑺械挠嬎銠C協(xié)議囊括其中。據(jù)此,維基百科中給出了另一個針對法律合約的智能合約定義:“一種旨在以數(shù)字方式促進、驗證、加強合約協(xié)商和履行的計算機協(xié)議(Smart contract is a computer protocol intended to digitally facilitate, verify, or enforce the negotiation or performance of a contract)”。這一定義體現(xiàn)了智能合約的對象是法律合約,計算機協(xié)議是保障合約協(xié)商和履行的手段,該手段的目的是促進、驗證、加強合約協(xié)商和履行,而數(shù)字方式是手段的表現(xiàn)形式。
(3)智能合約運行環(huán)境
提供一種可信運行環(huán)境來運行智能合約代碼,包括接收外部發(fā)來的可信事件或內(nèi)部交易,建立可信智能合約運行虛擬機或沙箱,下載相關區(qū)塊鏈交易中的合約代碼,觸發(fā)通過執(zhí)行機構(gòu)和指令系統(tǒng)執(zhí)行合約代碼對事件或交易進行響應,并將輸出結(jié)果以交易方式寫入?yún)^(qū)塊鏈。
隨著智能合約技術的發(fā)展,已經(jīng)出現(xiàn)越來越多的工具輔助智能合約完成程序設計、代碼生成、部署與執(zhí)行等功能,也使得智能合約構(gòu)架日趨完善。
5 智能合約運行機理
為了更好地理解智能合約的原理,下面將分別對智能合約語言與編譯、智能合約的區(qū)塊鏈部署、以及合約代碼運行的機理分別加以介紹。
5.1 智能合約語言與編譯機制
智能合約語言是現(xiàn)實應用中各種業(yè)務與智能合約平臺之間的中介,也是幫助智能合約的使用者快速生成智能合約程序和代碼的重要工具[9]。各智能合約平臺都已推出自己的智能合約語言,例如,比特幣使用較為底層的棧式腳本語言、以太坊的智能合約目前支持Serpent和Solidity兩種編程語言(Serpent類似于Python語言,而Solidity類似于JavaScript語言)、超級賬本支持如Go、Java等語言直接編寫;此外,其它平臺也以傳統(tǒng)編程語言(如C、C++、Java)基礎上給出了智能合約開發(fā)工具。從語言形式和運行環(huán)境上講,目前的智能合約可分為三類。
(1)腳本型智能合約:通過區(qū)塊鏈中定義好的腳本指令和棧式類Forth語言完成基本的計算與條件控制,例如,比特幣腳本系統(tǒng)。
(2)通用型智能合約:其語言直接采用傳統(tǒng)程序語言,部署在虛擬機(VM)或容器(Docker)里,通過規(guī)定好的接口與區(qū)塊鏈進行交互。例如,超級賬本平臺中的鏈碼采用Java、Go等語言,Neo平臺支持將C#、Java和Python等多種語言編譯為NeoVM支持的指令集。
(3)專用型智能合約:模仿傳統(tǒng)程序語言并添加了與區(qū)塊鏈交互的特殊元素,如以太坊的Solidity語言,同時該語言含有gas計費等特殊功能。
智能合約是一個跨學科的概念,涉及商業(yè)、金融、合同法和信息技術,設計和開發(fā)智能合約也需要來自不同領域的專家的密切合作。然而,上述三種智能合約仍然建立在計算機編程語言基礎上,對于非計算機專業(yè)人員依然難以理解和掌握。
針對這一問題,近年來一種被稱為高級智能合約語言已引起學術界的廣泛關注,例如,面向現(xiàn)實合約的智能合約描述語言(SPESC)[10]。這種語言以現(xiàn)實合約的語法結(jié)構(gòu)為基礎,采用近似自然語言的形式進行編寫,明確定義了當事人的義務和權利,以及加密貨幣的交易規(guī)則,便于法律人士與計算機人員協(xié)作合約開發(fā),對于促進智能合約的專業(yè)性、易用性、可理解性,以及協(xié)作開發(fā)等方面能力有重要意義。
5.2 智能合約的區(qū)塊鏈部署
區(qū)塊鏈是智能合約得以實施的基礎,智能合約的自動化執(zhí)行、運行結(jié)果的有效性,以及合約代碼的安全都依賴于區(qū)塊鏈[11],因此智能合約與區(qū)塊鏈的有效結(jié)合與部署成為智能合約實施的關鍵[12~13]。為了便于被理解和掌握,智能合約通常將區(qū)塊鏈轉(zhuǎn)化為幾個抽象概念:共享數(shù)據(jù)庫、交易和區(qū)塊。下面將分別對其進行介紹。
首先,區(qū)塊鏈對智能合約而言可被視為全球共享的交易數(shù)據(jù)庫,其中,交易被用來描述每一次通過智能合約語言接口執(zhí)行的行為。全球共享則意味著每個人都可以通過智能合約網(wǎng)絡接口來讀取交易數(shù)據(jù)庫中存儲的條目。
其次,交易可理解為更改共享數(shù)據(jù)庫中某些內(nèi)容的行為,而且保證該行為必須被數(shù)據(jù)庫網(wǎng)絡中其它參與方所接受。后者也被稱為“all-or-nothing”原則,如果交易要同時更改兩個值,要么根本沒有完成,要么完成所有修改。此外,在將交易完成后,沒有其它交易可以更改這一過程。
再次,交易從安全性來看始終需要由發(fā)起方(創(chuàng)建者)進行簽名,這可保護訪問共享數(shù)據(jù)庫的特定修改必須經(jīng)過授權。從已有的數(shù)字貨幣交易可知,簽名機制可保證簡單的檢查即可確保只有持有該賬戶密鑰的人才能從該賬戶中轉(zhuǎn)移資金。
此外,智能合約所生成的交易將被捆綁到一個所謂的“區(qū)塊”中,然后將它被分發(fā)到共享數(shù)據(jù)庫的所有參與節(jié)點。如果兩筆交易相互矛盾,那么最后一筆交易將被拒絕,并且不會成為交易的一部分,因此,區(qū)塊被理解在時間上形成線性關系的存儲單元,并為智能合約選擇一個全球公認的交易順序,以解決沖突。總之,區(qū)塊鏈為智能合約提供了一種安全和一致性的共享交易數(shù)據(jù)庫。
最后,對于智能合約的使用者和編程人員而言,當前智能合約平臺已經(jīng)能夠屏蔽掉區(qū)塊鏈中的很多技術細節(jié),使得區(qū)塊鏈中的各種復雜機制(哈希、對等網(wǎng)絡、共識、挖礦等)變成了智能合約平臺提供的承諾。因此,開發(fā)和使用人員只需要關注自己的業(yè)務需求,充分利用智能合約平臺提供的部署工具,而不需要考慮如何將智能合約執(zhí)行代碼轉(zhuǎn)化為區(qū)塊鏈數(shù)據(jù)的具體實現(xiàn)。
5.3 合約代碼運行
當滿足觸發(fā)條件時,被部署在區(qū)塊鏈上的智能合約代碼將被區(qū)塊鏈系統(tǒng)自動執(zhí)行,并依照合約規(guī)定完成各種資產(chǎn)的轉(zhuǎn)移。這一過程需要貨幣激勵、執(zhí)行機構(gòu)、指令系統(tǒng)和觸發(fā)條件等機制相互協(xié)調(diào),才能保證合約代碼自動和無差錯地被執(zhí)行。
首先,獎勵機制是合約代碼執(zhí)行的必備條件,原因在于智能合約代碼是在區(qū)塊鏈節(jié)點內(nèi)(虛擬機、容器等)被執(zhí)行的,必然帶來存儲、計算、帶寬等方面的開銷,因此需要智能合約發(fā)布者預付一定量的貨幣(如以太網(wǎng)gas)作為獎勵。如果預付金額太小了,不足以執(zhí)行所有的操作,那么操作就會失敗,狀態(tài)將會回滾。
其次,執(zhí)行機構(gòu)是指智能合約代碼運行的環(huán)境,目前主要有腳本、容器、虛擬機等三種運行方式,具體特征為:
(1)腳本(Script)方式
最早在比特幣系統(tǒng)中被采用,是一種類似Forth語言的指令體系,由腳本解釋器解釋執(zhí)行,用于驗證該筆交易的合法性。交易一般會包括輸入腳本和輸出腳本兩個部分,分別用于解鎖上一筆交易的輸出以及設置該筆交易金額的解鎖條件。
(2)容器(Docker)方式
是不同于虛擬機的一種新型虛擬化技術,它只需要將智能合約所需要的依賴軟件打包即可獨立運行,而不需要一個附加的虛擬操作系統(tǒng)環(huán)境。它比虛擬機方式更為獨立和靈活,可調(diào)用的資源也更多。Hyperledger Fabric是典型使用容器方式的智能合約平臺。
(3)虛擬機(VM)方式
它通過在用戶程序和底層環(huán)境中增加的一層中間環(huán)境,提供一個完全對底層透明的執(zhí)行環(huán)境:屏蔽區(qū)塊鏈節(jié)點自身執(zhí)行環(huán)境的區(qū)別,在所有節(jié)點上運行均一致。它按照執(zhí)行方式分為兩種:基于棧(Stack)和基于寄存器(Register)的虛擬機,其中,基于棧的虛擬機是目前實現(xiàn)智能合約最多的方式,也演化出多種智能合約運行方法。
此外,指令系統(tǒng)在智能合約中也是較重要的概念。指令是智能合約發(fā)給運行環(huán)境的命令,智能合約的執(zhí)行代碼是由一系列的指令組成的,而指令系統(tǒng)是智能合約運行環(huán)境提供的語言系統(tǒng),是全部指令的集合,反映了運行環(huán)境所擁有的基本功能。因此,智能合約指令系統(tǒng)是由所采用的運行方式?jīng)Q定的。
最后,智能合約代碼中預置了合約條款的相應觸發(fā)場景和響應規(guī)則,運行環(huán)境需要根據(jù)可信外部事件和內(nèi)部交易狀態(tài),自動地判斷當前所處場景是否滿足合約觸發(fā)條件,嚴格執(zhí)行響應規(guī)則并向區(qū)塊鏈發(fā)送更新合約狀態(tài)的交易,經(jīng)共識算法認證后鏈接到區(qū)塊鏈中,使更新生效。
6 結(jié)束語
智能合約作為普遍認為的“第二代區(qū)塊鏈技術”,任何人都可接入其中,不需要事先審查或者預付成本,又可以移除經(jīng)濟交易中對第三方機構(gòu)的信任必要。本文對智能合約的研究進展進行了歸納總結(jié),介紹了智能合約的發(fā)展歷史以及基本概念、并詳細闡述了智能合約語言現(xiàn)有的分類和不同的編譯機制、智能合約在區(qū)塊鏈上的部署方式以及運行機制。
目前幾乎所有的區(qū)塊鏈技術公司都已在其產(chǎn)品中支持智能合約產(chǎn)品,例如,以太坊基于虛擬機的智能合約平臺、基于Bitcoin區(qū)塊鏈的RSK平臺、IBM公司提出的企業(yè)級HyperLeger Fabric平臺等。這些產(chǎn)品的推出極大的豐富了智能合約技術的內(nèi)涵和范圍,為區(qū)塊鏈技術在不同領域的現(xiàn)實應用奠定了基礎,也代表了區(qū)塊鏈未來發(fā)展的方向。但同時智能合約跨領域合作、標準統(tǒng)一、法律化結(jié)合等多個研究方向都尚不完善,這些問題的存在囿限著智能合約的市場普及和應用廣度,是現(xiàn)在智能合約研究極具挑戰(zhàn)性的方向。
基金項目:
1.國家科技部重點研發(fā)計劃(項目編號:2018YFB1402702);
2.國家自然科學基金(項目編號:61972032)。
參考文獻
[1] Bartoletti M, Pompianu L. An empirical analysis of smart contracts: platforms, applications, and design patterns[C]// International conference on financial cryptography and data security. Springer, Cham, 2017: 494-509.
[2] Szabo, Nick. "Smart contracts: Building blocks for digital markets[N]. 1996." (2001).
[3] Szabo N. Smart contracts in essays on smart contracts, commercial controls and security (1994)[EB/OL].http://www. fon. hum. uva. nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best. vwh. net/smart. contracts. html.
[4] Beaumont P H. Fixed-income Synthetic Assets: Packaging, Pricing, and Trading Strategies for Financial Professionals[M]. John Wiley & Sons, 1992.
[5] 賀海武, 延安, 陳澤華. 基于區(qū)塊鏈的智能合約技術與應用綜述[J]. 計算機研究與發(fā)展, 2018, 55(11): 2452-2466.
[6] Christidis K, Devetsikiotis M. Blockchains and smart contracts for the internet of things[J]. Ieee Access, 2016, 4: 2292-2303.
[7] 朱巖, 甘國華, 鄧迪, 等. 區(qū)塊鏈關鍵技術中的安全性研究[J]. 信息安全研究, 2016, 2(12): 1090-1097.
[8] Frantz C K, Nowostawski M. From institutions to code: Towards automated generation of smart contracts[C]//2016 IEEE 1st International Workshops on Foundations and Applications of Self* Systems (FAS* W). IEEE, 2016: 210-215.
[9] 何小東, 易積政, 陳愛斌. 區(qū)塊鏈技術的應用進展與發(fā)展趨勢[J]. 世界科技研究與發(fā)展, 2018, 40(6): 615-626.
[10] He X, Qin B, Zhu Y, et al. Spesc: A specification language for smart contracts[C]//2018 IEEE 42nd Annual Computer Software and Applications Conference (COMPSAC). IEEE, 2018, 1: 132-137.
[11] Sklaroff J M. Smart contracts and the cost of inflexibility[J]. U. Pa. L. Rev., 2017, 166: 263.
[12] Watanabe H, Fujimura S, Nakadaira A, et al. Blockchain contract: Securing a blockchain applied to smart contracts[C]//2016 IEEE international conference on consumer electronics (ICCE). IEEE, 2016: 467-468.
[13] 王繼輝.區(qū)塊鏈與智能合約圖譜分析[J].網(wǎng)絡空間安全, 2019,10(11):1-6+25.