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