長(zhǎng)話短說(shuō)钦听,我們?cè)诮ㄦ湣?/p>
區(qū)塊鏈?zhǔn)鞘裁?/h3>
關(guān)于區(qū)塊鏈?zhǔn)鞘裁矗W(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)用
汽車金融
汽車金融中的核心資產(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)景下都有涉及帆啃。
怎么建鏈
我們把這次建鏈過(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ù)的。
上鏈數(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)記成歷史的富纸。這筆交易本身也必須獲取到交易雙方的簽名才能成立囤踩。
智能合約設(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)侣监,專門(mé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的理念。
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)能力。
部署單元
這樣一個(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ò)消息的方式互相通信。
網(wǎng)絡(luò)拓?fù)?/h4>
打包成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)蜒车。
推薦閱讀
文/ThoughtWorks 鄢倩 趙正陽(yáng)