賀海武 延 安 陳澤華
1(中國科學院計算機網(wǎng)絡信息中心 北京 100190) 2(太原理工大學信息工程學院 太原 030024) 3 (太原理工大學大數(shù)據(jù)學院 太原 030024) (hehaiwu@gmail.com)
區(qū)塊鏈是比特幣的基礎支撐技術,隨著近年來比特幣的快速發(fā)展與普及,引起了多方的廣泛關注.2016年1月,英國政府發(fā)布區(qū)塊鏈專題研究報告[1];同年12月,中國政府將區(qū)塊鏈技術列入《“十三五”國家信息化規(guī)劃》[2],旨在加強新技術的基礎研發(fā)和前沿布局.區(qū)塊鏈被認為是繼大型機、個人電腦、互聯(lián)網(wǎng)、移動社交網(wǎng)絡之后的第五次顛覆式創(chuàng)新,是人類信用進化史上繼血親信用、貴金屬信用、央行紙幣信用后的第4個里程碑[3].
區(qū)塊鏈技術的應用發(fā)展有3個階段:1)區(qū)塊鏈1.0,即可編程貨幣,如比特幣;2)區(qū)塊鏈2.0,即可編程金融[3],其中智能合約是其代表性應用;3)區(qū)塊鏈3.0,即可編程社會,如去中心化應用(decentralized application)、去中心化自組織(decentralized auto-nomous organization)[4-5].目前,區(qū)塊鏈已經(jīng)開始超越區(qū)塊鏈1.0時代,進入到區(qū)塊鏈1.5時代,并向可編程金融,即智能合約時代過渡.
2016年以來,以以太坊(Ethereum)[6]為代表的智能合約技術成為各界關注的熱點,引起了政府部門、金融機構、科技企業(yè)的廣泛關注.2016年12月,首屆智能合約專題研討會在微軟紐約市總部舉行,分析與探討了智能合約的應用場景.2017年2月,歐洲議會在《區(qū)塊鏈如何改變我們的生活》[7]報告中指出,智能合約技術是最具潛力的區(qū)塊鏈應用;同月,企業(yè)以太坊聯(lián)盟(Enterprise Ethereum Alliance)成立,致力于將以太坊開發(fā)成企業(yè)級區(qū)塊鏈,其成員既有摩根大通、荷蘭銀行等大型金融機構,也有微軟、Intel等科技企業(yè).
“智能合約”(smart contract)的概念產(chǎn)生于1995年,由密碼學家Szabo[8]首次提出,他指出“智能合約通過使用協(xié)議和用戶接口來促進合約的執(zhí)行”.從本質上講,智能合約是由事件驅動的、具備狀態(tài)的、部署于可共享的分布式數(shù)據(jù)庫上的計算機程序,現(xiàn)存智能合約的工作原理類似于其他計算機程序的If-Then語句[9].智能合約只是以這種方式與真實世界的資產(chǎn)進行交互.當一個預先設定的條件被觸發(fā)時,智能合約執(zhí)行相應的合同條款.
Szabo指出,計算機在某一天可以代替人力、機械設備等進行更加復雜的數(shù)字資產(chǎn)交易.未來的某一天,這些自動執(zhí)行的程序可能取代某些處理特定金融交易的專家或機構.智能合約的發(fā)展雖然處于初級階段,但其潛能顯而易見,它將合約參與者、合約協(xié)議以及參與者與協(xié)議之間的復雜關系程序化了.目前基于區(qū)塊鏈的智能合約技術的發(fā)展呈現(xiàn)出技術產(chǎn)業(yè)創(chuàng)新驅動的態(tài)勢,但在學術方面的研究相對滯后,截至2017年7月,以萬方知識服務平臺為中文數(shù)據(jù)源,以EI Village為英文數(shù)據(jù)源的檢索顯示,目前標題包含“智能合約/smart contract”且與區(qū)塊鏈技術相關的學術論文僅有中文9篇和英文27篇.
本文的內容有6方面:1)簡要介紹了智能合約的底層技術基礎——區(qū)塊鏈技術,概述了智能合約的定義、全生命周期、優(yōu)點及分類;2)凝練總結了智能合約的基本架構、關鍵技術;3)簡要介紹了智能合約的主要技術平臺;4)闡述了智能合約的發(fā)展現(xiàn)狀與應用場景;5)概要總結了智能合約現(xiàn)存的問題并搭建了以太坊實驗環(huán)境,開發(fā)了一個眾籌智能合約系統(tǒng);6)總結與展望.
區(qū)塊鏈技術起源于2008年,由一位化名為“中本聰”(Satoshi Nakamoto)的學者提出,其在文獻中所描述的區(qū)塊鏈是一種按照時間順序將數(shù)據(jù)區(qū)塊以鏈條的方式組合成特定數(shù)據(jù)結構,并以密碼學方式保證的不篡改和不可偽造的去中心化共享總賬(decentralized shared ledger)[10].比特幣是最早的區(qū)塊鏈應用場景,其本質是由基于區(qū)塊鏈技術的分布式網(wǎng)絡利用密碼學算法生成的數(shù)字加密貨幣.數(shù)字加密貨幣領域一直面臨著兩大難題:雙重支付問題和拜占庭將軍問題(Byzantine generals problem)[11].而區(qū)塊鏈技術的出現(xiàn),為解決這兩大難題提供了有效的途徑.雙重支付問題是指用“同一筆錢”在兩次或多次交易中完成支付.拜占庭將軍問題是指在缺少可信任中心節(jié)點的情況下,分布式系統(tǒng)如何達成共識和建立互信的問題[12].區(qū)塊鏈技術,在不需要第三方信用機構的前提下,通過分布式數(shù)據(jù)庫、數(shù)字加密技術和獨特的共識算法解決了去中心化系統(tǒng)的雙重支付問題,實現(xiàn)了一個無需信任單個節(jié)點的去中心化的可信任系統(tǒng).區(qū)塊鏈的共識算法的理論基礎是拜占庭容錯(Byzantine fault tolerant, BFT).常見的共識算法有工作量證明(proof of work, PoW)[13]、權益證明(proof of stake, PoS)[14]、授權權益證明(delegated proof of stake, DPoS)[15]、實用拜占庭容錯(practical Byzantine fault tolerance, PBFT)[16]、授權拜占庭容錯(delegated Byzantine fault tolerance, DBFT)[17]等.
狹義的區(qū)塊鏈是去中心化系統(tǒng)中各節(jié)點共享的數(shù)據(jù)賬本,區(qū)塊結構如圖1所示,每個區(qū)塊分為區(qū)塊頭和區(qū)塊體兩部分,涉及鏈式結構、Hash算法、Merkle樹和時間戳等技術要素[18].
Fig. 1 Structure of block圖1 區(qū)塊結構
區(qū)塊鏈技術的本質是它在網(wǎng)絡空間建立了一種分布式的一致性標準,對所有的數(shù)字事件在分布式數(shù)據(jù)庫上創(chuàng)建確切的無法篡改的記錄并且使得區(qū)塊鏈中的所有參與方都能確切、可信地了解所發(fā)生的數(shù)字事件.
區(qū)塊鏈技術出現(xiàn)后,其去中心化、去信任、規(guī)則透明、集體維護、不可篡改等特性,恰好為智能合約提供了安全可靠的記錄載體和執(zhí)行環(huán)境.首先,區(qū)塊鏈技術采用純數(shù)學的方法,在不犧牲隱私性,也無需第三方信用機構參與的條件下,可以對所有過去、當前的數(shù)字事件(如行為、資產(chǎn)等),建立分布式的一致性表達[19].其次,區(qū)塊鏈提供了可供用戶進行編程的腳本系統(tǒng),進一步增強了區(qū)塊鏈應用的靈活性,如在以太坊中,具備圖靈完備、功能強大的腳本系統(tǒng),使得基于智能合約的更為高級的分布式應用得以實現(xiàn).
智能合約有許多非形式化的定義,Szabo[8]創(chuàng)造性地提出,“智能合約就是執(zhí)行合約條款的可計算交易協(xié)議”;以太坊的智能合約是基于區(qū)塊鏈的數(shù)字資產(chǎn)控制程序[6].狹義來講,智能合約是涉及相關商業(yè)邏輯和算法的程序代碼,把人、法律協(xié)議和網(wǎng)絡之間的復雜關系程序化了.廣義來講,智能合約是一種計算機協(xié)議,一旦部署就能實現(xiàn)自我執(zhí)行和自我驗證,已經(jīng)不僅僅局限于金融領域,并且在分布式計算、物聯(lián)網(wǎng)等領域都有廣闊的應用前景.
類似于傳統(tǒng)合約,智能合約全生命周期包括:合約生成、合約發(fā)布、合約執(zhí)行3個部分,如圖2所示:
Fig. 2 The whole life cycle of smart contract圖2 智能合約全生命周期圖
合約生成,主要包含合約多方協(xié)商、制定合約規(guī)范、進行合約驗證、獲得合約代碼4個環(huán)節(jié).具體實現(xiàn)過程為:由合約參與方進行協(xié)商,明確各方的權利與義務,確定標準合約文本并將文本程序化,經(jīng)驗證后獲得標準合約代碼.其中涉及2個重要環(huán)節(jié):合約規(guī)范和合約驗證.合約規(guī)范需要由具備相關領域專業(yè)知識的專家和合約方進行協(xié)商制定.合約驗證在基于系統(tǒng)抽象模型的虛擬機上進行,它是關乎到合約執(zhí)行過程安全性的重要環(huán)節(jié),必須保證合約代碼和合約文本的一致性.
合約發(fā)布與交易發(fā)布類似,經(jīng)簽名后的合約通過P2P的方式分發(fā)至每一個節(jié)點,每個節(jié)點會將收到的合約暫存在內存中并等待進行共識.共識過程的實現(xiàn):每個節(jié)點會將最近一段時間內暫存的合約打包成一個合約集合,并計算出該集合的Hash值,最后將這個合約集合的Hash值組裝成一個區(qū)塊并擴散至全網(wǎng)的其他節(jié)點;收到該區(qū)塊的節(jié)點會將其中保存的Hash值與自己保存的合約集合的Hash值進行比較驗證;通過多輪的發(fā)送與比較,所有節(jié)點最終會對新發(fā)布的合約達成共識,并且達成共識的合約集合以區(qū)塊的形式擴散至全網(wǎng)各節(jié)點,如圖3所示.其中每個區(qū)塊包含以下信息:當前區(qū)塊的Hash值、前一區(qū)塊的Hash值、時間戳、合約數(shù)據(jù)以及其他描述信息.
Fig. 3 Blockchain diagram of smart contract圖3 智能合約的區(qū)塊鏈示意圖
智能合約的執(zhí)行是基于“事件觸發(fā)”機制的.基于區(qū)塊鏈的智能合約都包含事務處理和保存機制以及一個完備的狀態(tài)機,用于接受和處理各種智能合約.智能合約會定期遍歷每個合約的狀態(tài)機和觸發(fā)條件,將滿足觸發(fā)條件的合約推送至待驗證隊列.待驗證的合約會擴散至每一個節(jié)點,與普通區(qū)塊鏈交易一樣,節(jié)點會首先進行簽名驗證,以確保合約的有效性,驗證通過的合約經(jīng)過共識后便會成功執(zhí)行.整個合約的處理過程都由區(qū)塊鏈底層內置的智能合約系統(tǒng)自動完成,公開透明,不可篡改.
智能合約的實現(xiàn),本質上是通過賦予對象(如資產(chǎn)、市場、系統(tǒng)、行為等)數(shù)字特性,即將對象程序化并部署在區(qū)塊鏈上,成為全網(wǎng)共享的資源,再通過外部事件觸發(fā)合約的自動生成與執(zhí)行,進而改變區(qū)塊鏈網(wǎng)絡中數(shù)字對象的狀態(tài)(如分配、轉移)和數(shù)值.智能合約可以實現(xiàn)主動或被動的接受、存儲、執(zhí)行和發(fā)送數(shù)據(jù),以及調用智能合約,以此實現(xiàn)控制和管理鏈上數(shù)字對象.目前已經(jīng)出現(xiàn)的智能合約技術平臺,如以太坊、Hyperledger等,具備圖靈完備的開發(fā)腳本語言,使得區(qū)塊鏈能夠支持更多的金融和社會系統(tǒng)的智能合約應用.
現(xiàn)今,雖然智能合約尚未得到廣泛應用,但其技術優(yōu)點已經(jīng)得到研究人員的廣泛認可.總體來說,智能合約具有7個優(yōu)點:
1) 確定性.智能合約在不同的計算機或者在同一臺計算機上的不同時刻多次運行,對于相同的輸入能夠保證產(chǎn)生相同的輸出.對于區(qū)塊鏈上的智能合約,確定性是必然要求,因為非確定性的合約可能會破壞系統(tǒng)的一致性.
2) 一致性.智能合約應與現(xiàn)行合約文本一致,必須經(jīng)過具備專業(yè)知識的人士制定審核,不與現(xiàn)行法律沖突,具有法律效應[20].
3) 可終止性.智能合約能在有限的時間內運行結束.區(qū)塊鏈上的智能合約保證可終止性的途徑有非圖靈完備(如比特幣)、計價器(如以太坊)、計時器(如Hyperledger Fabric)等.
4) 可觀察和可驗證性.智能合約通過區(qū)塊鏈技術的數(shù)字簽名和時間戳,保證合約的不可篡改性和可溯源性.合約方都能通過一定的交互方式來觀察合約本身及其所有狀態(tài)、執(zhí)行記錄等,并且執(zhí)行過程是可驗證的.
5) 去中心化.智能合約的所有條款和執(zhí)行過程都是預先制定好的,一旦部署運行,合約中的任何一方都不能單方面修改合約內容以及干預合約的執(zhí)行.同時,合約的監(jiān)督和仲裁都由計算機根據(jù)預先制定的規(guī)則來完成,大大降低了人為干預風險.
6) 高效性和實時性.智能合約無需第三方中心機構的參與,能自動地實時響應客戶需求,大大提升了服務效率.
7) 低成本.智能合約自我執(zhí)行和自我驗證的特征,使其能夠大大降低合約執(zhí)行、裁決和強制執(zhí)行所產(chǎn)生的人力、物力成本.
就當前發(fā)展而言,以區(qū)塊鏈技術為基礎的智能合約大致分為3類:1)“Chaincode”,即常說的鏈上代碼,如金融活動由交換數(shù)據(jù)變?yōu)榻粨Q代碼;2)“智能法律合約”,包括不同方面所產(chǎn)生的權利和義務,并且在法律上可執(zhí)行,通常以復雜的法律文本來表達,不僅涵蓋個人行為,還可能涉及時間依賴和次序依賴等一系列依賴關系,例如PrimaveradeFilippi加密賬本交易法律框架[21],用鏈上智能合約來補充或代替現(xiàn)有法律合同,成為智能合約代碼和傳統(tǒng)法律語言的結合;3)“智能應用合約”, 即在區(qū)塊鏈上部署基于智能合約的分布式鏈上應用,創(chuàng)建有商業(yè)價值的全新合約形式,如M2M(機器對機器)商業(yè)模式.
Fig. 4 Basic framework of the smart contract圖4 智能合約基本架構
智能合約基本架構如圖4所示.總體來說,區(qū)塊鏈智能合約包含數(shù)據(jù)層、傳輸層、智能合約主體、驗證層、執(zhí)行層以及合約之上的應用層這6個要素.數(shù)據(jù)層包括鏈上數(shù)據(jù)和鏈下數(shù)據(jù),它們是智能合約運行的必要數(shù)據(jù)源.傳輸層則封裝了用于支持“鏈上-鏈上”和“鏈上-鏈下”進行通信、數(shù)據(jù)傳輸?shù)膮f(xié)議.智能合約主體包括協(xié)議和參數(shù).驗證層主要包含一些驗證算法,用于保證合約代碼和合約文本的一致性.執(zhí)行層主要封裝了智能合約運行環(huán)境的相關軟件.應用層則是基于前5個要素的基礎產(chǎn)生的相對高級的各種應用,它主要是為智能合約與其他計算機、應用程序通信服務的.本節(jié)將從智能合約主體、數(shù)據(jù)加載方式、執(zhí)行環(huán)境、驗證方法和擴展性的實現(xiàn)5個方面探討智能合約的關鍵技術.
智能合約主體為基于標準化的合約應用提供了復雜的協(xié)議框架,可以通過識別智能合約的關鍵參數(shù)來識別合約的行為和狀態(tài).智能合約主體主要包括協(xié)議和參數(shù)2個部分:
1) 協(xié)議是由標準機構發(fā)布的合法文本的程序化描述[22].協(xié)議包括合法的標準文本和標準參數(shù),其中每個參數(shù)都有一個標識,分別代表一種類型.可以說,協(xié)議是一個完全實例化的模板.
2) 參數(shù)包括業(yè)務邏輯模塊(主要參數(shù))和各種附件模塊,如數(shù)據(jù)管理模塊、用戶管理模塊、合約管理模塊等.業(yè)務邏輯模塊包括定制的合法文本和參數(shù),是對應用領域專業(yè)知識的程序化描述,由合約參與方協(xié)商產(chǎn)生,涉及多方的權利與義務.業(yè)務邏輯模塊的合法文本和參數(shù)來自協(xié)議部分的標準文本和參數(shù),但根據(jù)應用場景而有所不同.附件模塊在業(yè)務邏輯的基礎上,結合具體應用場景的需要,實現(xiàn)對智能合約的補充和完善.數(shù)據(jù)管理模塊,封裝了實現(xiàn)數(shù)據(jù)接收、暫存、計算、清除等功能的代碼程序;用戶管理模塊,主要實現(xiàn)了合約用戶的權限管理、安全認證、信譽管理等功能;合約管理模塊,主要功能是當合約被調用時,結合用戶需求,實現(xiàn)合約的生成、驗證發(fā)布、部署執(zhí)行、狀態(tài)查詢以及風險處理等功能.各模塊根據(jù)應用需求,可以定制子協(xié)議和子標準,如計算安全標準、風險預警標準、模塊交互協(xié)議等.所有參數(shù)都是合約的關鍵部分,因為它們不僅直接反映了各方之間的業(yè)務關系而且影響合約的自動執(zhí)行.
數(shù)據(jù)層包括狀態(tài)數(shù)據(jù)、交易數(shù)據(jù)、合約代碼、應用數(shù)據(jù)等,出于可觀察和可驗證的目的,狀態(tài)數(shù)據(jù)和交易數(shù)據(jù)一般都采用鏈上存儲方式.應用數(shù)據(jù)和合約代碼的加載方式則分為鏈上和鏈下2種.目前絕大多數(shù)區(qū)塊鏈系統(tǒng)均采用鏈上方式,將代碼和應用數(shù)據(jù)發(fā)布到鏈上,然后再從鏈上加載數(shù)據(jù)和代碼并執(zhí)行,其缺點是代碼和應用數(shù)據(jù)將永久地存在于區(qū)塊鏈中,不利于更新維護,占用節(jié)點存儲資源,隨著時間的積累將帶來巨大的存儲負擔.鏈下方式是指將智能合約的散列值存儲于鏈上,并通過以散列值為索引的存儲網(wǎng)絡或可信賴的數(shù)據(jù)源來保存完整的合約代碼,如IPFS(inter planetart file system)系統(tǒng)、Tower Crier平臺[23].散列值是由合約代碼內容計算而得,這樣既可以保證合約的不可篡改性,又可以節(jié)約節(jié)點大量的存儲空間和加強合約的隱私性.
目前主流的智能合約執(zhí)行環(huán)境的設計主要分為2種:虛擬機和容器(docker).無論是虛擬機還是容器,它們的作用都是在一個沙箱中執(zhí)行合約代碼,并對合約所使用的資源進行隔離和限制.虛擬機通常是指通過軟件模擬的具備完整硬件功能的、能像真實機器一樣執(zhí)行程序的計算機的軟件實現(xiàn),如VMware.出于降低資源開銷、提升性能和兼容性的目的,絕大多數(shù)區(qū)塊鏈會采用輕量級的虛擬機結構,如以太坊虛擬機(Ethereum virtual machine, EVM).
容器通常是指借助容器引擎,讓開發(fā)者可以打包其應用以及依賴包到一個可移植的容器中,也可以實現(xiàn)虛擬化.容器使用沙箱機制,相互之間不會有任何接口,如Hyperledger Fabric使用Docker作為智能合約的執(zhí)行環(huán)境.Docker本身沒有采用虛擬化技術,程序是直接運行在底層操作系統(tǒng)上,代碼執(zhí)行的效率很高.但與輕量級虛擬機相比,其過于龐大的架構,使得部署和啟動Docker本身需要消耗大量的時間和計算資源.
我們在1.2節(jié)已經(jīng)提到,智能合約本質上是區(qū)塊鏈上可執(zhí)行的代碼,那么在智能合約的執(zhí)行過程中,我們需要關注2個問題,即指令的執(zhí)行速度和運行環(huán)境的啟動速度.對于智能合約而言,運行環(huán)境的啟動速度比指令的執(zhí)行速度更加重要[24].這是因為,針對輕量化的虛擬機或容器,智能合約的代碼中很少會涉及到IO相關的指令,所以這些指令代碼易于優(yōu)化.而智能合約的每次調用,都必須在一個新的虛擬機或容器中進行,因此運行環(huán)境啟動時間對整個智能合約系統(tǒng)影響較大.
智能合約是對某領域專業(yè)知識的程序語言描述,對合約所涉及的核心利益(如資產(chǎn))的安全性、合約代碼的邏輯正確性有了更高的要求,必須保證合約文本與合約代碼的一致性,合約驗證是保證這些要求的重要途徑.目前,形式化驗證是智能合約領域的主流驗證方式.形式化方法是基于數(shù)學的描述和推理計算機系統(tǒng)性質的技術,常用于軟件的規(guī)范、開發(fā)和驗證[25].形式化方法主要包括形式歸約和形式驗證.形式驗證是建立在形式歸約的基礎上,驗證已有程序是否滿足其歸約要求[26].目前常見的形式驗證方法主要有2種:演繹驗證和模型檢測.演繹驗證是基于定理證明的思想,采用邏輯公式描述系統(tǒng),優(yōu)點是可以處理無限狀態(tài)的問題但做不到完全自動化,如STeP.模型檢測是基于狀態(tài)搜索的思想,主要針對有窮狀態(tài)系統(tǒng),如SPIN.模型檢測可以實現(xiàn)完全自動化,并且在驗證性質得不到滿足時,搜索終止可以給出反例,這種信息往往反映了系統(tǒng)設計中的錯誤.
智能合約的形式化驗證主要包括4個部分:代碼生成、形式化描述、形式化驗證和一致性測試.代碼生成,是指用編程語言對合約文本進行程序化描述.形式化描述,是指通過建模語言和建模工具對形式化合約文檔進行建模[27].一致性測試強調被測系統(tǒng)與給定標準的一致性,通過測試的合約代碼實現(xiàn)的外部特性與標準合約文本一致[28].形式化驗證法可以檢查智能合約的很多屬性,如可達性、公平性、死鎖等.將形式化驗證法應用于智能合約,使得合約的生成和執(zhí)行有了規(guī)范性約束,保證了合約的可信性.
可擴展性通常是指如何處理更大規(guī)模的業(yè)務.對于一個系統(tǒng)的擴展性,我們通常有2種方法,即垂直擴展和水平擴展.與水平擴展相比,垂直擴展是基于單臺設備最大處理能力的串行系統(tǒng)的擴展性,容易較快觸及成本、技術的極限,因此水平擴展是當下的主流措施,即將串行系統(tǒng)改造成并行系統(tǒng),對指令進行并行處理.
區(qū)塊鏈本質上是一個分布式數(shù)據(jù)庫,存儲著各種數(shù)據(jù)以及數(shù)據(jù)間進行交換和計算的規(guī)則,而智能合約就是這些規(guī)則的代碼實現(xiàn).因此,實現(xiàn)智能合約的并發(fā)執(zhí)行,將成為提高區(qū)塊鏈系統(tǒng)擴展性的重要途徑,如以太坊提出的分片(sharding)方案,即架構中的全球驗證程序集合中的節(jié)點被隨機分配到特定的“碎片”,其中每個碎片并行處理全局狀態(tài)的不同部分,從而確保工作是跨節(jié)點分布處理.
以太坊和Hyperledger Fabric[29]是目前較為成熟且極具代表性的智能合約技術平臺.本節(jié)將以以太坊和Hyperledger Fabric為例介紹智能合約技術平臺.
以太坊是一個基于區(qū)塊鏈數(shù)據(jù)結構的、可實現(xiàn)智能合約的、開源的底層系統(tǒng),在2013年由Buterin[6]在他的文章“以太坊:下一代加密貨幣和分散應用平臺”中提出.以太坊的目標是基于腳本語言、數(shù)字加密貨幣和鏈上元協(xié)議(on-chain meta-protocol)概念進行整合和提高,使得開發(fā)者能夠創(chuàng)建任意的基于共識的、可擴展的、標準化的、特性完備的、易于開發(fā)和協(xié)調的分布式應用.
以太坊虛擬機(EVM)是在以太坊智能合約及其應用的運行環(huán)境,提供了一種圖靈完備的腳本語言——Ethereum virtual machine code,這使得任何人都能夠創(chuàng)建智能合約及其去中心化應用,并在其中自由定義所有權規(guī)則、交易方式和狀態(tài)轉換函數(shù).以太坊智能合約的核心要素如圖5所示,主要包括賬戶、交易、Gas、日志、指令集、消息調用、存儲和代碼庫8個部分.
Fig. 5 The core elements of Ethereum smart contract圖5 以太坊智能合約核心要素
賬戶是以太坊的核心操作對象,主要分為2類:外部賬戶和合約賬戶.外部賬戶類似于一般區(qū)塊鏈電子貨幣賬戶,并且外部賬戶有能力創(chuàng)建并部署智能合約.合約賬戶由外部賬戶創(chuàng)建,其地址由合約創(chuàng)建者的地址和該地址發(fā)出過的交易數(shù)量計算得到.合約賬戶既含有貨幣余額狀態(tài)還有合約存儲狀態(tài).EVM的指令集被刻意保持在最小規(guī)模,以盡可能避免可能導致共識問題的錯誤出現(xiàn).指令集具備常用的算術、位、邏輯和比較操作,以及條件和無條件跳轉.
以太坊智能合約旨在實現(xiàn)4個目的:1)存儲對其他合約或外部實體有意義的值或狀態(tài);2)作為具有特殊訪問策略的外部賬戶;3)映射和管理多個用戶之間的關系;4)為其他合約提供支持.基于這4個目的,以太坊智能合約有著廣泛應用,如儲蓄錢包、云計算、版權管理系統(tǒng)[30]、身份和信譽系統(tǒng)、去中心化存儲以及去中心化自治社會(decentralized autonomous society)[31]等.
截至2017年5月,全球已有200多個以太坊應用誕生,如分布式眾籌平臺Betfunding[32].以太坊公有鏈和開源架構的特性,使得以太坊成為了最流行的智能合約及其分布式應用開發(fā)平臺之一.
Hyperledger[33]是Linux基金會于2015年12月發(fā)起的旨在推動各方協(xié)作,共同打造基于區(qū)塊鏈的企業(yè)級分布式賬本底層技術,用于構建支撐業(yè)務的行業(yè)應用平臺.Fabric[29]是Hyperledger的一個子項目,目標是實現(xiàn)一個通用的許可鏈(permissioned chain)的底層基礎框架,其采用模塊化架構提供可切換和可擴展的組件,包括共識算法、加密算法、數(shù)字資產(chǎn)、智能合約等服務.超級賬本的設計原則是“用例驅動”,目前,F(xiàn)abric項目主要支持5種用例:數(shù)字支付[34]、金融資產(chǎn)管存、供應鏈、主數(shù)據(jù)管理和共享經(jīng)濟[35].
Fabric的邏輯架構如圖6所示,由成員資格服務、策略服務、區(qū)塊鏈服務和智能合約服務4個部分構成.Fabric智能合約實質上是在驗證節(jié)點(verifi-cation node)上運行的分布式交易程序,用以自動執(zhí)行特定的業(yè)務規(guī)則,最終更新賬本的狀態(tài).Fabric智能合約分為公開、保密和訪問控制3種類型,分別由擁有不同權限的成員發(fā)起.
Fig. 6 Fabric project architecture diagram圖6 Fabric項目架構圖
Fig. 7 Diagram of smart contract execution of Fabric圖7 Fabric智能合約代碼執(zhí)行示意圖
Fabric智能合約代碼的執(zhí)行過程圖如圖7所示,分為6個步驟:①客戶端發(fā)送執(zhí)行請求給任意一個驗證節(jié)點;②驗證節(jié)點收到請求后,向本地賬本發(fā)送啟動智能合約的指令;③驗證節(jié)點創(chuàng)建隔離的運行環(huán)境,啟動合約代碼;④合約執(zhí)行過程中,更新本地賬本的狀態(tài);⑤合約調用完成后,驗證節(jié)點向本地賬本確認交易;⑥驗證節(jié)點向其他驗證節(jié)點廣播交易.
與以太坊不同,F(xiàn)abric雖然也是開源的,但是Fabric主要是為聯(lián)盟鏈服務的,其更加強調商業(yè)需求和實際應用需要.
從國外發(fā)展來看,在科研領域,截至2017年7 月31日,以EI Village為數(shù)據(jù)源,標題中包含“block-chain”的外文文獻有152篇,標題中包含“smart contract”且與區(qū)塊鏈技術相關的外文文獻有27篇,如圖8所示.從圖8可以看出,國外在區(qū)塊鏈和智能合約的研究與探索方面起步較早.以康奈爾大學為代表,Emin Gun Sirer教授所在的IC3研發(fā)團隊推出了Solidus協(xié)議、區(qū)塊鏈保密查詢工具Town Crier等理論科研成果,與其合作的企業(yè)包括微軟、花旗銀行和區(qū)塊鏈技術公司Chain等.
Fig. 8 Search result of EI Village圖8 EI Village檢索結果
2015年被稱為區(qū)塊鏈元年,自這一年以來,區(qū)塊鏈掀起了前所未有的熱潮,全球金融機構和各大銀行爭相展開對區(qū)塊鏈技術的研究.據(jù)《2015年度全球數(shù)字貨幣(區(qū)塊鏈)創(chuàng)業(yè)投資報告》顯示,2015年度共發(fā)生全球數(shù)字貨幣及區(qū)塊鏈相關投資65起,總金額達4.9億美元.其中,涉及智能合約和商業(yè)應用等方面的投資有21起,總金額達5 628萬美元.其中,智能合約平臺Symboiont和Mirror獲得700萬美元和1 280萬美元投資.2016年,RSK公司Rooststock智能合約平臺相繼獲得110萬美元投資,同年5月DAO(分布式自治組織)作為主攻智能合約的區(qū)塊鏈項目,自眾籌金額高達2.45億美元.更詳細的國外主要智能合約項目如表1所示:
Table 1 Main Foreign Smart Contract Projects表1 國外主要智能合約項目
從國內發(fā)展來看,區(qū)塊鏈技術起步較晚.在科研領域,截至2017年7月31日,以萬方數(shù)據(jù)庫為數(shù)據(jù)源,標題中包含“區(qū)塊鏈”的中文文獻有352篇,標題中包含“智能合約”且與區(qū)塊鏈技術相關的中文文獻有9篇,如圖9所示.從圖9可以看出,自2016年以來,區(qū)塊鏈技術在國內呈現(xiàn)出爆發(fā)式的發(fā)展態(tài)勢,但智能合約技術尚處在發(fā)展初期.蔡維德教授所在的北航區(qū)塊鏈實驗室致力于區(qū)塊鏈、智能合約、數(shù)字社會等技術的研究與探索,理論成果涉及共識算法、應用問題、架構問題等多個方面,如雙鏈并發(fā)模型[36]、并行拜占庭協(xié)議、“金絲猴”分布式鏈網(wǎng)模型等;馬小峰教授所在的同濟金融科技研究院推出了“中國銀聯(lián)-同濟區(qū)塊鏈測評標準體系”,“基于區(qū)塊鏈的信用校園”等多項區(qū)塊鏈技術與應用;中國科學院軟件所發(fā)布了區(qū)塊鏈基礎組件RepChain(reactive permission chain),是一種采用響應式編程實現(xiàn)的自主可控的許可鏈,以推動區(qū)塊鏈與行業(yè)應用結合為目標,具有標準化、模塊化、可視化的特點.除此之外,2015年國內各地開始紛紛成立研究聯(lián)盟,共同推動區(qū)塊鏈技術的發(fā)展.2015年10月首屆全球區(qū)塊鏈峰會“區(qū)塊鏈——新經(jīng)濟藍圖”在上海舉辦.2015年12月,中國區(qū)塊鏈應用研究中心(北京)成立.2016年1月,中國區(qū)塊鏈研究聯(lián)盟在北京成立,致力于推動區(qū)塊鏈的相關學術研討和實踐工作.
Fig. 9 Search result of Wanfang Data圖9 萬方數(shù)據(jù)庫檢索結果
國內基于區(qū)塊鏈的智能合約應用探索還處于早期研究階段.據(jù)《全球區(qū)塊鏈+創(chuàng)投報告》,截至2017年4月底,全球總共455家區(qū)塊鏈公司累計獲得融資額為19.47億美元,其中中國共有61家位列全球第2.2016年5月騰訊聯(lián)合發(fā)起金融區(qū)塊鏈合作聯(lián)盟,推出騰訊云的聯(lián)盟鏈云服務;同年6月百度戰(zhàn)略投資Circle;同年7月,阿里系的螞蟻金服在全球XIN公益大會上表示其區(qū)塊鏈技術即將上線,旨在打造基于區(qū)塊鏈的公益平臺;同年9月,中國銀聯(lián)與IBM合作,預演“使用區(qū)塊鏈技術的跨行積分兌換系統(tǒng)”;2017年5月,小蟻區(qū)塊鏈發(fā)布智能合約2.0,從數(shù)字資產(chǎn)平臺全面升級為智能經(jīng)濟平臺.更詳細的國內主要智能合約項目如表2所示:
Table 2 Main Domestic Smart Contract Projects表2 國內主要智能合約項目
智能合約具有確定性、實時性、自治性、可觀察、可驗證、去中心化等特點,在數(shù)字支付、金融資產(chǎn)處置、云計算、物聯(lián)網(wǎng)、共享經(jīng)濟等方面有著廣闊的應用前景.
1) 數(shù)字身份.智能合約可以讓用戶擁有和控制自己的數(shù)字身份,構建以用戶為中心的個人網(wǎng)絡,例如個人數(shù)字信譽和數(shù)字資產(chǎn)[37]等;同時還可以指定哪些個人數(shù)據(jù)可以或不可以與他人進行共享.
2) 數(shù)字記錄.智能合約可以實現(xiàn)合規(guī)性的自動化,提高數(shù)據(jù)的透明度,降低服務費用,實現(xiàn)記錄的自動處理.例如利用智能合約技術進行臨床試驗數(shù)據(jù)的管理,可以提高數(shù)據(jù)的透明度[38].
3) 證券.基于智能合約實現(xiàn)數(shù)字化終端到終端的證券工作流程,用于資本化股權結構表管理能夠極大地簡化其工作流程,如幫助私人公司自動股息支付、股票分割和負債管理等流程,區(qū)塊鏈證券公司Symbiont已經(jīng)開始推動股票證書向使用加密區(qū)塊鏈簽名轉變.
4) 金融貿易.智能合約可以推動簡化全球商品轉移,帶來更高資產(chǎn)流動性.實現(xiàn)信譽證明和貿易支付流程的自動化發(fā)起,可以在客戶、供應商和金融機構之間創(chuàng)建一種更高效、風險更小的流程.
5) 物聯(lián)網(wǎng).利用智能合約在設備之間創(chuàng)建服務市場,創(chuàng)建分散的、共享的經(jīng)濟應用程序,兼顧隱私性與數(shù)字資產(chǎn)的價值性,促進服務和資源的共享,如Blockchain-IoT[39].
6) 供應鏈.智能合約能夠為供應鏈的每一個環(huán)節(jié)提供更高的可見性,簡化多重機構系統(tǒng),與物聯(lián)網(wǎng)設備進行協(xié)調,跟蹤被管理的資產(chǎn)和產(chǎn)品,降低欺詐和盜竊風險.例如Everledger與IBM已經(jīng)將區(qū)塊鏈用于供應鏈以提升其可見性.
7) 保險.智能合約體系下的保險合同都是數(shù)字化的,被保存在區(qū)塊鏈賬本之中,無法篡改;同時可以自動化保險索賠流程,提供接近瞬時的處理、驗證和付款服務.基于智能合約的保險業(yè)務,可以提供智能定制服務,可根據(jù)投保種類、時間、期限、理賠記錄等自動匹配最佳投保方案,大大降低傳統(tǒng)保險業(yè)的服務成本.
8) 分布式計算.基于區(qū)塊鏈技術,利用智能合約實現(xiàn)的分布式計算有著廣闊的應用前景和現(xiàn)實意義.在全面進入?yún)^(qū)塊鏈1.0時代后,全球有數(shù)以萬計的具備算力的節(jié)點接入數(shù)字貨幣網(wǎng)絡(如比特幣網(wǎng)絡)從事挖礦工作.利用智能合約實現(xiàn)的分布式計算,是實現(xiàn)將閑置節(jié)點作為計算資源供應商與客戶(計算資源需求方)進行智能匹配,充分開發(fā)與利用現(xiàn)行網(wǎng)絡計算資源,簡化計算服務流程,降低計算服務成本,例如iEx.ec[40]旨在提供一個可擴展、安全、易于交互的數(shù)據(jù)集和計算資源的分布式應用程序.
雖然基于區(qū)塊鏈的智能合約技術以其獨特的優(yōu)勢吸引了眾多研究者,但區(qū)塊鏈智能合約技術還處在發(fā)展初期,存在諸多問題.除此之外,如何協(xié)調去中心化、低能耗、安全三者之間的關系,還有待進一步的研究.本節(jié)將從效率、隱私、安全、標準不統(tǒng)一4個方面,探討和分析區(qū)塊鏈智能合約技術發(fā)展中有待解決的問題.
效率是影響智能合約可用性的重要因素.
1) 數(shù)據(jù)存儲問題.智能合約區(qū)塊鏈記錄了整個區(qū)塊鏈網(wǎng)絡從誕生至當前時間點的一切狀態(tài)改變記錄,并要求每個節(jié)點保存一份數(shù)據(jù)備份,這對日益增長的海量數(shù)據(jù)的存儲和同步來說是極為困難的.例如以太坊區(qū)塊鏈,完全同步自創(chuàng)世區(qū)塊以來的全部區(qū)塊數(shù)據(jù)需要約180 GB的存儲空間,新添加進網(wǎng)絡的節(jié)點完全同步區(qū)塊鏈數(shù)據(jù)所花費的時間就長達1周.雖然以太坊數(shù)據(jù)區(qū)塊中既包含智能合約代碼,也包含交易數(shù)據(jù)等,但其從誕生到現(xiàn)在不過3年多的時間,即使將智能合約單獨成鏈,按照以太坊愈加活躍的走勢和時間累積效應,其區(qū)塊鏈數(shù)據(jù)庫過于龐大是一個急需解決的問題.盡管輕量化區(qū)塊鏈可以部分解決此問題,但大部分區(qū)塊鏈的輕量化都是以犧牲可靠性和安全性為代價的,因此如何協(xié)調輕量化與可靠性、安全性之間的關系還有待進一步的研究.同時,適用于工業(yè)級的解決方案仍有待開發(fā)[41].
2) 狀態(tài)確認的效率問題,這主要涉及2個問題:雙重確認和閉鎖問題.當具備訪問權限的不同節(jié)點修改同一智能合約的同一個狀態(tài)時,由于確認過程時間差的存在,將面臨“雙重確認”問題,即同一個狀態(tài)被寫入2次或多次,這有可能導致智能合約中的某個狀態(tài)被錯誤地修改或覆蓋.如節(jié)點1先于節(jié)點2提交修改申請,但由于確認過程時間差的存在,節(jié)點2的申請可能先于節(jié)點1被確認,而當節(jié)點1被確認時又會覆蓋之前節(jié)點2的修改.“閉鎖問題”,即優(yōu)先獲得確認的狀態(tài)會產(chǎn)生閉鎖合約的效果,使合約拒絕其他節(jié)點的訪問.以太坊目前每秒能處理10~20筆交易,而確定交易則要等待下一個區(qū)塊的生成,平均時間為12 s.因此如何提高區(qū)塊鏈處理事務的能力,是區(qū)塊鏈智能合約技術亟待解決的重要問題.目前,研究者已經(jīng)開始嘗試解決此類問題,例如數(shù)據(jù)分片技術和索引技術.區(qū)塊鏈技術平臺Zilliqa[42]提出了一種基于分享協(xié)議的區(qū)塊鏈,其采用分片技術,在測試網(wǎng)上每秒能處理近1 400筆交易.雖然相比以太坊區(qū)塊鏈,其交易效率有了極大的改善,但對于部署一個面向世界所有人共同參與的大規(guī)模智能合約項目,處理大規(guī)模交易的抗壓能力問題,仍然欠缺全面解決效率問題的方法.
智能合約風險管理和危機應對場景尚不完善.目前智能合約的隱私保護是基于非對稱密碼學的原理,具有很高的安全性,但隨著數(shù)學研究和量子計算機技術的進一步發(fā)展,未來非對稱加密算法存在被破解的可能,智能合約在隱私和安全方面仍然存在薄弱環(huán)節(jié).
首先,區(qū)塊鏈智能合約中的各用戶并非完全匿名,準確地說,應該是假名性.智能合約、個人賬戶等都是通過一種地址標識(例如以太坊公私鑰地址)來實現(xiàn)在區(qū)塊鏈網(wǎng)絡上的數(shù)據(jù)傳輸[43].但是,一旦當用戶和現(xiàn)實世界的事務發(fā)生關聯(lián),如數(shù)字貨幣錢包代理商等,用戶的地址標識就會變?yōu)榫W(wǎng)絡代號(例如論壇的網(wǎng)名),雖不知道用戶具體身份,但任何與用戶相關的數(shù)據(jù)和行為都可以關聯(lián)到這個代號上.同時,隨著反匿名身份甄別技術的發(fā)展,智能合約用戶的匿名性將難以保證.其次,區(qū)塊鏈上的數(shù)據(jù)是公開透明的,通過各種數(shù)據(jù)挖掘技術,可以發(fā)現(xiàn)很多地址的互相關系,一旦真實身份泄露,用戶的所有信息都將公開.因此,智能合約風險管理方面的預案及相應技術手段的不完善,將成為影響智能合約應用發(fā)展的關鍵因素.
根據(jù)區(qū)塊鏈技術的特點,區(qū)塊鏈的隱私保護機制可分為3類:網(wǎng)絡層的隱私保護、交易層的隱私保護和應用層的隱私保護[44].目前,隱私保護主要是通過增加惡意節(jié)點檢索、獲取和解讀區(qū)塊鏈數(shù)據(jù)的難度來實現(xiàn)的,如斯雪明教授團隊[45]推出的擬態(tài)防御技術,以及網(wǎng)絡層數(shù)據(jù)混淆技術、數(shù)據(jù)失真技術.隨著區(qū)塊鏈技術發(fā)展的日新月異,隱私保護問題將愈加突出,但目前的隱私保護方案都存在一定的不足,還有待進一步的研究.
傳統(tǒng)合約是基于自然語言描述的;而智能合約是用計算機代碼來闡述、驗證和執(zhí)行合約,對保證數(shù)字資產(chǎn)和資源的安全性提出了更高的要求.智能合約最終會取代合約實體,但正如2.4節(jié)所述,智能合約涉及復雜的時間依賴和次序依賴關系,合約代碼的不確定性和不一致性將導致智能合約本身存在漏洞,進而導致合約執(zhí)行結果的不確定性,最終會導致法律責任的不確定性[46].2016年5月,史上最大的一個眾籌項目The DAO由于智能合約在設計之初就存在漏洞,攻擊者利用DAO.sol代碼中“splitDAO”函數(shù)在遞歸發(fā)送模式上存在的漏洞盜取了大量以太幣[47].2017年7月19日,Parity Wallet的多重簽名錢包“multi-sig”代碼中發(fā)現(xiàn)一個漏洞,即多重簽名錢包的創(chuàng)建過程是無保護的,使得攻擊者可以任意重置現(xiàn)有錢包的所有權和使用參數(shù),這致使Parity Wallet中的3個大額以太幣賬戶被盜取.因此,智能合約必須保證其邏輯屬性的正確性以及合約代碼和合約文本的一致性,并且能夠自動生成可信任的執(zhí)行代碼.目前已有學者或團體提出了關于智能合約的驗證方法,如OYENTE語義符號工具[48],但尚不完善,仍有眾多關于智能合約的邏輯完整性、可驗證性、安全性上的問題有待深入研究與探索.
智能合約和其相關平臺的構建以及監(jiān)管的標準是智能合約面臨的一個重大挑戰(zhàn).當前,關于智能合約的標準有多個版本,主要由分散的智能合約應用聯(lián)盟創(chuàng)建,如2015年5月Chain和花旗銀行等金融機構發(fā)布了區(qū)塊鏈方面的開放標準.2016年末以來,智能合約已經(jīng)不僅局限于金融領域,基于智能合約的高級應用開始蓬勃發(fā)展,如iEx.ec.雖然各大商業(yè)聯(lián)盟的標準正在逐步建立和完善,但在全球層面或國家層面仍然缺乏一個統(tǒng)一的技術開發(fā)標準,制約了智能合約及其應用的可擴展性和兼容性.
本節(jié)基于智能合約相關理論,搭建了以太坊私有鏈實驗環(huán)境,實現(xiàn)了一個眾籌項目.本次實驗環(huán)境為:CPU為Inter?CoreTMi5-4210 M,主頻為2.60 GHz,內存為8 GB,操作系統(tǒng)為Windows 8,編程語言為Solidity.
眾籌智能合約,是在股權眾籌發(fā)起的初始階段,由發(fā)起人、平臺、領投人等多方共同簽署的一份合約.這份合約用于約定各成員的責任和義務,并且存在于區(qū)塊鏈中,在無第三方中心機構的條件下,由區(qū)塊鏈實現(xiàn)合約的自動運行、監(jiān)管以及保證合約的不可篡改性.眾籌智能合約一般存在3個特征:眾籌目標(如4 000 ether)、眾籌時間(如20 d)和不同眾籌結果所對應的操作(如目標失敗退回全款、目標成功時受益人獲得加密代幣).
眾籌智能合約系統(tǒng)的實現(xiàn)主要包括3部分:實驗環(huán)境的搭建、私有鏈的創(chuàng)建和智能合約系統(tǒng)的開發(fā).
上述智能合約系統(tǒng)的實驗環(huán)境是基于以太坊客戶端Go-Ethereum[49]搭建的,該實驗環(huán)境所需的支持軟件如表3所示:
Table 3 Support Software of Experiment Environment表3 支持軟件
私有鏈的創(chuàng)建是通過配置創(chuàng)世區(qū)塊和啟動節(jié)點來實現(xiàn)的.
創(chuàng)世區(qū)塊的配置實際上是區(qū)塊參數(shù)的配置.創(chuàng)世區(qū)塊本質是一個json文件,其關鍵參數(shù)如表4所示.同一個區(qū)塊鏈網(wǎng)絡中,各個節(jié)點的創(chuàng)世區(qū)塊必須是相同的,否則各個節(jié)點無法聯(lián)通.為了便于本系統(tǒng)區(qū)塊的快速生成,其區(qū)塊參數(shù)的配置較為簡單,這樣有利于合約的快速部署與驗證.創(chuàng)世區(qū)塊的具體參數(shù)配置為
{
"config":{
"chainId":10;
"homesteadBlock":0;
"eip155Block":0;
"eip158Block":0;
}
"coinbase":"0x000000000000000000000000000
0000000000000";
"difficulty":"0x40000";
"extraData":"";
"gasLimit":"0x2fefd8";
"nonce":"0x0000000000000042";
"mixhash":"0x000000000000000000000000000
000000000000000000000000000000
0000000";
"parentHash":"0x000000000000000000000000
000000000000000000000000000
0000000000000";
"timestamp":"0x00";
"alloc":{};
}
Table 4 The Parameter of the Block表4 區(qū)塊參數(shù)
在此系統(tǒng)中,啟動節(jié)點的配置是通過編寫啟動文件來實現(xiàn)的.啟動文件因實驗設備、區(qū)塊鏈網(wǎng)絡結構的不同而略有差異.啟動文件的關鍵參數(shù)如表5所示.
本文開發(fā)的眾籌智能合約系統(tǒng)主要由支付模塊、安全計算模塊、緊急事件處理模塊、權限管理模塊、眾籌模塊、數(shù)字代幣模塊TTC(test test coin)構成.其中,支付模塊、安全計算模塊、緊急事件處理模塊、眾籌模塊的詳細介紹如表6~9所示.
Table 5 Parameter of the Boot File表5 啟動文件的參數(shù)
Table 6 Function of the Payment Module表6 支付模塊功能函數(shù)表
Table 7 Function of the Security Calculation Module表7 安全計算模塊功能函數(shù)表
Table 8 Function of the Emergency Management Module
Table 9 Function of the Crowdsale Module表9 眾籌模塊功能函數(shù)
智能合約的眾籌算法如算法1所示:
算法1. 眾籌算法.
輸入:最大眾籌金額maxGap、最小眾籌金額minGap、時間Time_crowdsale、最小投資金額minInvest;
輸出:若眾籌成功,則調用函數(shù)finalize,按規(guī)則發(fā)放數(shù)字代幣;若眾籌失敗,則調用函數(shù)receive-Approval,根據(jù)投資記錄退回所有資金.
部署智能合約并調用函數(shù)start();
crowdsaleClosed=False;
WhilecrowdsaleClosed=False do
IfreceiveInvestRequest=False then
continue;
End If
IfTime_crowdsale IfTTC_total bonus(); receiveETH(); Else crowdsaleClosed=True; emitRLC(); finalize(); End If Else IfTTC_total receiveApproval(); Else crowdsaleClosed=True; emitRLC(); finalize(); End If End If End While 智能合約的投資算法如算法2所示: 算法2. 投資算法. 輸入:投資金額gapSender; 輸出:若投資成功,則調用函數(shù)sendInvest-Request,發(fā)送投資請求;若投資失敗,則結束本次訪問. 訪問智能合約并開始投資; InputgapSender; IfcrowdsaleClosed=True then break; Else IfTime_crowdsale IfgapSender>minInvestthen IfTTC_total+gapSender≤maxGap then IfSenderBalance>gapSenderthen 輸入支付密碼; sendInvestRequest(); End If End If End If End If End If 自2009年比特幣誕生以來,以其為代表的區(qū)塊鏈技術迅速崛起,已經(jīng)成為學術界和產(chǎn)業(yè)界的熱點研究課題.經(jīng)歷了以數(shù)字貨幣為代表的區(qū)塊鏈1.0時代,未來幾年的區(qū)塊鏈的研究方向將以“區(qū)塊鏈2.0應用為主,區(qū)塊鏈3.0應用為輔”.區(qū)塊鏈2.0是智能合約時代,可以適應更為復雜的應用場景和更為高級的功能需求,使其在金融和社會系統(tǒng)中具有廣泛的應用前景;同時,基于智能合約的其他高級應用也具備蓬勃的發(fā)展?jié)摿?,智能合約技術有望成為實現(xiàn)物聯(lián)網(wǎng)、大交易量區(qū)塊鏈、去中心化云存儲和去中心化域名服務器的一個有效途徑. 目前,智能合約技術的基礎理論和技術研究尚處于起步階段,仍缺乏對基礎理論、關鍵技術以及對行業(yè)發(fā)展至關重要的科學問題的研究與探索.該領域存在的挑戰(zhàn)性問題較多,詳見第5節(jié)介紹的4個方面.需要指出的是,對于智能合約所面臨的挑戰(zhàn)性問題,本文僅僅只是選擇其中具有代表性的一部分給予介紹或歸納,并不涵蓋所有的研究方向與問題. 本文系統(tǒng)地介紹了智能合約技術的全生命周期、基本架構、關鍵技術、研究現(xiàn)狀、主要技術平臺和應用場景以及探討了可能存在的問題,是對目前智能合約技術研究成果的一個總結和歸納.同時,開發(fā)了一個眾籌合約系統(tǒng),探索和實踐了智能合約的相關理論.本文介紹這個研究領域的初衷是希望展現(xiàn)智能合約技術的研究現(xiàn)狀與前沿性問題,以便能為相關領域的學者提供參考和借鑒.7 總結與展望