孫偉
(上海弘纏文化傳播有限公司,上海201101)
眾所周知,第一個(gè)區(qū)塊鏈應(yīng)用是比特幣,它是一種點(diǎn)對(duì)點(diǎn)的電子現(xiàn)金系統(tǒng),提供一個(gè)可信的網(wǎng)絡(luò)完成比特幣發(fā)行、轉(zhuǎn)賬、支付。第二個(gè)區(qū)塊鏈應(yīng)用是以太坊,它增加了智能合約,支持以編程方式創(chuàng)建分布式應(yīng)用程序。這兩個(gè)區(qū)塊鏈一般稱為公鏈,公共無(wú)許可區(qū)塊鏈,是對(duì)所有人開放的公共網(wǎng)絡(luò),任何參與者都可以加入網(wǎng)絡(luò)并在其中進(jìn)行匿名交易。
然而無(wú)許可區(qū)塊鏈的匿名性不能滿足金融企業(yè)KYC(Know Your Customer)和AML(Anti Money Laundering)需求,金融參與者必須是可識(shí)別的,網(wǎng)絡(luò)參與者必須獲得許可,同時(shí)保證交易數(shù)據(jù)的保密性,交易高吞吐量性能和交易確認(rèn)的低延遲性。Hyperledger Fabric 就是為企業(yè)使用而設(shè)計(jì)的區(qū)塊鏈。它有以下一些差異化的功能:首先,它是一個(gè)許可區(qū)塊鏈,只有獲得許可的節(jié)點(diǎn)才能加入網(wǎng)絡(luò),并且參與者的身份都是實(shí)名可識(shí)別的;其次,它提供可編程鏈碼,即編寫智能合約實(shí)現(xiàn)業(yè)務(wù)邏輯,智能合約使用標(biāo)準(zhǔn)編程語(yǔ)言,無(wú)需學(xué)習(xí)專門的編程語(yǔ)言,降低開發(fā)門檻;最后,它提供通道體系結(jié)構(gòu)和私有數(shù)據(jù)功能來(lái)實(shí)現(xiàn)機(jī)密性。在通道中,F(xiàn)abric 網(wǎng)絡(luò)上的參與者建立了一個(gè)子網(wǎng),每個(gè)成員都可以查看特定的一組交易,只有那些加入通道的節(jié)點(diǎn)才能訪問(wèn)智能合約(鏈碼)和交易數(shù)據(jù),從而保留了兩者的隱私和機(jī)密性。
BTC,ETH 通過(guò)礦工挖礦完成交易記賬。當(dāng)網(wǎng)絡(luò)收到交易后,每一個(gè)節(jié)點(diǎn)開始進(jìn)行求解哈希計(jì)算,一旦某一節(jié)點(diǎn)完成計(jì)算即向網(wǎng)絡(luò)發(fā)送區(qū)塊,各節(jié)點(diǎn)驗(yàn)證計(jì)算結(jié)果,驗(yàn)證通過(guò)后將該區(qū)塊加入自身區(qū)塊鏈副本中,同時(shí)放棄之前構(gòu)建相同高度區(qū)塊的計(jì)算。整個(gè)過(guò)程采用請(qǐng)求執(zhí)行(order execute)架構(gòu),即網(wǎng)絡(luò)中的所有節(jié)點(diǎn)同時(shí)進(jìn)行哈希計(jì)算和獨(dú)立校驗(yàn),雖然這種方式確保了網(wǎng)絡(luò)中礦工無(wú)法欺詐,但在一段時(shí)間內(nèi)所有節(jié)點(diǎn)都在對(duì)同一交易進(jìn)行計(jì)算驗(yàn)證,降低了系統(tǒng)吞吐量。一般BTC 區(qū)塊鏈大約10分鐘出一個(gè)區(qū)塊,ETH 區(qū)塊鏈大約15 秒出一個(gè)區(qū)塊,顯然這樣的處理性能無(wú)法滿足證券結(jié)算的需求。
Fabric 引入了一種新的架構(gòu), 我們稱之為execute-order-validate。它通過(guò)將事務(wù)流分為三個(gè)步驟來(lái)解決訂單執(zhí)行模型所面臨的彈性,靈活性,可伸縮性,性能和機(jī)密性挑戰(zhàn):
(1)模擬執(zhí)行交易并檢查其正確性和為其背書;
(2)通過(guò)(可插入)共識(shí)協(xié)議排序交易;
(3)根據(jù)特定于應(yīng)用程序的背書策略驗(yàn)證交易,然后提交賬本更新。
首先,Client C 向網(wǎng)絡(luò)通道背書節(jié)點(diǎn)peer1、peer2 和peer3發(fā)送交易請(qǐng)求,各背書節(jié)點(diǎn)驗(yàn)證交易,確認(rèn)內(nèi)容為交易請(qǐng)求格式正確,確認(rèn)不是重復(fù)交易、確認(rèn)交易簽名、確認(rèn)Client C 有權(quán)限發(fā)起模擬交易;
其次,交易請(qǐng)求確認(rèn)通過(guò)后,調(diào)用鏈碼進(jìn)行模擬交易,模擬交易完成后并不更新賬本,而是把模擬交易結(jié)果及背書節(jié)點(diǎn)簽名返回給Client C;
再次,Client C 收到三個(gè)背書節(jié)點(diǎn)模擬交易結(jié)果及簽名后,驗(yàn)證比較三個(gè)結(jié)果是否一致,驗(yàn)證是否滿足背書策略,如果驗(yàn)證通過(guò),那么Client C 發(fā)送交易信息到ordering service,ordering service 對(duì)各通道發(fā)來(lái)的請(qǐng)求進(jìn)行排序,同時(shí)創(chuàng)建區(qū)塊,把交易打包進(jìn)區(qū)塊。接著,ordering service 把已打包交易的區(qū)塊發(fā)送給通道中所有peer,各peer 對(duì)區(qū)塊中的交易驗(yàn)證是否滿足背書策略,如滿足標(biāo)記為“驗(yàn)證通過(guò)”,如不滿足標(biāo)記為“驗(yàn)證不通過(guò)”;
最后,每個(gè)peer 把區(qū)塊加入通道鏈,同時(shí)把區(qū)塊中驗(yàn)證通過(guò)的交易執(zhí)行結(jié)果更新到賬本數(shù)據(jù)庫(kù)。完成更新后,發(fā)送更新結(jié)果通知給Client C。
證券市場(chǎng)每日交易結(jié)束后,需對(duì)買賣雙方應(yīng)收應(yīng)付的證券和價(jià)款進(jìn)行核定計(jì)算,完成證券由賣方向買方的轉(zhuǎn)移和相對(duì)應(yīng)的資金由買方向賣方的轉(zhuǎn)移。目前證券市場(chǎng)采用集中式結(jié)算系統(tǒng),每日結(jié)算機(jī)構(gòu)根據(jù)交易數(shù)據(jù)計(jì)算買方和賣方的變動(dòng)股數(shù),買方和賣方資金交收金額,發(fā)送給證券公司,證券公司根據(jù)這些數(shù)據(jù)進(jìn)行股份結(jié)算和資金結(jié)算,確認(rèn)更新股民賬戶持有股票股份和資金賬戶余額。最終結(jié)算結(jié)果的正確性和準(zhǔn)確性依賴結(jié)算結(jié)構(gòu)和證券公司,如數(shù)據(jù)在傳輸過(guò)程中存在問(wèn)題,就會(huì)導(dǎo)致結(jié)算結(jié)果問(wèn)題,結(jié)算數(shù)據(jù)的存儲(chǔ)基于中心化關(guān)系型數(shù)據(jù)庫(kù)方式存在被惡意修改的風(fēng)險(xiǎn)。同時(shí)結(jié)算機(jī)構(gòu)把結(jié)算數(shù)據(jù)傳輸給證券公司,證券公司進(jìn)行結(jié)算,效率較低。
利用Fabric 實(shí)現(xiàn)結(jié)算安全和高效,確保結(jié)算數(shù)據(jù)不可篡改,同時(shí)縮短結(jié)算時(shí)間。證券交易結(jié)算流程如下:
圖1 基于Fabric 超級(jí)賬本證券結(jié)算系統(tǒng)架構(gòu)
(1)交易所Fabric 應(yīng)用程序在交易時(shí)段定時(shí)把已成交數(shù)據(jù)提交錄入Fabric 網(wǎng)絡(luò),即應(yīng)用程序發(fā)送給交易所peer、結(jié)算機(jī)構(gòu)peer、證券機(jī)構(gòu)peer,各peer 根據(jù)背書策略模擬交易,然后返回結(jié)果給應(yīng)用程序;
(2)交易所應(yīng)用程序收集返回結(jié)果,并確認(rèn)是否滿足背書策略;
(3)交易所應(yīng)用程序提交Order 排序交易;
(4)Order 根據(jù)背書策略驗(yàn)證交易,然后提交賬本更新;
(5)每日交易結(jié)束后,結(jié)算機(jī)構(gòu)和證券公司從賬本查詢當(dāng)日所有已確認(rèn)成交,來(lái)更新客戶持倉(cāng)和進(jìn)行資金劃撥。
圖1 描述了Fabric 超級(jí)賬本證券結(jié)算系統(tǒng)架構(gòu)。首先在Fabric 網(wǎng)絡(luò)上創(chuàng)建一個(gè)通道,為接入通道的交易所、結(jié)算機(jī)構(gòu)和證券機(jī)構(gòu)創(chuàng)建分配CA 證書,再用CA 創(chuàng)建身份識(shí)別和MSP 會(huì)員服務(wù)提供。最后創(chuàng)建peer 和ordering service,完成Fabric 環(huán)境的部署搭建。各機(jī)構(gòu)通過(guò)開發(fā)的應(yīng)用程序連接到Fabric 網(wǎng)絡(luò)通道,通過(guò)持有的CA 證書完成身份驗(yàn)證。在成功連接到網(wǎng)絡(luò)通道后,就可以開始進(jìn)行交易。
圖2 賬本結(jié)構(gòu)
圖2 描述了Ledger 賬本結(jié)構(gòu),賬本L 由狀態(tài)W 和區(qū)塊鏈B組成。狀態(tài)W 保存業(yè)務(wù)對(duì)象的唯一值,W 一般為key,value 形式,key 可以是股東賬號(hào),value 可以是證券代碼和股票數(shù)。
圖3 區(qū)塊鏈結(jié)構(gòu)
圖3 描述了區(qū)塊鏈B 的結(jié)構(gòu),圖中B 表示區(qū)塊鏈,B0 為區(qū)塊鏈B 第一個(gè)區(qū)塊,后面依次為B1,B2,B3 三個(gè)區(qū)塊,B1 區(qū)塊數(shù)據(jù)D1 中包含T1,T2,T3,T4 四筆交易信息,B2 區(qū)塊數(shù)據(jù)D2中包含T5,T6,T7,T1…T7 可以是股票成交記錄。
圖4 區(qū)塊結(jié)構(gòu)
圖4 為B2 區(qū)塊結(jié)構(gòu),H2 分為當(dāng)前塊哈希CH2 和前一塊哈希PH1,CH2 為D2 數(shù)據(jù)的哈希加密,PH1 為前一區(qū)塊的哈希,通過(guò)PH1 串聯(lián)起每個(gè)區(qū)塊,通過(guò)CH2 保證D2 數(shù)據(jù)存入?yún)^(qū)塊后無(wú)法篡改。
通過(guò)利用Fabric 超級(jí)賬本區(qū)塊鏈,減少了結(jié)算數(shù)據(jù)處理和傳輸?shù)臅r(shí)間,保證了結(jié)算數(shù)據(jù)唯一性和正確性,避免一些人為錯(cuò)誤等造成數(shù)據(jù)的不準(zhǔn)確性,最終確保已結(jié)算數(shù)據(jù)不可篡改并可日后追溯。