發(fā)布時(shí)間:2020-02-04所屬分類:科技論文瀏覽:1次
摘 要: 摘要隨著以比特幣為代表的區(qū)塊鏈技術(shù)的蓬勃發(fā)展,區(qū)塊鏈技術(shù)已經(jīng)開始逐步超越可編程貨幣時(shí)代而進(jìn)入智能合約時(shí)代.智能合約(smartcontract)是一種由事件驅(qū)動(dòng)的、具有狀態(tài)的代碼合約和算法合同,隨著區(qū)塊鏈技術(shù)的深入發(fā)展而受到廣泛關(guān)注和研究.智能合約利用協(xié)議
摘要隨著以比特幣為代表的區(qū)塊鏈技術(shù)的蓬勃發(fā)展,區(qū)塊鏈技術(shù)已經(jīng)開始逐步超越可編程貨幣時(shí)代而進(jìn)入智能合約時(shí)代.智能合約(smartcontract)是一種由事件驅(qū)動(dòng)的、具有狀態(tài)的代碼合約和算法合同,隨著區(qū)塊鏈技術(shù)的深入發(fā)展而受到廣泛關(guān)注和研究.智能合約利用協(xié)議和用戶接口完成合約過程的所有步驟,允許用戶在區(qū)塊鏈上實(shí)現(xiàn)個(gè)性化的代碼邏輯.基于區(qū)塊鏈的智能合約技術(shù)具有去中心化、自治化、可觀察、可驗(yàn)證、可信息共享等特點(diǎn),可以有效構(gòu)建可編程金融和可編程社會(huì),廣泛應(yīng)用于數(shù)字支付、金融資產(chǎn)處置、多重簽名合約、云計(jì)算、物聯(lián)網(wǎng)、共享經(jīng)濟(jì)等多個(gè)領(lǐng)域.首先闡述了智能合約技術(shù)的基本概念、全生命周期、基本分類、基本架構(gòu)、關(guān)鍵技術(shù)、發(fā)展現(xiàn)狀以及智能合約的主要技術(shù)平臺(tái);然后探討了智能合約技術(shù)的應(yīng)用場景以及發(fā)展中所存在的問題;最后,基于智能合約的理論知識(shí),搭建了以太坊實(shí)驗(yàn)環(huán)境并開發(fā)了一個(gè)眾籌智能合約系統(tǒng),旨在為基于區(qū)塊鏈的智能合約技術(shù)的研究與發(fā)展提供參考與借鑒.
關(guān)鍵詞智能合約;區(qū)塊鏈;以太坊;分布式應(yīng)用;形式化方法;眾籌合約
區(qū)塊鏈?zhǔn)潜忍貛诺幕A(chǔ)支撐技術(shù),隨著近年來比特幣的快速發(fā)展與普及,引起了多方的廣泛關(guān)注.2016年1月,英國政府發(fā)布區(qū)塊鏈專題研究報(bào)告[1];同年12月,中國政府將區(qū)塊鏈技術(shù)列入《“十三五”國家信息化規(guī)劃》[2],旨在加強(qiáng)新技術(shù)的基礎(chǔ)研發(fā)和前沿布局.區(qū)塊鏈被認(rèn)為是繼大型機(jī)、個(gè)人電腦、互聯(lián)網(wǎng)、移動(dòng)社交網(wǎng)絡(luò)之后的第五次顛覆式創(chuàng)新,是人類信用進(jìn)化史上繼血親信用、貴金屬信用、央行紙幣信用后的第4個(gè)里程碑[3].
區(qū)塊鏈技術(shù)的應(yīng)用發(fā)展有3個(gè)階段:1)區(qū)塊鏈1.0,即可編程貨幣,如比特幣;2)區(qū)塊鏈2.0,即可編程金融[3],其中智能合約是其代表性應(yīng)用;3)區(qū)塊鏈3.0,即可編程社會(huì),如去中心化應(yīng)用(decentralizedapplication)、去中心化自組織(decentralizedauto-nomousorganization)[4-5].目前,區(qū)塊鏈已經(jīng)開始超越區(qū)塊鏈1.0時(shí)代,進(jìn)入到區(qū)塊鏈1.5時(shí)代,并向可編程金融,即智能合約時(shí)代過渡.
2016年以來,以以太坊(Ethereum)[6]為代表的智能合約技術(shù)成為各界關(guān)注的熱點(diǎn),引起了政府部門、金融機(jī)構(gòu)、科技企業(yè)的廣泛關(guān)注.2016年12月,首屆智能合約專題研討會(huì)在微軟紐約市總部舉行,分析與探討了智能合約的應(yīng)用場景.2017年2月,歐洲議會(huì)在《區(qū)塊鏈如何改變我們的生活》[7]報(bào)告中指出,智能合約技術(shù)是最具潛力的區(qū)塊鏈應(yīng)用;同月,企業(yè)以太坊聯(lián)盟(EnterpriseEthereumAlliance)成立,致力于將以太坊開發(fā)成企業(yè)級(jí)區(qū)塊鏈,其成員既有摩根大通、荷蘭銀行等大型金融機(jī)構(gòu),也有微軟、Intel等科技企業(yè).
“智能合約”(smartcontract)的概念產(chǎn)生于1995年,由密碼學(xué)家Szabo[8]首次提出,他指出“智能合約通過使用協(xié)議和用戶接口來促進(jìn)合約的執(zhí)行”.從本質(zhì)上講,智能合約是由事件驅(qū)動(dòng)的、具備狀態(tài)的、部署于可共享的分布式數(shù)據(jù)庫上的計(jì)算機(jī)程序,現(xiàn)存智能合約的工作原理類似于其他計(jì)算機(jī)程序的If-Then語句[9].智能合約只是以這種方式與真實(shí)世界的資產(chǎn)進(jìn)行交互.當(dāng)一個(gè)預(yù)先設(shè)定的條件被觸發(fā)時(shí),智能合約執(zhí)行相應(yīng)的合同條款.
推薦閱讀:區(qū)塊鏈技術(shù)論文容易成功發(fā)表嗎
區(qū)塊鏈?zhǔn)悄壳昂苁軞g迎的一項(xiàng)技術(shù),它本質(zhì)上是一個(gè)共享數(shù)據(jù)庫,應(yīng)用于各個(gè)行業(yè)。隨著對區(qū)塊邊技術(shù)的研究不斷深入,區(qū)塊鏈技術(shù)方面的論文也越來越多。那區(qū)塊鏈技術(shù)論文怎么發(fā)表?容易成功發(fā)表嗎?本文我們一起來看看。
Szabo指出,計(jì)算機(jī)在某一天可以代替人力、機(jī)械設(shè)備等進(jìn)行更加復(fù)雜的數(shù)字資產(chǎn)交易.未來的某一天,這些自動(dòng)執(zhí)行的程序可能取代某些處理特定金融交易的專家或機(jī)構(gòu).智能合約的發(fā)展雖然處于初級(jí)階段,但其潛能顯而易見,它將合約參與者、合約協(xié)議以及參與者與協(xié)議之間的復(fù)雜關(guān)系程序化了.目前基于區(qū)塊鏈的智能合約技術(shù)的發(fā)展呈現(xiàn)出技術(shù)產(chǎn)業(yè)創(chuàng)新驅(qū)動(dòng)的態(tài)勢,但在學(xué)術(shù)方面的研究相對滯后,截至2017年7月,以萬方知識(shí)服務(wù)平臺(tái)為中文數(shù)據(jù)源,以EIVillage為英文數(shù)據(jù)源的檢索顯示,目前標(biāo)題包含“智能合約/smartcontract”且與區(qū)塊鏈技術(shù)相關(guān)的學(xué)術(shù)論文僅有中文9篇和英文27篇.
本文的內(nèi)容有6方面:1)簡要介紹了智能合約的底層技術(shù)基礎(chǔ)———區(qū)塊鏈技術(shù),概述了智能合約的定義、全生命周期、優(yōu)點(diǎn)及分類;2)凝練總結(jié)了智能合約的基本架構(gòu)、關(guān)鍵技術(shù);3)簡要介紹了智能合約的主要技術(shù)平臺(tái);4)闡述了智能合約的發(fā)展現(xiàn)狀與應(yīng)用場景;5)概要總結(jié)了智能合約現(xiàn)存的問題并搭建了以太坊實(shí)驗(yàn)環(huán)境,開發(fā)了一個(gè)眾籌智能合約系統(tǒng);6)總結(jié)與展望..
1智能合約背景知識(shí)
1.1區(qū)塊鏈技術(shù)簡介
區(qū)塊鏈技術(shù)起源于2008年,由一位化名為“中本聰”(SatoshiNakamoto)的學(xué)者提出,其在文獻(xiàn)中所描述的區(qū)塊鏈?zhǔn)且环N按照時(shí)間順序?qū)?shù)據(jù)區(qū)塊以鏈條的方式組合成特定數(shù)據(jù)結(jié)構(gòu),并以密碼學(xué)方式保證的不篡改和不可偽造的去中心化共享總賬(decentralizedsharedledger)[10].比特幣是最早的區(qū)塊鏈應(yīng)用場景,其本質(zhì)是由基于區(qū)塊鏈技術(shù)的分布式網(wǎng)絡(luò)利用密碼學(xué)算法生成的數(shù)字加密貨幣.數(shù)字加密貨幣領(lǐng)域一直面臨著兩大難題:雙重支付問題和拜占庭將軍問題(Byzantinegeneralsproblem)[11].而區(qū)塊鏈技術(shù)的出現(xiàn),為解決這兩大難題提供了有效的途徑.雙重支付問題是指用“同一筆錢”在兩次或多次交易中完成支付.拜占庭將軍問題是指在缺少可信任中心節(jié)點(diǎn)的情況下,分布式系統(tǒng)如何達(dá)成共識(shí)和建立互信的問題[12].區(qū)塊鏈技術(shù),在不需要第三方信用機(jī)構(gòu)的前提下,通過分布式數(shù)據(jù)庫、數(shù)字加密技術(shù)和獨(dú)特的共識(shí)算法解決了去中心化系統(tǒng)的雙重支付問題,實(shí)現(xiàn)了一個(gè)無需信任單個(gè)節(jié)點(diǎn)的去中心化的可信任系統(tǒng).區(qū)塊鏈的共識(shí)算法的理論基礎(chǔ)是拜占庭容錯(cuò)(Byzantinefaulttolerant,BFT).常見的共識(shí)算法有工作量證明(proofofwork,PoW)[13]、權(quán)益證明(proofofstake,PoS)[14]、授權(quán)權(quán)益證明(delegatedproofofstake,DPoS)[15]、實(shí)用拜占庭容錯(cuò)(practicalByzantinefaulttolerance,PBFT)[16]、授權(quán)拜占庭容錯(cuò)(delegatedByzantinefaulttolerance,DBFT)[17]等.
狹義的區(qū)塊鏈?zhǔn)侨ブ行幕到y(tǒng)中各節(jié)點(diǎn)共享的數(shù)據(jù)賬本,區(qū)塊結(jié)構(gòu)如圖1所示,每個(gè)區(qū)塊分為區(qū)塊頭和區(qū)塊體兩部分,涉及鏈?zhǔn)浇Y(jié)構(gòu)、Hash算法、Merkle樹和時(shí)間戳等技術(shù)要素[18].
區(qū)塊鏈技術(shù)的本質(zhì)是它在網(wǎng)絡(luò)空間建立了一種分布式的一致性標(biāo)準(zhǔn),對所有的數(shù)字事件在分布式數(shù)據(jù)庫上創(chuàng)建確切的無法篡改的記錄并且使得區(qū)塊鏈中的所有參與方都能確切、可信地了解所發(fā)生的數(shù)字事件.
區(qū)塊鏈技術(shù)出現(xiàn)后,其去中心化、去信任、規(guī)則透明、集體維護(hù)、不可篡改等特性,恰好為智能合約提供了安全可靠的記錄載體和執(zhí)行環(huán)境.首先,區(qū)塊鏈技術(shù)采用純數(shù)學(xué)的方法,在不犧牲隱私性,也無需第三方信用機(jī)構(gòu)參與的條件下,可以對所有過去、當(dāng)前的數(shù)字事件(如行為、資產(chǎn)等),建立分布式的一致性表達(dá)[19].其次,區(qū)塊鏈提供了可供用戶進(jìn)行編程的腳本系統(tǒng),進(jìn)一步增強(qiáng)了區(qū)塊鏈應(yīng)用的靈活性,如在以太坊中,具備圖靈完備、功能強(qiáng)大的腳本系統(tǒng),使得基于智能合約的更為高級(jí)的分布式應(yīng)用得以實(shí)現(xiàn).
1.2智能合約概述
智能合約有許多非形式化的定義,Szabo[8]創(chuàng)造性地提出,“智能合約就是執(zhí)行合約條款的可計(jì)算交易協(xié)議”;以太坊的智能合約是基于區(qū)塊鏈的數(shù)字資產(chǎn)控制程序[6].狹義來講,智能合約是涉及相關(guān)商業(yè)邏輯和算法的程序代碼,把人、法律協(xié)議和網(wǎng)絡(luò)之間的復(fù)雜關(guān)系程序化了.廣義來講,智能合約是一種計(jì)算機(jī)協(xié)議,一旦部署就能實(shí)現(xiàn)自我執(zhí)行和自我驗(yàn)證,已經(jīng)不僅僅局限于金融領(lǐng)域,并且在分布式計(jì)算、物聯(lián)網(wǎng)等領(lǐng)域都有廣闊的應(yīng)用前景.
類似于傳統(tǒng)合約,智能合約全生命周期包括:合約生成、合約發(fā)布、合約執(zhí)行3個(gè)部分,如圖2所示:
合約生成,主要包含合約多方協(xié)商、制定合約規(guī)范、進(jìn)行合約驗(yàn)證、獲得合約代碼4個(gè)環(huán)節(jié).具體實(shí)現(xiàn)過程為:由合約參與方進(jìn)行協(xié)商,明確各方的權(quán)利與義務(wù),確定標(biāo)準(zhǔn)合約文本并將文本程序化,經(jīng)驗(yàn)證后獲得標(biāo)準(zhǔn)合約代碼.其中涉及2個(gè)重要環(huán)節(jié):合約規(guī)范和合約驗(yàn)證.合約規(guī)范需要由具備相關(guān)領(lǐng)域?qū)I(yè)知識(shí)的專家和合約方進(jìn)行協(xié)商制定.合約驗(yàn)證在基于系統(tǒng)抽象模型的虛擬機(jī)上進(jìn)行,它是關(guān)乎到合約執(zhí)行過程安全性的重要環(huán)節(jié),必須保證合約代碼和合約文本的一致性.
合約發(fā)布與交易發(fā)布類似,經(jīng)簽名后的合約通過P2P的方式分發(fā)至每一個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)會(huì)將收到的合約暫存在內(nèi)存中并等待進(jìn)行共識(shí).共識(shí)過程的實(shí)現(xiàn):每個(gè)節(jié)點(diǎn)會(huì)將最近一段時(shí)間內(nèi)暫存的合約打包成一個(gè)合約集合,并計(jì)算出該集合的Hash值,最后將這個(gè)合約集合的Hash值組裝成一個(gè)區(qū)塊并擴(kuò)散至全網(wǎng)的其他節(jié)點(diǎn);收到該區(qū)塊的節(jié)點(diǎn)會(huì)將其中保存的Hash值與自己保存的合約集合的Hash值進(jìn)行比較驗(yàn)證;通過多輪的發(fā)送與比較,所有節(jié)點(diǎn)最終會(huì)對新發(fā)布的合約達(dá)成共識(shí),并且達(dá)成共識(shí)的合約集合以區(qū)塊的形式擴(kuò)散至全網(wǎng)各節(jié)點(diǎn),如圖3所示.其中每個(gè)區(qū)塊包含以下信息:當(dāng)前區(qū)塊的Hash值、前一區(qū)塊的Hash值、時(shí)間戳、合約數(shù)據(jù)以及其他描述信息.
智能合約的執(zhí)行是基于“事件觸發(fā)”機(jī)制的.基于區(qū)塊鏈的智能合約都包含事務(wù)處理和保存機(jī)制以及一個(gè)完備的狀態(tài)機(jī),用于接受和處理各種智能合約.智能合約會(huì)定期遍歷每個(gè)合約的狀態(tài)機(jī)和觸發(fā)條件,將滿足觸發(fā)條件的合約推送至待驗(yàn)證隊(duì)列.待驗(yàn)證的合約會(huì)擴(kuò)散至每一個(gè)節(jié)點(diǎn),與普通區(qū)塊鏈交易一樣,節(jié)點(diǎn)會(huì)首先進(jìn)行簽名驗(yàn)證,以確保合約的有效性,驗(yàn)證通過的合約經(jīng)過共識(shí)后便會(huì)成功執(zhí)行.整個(gè)合約的處理過程都由區(qū)塊鏈底層內(nèi)置的智能合約系統(tǒng)自動(dòng)完成,公開透明,不可篡改.
智能合約的實(shí)現(xiàn),本質(zhì)上是通過賦予對象(如資產(chǎn)、市場、系統(tǒng)、行為等)數(shù)字特性,即將對象程序化并部署在區(qū)塊鏈上,成為全網(wǎng)共享的資源,再通過外部事件觸發(fā)合約的自動(dòng)生成與執(zhí)行,進(jìn)而改變區(qū)塊鏈網(wǎng)絡(luò)中數(shù)字對象的狀態(tài)(如分配、轉(zhuǎn)移)和數(shù)值.智能合約可以實(shí)現(xiàn)主動(dòng)或被動(dòng)的接受、存儲(chǔ)、執(zhí)行和發(fā)送數(shù)據(jù),以及調(diào)用智能合約,以此實(shí)現(xiàn)控制和管理鏈上數(shù)字對象.目前已經(jīng)出現(xiàn)的智能合約技術(shù)平臺(tái),如以太坊、Hyperledger等,具備圖靈完備的開發(fā)腳本語言,使得區(qū)塊鏈能夠支持更多的金融和社會(huì)系統(tǒng)的智能合約應(yīng)用.
現(xiàn)今,雖然智能合約尚未得到廣泛應(yīng)用,但其技術(shù)優(yōu)點(diǎn)已經(jīng)得到研究人員的廣泛認(rèn)可.總體來說,智能合約具有7個(gè)優(yōu)點(diǎn):
1)確定性.智能合約在不同的計(jì)算機(jī)或者在同一臺(tái)計(jì)算機(jī)上的不同時(shí)刻多次運(yùn)行,對于相同的輸入能夠保證產(chǎn)生相同的輸出.對于區(qū)塊鏈上的智能合約,確定性是必然要求,因?yàn)榉谴_定性的合約可能會(huì)破壞系統(tǒng)的一致性.
2)一致性.智能合約應(yīng)與現(xiàn)行合約文本一致,必須經(jīng)過具備專業(yè)知識(shí)的人士制定審核,不與現(xiàn)行法律沖突,具有法律效應(yīng)[20].
3)可終止性.智能合約能在有限的時(shí)間內(nèi)運(yùn)行結(jié)束.區(qū)塊鏈上的智能合約保證可終止性的途徑有非圖靈完備(如比特幣)、計(jì)價(jià)器(如以太坊)、計(jì)時(shí)器(如HyperledgerFabric)等.
4)可觀察和可驗(yàn)證性.智能合約通過區(qū)塊鏈技術(shù)的數(shù)字簽名和時(shí)間戳,保證合約的不可篡改性和可溯源性.合約方都能通過一定的交互方式來觀察合約本身及其所有狀態(tài)、執(zhí)行記錄等,并且執(zhí)行過程是可驗(yàn)證的.
5)去中心化.智能合約的所有條款和執(zhí)行過程都是預(yù)先制定好的,一旦部署運(yùn)行,合約中的任何一方都不能單方面修改合約內(nèi)容以及干預(yù)合約的執(zhí)行.同時(shí),合約的監(jiān)督和仲裁都由計(jì)算機(jī)根據(jù)預(yù)先制定的規(guī)則來完成,大大降低了人為干預(yù)風(fēng)險(xiǎn).
6)高效性和實(shí)時(shí)性.智能合約無需第三方中心機(jī)構(gòu)的參與,能自動(dòng)地實(shí)時(shí)響應(yīng)客戶需求,大大提升了服務(wù)效率.
7)低成本.智能合約自我執(zhí)行和自我驗(yàn)證的特征,使其能夠大大降低合約執(zhí)行、裁決和強(qiáng)制執(zhí)行所產(chǎn)生的人力、物力成本.
就當(dāng)前發(fā)展而言,以區(qū)塊鏈技術(shù)為基礎(chǔ)的智能合約大致分為3類:1)“Chaincode”,即常說的鏈上代碼,如金融活動(dòng)由交換數(shù)據(jù)變?yōu)榻粨Q代碼;2)“智能法律合約”,包括不同方面所產(chǎn)生的權(quán)利和義務(wù),并且在法律上可執(zhí)行,通常以復(fù)雜的法律文本來表達(dá),不僅涵蓋個(gè)人行為,還可能涉及時(shí)間依賴和次序依賴等一系列依賴關(guān)系,例如PrimaveradeFilippi加密賬本交易法律框架[21],用鏈上智能合約來補(bǔ)充或代替現(xiàn)有法律合同,成為智能合約代碼和傳統(tǒng)法律語言的結(jié)合;3)“智能應(yīng)用合約”,即在區(qū)塊鏈上部署基于智能合約的分布式鏈上應(yīng)用,創(chuàng)建有商業(yè)價(jià)值的全新合約形式,如M2M(機(jī)器對機(jī)器)商業(yè)模式.Fig.4Basicframeworkofthesmartcontract圖4智能合約基本架構(gòu)
2智能合約基本架構(gòu)與關(guān)鍵技術(shù)
智能合約基本架構(gòu)如圖4所示.總體來說,區(qū)塊鏈智能合約包含數(shù)據(jù)層、傳輸層、智能合約主體、驗(yàn)證層、執(zhí)行層以及合約之上的應(yīng)用層這6個(gè)要素.數(shù)據(jù)層包括鏈上數(shù)據(jù)和鏈下數(shù)據(jù),它們是智能合約運(yùn)行的必要數(shù)據(jù)源.傳輸層則封裝了用于支持“鏈上-鏈上”和“鏈上-鏈下”進(jìn)行通信、數(shù)據(jù)傳輸?shù)膮f(xié)議.智能合約主體包括協(xié)議和參數(shù).驗(yàn)證層主要包含一些驗(yàn)證算法,用于保證合約代碼和合約文本的一致性.執(zhí)行層主要封裝了智能合約運(yùn)行環(huán)境的相關(guān)軟件.應(yīng)用層則是基于前5個(gè)要素的基礎(chǔ)產(chǎn)生的相對高級(jí)的各種應(yīng)用,它主要是為智能合約與其他計(jì)算機(jī)、應(yīng)用程序通信服務(wù)的.本節(jié)將從智能合約主體、數(shù)據(jù)加載方式、執(zhí)行環(huán)境、驗(yàn)證方法和擴(kuò)展性的實(shí)現(xiàn)5個(gè)方面探討智能合約的關(guān)鍵技術(shù).
2.1合約主體
智能合約主體為基于標(biāo)準(zhǔn)化的合約應(yīng)用提供了復(fù)雜的協(xié)議框架,可以通過識(shí)別智能合約的關(guān)鍵參數(shù)來識(shí)別合約的行為和狀態(tài).智能合約主體主要包括協(xié)議和參數(shù)2個(gè)部分:
1)協(xié)議是由標(biāo)準(zhǔn)機(jī)構(gòu)發(fā)布的合法文本的程序化描述[22].協(xié)議包括合法的標(biāo)準(zhǔn)文本和標(biāo)準(zhǔn)參數(shù),其中每個(gè)參數(shù)都有一個(gè)標(biāo)識(shí),分別代表一種類型.可以說,協(xié)議是一個(gè)完全實(shí)例化的模板.
2)參數(shù)包括業(yè)務(wù)邏輯模塊(主要參數(shù))和各種附件模塊,如數(shù)據(jù)管理模塊、用戶管理模塊、合約管理模塊等.業(yè)務(wù)邏輯模塊包括定制的合法文本和參數(shù),是對應(yīng)用領(lǐng)域?qū)I(yè)知識(shí)的程序化描述,由合約參與方協(xié)商產(chǎn)生,涉及多方的權(quán)利與義務(wù).業(yè)務(wù)邏輯模塊的合法文本和參數(shù)來自協(xié)議部分的標(biāo)準(zhǔn)文本和參數(shù),但根據(jù)應(yīng)用場景而有所不同.附件模塊在業(yè)務(wù)邏輯的基礎(chǔ)上,結(jié)合具體應(yīng)用場景的需要,實(shí)現(xiàn)對智能合約的補(bǔ)充和完善.數(shù)據(jù)管理模塊,封裝了實(shí)現(xiàn)數(shù)據(jù)接收、暫存、計(jì)算、清除等功能的代碼程序;用戶管理模塊,主要實(shí)現(xiàn)了合約用戶的權(quán)限管理、安全認(rèn)證、信譽(yù)管理等功能;合約管理模塊,主要功能是當(dāng)合約被調(diào)用時(shí),結(jié)合用戶需求,實(shí)現(xiàn)合約的生成、驗(yàn)證發(fā)布、部署執(zhí)行、狀態(tài)查詢以及風(fēng)險(xiǎn)處理等功能.各模塊根據(jù)應(yīng)用需求,可以定制子協(xié)議和子標(biāo)準(zhǔn),如計(jì)算安全標(biāo)準(zhǔn)、風(fēng)險(xiǎn)預(yù)警標(biāo)準(zhǔn)、模塊交互協(xié)議等.所有參數(shù)都是合約的關(guān)鍵部分,因?yàn)樗鼈儾粌H直接反映了各方之間的業(yè)務(wù)關(guān)系而且影響合約的自動(dòng)執(zhí)行.
2.2數(shù)據(jù)加載方式
數(shù)據(jù)層包括狀態(tài)數(shù)據(jù)、交易數(shù)據(jù)、合約代碼、應(yīng)用數(shù)據(jù)等,出于可觀察和可驗(yàn)證的目的,狀態(tài)數(shù)據(jù)和交易數(shù)據(jù)一般都采用鏈上存儲(chǔ)方式.應(yīng)用數(shù)據(jù)和合約代碼的加載方式則分為鏈上和鏈下2種.目前絕大多數(shù)區(qū)塊鏈系統(tǒng)均采用鏈上方式,將代碼和應(yīng)用數(shù)據(jù)發(fā)布到鏈上,然后再從鏈上加載數(shù)據(jù)和代碼并執(zhí)行,其缺點(diǎn)是代碼和應(yīng)用數(shù)據(jù)將永久地存在于區(qū)塊鏈中,不利于更新維護(hù),占用節(jié)點(diǎn)存儲(chǔ)資源,隨著時(shí)間的積累將帶來巨大的存儲(chǔ)負(fù)擔(dān).鏈下方式是指將智能合約的散列值存儲(chǔ)于鏈上,并通過以散列值為索引的存儲(chǔ)網(wǎng)絡(luò)或可信賴的數(shù)據(jù)源來保存完整的合約代碼,如IPFS(interplanetartfilesystem)系統(tǒng)、TowerCrier平臺(tái)[23].散列值是由合約代碼內(nèi)容計(jì)算而得,這樣既可以保證合約的不可篡改性,又可以節(jié)約節(jié)點(diǎn)大量的存儲(chǔ)空間和加強(qiáng)合約的隱私性.
2.3執(zhí)行環(huán)境
目前主流的智能合約執(zhí)行環(huán)境的設(shè)計(jì)主要分為2種:虛擬機(jī)和容器(docker).無論是虛擬機(jī)還是容器,它們的作用都是在一個(gè)沙箱中執(zhí)行合約代碼,并對合約所使用的資源進(jìn)行隔離和限制.虛擬機(jī)通常是指通過軟件模擬的具備完整硬件功能的、能像真實(shí)機(jī)器一樣執(zhí)行程序的計(jì)算機(jī)的軟件實(shí)現(xiàn),如VMware.出于降低資源開銷、提升性能和兼容性的目的,絕大多數(shù)區(qū)塊鏈會(huì)采用輕量級(jí)的虛擬機(jī)結(jié)構(gòu),如以太坊虛擬機(jī)(Ethereumvirtualmachine,EVM).
容器通常是指借助容器引擎,讓開發(fā)者可以打包其應(yīng)用以及依賴包到一個(gè)可移植的容器中,也可以實(shí)現(xiàn)虛擬化.容器使用沙箱機(jī)制,相互之間不會(huì)有任何接口,如HyperledgerFabric使用Docker作為智能合約的執(zhí)行環(huán)境.Docker本身沒有采用虛擬化技術(shù),程序是直接運(yùn)行在底層操作系統(tǒng)上,代碼執(zhí)行的效率很高.但與輕量級(jí)虛擬機(jī)相比,其過于龐大的架構(gòu),使得部署和啟動(dòng)Docker本身需要消耗大量的時(shí)間和計(jì)算資源.
我們在1.2節(jié)已經(jīng)提到,智能合約本質(zhì)上是區(qū)塊鏈上可執(zhí)行的代碼,那么在智能合約的執(zhí)行過程中,我們需要關(guān)注2個(gè)問題,即指令的執(zhí)行速度和運(yùn)行環(huán)境的啟動(dòng)速度.對于智能合約而言,運(yùn)行環(huán)境的啟動(dòng)速度比指令的執(zhí)行速度更加重要[24].這是因?yàn),針對輕量化的虛擬機(jī)或容器,智能合約的代碼中很少會(huì)涉及到IO相關(guān)的指令,所以這些指令代碼易于優(yōu)化.而智能合約的每次調(diào)用,都必須在一個(gè)新的虛擬機(jī)或容器中進(jìn)行,因此運(yùn)行環(huán)境啟動(dòng)時(shí)間對整個(gè)智能合約系統(tǒng)影響較大.
2.4驗(yàn)證方法
智能合約是對某領(lǐng)域?qū)I(yè)知識(shí)的程序語言描述,對合約所涉及的核心利益(如資產(chǎn))的安全性、合約代碼的邏輯正確性有了更高的要求,必須保證合約文本與合約代碼的一致性,合約驗(yàn)證是保證這些要求的重要途徑.目前,形式化驗(yàn)證是智能合約領(lǐng)域的主流驗(yàn)證方式.形式化方法是基于數(shù)學(xué)的描述和推理計(jì)算機(jī)系統(tǒng)性質(zhì)的技術(shù),常用于軟件的規(guī)范、開發(fā)和驗(yàn)證[25].形式化方法主要包括形式歸約和形式驗(yàn)證.形式驗(yàn)證是建立在形式歸約的基礎(chǔ)上,驗(yàn)證已有程序是否滿足其歸約要求[26].目前常見的形式驗(yàn)證方法主要有2種:演繹驗(yàn)證和模型檢測.演繹驗(yàn)證是基于定理證明的思想,采用邏輯公式描述系統(tǒng),優(yōu)點(diǎn)是可以處理無限狀態(tài)的問題但做不到完全自動(dòng)化,如STeP.模型檢測是基于狀態(tài)搜索的思想,主要針對有窮狀態(tài)系統(tǒng),如SPIN.模型檢測可以實(shí)現(xiàn)完全自動(dòng)化,并且在驗(yàn)證性質(zhì)得不到滿足時(shí),搜索終止可以給出反例,這種信息往往反映了系統(tǒng)設(shè)計(jì)中的錯(cuò)誤.
智能合約的形式化驗(yàn)證主要包括4個(gè)部分:代碼生成、形式化描述、形式化驗(yàn)證和一致性測試.代碼生成,是指用編程語言對合約文本進(jìn)行程序化描述.形式化描述,是指通過建模語言和建模工具對形式化合約文檔進(jìn)行建模[27].一致性測試強(qiáng)調(diào)被測系統(tǒng)與給定標(biāo)準(zhǔn)的一致性,通過測試的合約代碼實(shí)現(xiàn)的外部特性與標(biāo)準(zhǔn)合約文本一致[28].形式化驗(yàn)證法可以檢查智能合約的很多屬性,如可達(dá)性、公平性、死鎖等.將形式化驗(yàn)證法應(yīng)用于智能合約,使得合約的生成和執(zhí)行有了規(guī)范性約束,保證了合約的可信性.