季超越 郭仲勇 岳勇
摘 ?要:超級(jí)賬本是聯(lián)盟鏈的代表,支持智能合約的應(yīng)用。該文介紹了超級(jí)賬本智能合約鏈碼的編寫(xiě)、鏈碼的安裝與調(diào)用、鏈碼的執(zhí)行過(guò)程等基礎(chǔ)知識(shí)。最后介紹了一種對(duì)超級(jí)賬本API的封裝,包括Go、Java、Node語(yǔ)言等框架。它以聯(lián)盟鏈或BaaS的方式幫助企業(yè)更加高效、安全地部署區(qū)塊鏈應(yīng)用。區(qū)塊鏈開(kāi)發(fā)者能夠快速建立自己所需的開(kāi)發(fā)環(huán)境,高效快捷地完成智能合約的編寫(xiě)、部署、執(zhí)行、區(qū)塊查詢(xún)等功能。
關(guān)鍵詞:聯(lián)盟鏈;智能合約;背書(shū)策略;容器;Peer節(jié)點(diǎn);封裝
中圖分類(lèi)號(hào):TP311.1 ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2020)04-0176-04
Abstract:Hyperledger Fabric is the representative of the consortium blockchain,it supports the smart contracts.This paper introduces some basic knowledge about coding,installation,call and execution of smart contract. Finally it introduces the encapsulation of Hyperledger Fabrics API,including Go,Java,Node and other programming languages.The encapsulation helps companies to deploy blockchain application more efficiently and securely by consortium blockchain or BaaS. Blockchain developers can build their own development environments quickly,accomplish the coding,deployment,execution,block query and other functions of the smart contract efficiently.
Keywords:consortium blockchain;smart contract;endorsement policy;container;Peer node;encapsulation
0 ?引 ?言
超級(jí)賬本(Hyperledger)是IBM貢獻(xiàn)的一個(gè)開(kāi)源項(xiàng)目。它首次將區(qū)塊鏈技術(shù)引入到了分布式聯(lián)盟賬本的應(yīng)用場(chǎng)景。超級(jí)賬本項(xiàng)目中提出和實(shí)現(xiàn)了許多創(chuàng)新的設(shè)計(jì)和理念,包括完備的權(quán)限和審查管理、細(xì)粒度隱私保護(hù),以及可拔插、可擴(kuò)展的實(shí)現(xiàn)框架,對(duì)于區(qū)塊鏈相關(guān)技術(shù)和產(chǎn)業(yè)的發(fā)展都將產(chǎn)生深遠(yuǎn)的影響[1]。
智能合約作為區(qū)塊鏈上運(yùn)行的一段由用戶自定義的代碼,給了用戶極大的自由空間來(lái)操作鏈上數(shù)據(jù)[2]。智能合約在數(shù)據(jù)校驗(yàn)、數(shù)據(jù)交易、數(shù)據(jù)共享等方面發(fā)揮著重大作用[3]。通過(guò)智能合約,用戶可以開(kāi)發(fā)出適用于本身業(yè)務(wù)場(chǎng)景的代碼,使區(qū)塊鏈架構(gòu)適用于自身的業(yè)務(wù)需求。掌握智能合約的開(kāi)發(fā)和設(shè)計(jì),是區(qū)塊鏈架構(gòu)應(yīng)用落地的關(guān)鍵步驟。不同的區(qū)塊鏈架構(gòu)對(duì)智能合約的支持有所不同,開(kāi)發(fā)智能合約所用的語(yǔ)言,以及需要遵循的協(xié)議也不相同[4]。本文基于超級(jí)賬本來(lái)研究智能合約在實(shí)際應(yīng)用中的設(shè)計(jì)實(shí)施方案。超級(jí)賬本目前支持用Go、Java、Node來(lái)編寫(xiě)鏈碼,本文使用Go語(yǔ)言來(lái)實(shí)現(xiàn)。
筆者所在公司主打信息安全與區(qū)塊鏈應(yīng)用研發(fā)的方向,對(duì)各大知名區(qū)塊鏈架構(gòu)都有深入的研究。并且公司內(nèi)部擁有一套自主研發(fā)的區(qū)塊鏈技術(shù)架構(gòu),申請(qǐng)有數(shù)個(gè)相關(guān)專(zhuān)利。現(xiàn)將數(shù)月的研究成果總結(jié),來(lái)進(jìn)行技術(shù)上的交流分享。
1 ?超級(jí)賬本中智能合約的簡(jiǎn)介
1.1 ?鏈碼簡(jiǎn)介
智能合約對(duì)于區(qū)塊鏈開(kāi)發(fā)人員來(lái)說(shuō)是一個(gè)熟悉的概念,而智能合約在Fabric中,通常被稱(chēng)為鏈碼。用戶在鏈碼中實(shí)現(xiàn)相關(guān)的接口,通過(guò)官方提供的API來(lái)操作賬本,實(shí)現(xiàn)對(duì)賬本的增刪改查。在Fabric系統(tǒng)中鏈碼分為系統(tǒng)鏈碼和用戶鏈碼,系統(tǒng)鏈碼集成于Fabric網(wǎng)絡(luò)中,無(wú)需用戶自己安裝。系統(tǒng)鏈碼用來(lái)實(shí)現(xiàn)系統(tǒng)層面的功能,包括系統(tǒng)的配置,用戶鏈碼的部署、升級(jí),用戶交易的簽名和驗(yàn)證策略等;用戶鏈碼用于實(shí)現(xiàn)用戶自己的應(yīng)用功能[5]。用戶根據(jù)需求編寫(xiě)好相應(yīng)的鏈碼后,需將其安裝在Fabric網(wǎng)絡(luò)中。用戶鏈碼安裝并實(shí)例化成功后可通過(guò)兩種方式來(lái)調(diào)用:(1)在安裝了Fabric節(jié)點(diǎn)的系統(tǒng)中,可直接通過(guò)命令的方式來(lái)調(diào)用,這種方式一般適用于開(kāi)發(fā)人或是管理人員。(2)通過(guò)SDK開(kāi)發(fā)出客戶端來(lái)調(diào)用,這種方式相對(duì)來(lái)說(shuō)更加靈活、友好,面向用戶時(shí)需要使用這種方式。
鏈碼通常是由Go語(yǔ)言來(lái)編寫(xiě),也支持其他語(yǔ)言(Java、Node.js)。開(kāi)發(fā)人員需要在鏈碼中實(shí)現(xiàn)系統(tǒng)指定好的接口。開(kāi)發(fā)人員可以通過(guò)鏈碼來(lái)操作賬本,賬本的存儲(chǔ)是K-V結(jié)構(gòu)的,每條記錄都需要一個(gè)獨(dú)一的key來(lái)表示,通過(guò)鏈碼可以實(shí)現(xiàn)增加一條記錄、查詢(xún)某個(gè)key對(duì)應(yīng)的值、修改key的當(dāng)前值、刪除key。一段鏈碼創(chuàng)建的賬本狀態(tài)是與其他鏈碼互相隔離的,故而不能被其他鏈碼直接訪問(wèn)。不過(guò),如果是在相同的網(wǎng)絡(luò)中,一段鏈碼在獲取相應(yīng)許可后,則可以調(diào)用其他鏈碼來(lái)訪問(wèn)它的賬本。
鏈碼運(yùn)行在一個(gè)受保護(hù)的Docker容器當(dāng)中,與節(jié)點(diǎn)的運(yùn)行互相隔離。通過(guò)gRPC協(xié)議與相應(yīng)的Peer節(jié)點(diǎn)進(jìn)行交互,以操作分布式賬本中的數(shù)據(jù)。容器將會(huì)在用戶實(shí)例化鏈碼或是調(diào)用鏈碼時(shí)被啟動(dòng)。
1.2 ?鏈碼的背書(shū)策略
背書(shū)策略是背書(shū)節(jié)點(diǎn)判定一項(xiàng)交易是否能夠被認(rèn)可的依據(jù)。鏈碼實(shí)例化時(shí)可指定背書(shū)策略。當(dāng)記賬節(jié)點(diǎn)接收到交易時(shí),會(huì)獲知相關(guān)鏈碼信息,然后檢查鏈碼的背書(shū)策略,判斷交易是否滿足背書(shū)策略[6]。
背書(shū)策略可分為主體Principal(P)和閾值Threshold(T)兩部分。Principal指定由哪些成員進(jìn)行背書(shū)。Threshold接受兩個(gè)輸入,分別為閾值T和若干個(gè)P的集合n,只要交易中包含了n中t個(gè)成員的背書(shū)則認(rèn)為交易合法。通過(guò)主題和閾值相結(jié)合的方式,可靈活地設(shè)定需要背書(shū)的企業(yè)成員。
1.3 ?系統(tǒng)鏈碼
系統(tǒng)鏈碼與用戶鏈碼有相同的編程模型,但系統(tǒng)鏈碼運(yùn)行在Peer節(jié)點(diǎn),用戶鏈碼則在隔離的容器中運(yùn)行。因此,系統(tǒng)鏈碼內(nèi)置在Peer節(jié)點(diǎn)的可執(zhí)行文件中,不遵循用戶鏈碼的生命周期。系統(tǒng)鏈碼用于減少Peer節(jié)點(diǎn)與用戶鏈碼進(jìn)行g(shù)RPC通信的開(kāi)銷(xiāo),同時(shí)權(quán)衡管理的靈活性。系統(tǒng)鏈碼只能通過(guò)Peer節(jié)點(diǎn)的二進(jìn)制文件升級(jí),必須通過(guò)一組固定的參數(shù)進(jìn)行注冊(cè),但不具有背書(shū)策略。
Hyperledger Fabric系統(tǒng)鏈碼實(shí)現(xiàn)了一系列系統(tǒng)功能,以便系統(tǒng)集成人員能夠根據(jù)需求對(duì)其進(jìn)行修改與替換。常見(jiàn)系統(tǒng)鏈碼如下[7]:(1)生命周期系統(tǒng)鏈碼(LSCC):管理鏈碼的生命周期。(2)配置系統(tǒng)鏈碼(CSCC):處理在Peer節(jié)點(diǎn)上的通道配置。(3)查詢(xún)系統(tǒng)鏈碼(QSCC):提供查詢(xún)的賬本API,例如獲取交易信息、區(qū)塊信息等。(4)背書(shū)系統(tǒng)鏈碼(ESCC):通過(guò)簽名交易提案響應(yīng)處理背書(shū)過(guò)程。(5)驗(yàn)證系統(tǒng)鏈碼(VSCC):處理交易驗(yàn)證,包括檢查背書(shū)策略以及多進(jìn)程并發(fā)控制。
2 ?鏈碼的編寫(xiě)
2.1 ?鏈碼的基本格式
編寫(xiě)鏈碼需要符合官方的基本格式要求,才能夠正常地在鏈上運(yùn)行,并執(zhí)行業(yè)務(wù)。超級(jí)賬本編寫(xiě)鏈碼所遵循的格式要求非常簡(jiǎn)單,開(kāi)發(fā)人員可以輕松地掌握,并熟練應(yīng)用。開(kāi)發(fā)鏈碼需要遵循的格式要求如下:(1)引入基礎(chǔ)包:首先要引入最重要的兩個(gè)包:Shim和Peer,這兩個(gè)包提供了操作賬本的接口,和數(shù)據(jù)返回的結(jié)構(gòu)。(2)復(fù)寫(xiě)Init方法:鏈碼接口中總共有兩個(gè)接口需要復(fù)寫(xiě),Init是其中之一,該方法在初始化鏈碼時(shí)執(zhí)行,可完成對(duì)賬本的初始化,或是初始化一些基本業(yè)務(wù)數(shù)據(jù)。(3)復(fù)寫(xiě)Invoke方法:Invoke是業(yè)務(wù)執(zhí)行時(shí)所調(diào)用的方法,所有的業(yè)務(wù)都要在該方法中完成。
2.2 ?鏈碼的API
下面介紹一下Fabric為用戶提供的操作賬本的API。超級(jí)賬本Fabric提供了豐富的接口,給用戶極大的自由空間來(lái)操作賬本。通過(guò)這些接口用戶可以靈活地操作鏈上數(shù)據(jù)。
2.2.1 ?獲得調(diào)用的參數(shù)
(1)GetArgs() [][]byte:返回以byte數(shù)組的形式的參數(shù)列表。(2)GetStringArgs() []string:返回字符串格式的參數(shù)列表。(3)GetFunctionAndParameters() (string, []string):將參數(shù)分為兩部分,第一個(gè)參數(shù)作為函數(shù)名,其余的參數(shù)作為參數(shù)列表。(4)GetArgsSlice() ([]byte, error):返回byte切片的形式獲得參數(shù)列表。
2.2.2 ?增刪改查StateDB
(1)PutState(key string, value []byte) error:存入數(shù)據(jù)庫(kù),若key已存在則修改。(2)DelState (key string) error:刪除key。(3)GetState(key string) ([]byte, error):查詢(xún)某個(gè)key對(duì)應(yīng)的value值,返回byte數(shù)組數(shù)據(jù),需要轉(zhuǎn)換為string。(4)GetStateByRange(startKey, endKey string)** (StateQu- eryIteratorInterface , error):批量查詢(xún)某個(gè)區(qū)間內(nèi)的記錄。(5)GetHistoryForKey(key string) ( HistoryQueryIterato- rInterface , error):獲取某個(gè)key的修改歷史記錄。
2.2.3 ?復(fù)合鍵處理
(1)CreateCompositeKey(objectType string, attributes []string) (string, error):根據(jù)某個(gè)對(duì)象生成復(fù)合鍵。(2)Split CompositeKey(compositeKey string) (string, [] string , error):根據(jù)復(fù)合鍵拆分得到對(duì)象類(lèi)型,屬性字符串?dāng)?shù)組。
2.2.4 ?獲取當(dāng)前用戶證書(shū)
GetCreator() ([]byte, error):獲得調(diào)用本鏈碼的客戶端的用戶證書(shū)。
2.2.5 ?調(diào)用鏈碼
InvokeChaincode(chaincodeName string, args [][]byte, channel string) pb.Response:在本鏈碼中調(diào)用其它通道上已經(jīng)部署好的鏈碼。
2.2.6 ?獲取提案對(duì)象屬性
(1)GetSignedProposal() (*pb.SignedProposal, error):獲得當(dāng)前的提案對(duì)象包括客戶端對(duì)提案的簽名。(2)GetTransient() (map[string][]byte, error):返回提案對(duì)象的Payload的屬性。(3)GetTxTimestamp() (*timestamp.Timestamp, error):獲得交易時(shí)間戳。(4)GetBinding() ([]byte, error):獲得Binding對(duì)象,返回提案對(duì)象的proposal.Header中SignatureHeader.Nonce、SignatureHeader.Creator和ChannelHeader.Epoch的組合。
2.2.7 ?事件設(shè)置
SetEvent(name string, payload []byte) error:當(dāng)鏈碼提交完畢,會(huì)通過(guò)事件的方式通知客戶端,通知的內(nèi)容可以通過(guò)SetEvent設(shè)置。
3 ?鏈碼的安裝與調(diào)用
鏈碼可以通過(guò)兩種方式安裝到Fabric網(wǎng)絡(luò)上,通過(guò)命令直接安裝或是通過(guò)SDK安裝。
目前,F(xiàn)abric提供了package、install、instantiate和upgrade四個(gè)命令管理鏈碼生命周期。后續(xù)計(jì)劃會(huì)加入stop和start命令來(lái)啟用以及停用已經(jīng)部署好的鏈碼。這里先來(lái)討論前面四個(gè)命令,它們的生命周期的轉(zhuǎn)換如圖1所示。
一個(gè)創(chuàng)建完成鏈碼經(jīng)過(guò)install的操作,安裝到Peer節(jié)點(diǎn)中。安裝完成后在該鏈中任一安裝過(guò)的節(jié)點(diǎn)進(jìn)行實(shí)例化(instantiate),鏈碼即進(jìn)入正常運(yùn)行階段。實(shí)例化鏈碼只需要一次。鏈碼實(shí)例化完成以后,如果需要進(jìn)行改動(dòng),可通過(guò)升級(jí)(upgrade)命令來(lái)完成。實(shí)例化和升級(jí)的命令執(zhí)行時(shí)都會(huì)執(zhí)行鏈碼中的Init方法,所以在升級(jí)鏈碼時(shí),一定要注意避免Init方法對(duì)已有的數(shù)據(jù)造成影響。下面對(duì)控制鏈碼生命周期的指令做簡(jiǎn)單的介紹:(1)package:鏈碼打包的方法有兩種,一種是打包成多所有者的鏈碼,需要先創(chuàng)建一個(gè)被簽名的鏈碼包(SignedCDS),然后將其按順序地傳遞給其他所有者簽名;一種是打包單個(gè)所有者持有的鏈碼。(2)signpackage:在創(chuàng)建階段就被簽名的鏈碼包能夠交給其他所有者進(jìn)行檢查與簽名,支持帶外對(duì)鏈碼進(jìn)行簽名。當(dāng)在某些通道上實(shí)例化鏈碼時(shí),背書(shū)策略是在帶外確定的,用于提供合適的MSP主體。如果沒(méi)指定實(shí)例化策略,則默認(rèn)的策略就是通道的任何MSP管理員。(3)install:將鏈碼的源代碼打包成Chaincode Deployment Spec(CDS)的規(guī)定的格式,然后安裝到通道中的背書(shū)節(jié)點(diǎn)上。當(dāng)安裝的鏈碼包只包含一個(gè)Chaincode Deployment Spec時(shí),將使用默認(rèn)初始化策略并包括一個(gè)空的所有者列表。(4)instantiate:實(shí)例化調(diào)用生命周期系統(tǒng)鏈碼用于創(chuàng)建及初始化通道上的鏈碼。鏈碼能夠在任意數(shù)量的通道上實(shí)例化,并在每個(gè)通道上單獨(dú)調(diào)用。一個(gè)節(jié)點(diǎn)上的鏈碼在多個(gè)通道實(shí)例化時(shí),每個(gè)通道的狀態(tài)仍是隔離的。實(shí)例化的創(chuàng)建者必須滿足包含在SignedCDS內(nèi)鏈碼的實(shí)例化策略,而且還必須是通道的寫(xiě)入器(作為通道創(chuàng)建的一部分被配置)。可以防止部署鏈碼的流氓實(shí)體或者欺騙者在未被綁定的通道上執(zhí)行鏈碼。(5)upgrade:鏈碼的升級(jí)時(shí)需要改變鏈碼的版本號(hào)(作為SignedCDS的一部分)。SignedCDS另外的部分,如所有者及實(shí)例化策略都是可選的。然而,鏈碼的名稱(chēng)前后必須保持一致,否則會(huì)被當(dāng)作另外一個(gè)新的鏈碼。在升級(jí)前,必須將新版本的鏈碼安裝到需求的背書(shū)節(jié)點(diǎn)上。升級(jí)也是一種交易,會(huì)把新版本的鏈碼綁定到通道中。升級(jí)只會(huì)對(duì)升級(jí)的通道產(chǎn)生影響,其他通道仍然運(yùn)行舊版本的鏈碼。
4 ?鏈碼的執(zhí)行過(guò)程
鏈碼運(yùn)行在單獨(dú)的Docker容器當(dāng)中,與節(jié)點(diǎn)相隔離。節(jié)點(diǎn)與容器之間通過(guò)gRPC協(xié)議進(jìn)行通信[8]。在鏈碼執(zhí)行過(guò)程中,節(jié)點(diǎn)與容器之間交互的流程圖如圖2所示。
(1)首先是客戶端發(fā)起請(qǐng)求到Fabric的Peer節(jié)點(diǎn)[9]。(2)節(jié)點(diǎn)收到請(qǐng)求后,向Chaincode容器發(fā)起請(qǐng)求,執(zhí)行鏈碼。鏈碼執(zhí)行過(guò)程中會(huì)涉及到對(duì)狀態(tài)數(shù)據(jù)庫(kù)的增刪改查操作。執(zhí)行GetState時(shí),容器通過(guò)節(jié)點(diǎn)訪問(wèn)本地的狀態(tài)數(shù)據(jù)庫(kù),獲取到狀態(tài)數(shù)據(jù),執(zhí)行GutState時(shí),節(jié)點(diǎn)將數(shù)據(jù)狀態(tài)緩存在本地,此時(shí)并不修改狀態(tài)數(shù)據(jù)庫(kù)。(3)鏈碼執(zhí)行完成后返回給客戶端執(zhí)行結(jié)果并簽名信息??蛻舳耸占阶銐虻某晒ο⒑螅瑫?huì)將信息提交給Orderer節(jié)點(diǎn)。
5 ?提供BaaS或聯(lián)盟鏈服務(wù)
5.1 ?BaaS服務(wù)
為了降低區(qū)塊鏈網(wǎng)絡(luò)的使用門(mén)檻,減輕企業(yè)應(yīng)用區(qū)塊鏈技術(shù)的工作量。目前已有許多的區(qū)塊鏈架構(gòu)開(kāi)源項(xiàng)目,其中最為有名的就是Linux基金會(huì)發(fā)起的Hyperledger。下面介紹一下一套成熟的BaaS框架應(yīng)當(dāng)具有的基本功能:(1)客戶端管理:提供用戶賬號(hào)的管理操作,例如生成新的用戶賬號(hào)、對(duì)用戶權(quán)限的配置與管理、查詢(xún)現(xiàn)有的用戶,及其基本的系統(tǒng)登錄記錄。(2)合約管理:提供合約的基本管理,如合約的生命周期管理,包括合約的安裝、實(shí)例化、升級(jí)等;提供合約的基本信息查詢(xún)。(3)通道管理:提供對(duì)通道的基本管理與操作,例如通道的創(chuàng)建,查看通道的組織信息、節(jié)點(diǎn)信息、鏈碼信息等。
通過(guò)BaaS服務(wù),用戶可以在不知道底層區(qū)塊鏈技術(shù)的情況下,使用區(qū)塊鏈技術(shù)存儲(chǔ)數(shù)據(jù)。所以BaaS服務(wù)應(yīng)當(dāng)具有如下特點(diǎn):(1)簡(jiǎn)單易用:簡(jiǎn)單的操作流程,讓用戶可以輕易上手。(2)封裝性:將底層技術(shù)進(jìn)行封裝,僅暴露給用戶一些簡(jiǎn)單易用的接口,降低用戶的學(xué)習(xí)成本。(3)靈活性:給用戶更多的權(quán)限和接口,方便用戶對(duì)區(qū)塊鏈系統(tǒng)的管理,并且保證系統(tǒng)的安全性不受到破壞。
綜合上述功能及特點(diǎn)并結(jié)合區(qū)塊鏈本身的特性,要開(kāi)發(fā)出一套性能穩(wěn)定,靈活易用的區(qū)塊鏈BaaS服務(wù),筆者在這里提出一套更加靈活適用的BaaS數(shù)據(jù)流程,如圖3所示。
5.2 ?聯(lián)盟鏈
對(duì)超級(jí)賬本API進(jìn)行封裝,幫助企業(yè)更加高效、安全地搭建超級(jí)賬本聯(lián)盟鏈、部署區(qū)塊鏈應(yīng)用。封裝后的聯(lián)盟鏈對(duì)區(qū)塊鏈開(kāi)發(fā)者友好,能夠輔助其快速的完成開(kāi)發(fā)環(huán)境搭建、智能合約的編寫(xiě)及部署、區(qū)塊查詢(xún)等功能??偨Y(jié)其主要特點(diǎn)如下[10]:(1)穩(wěn)定性強(qiáng):對(duì)于任何系統(tǒng)而言,穩(wěn)定性都是至關(guān)重要的,鑒于聯(lián)盟鏈的分布式特性,以及區(qū)塊鏈共識(shí)機(jī)制的復(fù)雜性,想要構(gòu)建一個(gè)穩(wěn)定性強(qiáng)的聯(lián)盟鏈并不簡(jiǎn)單。(2)效率高:聯(lián)盟鏈?zhǔn)且粋€(gè)分布式架構(gòu),使分布式系統(tǒng)達(dá)成共識(shí),需要一定的時(shí)間。如何縮短達(dá)成共識(shí)的時(shí)間,是聯(lián)盟鏈提高效率的關(guān)鍵。超級(jí)賬本采用特殊的共識(shí)機(jī)制,可運(yùn)行于solo或是kafka模式,共識(shí)效率相對(duì)較高。(3)容錯(cuò)性好:不同的區(qū)塊鏈應(yīng)用場(chǎng)景對(duì)容錯(cuò)能力的要求也不同,有些需要具有拜占庭容錯(cuò)能力,而有些只需要具有對(duì)崩潰故障容錯(cuò)的能力即可[11]。鑒于聯(lián)盟鏈的成員是身份確知的,一般僅需要對(duì)崩潰故障容錯(cuò)的支持。
6 ?結(jié) ?論
當(dāng)前,區(qū)塊鏈技術(shù)已經(jīng)在金融、物聯(lián)網(wǎng)、社交、醫(yī)療、檔案、司法、版權(quán)[12]等場(chǎng)景實(shí)現(xiàn)了技術(shù)落地。區(qū)塊鏈賦能實(shí)體產(chǎn)業(yè)之路發(fā)展前景廣闊[13],隨著區(qū)塊鏈技術(shù)的深入應(yīng)用,需要不斷探索區(qū)塊鏈應(yīng)用價(jià)值和技術(shù)創(chuàng)新。技術(shù)創(chuàng)新支撐和驅(qū)動(dòng)商業(yè)模式創(chuàng)新,助力行業(yè)應(yīng)用的落地進(jìn)而產(chǎn)生新的經(jīng)濟(jì)模型[14]。
超級(jí)賬本具備很好的保密性、可伸縮性、靈活性和可擴(kuò)展性等特點(diǎn),使用超級(jí)賬本來(lái)構(gòu)建、運(yùn)行和執(zhí)行使用多種語(yǔ)言編寫(xiě)的智能合約,具有契約成本低、人為干預(yù)風(fēng)險(xiǎn)較低、執(zhí)行高效準(zhǔn)確等優(yōu)點(diǎn)。
參考文獻(xiàn):
[1] 楊保華,陳昌.區(qū)塊鏈原理、設(shè)計(jì)與應(yīng)用 [M].北京:機(jī)械工業(yè)出版社,2017.
[2] 付夢(mèng)琳,吳禮發(fā),洪征,等.智能合約安全漏洞挖掘技術(shù)研究 [J].計(jì)算機(jī)應(yīng)用,2019,39(7):1959-1966.
[3] 周潤(rùn),盧迎.智能合約對(duì)我國(guó)合同制度的影響與對(duì)策 [J].南方金融,2018(5):93-98.
[4] 納拉揚(yáng)·普魯斯蒂.區(qū)塊鏈項(xiàng)目開(kāi)發(fā)指南 [M].朱軒彤,閆鶯,董寧,譯.北京:機(jī)械工業(yè)出版社,2017.
[5] 馮翔,劉濤,吳壽鶴,等.區(qū)塊鏈開(kāi)發(fā)實(shí)戰(zhàn):Hyperledger Fabric關(guān)鍵技術(shù)與案例分析 [M].北京:機(jī)械工業(yè)出版社,2018:121-138.
[6] 張?jiān)鲵E,董寧,朱軒彤,等.深度探索區(qū)塊鏈:Hyperledger技術(shù)與應(yīng)用 [M].北京:機(jī)械工業(yè)出版社,2018:61- 69.
[7] 楊毅.HyperLedger Fabric開(kāi)發(fā)實(shí)戰(zhàn):快速掌握區(qū)塊鏈技術(shù) [M].北京:電子工業(yè)出版社,2018:160-177.
[8] 史文斌.基于Hyperledger Fabric的區(qū)塊鏈應(yīng)用系統(tǒng)云服務(wù)化 [D].杭州:浙江大學(xué),2018.
[9] 張海寧.超級(jí)賬本:助力企業(yè)級(jí)區(qū)塊鏈應(yīng)用與開(kāi)發(fā) [C].《IMI研究動(dòng)態(tài)》2017年上半年合輯.北京:《IMI 研究動(dòng)態(tài)》編輯部,2017:565-570.
[10] ANDROULAKI E,BARGER A,BORTNIKOV V,et al.Hyperledger Fabric:A Distributed Operating System for Permissioned Blockchains [C]// Proceedings of EuroSys 2018 conference,2018:30.
[11] 邵奇峰,金澈清,張召,等.區(qū)塊鏈技術(shù):架構(gòu)及進(jìn)展 [J].計(jì)算機(jī)學(xué)報(bào),2018,41(5):969-988.
[12] 華劼.區(qū)塊鏈技術(shù)與智能合約在知識(shí)產(chǎn)權(quán)確權(quán)和交易中的運(yùn)用及其法律規(guī)制 [J].知識(shí)產(chǎn)權(quán),2018(2):13-19.
[13] 陳德,姜新旺,王艷霞,等.基于Hyperledger的自交易共享平臺(tái)解決方案 [J].計(jì)算機(jī)時(shí)代,2018(1):20-22+26.
[14] 尹稚淳,李航.基于超級(jí)賬本技術(shù)的電子合同解決方案 [J].現(xiàn)代計(jì)算機(jī)(專(zhuān)業(yè)版),2018(11):86-90.
作者簡(jiǎn)介:季超越(1994-),男,漢族,河南淮陽(yáng)人,高級(jí)工程師,本科,主要研究方向:供應(yīng)鏈金融、區(qū)塊鏈。