當前位置:
首頁 > 最新 > 基於fabric的行業聯盟鏈技術研究/司帥帥

基於fabric的行業聯盟鏈技術研究/司帥帥

本文選自《交易技術前沿》第二十九期 (2017年12月)

區塊鏈被譽為第二代互聯網技術,使我們能夠從信息互聯網時代進入到價值互聯網時代,價值能像信息一樣在網路節點之間自由流動,不需要信任機構背書。證券行業為了保證價值轉移的正常運行,催生了登記機構、託管機構、交易機構、中央對手方等信用機構,從而導致交易中間環節多、交易周期長、風險高等特點,如日中天的區塊鏈技術,正好可以解決這些問題。

一、區塊鏈介紹

近些年來,比特幣底層實現技術-區塊鏈得到全世界各大證券交易所的重視,各大交易所投入人力物力加入到區塊鏈項目的研發。NASDAQ 通過區塊鏈項目 Linq 提供私募股權登記服務,SEC 批准 Overstock 通過區塊鏈技術發行股票,全球最大的 42 家銀行啟動了名為 R3 DEV 的區塊鏈項目1。上海證券交易所也積極的加入到區塊鏈技術在證券行業的應用的探索隊伍。

區塊鏈是以去中心化的方式集體維護的、不可篡改的共識總賬。區塊由選舉的記賬節點產生,所有的節點均可驗證區塊中交易的準確性,將記賬權和驗證權分離並結合非對稱加密演算法,保證了交易信息的不可篡改性和不可抵賴性,共識機制保證了所有節點賬本數據的一致性,每個區塊都指向上一個區塊,保證了區塊中交易的可追溯性。區塊鏈的特點保證了在沒有信任機構參與的情況下完成價值的轉移,該技術對高度依賴信任的證券交易提供了無限遐想的空間。

二、區塊鏈性能和技術瓶頸分析

今年,技術公司和國內一家區塊鏈創業公司開展高性能聯盟鏈合作,探索高性能聯盟鏈。比特幣區塊鏈只能實現每秒 7 筆交易的吞吐量並且成本較高,其原因有以下幾點,第一,比特幣區塊鏈採用公有鏈的設計模式,任意節點均可加入(沒有對惡意節點過濾機制),節點數量龐大,共識達成在 p2p 網路上延遲較大;第二,比特幣採用工作量證明機制,為了提供工作量證明,礦工需要做大量的無用的工作,浪費資源並且效率低;第三,比特幣區塊鏈中區塊大小為 1M,最近擴容方案在爭議中雖然獲得通過,但也只有 2M,容量較小,導致每個區塊中保存的交易記錄有限,平均每十分鐘產生一個區塊的設計使得交易確認延遲較大,導致比特幣性能較低。針對比特幣區塊鏈的問題,有以下解決辦法提高性能,第一,採用聯盟鏈的設計模式,對加入節點質量進行控制,阻止惡意節點加入;第二,採用其他的共識機制,比如權益證明機制(POS)、DPOS 或 PBFT 共識機制等;第三,可以根據網路帶寬限制,適當提高區塊大小,從而提高吞吐量。根據聯合課題的研究總結,可知,目前聯盟鏈性能限制主要是數字簽名技術和網路帶寬,數字簽名技術是區塊鏈實現交易不可篡改、不可抵賴以及數字身份驗證的關鍵技術,進行校驗簽名需要較長的時間完成,尤其是採用國密演算法的情況下,延遲會更大,這大大的降低了區塊鏈的性能。針對數字簽名導致的效能下降可以通過對多次交易進行打包簽名,減少驗簽次數,從而提高性能,相應的研究還在進行中。

三、智能合約

3.1 智能合約介紹

智能合約也叫智能合同,由多產的跨領域法律學者尼克薩博(Nick Szabo)提出來,他對智能合約的定義是一個智能合約是一套以數字形式定義的承諾(promises),包括合約參與方可以在上面執行這些承諾的協議。承諾是指合約參與方同意的(經常是相互的)權利和義務,其定義了合約的本質和目的。從程序員的角度來看智能合約,它就是一段可以用任何語言編寫的代碼,並且是運行在區塊鏈系統上,當滿足一定的條件時可以自動執行。

3.2 智能合約的特點

與傳統的程序相比,智能合約程序有以下特點,第一,智能合約處理的數據是透明的,因為區塊鏈上所有的數據都是公開透明的,並且所有節點都保存一份完整交易記錄;第二,智能合約執行的痕迹不可篡改、不可偽造、不可抵賴,該特點依賴於區塊鏈採用的密碼學演算法保證,所以運行智能合約的節點不必擔心其他節點惡意修改代碼與數據;第三,永久運行,支撐區塊鏈網路的節點往往成千上萬,部分節點的失效並不會導致智能合約的停止,只要有一個節點在運行,智能合約就可以運行下去,這樣就保證了智能合約能像紙質合同一樣每時每刻都有效;第四,由於區塊鏈會對每一筆交易都要進行全網所有節點驗證交易準確性的特點,智能合約也是所有節點同時運行同一段代碼並對結果進行校驗,只有大部分節點輸出結果一致時,才將輸出寫入區塊鏈中作為正式數據,因此惡意修改部分節點並不會影響全網最終的運行結果,有效實現了數據的一致性。

四、各類區塊鏈開源技術的比較

目前,比較流行的區塊鏈開源實現主要有比特幣區塊鏈、以太坊、fabric、CITA、BCOS、小蟻區塊鏈等。以太坊是由以太坊基金會領導與開發,fabric 最初是由 IBM 開發,後來貢獻給 Linux 基金會,CITA 由秘猿科技開發的企業級區塊鏈產品,其特點是首次採用了微服務架構,最近發布了開源版本,BCOS 是由萬向區塊鏈聯合微眾銀行和矩陣元科技聯合開發的區塊鏈實現技術,目前已開源。下面將會詳細比較分析比較流行的區塊鏈開源技術比特幣區塊鏈、以太坊、hyperledger2。

表1區塊鏈開源框架對比分析

比特幣區塊鏈開啟了區塊鏈研究的熱潮。比特幣區塊鏈是專門為貨幣的發行而設計,採用了挖礦、非圖靈完備的腳本語言等特徵,該設計很難應用到複雜的業務場景。以太坊則參考了比特幣區塊鏈的挖礦機制,但是採用了幽靈協議提高效率,新的共識演算法也在開發的過程中。 Fabric 定位是企業級區塊鏈解決方案,適用於定製各種特定業務的聯盟鏈,包括金融領域的應用場景,並且 fabric 是以智能合約為導向,可以利用智能合約開發複雜的業務流程,並且具有較強的擴展性。

五、fabric應用行業聯盟鏈設計流程

5.1 項目架構設計

Fabric 是區塊鏈的底層實現3,也是智能合約的運行環境,fabric 賬本中數據的修改必須通過鏈碼(chaincode);fabric-sdk-node 是封裝好的 nodeSDK,可以通過它調用部署在 fabric 上的智能合約,實現設定的業務邏輯,在這裡主要有四個 js 文件,一個是 install.js,用來把智能合約安裝到 fabric 上,一個是 instantiate.js,用來實例化智能合約,一個 invoke.js 用來調用智能合約中的方法,一個是 query.js 用來查詢鏈上數據,這四個 js 文件都是按照 nodejs 語法設計,通過 exports 方式進行導出;為了實現比較好的用戶體驗,我們設計單獨的應用伺服器,它一方面通過 fabric-node-sdk 調用智能合約,另一方面把運行結果反饋到前端界面,前端界面採用比較流行的設計框架,有 jQuery.js、booststrap 等。架構圖設計如下圖 1。

圖 1 項目架構設計圖

5.2 fabric運行時架構

Fabric 運行時架構主要由一下模塊組成4,membership 是 fabric-ca 節點,用來提供用戶身份管理服務,peer 節點提供 endorser 和 committer 服務,更新 Ledger 賬本,存儲和運行合約代碼,o-service 代表 order 節點提供排序服務。

圖 2 fabric運行時流程圖

5.3 fabric網路服務端設置

行業聯盟鏈的設計思想是,多個機構組成一個聯盟鏈,每個機構運行其擁有的節點。Fabric 實現行業聯盟鏈中,有提供共識服務的 order 節點、代表機構或者組織的 peer 節點和提供認證服務的 fabric-ca 節點組成。下面詳細介紹每個節點的配置信息。

Order節點配置信息如圖 3 所示,Orderer 節點可以組成集群來在 Fabric 網路中提供排序服務。主要配置了容器名,鏡像名,以及容器中環境變數配置信息。

圖 3 服務端 order 節點配置信息

peer 節點配置如圖 4,在此次 POC 中,我們配置了 5 個節點,代表 5 個機構,有央行節點、交易所節點和券商節點,券商節點有三個。其中一個 peer 節點配置詳細信息如圖 4 所示,其他 peer 節點配置信息類似。

圖 4 服務端 peer 節點配置信息

ca 節點配置如下,ca 節點提供節點認證服務。

圖 5 服務端 ca 節點配置信息

5.4 測試網路客戶端配置

Order 節點配置信息,設置了埠號,伺服器主機名,tls 證書位置信息。

圖 7 客戶端 order 節點配置信息

Peer 節點配置信息,配置了五個機構信息,為每個機構配置了 admin、strader 和 btrader 角色,admin 代表管理員賬戶,strader 代表自營賬戶,btrader 代表經紀賬戶,配置詳細信息如圖 8 所示,這裡要注意,配置的埠號要和服務端配置的埠號要一一對應。strader 和 btrader 用戶的秘鑰需要通過 fabric-ca 單獨註冊。

圖 8 客戶端 peer 節點配置信息

5.5 智能合約開發

在 fabric 中,智能合約程序也叫鏈碼(chaincode),可以用 Nodejs、java和 go 語言進行開發,fabric 上的鏈碼分為系統鏈碼和用戶鏈碼。系統鏈碼用於實現系統層級的功能,包括系統的配置,用戶鏈碼的部署、升級,用戶交易的簽名和驗證策略等。用戶鏈碼用於實現用戶的應用功能,即具體的業務邏輯。開發者將鏈碼部署到 fabric 網路上,終端用戶通過與網路節點交互的客戶端應用程序調用鏈碼。鏈碼被編譯成一個獨立的應用程序,運行於隔離的 Docker 容器中,在鏈碼部署的時候會自動生成合約的 Docker 鏡像。

鏈碼必須實現兩個介面,一個是 init(stub shim.ChaincodeStubInterface),用於合約初始化及升級初始化動作,另一個是 Invoke(stub shim.ChaincodeStubInterface),是 peer 調用鏈碼的入口函數。這兩個介面的實現代碼如下圖。ChaincodeStub 裡面包含豐富的賬本操作,常用的有 getCallerCertificate()用來獲得調用者證書信息,可以用來判斷該調用者是否是合法的調用者,getState(k)用來獲得 k 對應的值,也就是當前的世界狀態(wordstate),putState(k,v)用來更新 k 對應的值,該操作會修改鏈上數據,invokeChaincode(…)用來調用其他合約代碼,使用該方法的時候需要注意,調用者和被調用者必須屬於同一個 channel 的不同 chaincode,也就是 chaincodeId 不可以相同,rangeQueryState(k1,k2)該操作用來做範圍查詢,獲取 k1 到 k2 之間的所有值,getTxId()用來獲得交易的Id(transactionId)等。鏈碼開發的過程中,常用的操作可以總結為一個基類,兩個查詢,一個寫入。兩個查詢是指 getState(k)和 rangeQueryState(k1,k2),前一個查詢操作是根據 k 獲得 value,後一個查詢操作是指獲取從 k1 開始到 k2 結束的所有 k-v 對象,返回的是 Map對象,其中 k1,k2 按字典序排序。一個寫入是指 putState(k,v),寫入數據,但是,該操作並不會立馬落到賬本上,要等到第二段交易提交共識達成後,數據才會落地。

圖 9Init介面實現代碼

圖 10Invoke介面實現代碼

鏈碼開發經驗總結,第一,用 json 方式存儲業務實體並在 key 上建立索引,fabric 賬本是 key-value 型資料庫,couchdb 只是額外備份數據,方便複查詢操作,value為 json 格式方便數據的快速解析。Fabric 的 k-v 庫用的是 leveldb,插入的 key 值用的字典序,所以索引欄位值必須固定長度;第二,在 fabric 上,通過 petState 寫入的數據,不會立即更新賬本數據,需要等到第二階段交易所有 peer 節點共識達成後,數據才會落地,因此不可以立即獲取之前寫入的數據;第三,鏈碼裡面的方法不需要加鎖,peer 節點在執行相應方法的時候,已經實現了消息隊列,發給鏈碼的消息都是順序執行的,並不是並行執行;第四,合約中 type 結構體裡面子段首字母要大寫,否則無法用 json 格式將該子段保存到賬本上5,如圖 11 所示。

圖 11 type欄位設計

六、區塊鏈技術實現證券交易系統的特點

第一,實現DVP結算

目前市場上債券交易結算方式包括見券付款、見款付券、純券過戶等,均不能實現資金和債券的同步交割,使交易雙方處於不平等地位,且容易造成匯劃速度慢、資金清算不及時等問題。智能合約使得券款對付成為可能。債券數字化後上鏈,不需要託管機構的參與,債券的上鏈過程就是現在債券的登記過程。區塊鏈上的交易直接完成錢和券在不同賬戶之間的劃轉,實現交易即結算,從而實現券款對付6。

第二,7*24不間斷運行

區塊鏈系統運行在所有節點上,這個節點數量成千上萬,任意一個或多個節點的關閉或者故障都不會影響到區塊鏈系統的正常運行。所有節點都保存一份完整的交易記錄,共識機制保證了每個節點上賬本數據的一致性,從而實現業務連續性。

第三,不需要中央對手方

中央對手方作為一種清算機制,清算機構自身介入已經達成的交易,成為賣方的買方和買方的賣方,確保已達成交易正常履約,是防範金融市場系統性風險的重要手段。區塊鏈系統上,數字貨幣和金融資產的錨定,使得交易的過程就是資產轉移的過程,所以就不需要中央對手方來保證交易是否能正常履約。對於具有較長生命周期的衍生品交易,情況會略有不同,衍生品本質上就是金融合約,在其生命周期內可以涉及多次現金流的交換,可以利用智能合約鎖定相關資產,保證交易的對手方能夠執行約定的權利和義務。

總結

從比特幣區塊鏈的角度來看,雖然沒有任何機構為比特幣的交易背書,但是其卻安全的運行那麼多年。在沒有第三方權威機構做擔保的情況下,比特幣區塊鏈卻能登記、存儲和轉移數字資產,這種創新是史無前例的。

區塊鏈技術能夠很好地解決證券交易中信任的問題,從而可以降低證券交易系統中為了建立信任所耗費的巨大成本。雖然,世上還沒有出現一個顛覆式的區塊鏈應用解決方案,但是交易所應積極投入到區塊鏈技術的研究當中,本著服務證券交易節約交易成本的目的,找到合適的業務場景,推廣區塊鏈應用。

參考文獻

1.巴比特資訊

2.http://www.wanbizu.com/baike/201702099039.html

3.https://github.com/hyperledger/fabric

4.http://hyperledger-fabric.readthedocs.io/en/latest/

5.http://rdc.hundsun.com/portal/article/694.html?from=MJ

6.區塊鏈技術對境內證券業影響分析,牛壯

--------------------------上海證券交易所為證券公司、基金管理公司等市場參與者及相關行業機構提供交易技術支持與服務,包括日常交易技術支持、技術交流研討、市場調查反饋、證券信息技術知識庫、測試等服務。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 上交所技術服務 的精彩文章:

淺析移動雲測平台及實踐/胡蕊莉,蓋昕,孔曉斌
《關於加強證券公司信息系統外部接入管理的通知》

TAG:上交所技術服務 |