汪永菊,杜秀娟,2,3,陳浩章
(1. 青海師范大學(xué)計算機學(xué)院,青海 西寧 810008;2. 藏語智能信息處理及應(yīng)用國家重點實驗室,青海 西寧 810008;3. 高原科學(xué)與可持續(xù)發(fā)展研究院,青海 西寧 810008)
隨著比特幣數(shù)字貨幣的發(fā)展,區(qū)塊鏈吸引了眾多業(yè)界人士及社會各領(lǐng)域關(guān)注,區(qū)塊鏈為智能合約提供安全可信的環(huán)境[1],智能合約為其提供靈活的編程特性。在1994年,智能合約的概念由Nick Szbao提出,并定義為“一套以數(shù)字形式指出的承諾,包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議”[2]。目前,智能合約并沒有一個可以公認(rèn)的定義[3]。由袁勇、王飛躍所著的“區(qū)塊鏈理論與方法”一書中指出,廣義的智能合約定義為無需中介、自我驗證、自動執(zhí)行合約條款的計算機交易協(xié)議[3]。
智能合約[3]就是在雙方或參與者在互不了解、互不信任且沒有可信第三方的權(quán)威機構(gòu)下,對合約條款達(dá)成共識,實現(xiàn)智能合約的可編程特性[4]。
2008年,中本聰公開發(fā)表了”Bitcoin:A Peer-to-Peer Electronic Cash System”[5],提出了P2P網(wǎng)絡(luò)、非對稱加密技術(shù)、時間戳、共識算法的電子現(xiàn)金系統(tǒng)的架構(gòu)理念,以下是區(qū)塊鏈的發(fā)展歷程:
1)區(qū)塊鏈1.0--比特幣代表區(qū)塊鏈1.0,實現(xiàn)了跨境支付、可編程貨幣,對傳統(tǒng)金融市場造成了巨大沖擊。因此,區(qū)塊鏈1.0稱為可編程貨幣階段[6]。
2)區(qū)塊鏈2.0--第一次嘗試將區(qū)塊鏈技術(shù)和現(xiàn)實產(chǎn)業(yè)相結(jié)合,將其應(yīng)用于金融、經(jīng)濟領(lǐng)域。以太坊是區(qū)塊鏈2.0。因此,區(qū)塊鏈2.0稱為可編程金融階段[6]。
3)區(qū)塊鏈3.0--將區(qū)塊鏈從數(shù)字貨幣應(yīng)用到金融、醫(yī)療、物聯(lián)網(wǎng)等社會的諸多領(lǐng)域,其目的是實現(xiàn)可編程社會。因此,區(qū)塊鏈3.0稱為可編程社會階段[6]。
區(qū)塊鏈?zhǔn)怯脮r間順序?qū)?shù)據(jù)區(qū)塊進(jìn)行連接并將數(shù)據(jù)存儲在主鏈上的一種分布式數(shù)據(jù)庫[3],在區(qū)塊鏈系統(tǒng)中用密碼學(xué)技術(shù)實現(xiàn)了數(shù)據(jù)不被篡改、利用共識機制達(dá)成共識,同時使用智能合約實現(xiàn)自動化的編程,并由各節(jié)點共享且共同維護的分布式數(shù)據(jù)賬本[3]。
智能合約的概念在區(qū)塊鏈出現(xiàn)之前就被提出,但直到區(qū)塊鏈的出現(xiàn)為智能合約的發(fā)展提供了條件。
智能合約(Smart Contracts)是將合約內(nèi)容通過算法和程序的方式編寫為代碼并在區(qū)塊鏈上進(jìn)行部署[1],一旦滿足了提前制定的規(guī)則中的條件,代碼將會自動執(zhí)行而且不需要人為的對代碼進(jìn)行任何的操作[1]。因受到計算場景等因素限制,智能合約得不到應(yīng)用,但區(qū)塊鏈的發(fā)展給智能合約提供了新的涵義[3]。此外智能合約包括自動執(zhí)行、安全靈活等優(yōu)點[7]。
目前比較成熟的智能合約技術(shù)平臺主要有以太坊(Ethereum)[8]和超級賬本(Hyperledger Fabric)[9]。朱巖[10]等人從語言形式和運行環(huán)境將智能合約分為腳本型、通用型和專用型等三種不同的智能合約,簡要闡述了不同技術(shù)平臺使用的編程語言不同。本文將從編程語言和執(zhí)行環(huán)境等方面介紹比特幣腳本、以太坊平臺和超級賬本。
比特幣(Bitcoin)交易腳本語言可簡稱為(Script),是一種類似Forth語言的指令體系[10]。它是非圖靈完備的語言且處理簡單的交易腳本[11],為了解決存在的漏洞及攻擊問題,比特幣腳本中沒有設(shè)計循環(huán)等較為復(fù)雜的控制流[3],只實現(xiàn)基本的算法、邏輯運算及驗證加密功能。
比特幣腳本語言能夠保證交易的安全,卻僅限于數(shù)字貨幣領(lǐng)域,它可看做是智能合約的雛形,并不能作為智能合約未來的發(fā)展方向[12]。
4.2.1 以太坊
以太坊是一個開源平臺項目[4],以太坊智能合約就是以太坊上的一種程序。按以下智能合約模型,將合約部署在區(qū)塊鏈上,將有用的價值和狀態(tài)存儲在區(qū)塊鏈創(chuàng)建的共享賬本上[1],以太坊是基于賬戶的模型,包括外部賬戶和合約賬戶[12],外部賬戶用來創(chuàng)建交易,合約賬戶不能創(chuàng)建交易,但可以完成信息創(chuàng)建的過程。智能合約的調(diào)用過程是將其它合約發(fā)來的交易借助外部賬戶發(fā)送到合約賬戶的這一過程,當(dāng)接收到外部發(fā)來的事件和其他賬戶發(fā)來的交易時,滿足預(yù)定條件可激活智能合約,并對其進(jìn)行回應(yīng),可以通過發(fā)送交易來發(fā)出價值或通過發(fā)送事件來傳遞信息[10],如圖1。
圖1 智能合約模型
在合約運行時,因CPU和內(nèi)存會占據(jù)存儲空間因而會消耗一定的燃料費(Gas),而燃料費是用以太幣進(jìn)行兌換的,如果Gas消耗完,合約將停止運行,已經(jīng)消耗的Gas不會返回,可防止運行過程出現(xiàn)死循環(huán)。
4.2.2 以太坊編程語言
在以太坊中使用的編程語言分為Serpent和Solidty兩種[6]。Serpent類似于Python[10],語法簡單便于掌握,在以太坊智能合約中主要使用Solidty語言完成合約的編寫,它與JavaScript語言類似[10],且更具安全性。Solidty是面向?qū)ο蟮娜躅愋驼Z言,也是圖靈完備的語言[13]。在合約的編寫過程中是不可直接用EVM語言(Ethereum Virtual Machine Code),而是使用Serpent和Solidty等編程語言,用編譯器編譯為EVM語言后才可以使用[13]。
4.2.3 以太坊執(zhí)行環(huán)境
以太坊智能合約是在以太坊虛擬機(Ethereum Virtual Machine,EVM)[1]中執(zhí)行,它屬于隔離的沙箱環(huán)境,并在以太坊虛擬機內(nèi)部來完成合約代碼的執(zhí)行過程[14],以太坊使用的虛擬機是屬于輕量級的,使用過程中可消耗較低的能源[14]。
將合約部署到以太坊網(wǎng)絡(luò)上便可運行。任何人都能對合約內(nèi)容進(jìn)行訪問,因為它是全網(wǎng)公開的,其狀態(tài)信息和價值也是公開的。
根據(jù)比特幣和以太坊等全球共享的公有鏈的成功經(jīng)驗及企業(yè)需求[6],業(yè)界推出了適用于企業(yè)級的應(yīng)用平臺。2015年超級賬本成為開源項目并交給Linux進(jìn)行維護[15],Fabric是Hyperledger的一個子項目[1],超級賬本是指只有允許的商業(yè)聯(lián)盟或組織才能參與其中并進(jìn)行維護。
4.3.1 鏈碼
超級賬本的智能合約稱為鏈碼(Chaincode)[16],它可用于交易并進(jìn)行狀態(tài)數(shù)據(jù)的訪問,在對合約進(jìn)行編寫時使用了Init和Invoke兩個函數(shù)[17],Init函數(shù)是對狀態(tài)進(jìn)行初始化的一個過程,而Invoke函數(shù)是對數(shù)據(jù)進(jìn)行讀寫操作[17]。
4.3.2 超級賬本編程語言
Hyperledger Fabric使用Go、Java、Node.js語言來編寫合約[12],編程語言也是圖靈完備的,同時降低了學(xué)習(xí)者對編程語言的要求,便于被更多的人掌握,主要是用于滿足商業(yè)級的業(yè)務(wù)需求和實際應(yīng)用。
4.3.3 超級賬本執(zhí)行環(huán)境
超級賬本是在Docker容器中執(zhí)行,也是輕量級的,并且容器是屬于隔離的沙箱環(huán)境,可以減少惡意合約對宿主機產(chǎn)生攻擊的行為,也不會對容器之間產(chǎn)生影響[6]。
從執(zhí)行環(huán)境、編程語言、區(qū)別、準(zhǔn)入機制、數(shù)據(jù)模型、共識算法、底層數(shù)據(jù)庫、圖靈完備性等方面對比特幣、以太坊和超級賬本作對比分析,見表1。
表1 智能合約開發(fā)平臺對比
智能合約最先是在無人自動售貨機中進(jìn)行使用[12]。用戶將足額硬幣投入售貨機來獲得相應(yīng)的商品,完成一次交易。最初Nick Szbao根據(jù)無人自動售貨機提出了智能合約的概念,將其作為一個簡單版本的智能合約,即向售貨機中投入硬幣獲得商品的方式,自動控制程序完成交易。
智能合約的應(yīng)用場景廣泛,可以運用于各類金融資產(chǎn)、物聯(lián)網(wǎng)、醫(yī)療、供應(yīng)鏈、保險、身份認(rèn)證等諸多領(lǐng)域。本文從金融、醫(yī)療、物聯(lián)網(wǎng)、供應(yīng)鏈管理等四個主要領(lǐng)域介紹智能合約的應(yīng)用場景。
智能合約在金融行業(yè)的作用比較突出,胡啟磊[18]研究發(fā)現(xiàn),智能合約技術(shù)使得金融交易數(shù)字化,執(zhí)行過程中實現(xiàn)合同的自動化、智能化,節(jié)省附加的時間和人工成本,提高交易過程中的透明度,確保各類金融交易安全;李九斤[19]等人研究發(fā)現(xiàn),智能合約可簡化金融交易流程,提供更高效和標(biāo)準(zhǔn)的金融服務(wù)。
智能合約還可以應(yīng)用于抵押貸款,通過智能合約實現(xiàn)自動化付款及在付款后可查詢抵押記錄及簡化付款跟蹤,與傳統(tǒng)人工處理相比,提高處理效率,減少誤差并降低交易成本;智能合約在金融領(lǐng)域的關(guān)注度和投入度比其 它行業(yè)更多,智能合約的在金融行業(yè)的應(yīng)用具有更大的發(fā)揮潛能,但是需要進(jìn)一步關(guān)注法律及技術(shù)方面問題,比如數(shù)據(jù)隱私方面的保護。
醫(yī)療行業(yè)目前是一個全球關(guān)注的行業(yè),也是各國政府進(jìn)行大量財力和物力投資優(yōu)化的行業(yè),將智能合約技術(shù)和醫(yī)療行業(yè)相結(jié)合,能夠更深入地為醫(yī)療領(lǐng)域的工作者提供安全、穩(wěn)定的大數(shù)據(jù)分析及醫(yī)療知識學(xué)習(xí)與分析等服務(wù),更好的解決醫(yī)療數(shù)據(jù)的信息孤島問題。因此,將智能合約運用在醫(yī)療領(lǐng)域,可保證數(shù)據(jù)安全及患者隱私。文獻(xiàn)[20,21]研究發(fā)現(xiàn),基于區(qū)塊鏈智能合約可實現(xiàn)對不同醫(yī)療區(qū)塊鏈平臺數(shù)據(jù)的訪問控制,并實現(xiàn)不同醫(yī)療機構(gòu)之間對患者隱私的保護、數(shù)據(jù)整合和信息共享的過程,還保障了醫(yī)療數(shù)據(jù)的權(quán)威及可信性,為醫(yī)療人員提供了更便利及智能的服務(wù),能夠更好地保護在不同醫(yī)療系統(tǒng)之間醫(yī)療數(shù)據(jù)的安全及隱私泄露等問題。
物聯(lián)網(wǎng)是將位于不同時間、不同地方的物與物、人與設(shè)備、設(shè)備與設(shè)備之間通過網(wǎng)絡(luò)進(jìn)行連接且進(jìn)行信息交換和通信,將識別、追蹤、監(jiān)控等諸多功能綜合而成的一種繼互聯(lián)網(wǎng)后迅速發(fā)展的信息技術(shù),廣泛用于智慧城市、智慧交通、智能醫(yī)療等諸多領(lǐng)域。對物聯(lián)網(wǎng)存在的安全問題,陳亞茹[22]提出了一種區(qū)塊鏈智能合約技術(shù)的物聯(lián)網(wǎng)模型,從認(rèn)證與訪問控制、數(shù)據(jù)安全及建構(gòu)安全網(wǎng)絡(luò)架構(gòu)三方面進(jìn)行分析,結(jié)合區(qū)塊鏈的去中心化、安全可信等特性,提出的架構(gòu)具有提高數(shù)據(jù)傳輸安全、降低數(shù)據(jù)傳輸成本及隱私保護等優(yōu)勢;文獻(xiàn)[23,24]中將區(qū)塊鏈智能合約技術(shù)和物聯(lián)網(wǎng)相結(jié)合,利用智能合約實現(xiàn)物聯(lián)網(wǎng)復(fù)雜流程,更好的解決了分布式網(wǎng)絡(luò)中的不信任問題,保證安全并提高合約的可靠性,實現(xiàn)資源共享。
供應(yīng)鏈管理是指在實現(xiàn)一定供應(yīng)鏈效益的前提下,對來自不同實體的參與者進(jìn)行有效組織管理并達(dá)到最小的供應(yīng)鏈成本[25]。將智能合約運用在供應(yīng)鏈中可提高整個供應(yīng)鏈系統(tǒng)的信息透明度和追溯性[25]。田陽[25]等人對區(qū)塊鏈在供應(yīng)鏈管理中的應(yīng)用進(jìn)行系統(tǒng)化分析,通過對農(nóng)業(yè)、食品、醫(yī)療及工業(yè)供應(yīng)鏈等四個不同行業(yè)作對比分析并闡述區(qū)塊鏈智能合約技術(shù)在不同行業(yè)的解決方案,提高了供應(yīng)鏈過程中數(shù)據(jù)透明性,同時也更好的解決了參與方存在的信任問題;李劍[26]等人設(shè)計了一種可以用區(qū)塊鏈進(jìn)行驅(qū)動的供應(yīng)鏈協(xié)同減排信息共享機制,而信息不對稱是阻礙供應(yīng)鏈多主體協(xié)同減排的主要因素,所以提出了使用“區(qū)塊鏈+協(xié)同減排”三位一體信息共享機制來增強供應(yīng)鏈效益。三位是指生產(chǎn)商、供應(yīng)商和消費者,一體是區(qū)塊鏈。
區(qū)塊鏈的不可篡改及可追溯等特性為智能合約的實現(xiàn)提供了條件,智能合約也會被更多的人熟知,將其更好地應(yīng)用于電子商品、數(shù)字版權(quán)及文化傳媒等不同行業(yè)中。本文主要從區(qū)塊鏈概述、智能合約、智能合約的主要開發(fā)平臺及智能合約的典型應(yīng)用領(lǐng)域等四個方面分別闡述了區(qū)塊鏈智能合約技術(shù)的研究。首先從區(qū)塊鏈發(fā)展史等方面簡要概述區(qū)塊鏈;其次闡述智能合約概念;然后對智能合約的三個不同的開發(fā)平臺分開進(jìn)行闡述并進(jìn)一步作分析;最后從金融、物聯(lián)網(wǎng)、醫(yī)療和供應(yīng)鏈管理四個主要領(lǐng)域簡要介紹智能合約應(yīng)用場景。
下一步工作從智能合約存在的隱私、安全、法律等各種問題出發(fā),將對智能合約的安全問題和隱私保護作進(jìn)一步研究;在未來發(fā)展工作中致力于將區(qū)塊鏈智能合約技術(shù)應(yīng)用于水下傳感器網(wǎng)絡(luò)、海洋研究等領(lǐng)域,將區(qū)塊鏈智能合約技術(shù)與水下傳感器網(wǎng)絡(luò)相結(jié)合,其去中心化、不可篡改、可追溯等特性在水下傳感器網(wǎng)絡(luò)中發(fā)揮更大的優(yōu)勢,使得區(qū)塊鏈智能合約技術(shù)與水下傳感器網(wǎng)絡(luò)在未來研究中具有更大的突破。