當我們做區塊鏈時,我們在做什麼?

長話短說,我們在建鏈。

當我們做區塊鏈時,我們在做什麼?

區塊鏈是什麼

關於區塊鏈是什麼,網絡上的解釋多如牛毛。這裡,我從通常需求的角度總結一下:在記錄保存(身份存證)時,它是分佈式賬本(分佈式數據庫);在交易或支付(跨境支付)時,它是信任機器。雖然這兩種分類方法並不正交,但是對於理解區塊鏈的應用領域有很大的好處。

不論是分佈式賬本,還是信任機器,其底層的特性——不可篡改、透明、可追溯以及去中心化,最終導向的目的都只有一個,那就是信任。

區塊鏈的可信度來自於人類對數學邏輯嚴密性的信任,數學理論和加密學實踐可以確保鏈上數據和所有權的可靠程度。區塊的確認基於共識算法、不可變的數據結構,再通過 Merkle Tree、Hash Pointer(哈希指針) 保證前向區塊鏈的完整性,再加上經濟、人心的博弈、理性經濟人假設,共同構成一套完整的信任系統。

然而,企業間的聯盟區塊鏈有一些不同,它的信任更多地依賴於發起者品牌的背書。在這樣的大環境下,聯盟鏈的設計就變得相當靈活,比如最先腰斬的就是代幣。

區塊鏈的行業應用

在工信部最新發表的《2018 年中國區塊鏈產業白皮書》中,區塊鏈產業生態分成了產業應用(包含金融和實體領域),基礎設施和平臺(如公有鏈和BaaS),行業服務(如媒體)。而我們的關注點集中在產業應用當中。

當我們做區塊鏈時,我們在做什麼?

金融領域由於本身數字化程度比較高,在證券化以及ABS交易所等方向都有落地案例。在實體產業當中,供應鏈溯源,身份存證等也多有應用。再加上區塊鏈本身具有“信任穿透”的神奇功效,對於構建供應鏈金融徵信體系,改善小微企業的融資困境也很有幫助。

總體來說,幾乎各種產業場景都能應用區塊鏈技術,因為這些場景裡都有提升效率,降低成本,優化徵信體系的訴求。

汽車金融區塊鏈應用

汽車金融

汽車金融中的核心資產是汽車。汽車金融始終圍繞車的生命週期發生金融活動。從零配件的生產,到主機廠製造整車,然後通過各個區域的銷售公司將整車賣給各區域內的經銷商。實際上在中國,經銷商還可以分為不同層級的二三級經銷商,最後才到顧客手中。而一旦新車完成銷售,就邁入了後市場的廣闊天地,以及二手車、三手車的再銷售。

從汽車零配件的生產運輸和組裝到車賣給經銷商,這些環節所涉及到的金融活動叫做供應鏈金融,而顧客通過金融活動來買車,不管是新車還是二手車,都屬於消費金融的範疇。

汽車的生命週期和金融公司的參與環節:

當我們做區塊鏈時,我們在做什麼?

它們的業務模式長這樣:

當我們做區塊鏈時,我們在做什麼?

通過分析現有業內的業務模式,我們發現:

財務對賬成本高昂,且效率不高。這裡的財務成本並非某家公司的財務成本,而是整個系統內的財務總成本。僅在中國區可能就有多家銷售公司和金融公司,以及幾百家經銷商,即使每家公司只有兩名財務和審計人員,那麼財務審計人員都超過一千,更別提全球銷售範圍內了。

傳統的對賬方式是怎樣的呢?

不同類型的機構進行在對賬時,往往要從信息系統中導出電子表格,並用郵件發送。甚至需要打印表格、蓋章後郵寄,對方收到後再與系統數據進行比對。

整個業務流程並不複雜,但是消耗了很多人力物力,且中心化的服務還由於對授權機制(多主體之間不太信任或者叫做弱信任)和信息安全等方面的考慮,而導致建設成本高昂,且制約了業務運行效率和用戶體驗的提升。區塊鏈作為分佈式賬本,意味著任何機構之間互相發生債務往來的信息都是數據一致的,那麼就可以近實時地進行對賬。

而我們區塊鏈要做的事情,一言以蔽之,汽車資產上鍊以及圍繞汽車所發生的金融活動而產生的債務的記錄。所以不難發現,分佈式賬本和信任機器在這個場景下都有涉及。

怎麼建鏈

我們把這次建鏈過程大體總結為5個步驟:識別上鍊數據,智能合約設計,API設計,部署單元和網絡拓撲架構。

  • 識別上鍊數據指的是識別將哪些交易記在鏈上;
  • 智能合約設計,指的是買賣車及其相關金融活動如何通過可編程的方式自動完成;
  • API設計,考慮如何對外暴露平臺能力,同時限制控制主體;
  • 部署單元和網絡部署架構屬於實施範圍,旨在解答分佈式賬本如何真正運行在企業當中。

整體技術架構是基於Corda這個分佈式賬本技術展開的,Corda準確來說不是區塊鏈,而是一種受區塊鏈啟發的DLT,即分佈式賬本技術,它是由金融區塊鏈聯盟R3開發和維護的。

上鍊數據識別

要分析清楚的問題是車在什麼時候轉移,車在什麼參與方之間轉移,車在轉移的過程中伴隨了什麼數據的變化。在分析這塊業務的時候,我們通過事件風暴,分析了在各個法律參與實體之間發生車轉移的業務事件,然後進行了事件排序,通過事件析出數據,包括交易參與方,車的詳細信息,車的所有權和佔有權以及債等等。這部分數據有一定的取捨,比如訂單就不在我們的核心資產當中,所以不上鍊。

當我們做區塊鏈時,我們在做什麼?

我們開始進行數據建模,在此之前,有必要介紹一下Corda的編程模型——State,因為它會直接影響我們後續的模型設計。Corda中核心概念之一就是State,State是分佈式賬本上的事實,它代表了交易參與方達成共識的結果。以IOU這個欠條為例,State其實就是欠條關鍵屬性的集合,包含借款方,欠款方,金錢數量,還款截止日期。當欠款部分歸還時,這個欠條的內容就會發生變化,變化的方式就是將老的欠條標記成歷史的,進而生成包含新內容的欠條。

當我們做區塊鏈時,我們在做什麼?

在我們應用場景中,核心的State就是車和債,因為Corda是運行在JVM上,開發首選語言是Kotlin,所以這裡我們直接拿Kotlin中data class對車和債進行建模,而且統一繼承了Corda內置的LinearState,LinearState擁有全局唯一ID,在數據演化的過程中不會發生改變。如果有人瞭解DDD相關概念的話,應該能自動映射到實體概念上。除此之外,Corda中還有一個核心State叫做Fungiable Asset,可以類比成值對象,例如:Cash。

當我們做區塊鏈時,我們在做什麼?

State建模完成之後該怎麼演化呢?這就不得不提一個UTXO的概念,UTXO全稱 unspent transaction ouput,最開始是比特幣網絡引入的,它有很多好處,比如可以追溯到每一筆輸出的源頭,幫助驗證是否存在雙花現象,Corda一樣繼承了類似的好處。銷售公司把車批發給經銷商時,就會將所有權歸屬自己的車作為交易的輸入,產生輸出,輸出中包含了所有權的變更以及債務的生成。而作為輸入的車就會被標記成歷史的。這筆交易本身也必須獲取到交易雙方的簽名才能成立。

當我們做區塊鏈時,我們在做什麼?

智能合約設計

上面我們聊到的都是鏈上的數據以及數據演化過程,不過這些過程都不是自動執行的。對於複雜的金融合約,往往會涉及到多種state的變化,這個時候就必須使用自動化的流程封裝這些變化,封裝這些變化的東西其實就是智能合約。還是以經銷商批發車為例,一個可能的合約模板就是規定車轉移的同時產生一筆債,以及對應的還款截止日期。這個合約強制state改變時,交易雙方必須參與簽名。

在進入智能合約實現之前,需要先了解一下Corda中flow和contract的概念。Flow是Corda中控制參與節點如何更新State的自動化流程,它對如何獲取交易對手方的簽名進行了封裝。一個標準的flow流程包括獲取鏈上數據,創建一筆交易,自簽名之後發送到對手方進行交易驗證,再簽名,最終在雙方的賬本上分別提交事務。而Contract則是在交易驗證環節提供驗證所用的腳本。

當我們做區塊鏈時,我們在做什麼?

在我們的應用場景中,智能合約長成這樣,在flow中,先從鏈上取出原有車的數據,拷貝得到一個新的所有權發生轉移的車以及對應一筆債;然後通過 txBuilder構建一筆交易,交易的輸入是原車,而輸出即是新車和債;最後就是驗證和簽名以及事務提交的過程。你可能已經注意到txBuilder中有個firstNotary的參數,這裡提一下notary的概念,notary在corda中是一類特殊的節點,專門用於防止資產雙花的問題。所以理論上,每筆交易都需要notary節點參與,並對交易進行簽名。在交易驗證環節中,我們定義的contract會被執行,這個contract非常簡單,簡單到只有一個叫做verify的純函數。它的作用就是斷言每一個state的更新是否符合要求。這種設計非常符合Trust But Verify的理念。

當我們做區塊鏈時,我們在做什麼?

API設計

有了智能合約之後,我們就得考慮如何暴露平臺的合約能力了。換句話說,從消費者的角度,我們該怎麼利用平臺提供的能力完成自己的業務。所以這裡我們利用了REST API設計的思路,抽象出平臺的能力作為資源呈現,定義以車為中心的URI,然後選擇合適的HTTP動詞,得出 REST api。

當我們做區塊鏈時,我們在做什麼?

從數據上鍊識別,到智能合約設計,再到API設計,我們在不同層次利用Corda這個分佈式賬本技術。最底層的分佈式賬本記錄每筆交易發生的事實,不可篡改可追溯;中間的智能合約層提供了合約抽象,甚至可以和現實中的合約一一對應;最上層的REST api以資源的方式呈現了平臺的金融活動能力。

當我們做區塊鏈時,我們在做什麼?

部署單元

這樣一個汽車金融平臺是怎麼跑起來的呢?藉助Docker,我們把一個物理部署單元打包成了一個鏡像,底層是一個全功能的Corda節點,所有的智能合約和state都以jar包的方式部署在這個節點上;同時利用SpringBoot通過RPC的方式連接到Corda節點,調用智能合約,對外暴露REST api;而Corda節點之間則通過消息的方式互相通信。

當我們做區塊鏈時,我們在做什麼?

網絡拓撲

打包成docker鏡像之後,就可以部署到運行環境中,形成一個分佈式賬本的P2P網絡。這裡有2個節點需要留意,最左邊的 permission service 是用於對每個入網節點進行證書籤發,給予每個參與實體一個身份。中間的Network map類似於微服務中的 service discovery,Corda中節點的互相發現並不是通過廣播的方式發生,而是通過註冊Network map獲取其它節點的信息,進而找到對方。

當我們做區塊鏈時,我們在做什麼?

回顧

最後,我們回顧一下上面的三層架構,用價值的視角重新評估一下整個平臺。傳統的平臺,通過api的方式暴露服務從而獲得價值輸入,但是區塊鏈平臺的核心資產其實在最底層的賬本中。基於這些交易事實和債務或者支付記錄,我們可以很方便清算各個法律實體的數字資產,計算實時的債務信息,進行車輛的價值溯源,而且未來結合大數據分析和AI,更有可能打造出一個完整的供應鏈生態。

當我們做區塊鏈時,我們在做什麼?

文/ThoughtWorks鄢倩 趙正陽

原文:https://insights.thoughtworks.cn/blockchain/


分享到:


相關文章: