以汽車金融為例,當(dāng)我們做區(qū)塊鏈時(shí)我們?cè)谧鍪裁?/h1>
長(zhǎng)話短說(shuō),我們?cè)诮ㄦ湣?/p>
區(qū)塊鏈?zhǔn)鞘裁?/strong>
關(guān)于區(qū)塊鏈?zhǔn)鞘裁?,網(wǎng)絡(luò)上的解釋多如牛毛。這里,我從通常需求的角度總結(jié)一下:在記錄保存(身份存證)時(shí),它是分布式賬本(分布式數(shù)據(jù)庫(kù));在交易或支付(跨境支付)時(shí),它是信任機(jī)器。雖然這兩種分類方法并不正交,但是對(duì)于理解區(qū)塊鏈的應(yīng)用領(lǐng)域有很大的好處。
不論是分布式賬本,還是信任機(jī)器,其底層的特性——不可篡改、透明、可追溯以及去中心化,最終導(dǎo)向的目的都只有一個(gè),那就是信任。
區(qū)塊鏈的可信度來(lái)自于人類對(duì)數(shù)學(xué)邏輯嚴(yán)密性的信任,數(shù)學(xué)理論和加密學(xué)實(shí)踐可以確保鏈上數(shù)據(jù)和所有權(quán)的可靠程度。區(qū)塊的確認(rèn)基于共識(shí)算法、不可變的數(shù)據(jù)結(jié)構(gòu),再通過(guò) Merkle Tree、Hash Pointer(哈希指針) 保證前向區(qū)塊鏈的完整性,再加上經(jīng)濟(jì)、人心的博弈、理性經(jīng)濟(jì)人假設(shè),共同構(gòu)成一套完整的信任系統(tǒng)。
然而,企業(yè)間的聯(lián)盟區(qū)塊鏈有一些不同,它的信任更多地依賴于發(fā)起者品牌的背書(shū)。在這樣的大環(huán)境下,聯(lián)盟鏈的設(shè)計(jì)就變得相當(dāng)靈活,比如***腰斬的就是代幣。
區(qū)塊鏈的行業(yè)應(yīng)用
在工信部***發(fā)表的《2018 年中國(guó)區(qū)塊鏈產(chǎn)業(yè)白皮書(shū)》中,區(qū)塊鏈產(chǎn)業(yè)生態(tài)分成了產(chǎn)業(yè)應(yīng)用(包含金融和實(shí)體領(lǐng)域),基礎(chǔ)設(shè)施和平臺(tái)(如公有鏈和BaaS),行業(yè)服務(wù)(如媒體)。而我們的關(guān)注點(diǎn)集中在產(chǎn)業(yè)應(yīng)用當(dāng)中。
金融領(lǐng)域由于本身數(shù)字化程度比較高,在證券化以及ABS交易所等方向都有落地案例。在實(shí)體產(chǎn)業(yè)當(dāng)中,供應(yīng)鏈溯源,身份存證等也多有應(yīng)用。再加上區(qū)塊鏈本身具有“信任穿透”的神奇功效,對(duì)于構(gòu)建供應(yīng)鏈金融征信體系,改善小微企業(yè)的融資困境也很有幫助。
總體來(lái)說(shuō),幾乎各種產(chǎn)業(yè)場(chǎng)景都能應(yīng)用區(qū)塊鏈技術(shù),因?yàn)檫@些場(chǎng)景里都有提升效率,降低成本,優(yōu)化征信體系的訴求。
汽車金融區(qū)塊鏈應(yīng)用
1. 汽車金融
汽車金融中的核心資產(chǎn)是汽車。汽車金融始終圍繞車的生命周期發(fā)生金融活動(dòng)。從零配件的生產(chǎn),到主機(jī)廠制造整車,然后通過(guò)各個(gè)區(qū)域的銷售公司將整車賣給各區(qū)域內(nèi)的經(jīng)銷商。實(shí)際上在中國(guó),經(jīng)銷商還可以分為不同層級(jí)的二三級(jí)經(jīng)銷商,***才到顧客手中。而一旦新車完成銷售,就邁入了后市場(chǎng)的廣闊天地,以及二手車、三手車的再銷售。
從汽車零配件的生產(chǎn)運(yùn)輸和組裝到車賣給經(jīng)銷商,這些環(huán)節(jié)所涉及到的金融活動(dòng)叫做供應(yīng)鏈金融,而顧客通過(guò)金融活動(dòng)來(lái)買車,不管是新車還是二手車,都屬于消費(fèi)金融的范疇。
汽車的生命周期和金融公司的參與環(huán)節(jié):
它們的業(yè)務(wù)模式長(zhǎng)這樣:
通過(guò)分析現(xiàn)有業(yè)內(nèi)的業(yè)務(wù)模式,我們發(fā)現(xiàn):
財(cái)務(wù)對(duì)賬成本高昂,且效率不高。這里的財(cái)務(wù)成本并非某家公司的財(cái)務(wù)成本,而是整個(gè)系統(tǒng)內(nèi)的財(cái)務(wù)總成本。僅在中國(guó)區(qū)可能就有多家銷售公司和金融公司,以及幾百家經(jīng)銷商,即使每家公司只有兩名財(cái)務(wù)和審計(jì)人員,那么財(cái)務(wù)審計(jì)人員都超過(guò)一千,更別提全球銷售范圍內(nèi)了。
傳統(tǒng)的對(duì)賬方式是怎樣的呢?
不同類型的機(jī)構(gòu)進(jìn)行在對(duì)賬時(shí),往往要從信息系統(tǒng)中導(dǎo)出電子表格,并用郵件發(fā)送。甚至需要打印表格、蓋章后郵寄,對(duì)方收到后再與系統(tǒng)數(shù)據(jù)進(jìn)行比對(duì)。
整個(gè)業(yè)務(wù)流程并不復(fù)雜,但是消耗了很多人力物力,且中心化的服務(wù)還由于對(duì)授權(quán)機(jī)制(多主體之間不太信任或者叫做弱信任)和信息安全等方面的考慮,而導(dǎo)致建設(shè)成本高昂,且制約了業(yè)務(wù)運(yùn)行效率和用戶體驗(yàn)的提升。區(qū)塊鏈作為分布式賬本,意味著任何機(jī)構(gòu)之間互相發(fā)生債務(wù)往來(lái)的信息都是數(shù)據(jù)一致的,那么就可以近實(shí)時(shí)地進(jìn)行對(duì)賬。
而我們區(qū)塊鏈要做的事情,一言以蔽之,汽車資產(chǎn)上鏈以及圍繞汽車所發(fā)生的金融活動(dòng)而產(chǎn)生的債務(wù)的記錄。所以不難發(fā)現(xiàn),分布式賬本和信任機(jī)器在這個(gè)場(chǎng)景下都有涉及。
2. 怎么建鏈
我們把這次建鏈過(guò)程大體總結(jié)為5個(gè)步驟:識(shí)別上鏈數(shù)據(jù),智能合約設(shè)計(jì),API設(shè)計(jì),部署單元和網(wǎng)絡(luò)拓?fù)浼軜?gòu)。
- 識(shí)別上鏈數(shù)據(jù)指的是識(shí)別將哪些交易記在鏈上;
- 智能合約設(shè)計(jì),指的是買賣車及其相關(guān)金融活動(dòng)如何通過(guò)可編程的方式自動(dòng)完成;
- API設(shè)計(jì),考慮如何對(duì)外暴露平臺(tái)能力,同時(shí)限制控制主體;
- 部署單元和網(wǎng)絡(luò)部署架構(gòu)屬于實(shí)施范圍,旨在解答分布式賬本如何真正運(yùn)行在企業(yè)當(dāng)中。
整體技術(shù)架構(gòu)是基于Corda這個(gè)分布式賬本技術(shù)展開(kāi)的,Corda準(zhǔn)確來(lái)說(shuō)不是區(qū)塊鏈,而是一種受區(qū)塊鏈啟發(fā)的DLT,即分布式賬本技術(shù),它是由金融區(qū)塊鏈聯(lián)盟R3開(kāi)發(fā)和維護(hù)的。
(1) 上鏈數(shù)據(jù)識(shí)別
要分析清楚的問(wèn)題是車在什么時(shí)候轉(zhuǎn)移,車在什么參與方之間轉(zhuǎn)移,車在轉(zhuǎn)移的過(guò)程中伴隨了什么數(shù)據(jù)的變化。在分析這塊業(yè)務(wù)的時(shí)候,我們通過(guò)事件風(fēng)暴,分析了在各個(gè)法律參與實(shí)體之間發(fā)生車轉(zhuǎn)移的業(yè)務(wù)事件,然后進(jìn)行了事件排序,通過(guò)事件析出數(shù)據(jù),包括交易參與方,車的詳細(xì)信息,車的所有權(quán)和占有權(quán)以及債等等。這部分?jǐn)?shù)據(jù)有一定的取舍,比如訂單就不在我們的核心資產(chǎn)當(dāng)中,所以不上鏈。
我們開(kāi)始進(jìn)行數(shù)據(jù)建模,在此之前,有必要介紹一下Corda的編程模型——State,因?yàn)樗鼤?huì)直接影響我們后續(xù)的模型設(shè)計(jì)。Corda中核心概念之一就是State,State是分布式賬本上的事實(shí),它代表了交易參與方達(dá)成共識(shí)的結(jié)果。以IOU這個(gè)欠條為例,State其實(shí)就是欠條關(guān)鍵屬性的集合,包含借款方,欠款方,金錢數(shù)量,還款截止日期。當(dāng)欠款部分歸還時(shí),這個(gè)欠條的內(nèi)容就會(huì)發(fā)生變化,變化的方式就是將老的欠條標(biāo)記成歷史的,進(jìn)而生成包含新內(nèi)容的欠條。
在我們應(yīng)用場(chǎng)景中,核心的State就是車和債,因?yàn)镃orda是運(yùn)行在JVM上,開(kāi)發(fā)***語(yǔ)言是Kotlin,所以這里我們直接拿Kotlin中data class對(duì)車和債進(jìn)行建模,而且統(tǒng)一繼承了Corda內(nèi)置的LinearState,LinearState擁有全局唯一ID,在數(shù)據(jù)演化的過(guò)程中不會(huì)發(fā)生改變。如果有人了解DDD相關(guān)概念的話,應(yīng)該能自動(dòng)映射到實(shí)體概念上。除此之外,Corda中還有一個(gè)核心State叫做Fungiable Asset,可以類比成值對(duì)象,例如:Cash。
State建模完成之后該怎么演化呢?這就不得不提一個(gè)UTXO的概念,UTXO全稱 unspent transaction ouput,最開(kāi)始是比特幣網(wǎng)絡(luò)引入的,它有很多好處,比如可以追溯到每一筆輸出的源頭,幫助驗(yàn)證是否存在雙花現(xiàn)象,Corda一樣繼承了類似的好處。銷售公司把車批發(fā)給經(jīng)銷商時(shí),就會(huì)將所有權(quán)歸屬自己的車作為交易的輸入,產(chǎn)生輸出,輸出中包含了所有權(quán)的變更以及債務(wù)的生成。而作為輸入的車就會(huì)被標(biāo)記成歷史的。這筆交易本身也必須獲取到交易雙方的簽名才能成立。
(2) 智能合約設(shè)計(jì)
上面我們聊到的都是鏈上的數(shù)據(jù)以及數(shù)據(jù)演化過(guò)程,不過(guò)這些過(guò)程都不是自動(dòng)執(zhí)行的。對(duì)于復(fù)雜的金融合約,往往會(huì)涉及到多種state的變化,這個(gè)時(shí)候就必須使用自動(dòng)化的流程封裝這些變化,封裝這些變化的東西其實(shí)就是智能合約。還是以經(jīng)銷商批發(fā)車為例,一個(gè)可能的合約模板就是規(guī)定車轉(zhuǎn)移的同時(shí)產(chǎn)生一筆債,以及對(duì)應(yīng)的還款截止日期。這個(gè)合約強(qiáng)制state改變時(shí),交易雙方必須參與簽名。
在進(jìn)入智能合約實(shí)現(xiàn)之前,需要先了解一下Corda中flow和contract的概念。Flow是Corda中控制參與節(jié)點(diǎn)如何更新State的自動(dòng)化流程,它對(duì)如何獲取交易對(duì)手方的簽名進(jìn)行了封裝。一個(gè)標(biāo)準(zhǔn)的flow流程包括獲取鏈上數(shù)據(jù),創(chuàng)建一筆交易,自簽名之后發(fā)送到對(duì)手方進(jìn)行交易驗(yàn)證,再簽名,最終在雙方的賬本上分別提交事務(wù)。而Contract則是在交易驗(yàn)證環(huán)節(jié)提供驗(yàn)證所用的腳本。
在我們的應(yīng)用場(chǎng)景中,智能合約長(zhǎng)成這樣,在flow中,先從鏈上取出原有車的數(shù)據(jù),拷貝得到一個(gè)新的所有權(quán)發(fā)生轉(zhuǎn)移的車以及對(duì)應(yīng)一筆債;然后通過(guò) txBuilder構(gòu)建一筆交易,交易的輸入是原車,而輸出即是新車和債;***就是驗(yàn)證和簽名以及事務(wù)提交的過(guò)程。你可能已經(jīng)注意到txBuilder中有個(gè)firstNotary的參數(shù),這里提一下notary的概念,notary在corda中是一類特殊的節(jié)點(diǎn),專門用于防止資產(chǎn)雙花的問(wèn)題。所以理論上,每筆交易都需要notary節(jié)點(diǎn)參與,并對(duì)交易進(jìn)行簽名。在交易驗(yàn)證環(huán)節(jié)中,我們定義的contract會(huì)被執(zhí)行,這個(gè)contract非常簡(jiǎn)單,簡(jiǎn)單到只有一個(gè)叫做verify的純函數(shù)。它的作用就是斷言每一個(gè)state的更新是否符合要求。這種設(shè)計(jì)非常符合Trust But Verify的理念。
(3) API設(shè)計(jì)
有了智能合約之后,我們就得考慮如何暴露平臺(tái)的合約能力了。換句話說(shuō),從消費(fèi)者的角度,我們?cè)撛趺蠢闷脚_(tái)提供的能力完成自己的業(yè)務(wù)。所以這里我們利用了REST api設(shè)計(jì)的思路,抽象出平臺(tái)的能力作為資源呈現(xiàn),定義以車為中心的URI,然后選擇合適的HTTP動(dòng)詞,得出 REST api。
從數(shù)據(jù)上鏈識(shí)別,到智能合約設(shè)計(jì),再到API設(shè)計(jì),我們?cè)诓煌瑢哟卫肅orda這個(gè)分布式賬本技術(shù)。***層的分布式賬本記錄每筆交易發(fā)生的事實(shí),不可篡改可追溯;中間的智能合約層提供了合約抽象,甚至可以和現(xiàn)實(shí)中的合約一一對(duì)應(yīng);最上層的REST api以資源的方式呈現(xiàn)了平臺(tái)的金融活動(dòng)能力。
(4) 部署單元
這樣一個(gè)汽車金融平臺(tái)是怎么跑起來(lái)的呢?借助Docker,我們把一個(gè)物理部署單元打包成了一個(gè)鏡像,底層是一個(gè)全功能的Corda節(jié)點(diǎn),所有的智能合約和state都以jar包的方式部署在這個(gè)節(jié)點(diǎn)上;同時(shí)利用SpringBoot通過(guò)RPC的方式連接到Corda節(jié)點(diǎn),調(diào)用智能合約,對(duì)外暴露REST API;而Corda節(jié)點(diǎn)之間則通過(guò)消息的方式互相通信。
(5) 網(wǎng)絡(luò)拓?fù)?/strong>
打包成docker鏡像之后,就可以部署到運(yùn)行環(huán)境中,形成一個(gè)分布式賬本的P2P網(wǎng)絡(luò)。這里有2個(gè)節(jié)點(diǎn)需要留意,最左邊的 permission service 是用于對(duì)每個(gè)入網(wǎng)節(jié)點(diǎn)進(jìn)行證書(shū)簽發(fā),給予每個(gè)參與實(shí)體一個(gè)身份。中間的Network map類似于微服務(wù)中的 service discovery,Corda中節(jié)點(diǎn)的互相發(fā)現(xiàn)并不是通過(guò)廣播的方式發(fā)生,而是通過(guò)注冊(cè)Network map獲取其它節(jié)點(diǎn)的信息,進(jìn)而找到對(duì)方。
回顧
***,我們回顧一下上面的三層架構(gòu),用價(jià)值的視角重新評(píng)估一下整個(gè)平臺(tái)。傳統(tǒng)的平臺(tái),通過(guò)api的方式暴露服務(wù)從而獲得價(jià)值輸入,但是區(qū)塊鏈平臺(tái)的核心資產(chǎn)其實(shí)在***層的賬本中。基于這些交易事實(shí)和債務(wù)或者支付記錄,我們可以很方便清算各個(gè)法律實(shí)體的數(shù)字資產(chǎn),計(jì)算實(shí)時(shí)的債務(wù)信息,進(jìn)行車輛的價(jià)值溯源,而且未來(lái)結(jié)合大數(shù)據(jù)分析和AI,更有可能打造出一個(gè)完整的供應(yīng)鏈生態(tài)。
【本文是51CTO專欄作者“ThoughtWorks”的原創(chuàng)稿件,微信公眾號(hào):思特沃克,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】