An Overview on Smart Contracts: Challenges,Advances and Platforms
論文翻譯:Zheng, Zibin, et al. "An overview on smart contracts: Challenges, advances and platforms."?Future Generation Computer Systems?105 (2020): 475-491.
智能合約概述:挑戰(zhàn)、進(jìn)展和平臺(tái)
摘要:智能合約技術(shù)正在重塑傳統(tǒng)的工業(yè)和商業(yè)流程。智能合約嵌入到區(qū)塊鏈中,使協(xié)議的合同條款能夠自動(dòng)執(zhí)行,而無需受信任的第三方的干預(yù)。因此,智能合約可以減少管理,節(jié)省服務(wù)成本,提高業(yè)務(wù)流程的效率,降低風(fēng)險(xiǎn)。盡管智能合約有望推動(dòng)業(yè)務(wù)流程創(chuàng)新的新浪潮,但仍有許多挑戰(zhàn)有待解決。本文對(duì)智能合約進(jìn)行了綜述。我們首先介紹區(qū)塊鏈和智能合約。然后,我們將介紹智能合約面臨的挑戰(zhàn)以及最新的技術(shù)進(jìn)步。本文還比較了典型的智能合約平臺(tái),對(duì)智能合約應(yīng)用進(jìn)行了分類,并給出了一些典型的應(yīng)用實(shí)例。
I. INTRODUCTION
區(qū)塊鏈技術(shù)最近引起了學(xué)術(shù)界和工業(yè)界的廣泛興趣。區(qū)塊鏈?zhǔn)且环N分布式軟件系統(tǒng),允許在不需要可信第三方的情況下處理交易。因此,業(yè)務(wù)活動(dòng)可以以廉價(jià)和快速的方式完成。此外,區(qū)塊鏈的不變性也保證了分布式信任,因?yàn)閹缀醪豢赡艽鄹拇鎯?chǔ)在區(qū)塊鏈中的任何交易,而且所有歷史交易都是可審計(jì)和可追蹤的。區(qū)塊鏈技術(shù)正在促成Nick Szabo于20世紀(jì)90年代首次提出的智能合約[1]。在智能合約中,當(dāng)預(yù)先設(shè)定的條件得到滿足時(shí),用計(jì)算機(jī)程序編寫的合約條款將自動(dòng)執(zhí)行。由交易組成的智能合約本質(zhì)上是在分布式區(qū)塊鏈中存儲(chǔ)、復(fù)制和更新的。相比之下,傳統(tǒng)的合約需要由可信的第三方集中完成,因此執(zhí)行時(shí)間長(zhǎng),成本高。區(qū)塊鏈技術(shù)與智能合約的融合將使“點(diǎn)對(duì)點(diǎn)市場(chǎng)”的夢(mèng)想成真。

? ? ? ?以買方Buyer和供應(yīng)商Supplier之間的智能合約為例。如圖1所示,Supplier首先通過區(qū)塊鏈網(wǎng)絡(luò)向Buyer發(fā)送產(chǎn)品目錄。該目錄包括產(chǎn)品描述(如財(cái)產(chǎn)、數(shù)量、價(jià)格和可用性)以及裝運(yùn)和付款條款,存儲(chǔ)并分發(fā)在區(qū)塊鏈中,以便買方能夠獲得產(chǎn)品信息,同時(shí)驗(yàn)證供應(yīng)商的真實(shí)性和信譽(yù)。然后買方通過區(qū)塊鏈提交訂單,并提供指定數(shù)量和付款日期。整個(gè)程序構(gòu)成了一份藍(lán)色方框內(nèi)的采購合同(即Contract1),如圖1所示。值得一提的是,整個(gè)過程是在買方Buyer和供應(yīng)商Supplier之間完成的,沒有第三方的干預(yù)。
? ? ?Contract1完成后,供應(yīng)商將在區(qū)塊鏈中搜索一家Carrier(運(yùn)輸公司),以完成裝運(yùn)階段。與Contract1一樣,Supplier也在區(qū)塊鏈中發(fā)布運(yùn)輸描述(如運(yùn)輸費(fèi)用、來源、目的地、容量和運(yùn)輸時(shí)間)以及運(yùn)輸條件和條款。如果供應(yīng)商接受承運(yùn)人簽發(fā)的合同,產(chǎn)品將交付給承運(yùn)人,承運(yùn)人將最終將產(chǎn)品發(fā)送給買方。整個(gè)過程構(gòu)建了合同Contract2(包含在粉色框中),如圖1所示。同樣,Contract2的整個(gè)程序也在沒有第三方干預(yù)的情況下進(jìn)行。除自動(dòng)執(zhí)行Contract1和合同Contract 2外,付款程序(包括供應(yīng)商向承運(yùn)人付款和買方向供應(yīng)商付款)也自動(dòng)完成。例如,一旦買方確認(rèn)收到產(chǎn)品,當(dāng)滿足預(yù)定條件時(shí),買方和供應(yīng)商之間的付款將自動(dòng)觸發(fā)。買方與供應(yīng)商之間的財(cái)務(wù)結(jié)算通過加密貨幣(如比特幣或以太幣)進(jìn)行。與傳統(tǒng)交易不同的是,整個(gè)過程是以對(duì)等方式進(jìn)行的,沒有銀行等第三方的干預(yù)。因此,周轉(zhuǎn)時(shí)間和交易成本可以大大節(jié)省。
????總之,與傳統(tǒng)合約相比,智能合約具有以下優(yōu)勢(shì):?降低風(fēng)險(xiǎn)。由于區(qū)塊鏈的不變性,智能合約一旦發(fā)布就不能隨意更改。此外,在整個(gè)分布式區(qū)塊鏈系統(tǒng)中存儲(chǔ)和復(fù)制的所有交易都是可追蹤和可審計(jì)的。因此,像財(cái)務(wù)欺詐這樣的惡意行為可以大大減少。
?降低管理和服務(wù)成本。區(qū)塊鏈通過分布式共識(shí)機(jī)制確保整個(gè)系統(tǒng)的信任,而無需經(jīng)過中央經(jīng)紀(jì)人或調(diào)解人。存儲(chǔ)在區(qū)塊鏈中的智能合約可以以分散的方式自動(dòng)觸發(fā)。因此,由于第三方的干預(yù),可以大大節(jié)省管理和服務(wù)成本。
?提高業(yè)務(wù)流程的效率。消除對(duì)中介的依賴可以顯著提高業(yè)務(wù)流程的效率。以上述供應(yīng)鏈流程為例。一旦滿足預(yù)定條件(例如,買方確認(rèn)收到產(chǎn)品),財(cái)務(wù)結(jié)算將以對(duì)等方式通過程序自動(dòng)完成。因此,周轉(zhuǎn)時(shí)間可以大大縮短。
智能合約推動(dòng)了從工業(yè)物聯(lián)網(wǎng)到金融服務(wù)的廣泛應(yīng)用[2]、[3]、[4]、[5]、[6]、[7]、[8]、[9]、[10]、[11]。盡管智能合約在重塑傳統(tǒng)業(yè)務(wù)流程方面具有巨大潛力,但仍有許多挑戰(zhàn)有待解決。例如,即使區(qū)塊鏈能夠確保合同各方的某種匿名性,但由于所有交易都是全球可用的,因此整個(gè)合同執(zhí)行的隱私可能無法得到保護(hù)。此外,由于計(jì)算機(jī)程序?qū)收虾褪У拇嗳跣?,保證智能合約的正確性也是一個(gè)挑戰(zhàn)。最近有一些關(guān)于智能合約的研究。例如,[12]、[13]、[14]介紹了區(qū)塊鏈技術(shù)的全面調(diào)查,并簡(jiǎn)要介紹了智能合約。[15]的工作深入調(diào)查了以太坊智能合約編程漏洞,而[17]則詳細(xì)調(diào)查了智能合約語言的驗(yàn)證方法。文[16]報(bào)告了作者在智能合約編程教學(xué)中的經(jīng)驗(yàn),總結(jié)了學(xué)生犯的幾種典型錯(cuò)誤。參考文獻(xiàn)[18]對(duì)智能合約平臺(tái)進(jìn)行了實(shí)證分析。最近的研究[19],[20]也收集了一些關(guān)于智能合約的文獻(xiàn)并進(jìn)行了綜述,但沒有討論這一領(lǐng)域的挑戰(zhàn)。此外,[21]的工作簡(jiǎn)要介紹了智能合約平臺(tái)和體系結(jié)構(gòu)。然而,現(xiàn)有的大多數(shù)論文都未能明確不斷上升的挑戰(zhàn),并給出一個(gè)全面的調(diào)查。例如,以太坊可用于進(jìn)行非法業(yè)務(wù),如龐氏騙局,據(jù)報(bào)道,該騙局騙取了41萬多美元,而很少有研究涉及這一問題[22]。
本文的目的是對(duì)區(qū)塊鏈技術(shù)支持的智能合約的技術(shù)挑戰(zhàn)進(jìn)行系統(tǒng)概述。本文的貢獻(xiàn)如下:?指出了智能合約生命周期中的重要研究挑戰(zhàn)總結(jié)了解決技術(shù)挑戰(zhàn)的最新進(jìn)展。?對(duì)典型的智能合約平臺(tái)進(jìn)行了詳細(xì)的比較。?總結(jié)了智能合約的各種應(yīng)用。本文的組織結(jié)構(gòu)。第二節(jié)簡(jiǎn)要介紹了區(qū)塊鏈和智能合約。第三節(jié)總結(jié)了智能合約的研究挑戰(zhàn)以及最新的技術(shù)進(jìn)展。第四節(jié)接著比較了典型的智能合約開發(fā)平臺(tái)。第五節(jié)對(duì)典型的智能合約應(yīng)用進(jìn)行了分類。最后,第六節(jié)對(duì)全文進(jìn)行了總結(jié)。
二.區(qū)塊鏈與智能合約概述
智能合約建立在區(qū)塊鏈技術(shù)之上,確保合約的正確執(zhí)行。我們首先簡(jiǎn)要介紹區(qū)塊鏈技術(shù)。然后對(duì)智能合約進(jìn)行概述。

區(qū)塊鏈可以被視為一個(gè)公共賬本,其中所有的交易都不能被偽造。圖2展示了區(qū)塊鏈的一個(gè)例子。區(qū)塊鏈?zhǔn)遣粩嘣鲩L(zhǎng)的區(qū)塊鏈。當(dāng)生成新的塊時(shí),網(wǎng)絡(luò)中的所有節(jié)點(diǎn)都將參與驗(yàn)證該塊。一旦區(qū)塊被驗(yàn)證,它將被附加到區(qū)塊鏈。為了驗(yàn)證塊的可信性,開發(fā)了一致性算法。一致性算法確定哪個(gè)節(jié)點(diǎn)存儲(chǔ)下一個(gè)塊,以及新附加的塊如何被其他節(jié)點(diǎn)驗(yàn)證。有代表性的共識(shí)算法包括工作證明(PoW)[23]和權(quán)益證明(PoS)以及實(shí)用的拜占庭容錯(cuò)(PBFT)[24],[25]。共識(shí)算法通常由首先解決難題的用戶完成(即PoW或PoS)。這些用戶被稱為礦工。每個(gè)礦工都保存著區(qū)塊鏈的完整副本。與PoW和PoS不同,PBFT需要多輪投票才能達(dá)成共識(shí)。分布式共識(shí)算法可以確保交易在沒有銀行等第三方干預(yù)的情況下進(jìn)行。因此,可以節(jié)省交易成本。此外,用戶使用虛擬地址而不是真實(shí)身份進(jìn)行交易,因此用戶的隱私也得到了保護(hù)。在區(qū)塊鏈系統(tǒng)中,多個(gè)節(jié)點(diǎn)有可能同時(shí)成功達(dá)成共識(shí)(即解謎),從而導(dǎo)致分支對(duì)分。為了解決這個(gè)差異,短邊鏈被丟棄,如圖2所示,而最長(zhǎng)的鏈被選為有效鏈。這種機(jī)制是有效的,因?yàn)樵诜植际较到y(tǒng)中,長(zhǎng)鏈比短鏈更能抵抗惡意攻擊。
智能合約可以看作區(qū)塊鏈技術(shù)的一大進(jìn)步[29]。1990年代,一項(xiàng)智能合約被提議為一種計(jì)算機(jī)化交易協(xié)議,執(zhí)行協(xié)議的合約條款[1]。智能合約中嵌入的合約條款在滿足一定條件時(shí)自動(dòng)執(zhí)行(如一方違反合同將自動(dòng)受到處罰)。智能合同基本上是在區(qū)塊鏈之上實(shí)施的。批準(zhǔn)的合約條款被轉(zhuǎn)換成可執(zhí)行的計(jì)算機(jī)程序。合約條款之間的邏輯連接也以程序中邏輯流的形式保存(例如if else if語句)。每個(gè)合約語句的執(zhí)行記錄為存儲(chǔ)在區(qū)塊鏈中的不可變事務(wù)。智能合同保證適當(dāng)?shù)脑L問控制和合同執(zhí)行。特別是,開發(fā)人員可以為合約中的每個(gè)函數(shù)分配訪問權(quán)限。一旦智能合約中的任何條件得到滿足,觸發(fā)的語句將以可預(yù)測(cè)的方式自動(dòng)執(zhí)行相應(yīng)的功能。例如,愛麗絲和Bob就違反合約的處罰達(dá)成一致。如果Bob違反合約,相應(yīng)的罰款(根據(jù)合約)將自動(dòng)從Bob的存款中支付(扣除)。
智能合約的整個(gè)生命周期由四個(gè)連續(xù)的階段組成,如圖3所示:

1) 創(chuàng)建智能合約。幾個(gè)當(dāng)事人首先就合約的義務(wù)、權(quán)利和禁止進(jìn)行談判。經(jīng)過多輪討論和談判,可以達(dá)成協(xié)議。律師或顧問將幫助雙方起草一份初步合約協(xié)議。然后,軟件工程師將以自然語言編寫的協(xié)議轉(zhuǎn)換為以計(jì)算機(jī)語言(包括聲明性語言和基于邏輯的規(guī)則語言)編寫的智能合約[30]。與計(jì)算機(jī)軟件開發(fā)類似,智能合約轉(zhuǎn)換的過程由設(shè)計(jì)、實(shí)現(xiàn)和驗(yàn)證(即測(cè)試)組成。值得一提的是,智能合約的創(chuàng)建是一個(gè)涉及多輪談判和迭代的迭代過程。同時(shí),它還涉及多方,如利益相關(guān)者、律師和軟件工程師。
2) 智能合約的部署。經(jīng)過驗(yàn)證的智能合約可以部署到區(qū)塊鏈之上的平臺(tái)上。由于區(qū)塊鏈的不變性,存儲(chǔ)在區(qū)塊鏈上的合約無法修改。任何修訂都需要建立新的合約。一旦智能合約部署到區(qū)塊鏈上,所有各方都可以通過區(qū)塊鏈訪問合約。此外,智能合約雙方的數(shù)字資產(chǎn)通過凍結(jié)相應(yīng)的數(shù)字錢包來鎖定[31]。例如,與合約相關(guān)的錢包上的幣轉(zhuǎn)移(傳入或傳出)被阻止。同時(shí),雙方可以通過數(shù)字錢包識(shí)別身份。3) 智能合約的執(zhí)行。在部署智能合約后,合約條款已得到監(jiān)控和評(píng)估。一旦合約條件達(dá)到(如產(chǎn)品接收),合約程序(或功能)將自動(dòng)執(zhí)行。值得注意的是,智能合約由許多具有邏輯連接的聲明性語句組成。當(dāng)一個(gè)條件被觸發(fā)時(shí),相應(yīng)的語句將被自動(dòng)執(zhí)行,因此區(qū)塊鏈中的礦工將執(zhí)行和驗(yàn)證一個(gè)事務(wù)[32]。提交的交易和更新后的狀態(tài)已存儲(chǔ)在區(qū)塊鏈上。
三、 智能合約的挑戰(zhàn)與進(jìn)展
盡管智能合約是一項(xiàng)很有前途的技術(shù),但仍有許多挑戰(zhàn)需要解決。根據(jù)智能合約生命周期的四個(gè)階段,我們將這些主要挑戰(zhàn)分為四類。同時(shí),我們也對(duì)解決這些挑戰(zhàn)的最新進(jìn)展進(jìn)行了綜述。表三概述了挑戰(zhàn)和最新進(jìn)展。
A.創(chuàng)建合同創(chuàng)建是實(shí)現(xiàn)智能合同的一個(gè)重要步驟。用戶必須編寫自己的合同,然后將其部署到各種區(qū)塊鏈平臺(tái)(將在第四節(jié)中介紹)。由于區(qū)塊鏈本質(zhì)上是不可變的,基于區(qū)塊鏈的智能合約在部署后也不能修改。因此,開發(fā)人員需要認(rèn)真解決以下問題。1) 可讀性:大多數(shù)智能合約都是用編程語言編寫的,比如Solidity、Go、Kotlin和Java(將在第四節(jié)中描述)。然后編譯并執(zhí)行源代碼。因此,在不同的時(shí)間段,程序有不同的代碼形式。如何使程序以每種形式可讀仍然是一個(gè)很大的挑戰(zhàn)。

可讀性挑戰(zhàn)的新進(jìn)展
?恢復(fù)源代碼:如[33]所示,超過77%的智能合約沒有發(fā)布公共源代碼,所有這些都涉及超過30億美元。源代碼的不可用使得智能合約對(duì)官方審計(jì)人員來說是不透明的。為了解決這個(gè)問題,[33]提出了一個(gè)逆向工程工具(即Erays)來分析已編譯的智能合約。這個(gè)逆向工程工具能夠?qū)⑹M(jìn)制編碼的契約轉(zhuǎn)換成人類可讀的偽代碼。
?人類可讀代碼:Frantz和Nowostawski[34]提出了一種半自動(dòng)翻譯系統(tǒng),可以將人類可讀的合同表示轉(zhuǎn)換為計(jì)算程序?;旧希@種半自動(dòng)翻譯系統(tǒng)是根據(jù)制度分析的概念來實(shí)現(xiàn)的[80]。特別是,制度規(guī)范可以分解為不同的組成部分,如屬性、義務(wù)、目標(biāo)、條件等。然后將這些組件映射到用編程語言編寫的相應(yīng)塊中。例如,屬性可以轉(zhuǎn)換為實(shí)體結(jié)構(gòu)。由于大多數(shù)智能合約編程語言都是面向?qū)ο蟮恼Z言,[35]認(rèn)為邏輯編程計(jì)算模型支持的聲明式語言可能更適合智能合約。例如,作者聲稱Prolog(一種邏輯語言)不需要編譯,因此也避免了對(duì)智能合約編譯的檢查。
?可讀執(zhí)行:盡管許多平臺(tái)試圖為智能合約開發(fā)者提供高級(jí)語言,但這些智能合約隨后將被編譯成其他形式,例如以太坊虛擬機(jī)(EVM)中的字節(jié)碼。在大多數(shù)情況下,交易雙方需要在blockchain.Ref上存儲(chǔ)和執(zhí)行的級(jí)別上理解合約。[36]提出了一種名為IELE的中級(jí)語言來解決這一挑戰(zhàn)。IELE的語法類似于低級(jí)虛擬機(jī)(LLVM)[37],以便在編譯時(shí)、鏈接時(shí)、運(yùn)行時(shí)和空閑時(shí)向編譯器提供高級(jí)信息。
2) 函數(shù)(Function)問題:現(xiàn)有智能合約平臺(tái)存在許多Function問題。我們提出了幾個(gè)具有代表性的挑戰(zhàn):
1)重新進(jìn)入意味著中斷的功能可以安全地重新調(diào)用。惡意用戶可以利用此漏洞竊取數(shù)字貨幣(重入攻擊),如[81]所示。2) 塊隨機(jī)性。一些智能合約應(yīng)用程序(如彩票和投注池)可能需要隨機(jī)生成區(qū)塊。這可以通過在塊時(shí)間戳或nonce中生成偽隨機(jī)數(shù)來實(shí)現(xiàn)。然而,一些惡意礦工可能會(huì)編造一些塊來偏離偽隨機(jī)發(fā)生器的結(jié)果。通過這種方式,攻擊者可以控制結(jié)果的概率分布,如[82]所示。3) gas消耗過度。最近的工作[44]表明,由于智能合約的優(yōu)化不足,智能合約可能會(huì)被多收費(fèi)。這些gas浪費(fèi)的模式具有死代碼、重復(fù)計(jì)算循環(huán)中昂貴的操作等特征。
Function問題的最新進(jìn)展
?重入攻擊:最近,一些方案試圖解決重入攻擊問題。黑曜石(Obsidian)[38]被提議用于解決再進(jìn)入攻擊和資金泄漏問題。特別是,Obsidian利用命名狀態(tài)對(duì)狀態(tài)轉(zhuǎn)換和驗(yàn)證進(jìn)行一致性檢查,從而修復(fù)重入漏洞。此外,還提出了一種數(shù)據(jù)流分析方法,以防止非法數(shù)字貨幣被盜。參考文獻(xiàn)[39]建議通過禁止合同中函數(shù)之間的嵌套調(diào)用來消除重入漏洞。Liu等人[40]提出通過迭代生成隨機(jī)但不同的事務(wù)來檢測(cè)可重入性bug,從而對(duì)智能合約執(zhí)行模糊測(cè)試。
?區(qū)塊隨機(jī)性:區(qū)塊鏈被認(rèn)為是一種有前途的技術(shù),可以產(chǎn)生公共的和不可預(yù)測(cè)的隨機(jī)值。然而,隨機(jī)輸出可能不像人們期望的那樣隨機(jī)。礦工們可以控制區(qū)塊的生成并釋放區(qū)塊,直到他們發(fā)現(xiàn)區(qū)塊有利可圖。為了解決這個(gè)問題,[41]提出使用延遲函數(shù)來產(chǎn)生隨機(jī)性。這意味著隨機(jī)值只有在生成后的一段短時(shí)間內(nèi)才會(huì)為其他人所知。這樣,區(qū)塊鏈就繼續(xù)運(yùn)轉(zhuǎn),礦商們就無法保留區(qū)塊來獲利。但是延遲函數(shù)并不適用于智能合約,因?yàn)榇蠖鄶?shù)延遲函數(shù)都需要實(shí)例驗(yàn)證。為此,[42]提出了Sloth函數(shù)以允許更快的驗(yàn)證。在文獻(xiàn)[42],[43]的基礎(chǔ)上,提出了一種利用仲裁委托模型驗(yàn)證延遲函數(shù)的多輪協(xié)議。它將驗(yàn)證輸出的成本從30美元降低到0.4美元。
?收費(fèi)過高:智能合約的開發(fā)者除了關(guān)心程序的效率外,還需要關(guān)注自己的執(zhí)行成本。參考文獻(xiàn)[44]報(bào)道說,超過90%的真正智能合約都受到以太坊模式的影響。Chen等人[45]提出了GasReducer,一種用于檢測(cè)氣體模式的工具。GasReducer可以用高效的字節(jié)碼代替欠優(yōu)化的字節(jié)碼。
B.部署挑戰(zhàn)
創(chuàng)建后,智能合約將部署在區(qū)塊鏈平臺(tái)上。但智能合約需要仔細(xì)檢查,以避免潛在的漏洞。此外,智能合約開發(fā)人員需要了解合約的交互模式,以減輕惡意行為(如欺詐和攻擊[83])造成的潛在損失。接下來我們將介紹智能合約部署的挑戰(zhàn)和進(jìn)展。1) 合約正確性:一旦智能合約部署到區(qū)塊鏈上,幾乎不可能進(jìn)行任何修改。因此,在智能合約正式部署之前對(duì)其正確性進(jìn)行評(píng)估就顯得尤為重要。然而,由于智能合約建模的復(fù)雜性,驗(yàn)證智能合約的正確性具有挑戰(zhàn)性。
1)合約正確性的最新進(jìn)展
?字節(jié)碼分析:字節(jié)碼級(jí)別分析僅需要智能合約的已編譯字節(jié)碼,而這很容易獲得。如何利用這些字節(jié)碼來檢測(cè)安全威脅已成為研究的熱點(diǎn)。特別是,在[46]中提出了OYENTE來識(shí)別潛在的安全錯(cuò)誤,包括錯(cuò)誤處理的異常和與時(shí)間戳有關(guān)的問題?;贠YENTE生成的控制圖,[47]生成了基于規(guī)則的表示形式,用于高級(jí)字節(jié)碼分析。同時(shí),Knecht和Stiller [48]提出了一個(gè)智能合約部署和管理平臺(tái)(SmartDEMAP),以解決合約開發(fā)和部署過程中的信任問題。此外,其他代碼質(zhì)量控制工具(例如自動(dòng)錯(cuò)誤查找器)也可以配備SmartDEMAP。以這種方式,僅在滿足可信條件后才能部署智能合約。[49]提出了MadMax來預(yù)測(cè)以太坊智能合約中的以gas為重點(diǎn)的漏洞?;诳刂屏鞣治龅姆淳幾g器和聲明性程序結(jié)構(gòu)查詢的組合使該方法可以高精度地檢測(cè)漏洞。同時(shí)[84]對(duì)合約依賴圖進(jìn)行了符號(hào)分析,以從代碼中提取出精確的語義信息。然后,它檢查合規(guī)性和違規(guī)模式,這些模式捕獲了足以證明財(cái)產(chǎn)是否存在的條件。此外,[50]提出了一種在智能合約的控制流程圖中搜索某些關(guān)鍵路徑并識(shí)別可能導(dǎo)致關(guān)鍵指令的路徑的方法,其中指令的參數(shù)可以由攻擊者控制。[51]提出了Vandal,一種首先將低級(jí)字節(jié)碼轉(zhuǎn)換為寄存器傳輸語言,然后再轉(zhuǎn)換為邏輯語義關(guān)系的工具。另外,[52]提出了Gigahorse,一種能夠?qū)⒅悄芎霞s字節(jié)碼反編譯為high level 3-address表示的工具。智能合約的新的中間表示形式使EVM字節(jié)碼的隱式數(shù)據(jù)和控制流依存關(guān)系變得明確。 Amani等的 [53]將字節(jié)碼序列重構(gòu)為直線代碼塊,并創(chuàng)建了程序邏輯來識(shí)別合同的安全漏洞。
?源代碼分析:與字節(jié)碼級(jí)別分析相比,源代碼分析需要智能合約源代碼的可用性。盡管源代碼分析包含更多信息,但它也需要高精度的分析。關(guān)于智能合約的源代碼分析,有許多研究。特別是,在[54]中提出了一種形式驗(yàn)證方法,可以分析和驗(yàn)證智能合約(例如,以太坊合約)的運(yùn)行時(shí)安全性和功能正確性。該方法首先將智能合約轉(zhuǎn)換為用F * [55]編寫的代碼,F(xiàn) *是一種主要用于程序驗(yàn)證的功能性編程語言。此轉(zhuǎn)換可用于檢測(cè)異常模式,例如堆棧溢出(即,超出堆棧限制)。同時(shí),[56]提出了宙斯驗(yàn)證智能合約的正確性。 Zeus首先將合同和策略規(guī)范轉(zhuǎn)換為低級(jí)的中間表示,并將編碼后的表示輸入受約束的horn條款[57],以確定智能合約的安全性。
基于機(jī)器學(xué)習(xí)的分析:最近,已經(jīng)提出了基于機(jī)器學(xué)習(xí)的方法來獲得更好的表示形式,以檢測(cè)智能合約中的漏洞。 特別是,[58]提出了一種新的語義感知安全審計(jì)技術(shù),稱為以太坊S-gram方案。 結(jié)合了N-gram語言建模和靜態(tài)語義標(biāo)記的S-gram方案可用于通過識(shí)別不規(guī)則令牌序列并優(yōu)化現(xiàn)有深度分析器來預(yù)測(cè)潛在漏洞。 同時(shí),[59]的工作將智能合約的字節(jié)碼轉(zhuǎn)換為RGB顏色,然后轉(zhuǎn)換為圖像。 圖像被饋送到卷積神經(jīng)網(wǎng)絡(luò)(CNN)中以提取更有意義的特征。 此外,[60]應(yīng)用長(zhǎng)短期記憶(LSTM)在操作碼級(jí)別分析了智能合約的安全威脅。
2)動(dòng)態(tài)控制流
盡管已部署的智能合約是不可變的,但不能保證智能合約的控制流程是不可變的。尤其是,智能合約可以與其他合約進(jìn)行交互(例如,向合約轉(zhuǎn)移資金或創(chuàng)建新合約)。開發(fā)合同時(shí),需要仔細(xì)設(shè)計(jì)智能合同的控制流程。隨著時(shí)間的推移,智能合約的交互作用會(huì)導(dǎo)致互連合約數(shù)量的增加。因此,如何預(yù)測(cè)合同行為變得具有挑戰(zhàn)性。另外,大多數(shù)現(xiàn)有方法關(guān)注于程序中潛在的動(dòng)態(tài)控制流問題的檢測(cè),而并不總是確保執(zhí)行環(huán)境的可靠性。因此,檢查執(zhí)行環(huán)境是否可靠也很重要。動(dòng)態(tài)控制流程的最新進(jìn)展
?基于圖的分析:Charlier等。 [61]提出了一種多維方法來預(yù)測(cè)智能合約之間的交互。特別是,這種方法集成了隨機(jī)過程和張量以重現(xiàn)現(xiàn)有的相互作用,因此可以預(yù)測(cè)未來的合同相互作用。此外,[62]中的工作提出了控制流不變性的啟發(fā)式指標(biāo)。特別是,在以太坊上所有智能合約的調(diào)用圖上評(píng)估了該方法。通過分析調(diào)用圖,可以看出,兩個(gè)智能合約(五分之二)需要至少一個(gè)第三方的信任。
?路徑搜索:Nikolic′等人的 [63]提出了一種名為MAIAN的方法,該方法可以檢測(cè)合約長(zhǎng)期調(diào)用中的漏洞。 MAIAN使用過程間符號(hào)分析和具體的驗(yàn)證器來展示真實(shí)的漏洞利用。它使用深度優(yōu)先搜索(DFS)在跟蹤中搜索所有執(zhí)行路徑的空間,并檢查協(xié)定是否觸發(fā)屬性違規(guī)。與上述基于圖的方法不同,MAIAN旨在識(shí)別無限期鎖定資金,泄露給任意用戶或被任何人對(duì)合約使用析構(gòu)函數(shù)。因此,它不需要對(duì)智能合約之間的交互進(jìn)行建模。
?執(zhí)行環(huán)境:提出了EVMFuzz [64]以檢測(cè)智能合約執(zhí)行環(huán)境的漏洞。 EVMFuzz不斷為不同的EVM執(zhí)行生成種子合同,以便在執(zhí)行結(jié)果之間找到盡可能多的不一致之處。該方法最終可以發(fā)現(xiàn)具有交叉引用輸出的漏洞。執(zhí)行階段對(duì)于智能合約至關(guān)重要,因?yàn)樗鼪Q定了智能合約的最終狀態(tài)。在執(zhí)行智能合約期間,有許多問題需要解決。 1)值得信賴的預(yù)言:沒有真實(shí)世界的信息,智能合約將無法運(yùn)作。例如,Eurobet(即足球博彩智能合約)需要知道歐洲杯的結(jié)果。但是,智能合約被設(shè)計(jì)為在與外部網(wǎng)絡(luò)隔離的沙箱中運(yùn)行。在智能合約中,oracle充當(dāng)代理的角色,該代理查找并驗(yàn)證現(xiàn)實(shí)世界中發(fā)生的事件,并將此信息轉(zhuǎn)發(fā)給智能合約。因此,如何確定一個(gè)值得信賴的oracle成為一個(gè)挑戰(zhàn)。
交易順序依賴性:當(dāng)?shù)V工將交易打包成塊時(shí),用戶發(fā)送交易以調(diào)用智能合約中的功能。然而,由于一分為二的區(qū)塊鏈分支的不確定性,交易的順序是不確定的[26]。這種不確定性可能導(dǎo)致與訂單相關(guān)的交易不一致。例如,有一個(gè)包含變量x的合同。alice發(fā)送交易使x增加1,而bob發(fā)送交易使x乘10。由于交易順序的不確定性,變體x的最終結(jié)果會(huì)有不同。值得一提的是在傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)(DBMS)中,這種不一致已經(jīng)得到了很好的解決[85],而據(jù)我們所知,在智能合約中解決這種挑戰(zhàn)是具有挑戰(zhàn)性的。
交易訂單依賴性的最新進(jìn)展
?順序執(zhí)行:[68]介紹了一種智能合約交易計(jì)數(shù)器的設(shè)計(jì)模式。事務(wù)計(jì)數(shù)器希望將每個(gè)函數(shù)中的過渡編號(hào)作為參數(shù),并確保在每個(gè)函數(shù)執(zhí)行后將該編號(hào)增加一個(gè)。通過分析轉(zhuǎn)移數(shù),解決了不一致的問題。
?預(yù)定義合約:為避免此類異常,[69]建議通過編寫智能合同而不是交易調(diào)用合約。例如,如果Alice想要在Bob的操作之后增加x的值,則可以編寫一個(gè)GrowthIfMultiplied()函數(shù),這樣可以避免Alice的操作在Bob的操作之前執(zhí)行的情況。
3) 執(zhí)行效率:智能合約由礦工連續(xù)執(zhí)行。換句話說,在當(dāng)前合約完成之前,礦工不會(huì)執(zhí)行其他合約。執(zhí)行序列化本質(zhì)上限制了系統(tǒng)性能。然而,由于多個(gè)智能合約之間的數(shù)據(jù)共享,并發(fā)執(zhí)行智能合約是一個(gè)挑戰(zhàn)。同時(shí),在不需要重新部署新合約的情況下,如何在沒有指定接口的情況下檢查合同數(shù)據(jù)對(duì)提高智能合約執(zhí)行效率也很重要。
執(zhí)行效率研究進(jìn)展
?執(zhí)行序列化:為了填補(bǔ)這一空白,Dickerson等人[70]提出了一種基于軟件事務(wù)內(nèi)存的方法,允許礦工或驗(yàn)證器并行執(zhí)行契約。這種方法的主要思想是將智能合約的每次調(diào)用視為一種推測(cè)性的原子操作。這樣,在并行執(zhí)行期間發(fā)生的沖突就可以很容易地回滾。此外,在[71]中的工作從并行的角度研究了智能合約。特別是,并發(fā)性問題,如原子性、干擾、同步和資源所有權(quán),在本文中得到了很好的研究。參考文獻(xiàn)[72]建議使用樂觀軟件事務(wù)內(nèi)存系統(tǒng)來幫助提高智能合約的執(zhí)行效率。當(dāng)使用多線程并發(fā)執(zhí)行合約事務(wù)時(shí),miner還將事務(wù)塊圖存儲(chǔ)到塊中。然后驗(yàn)證程序與給定的塊圖同時(shí)重新執(zhí)行智能合約。如果結(jié)果一致,塊將被追加到區(qū)塊鏈中。
? 合約檢查:部署后,合同內(nèi)容不可修改。 如果要求開發(fā)人員觀察一些在其初始需求中未描述的值,他們可以做什么? 一個(gè)直接的解決方案是修改智能合約并重新部署它。 但是,重新部署智能合約可能會(huì)導(dǎo)致額外的成本。 參考 [73] 提出利用內(nèi)存布局具體化來反編譯已編譯合約的二進(jìn)制結(jié)構(gòu)。 同時(shí),[73]的工作提出了封裝在鏡像中的反編譯能力[86],通過該方法可以檢查智能合約實(shí)例的當(dāng)前狀態(tài),而無需重新部署它。
其他挑戰(zhàn)
智能合約執(zhí)行后,系統(tǒng)中對(duì)狀態(tài)的修改將打包為交易并廣播到各個(gè)節(jié)點(diǎn)。然而,智能合約的激增帶來了額外的擔(dān)憂。1)隱私和安全:目前大多數(shù)智能合約和區(qū)塊鏈平臺(tái)缺乏隱私保護(hù)機(jī)制,尤其是交易隱私。特別是,交易記錄(即操作順序)在整個(gè)區(qū)塊鏈網(wǎng)絡(luò)中傳播。因此,所有交易對(duì)網(wǎng)絡(luò)中的每個(gè)人都是可見的。盡管一些區(qū)塊鏈系統(tǒng)利用假名公鑰來提高交易的匿名性,但大多數(shù)交易數(shù)據(jù)(例如余額)仍然是公開可見的。如[87]所示,可以基于交易圖分析從交易數(shù)據(jù)中獲取有用的信息。智能合約系統(tǒng)也有其固有的軟件漏洞,容易受到惡意攻擊。此外,智能合約運(yùn)行在同樣存在系統(tǒng)漏洞的區(qū)塊鏈系統(tǒng)之上。例如,[88] 中報(bào)告說,攻擊者利用邊界網(wǎng)關(guān)協(xié)議 (BGP) 路由方案來攔截區(qū)塊鏈中的消息。它會(huì)造成消息廣播的高延遲,還會(huì)劫持一部分節(jié)點(diǎn)的流量,從而竊取數(shù)字貨幣。
隱私和安全的最新進(jìn)展
? 隱私:為了解決智能合約的隱私問題,Kosba 等人。 [74] 提出了 Hawk - 一個(gè)去中心化的智能合約系統(tǒng),用于建立隱私保護(hù)的智能合約。特別是,Hawk 編譯器會(huì)自動(dòng)將合約編譯為加密協(xié)議。編譯好的Hawk程序包含兩個(gè)主要部分:用于執(zhí)行主要功能的私有部分和用于保護(hù)用戶的公共部分。 Hawk 將對(duì)交易信息(例如交易余額)進(jìn)行加密,并通過使用零知識(shí)證明(即不查看交易內(nèi)容)來驗(yàn)證交易的正確性??梢源_保智能合約中各方的匿名性,而可能無法滿足合約執(zhí)行的保密性。 Enigma [75] 為智能合約執(zhí)行的保密性提供了解決方案。 Enigma 中使用高級(jí)制圖算法來支持零知識(shí)證明。此外,與傳統(tǒng)的區(qū)塊鏈冗余方案不同(即每個(gè)節(jié)點(diǎn)保存所有交易的副本),Enigma 將區(qū)塊鏈數(shù)據(jù)分布在不同的節(jié)點(diǎn)中。 ? 安全性:在解決安全問題方面有一些努力。例如,[76] 的最近工作提出了一種用于區(qū)塊鏈的安全中繼網(wǎng)絡(luò),即 SABRE。特別是,SABER 調(diào)整了 BGP 路由方案的域間路由策略。它可以通過適當(dāng)放置中繼來保護(hù)客戶端和中繼之間的鏈路。同時(shí),SABRE還通過軟件定義網(wǎng)絡(luò)(SDN)采用硬件和軟件的協(xié)同設(shè)計(jì),以減少中繼的流量負(fù)擔(dān)。實(shí)驗(yàn)結(jié)果證明了對(duì)抗 BGP 路由攻擊的有效性。
詐騙:作為一項(xiàng)新技術(shù),區(qū)塊鏈和智能合約容易受到詐騙發(fā)起的惡意攻擊。詐騙的檢測(cè)對(duì)于合約用戶尤其重要,因?yàn)樗顾麄兡軌蛟谠缙陔A段終止投資以避免不必要的損失。
可讀性挑戰(zhàn)的最新進(jìn)展
? 龐氏騙局:龐氏騙局是一種典型的騙局,它承諾給投資者帶來高回報(bào)且風(fēng)險(xiǎn)很小。它用新投資者的資金支付老投資者。但是,如果沒有足夠的流通貨幣,該計(jì)劃就會(huì)解散那些因此而賠錢的后繼者。 [77] 最近的工作對(duì)以太坊上的龐氏騙局進(jìn)行了系統(tǒng)的研究。其中,2015年7月至2017年5月共統(tǒng)計(jì)16,082,269筆交易,發(fā)現(xiàn)17,777筆交易與龐氏騙局有關(guān),僅兩年時(shí)間就已收繳超過41萬美元。陳等人。 [22] 提出了一種從賬戶和操作碼中提取特征的方法,以識(shí)別以太坊上的龐氏騙局。同時(shí),[78] 的工作提出了一種檢測(cè)和量化比特幣龐氏騙局的新方法。特別是,為了解決龐氏騙局經(jīng)常使用多個(gè)地址而難以識(shí)別的問題,提出了一種聚類方法[78]來識(shí)別地址。他們發(fā)現(xiàn) 32 個(gè)龐氏騙局中有 19 個(gè)使用多個(gè)地址。
(未完待續(xù),待更新)