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