長話短說艺沼,我們在建鏈册舞。
區(qū)塊鏈
關(guān)于區(qū)塊鏈是什么,網(wǎng)上的解釋多如牛毛障般。這里调鲸,我從需求的角度總結(jié)一下:當做記錄保存(身份存證)時,它是分布式賬本挽荡;當做交易或支付(跨境支付)時藐石,它是信任機器。雖然這兩種分類方法并不正交定拟,但是對于理解區(qū)塊鏈的應用方向有很大的好處于微。
區(qū)塊鏈是什么
不論是分布式賬本,還是信任機器青自,以及底層的特性——不可篡改株依、透明、可追溯以及去中心化延窜,最終導向的目的只有一個恋腕,那就是信任。人與人之間的信任關(guān)系很復雜逆瑞,通常兩個陌生人想達成交易之前荠藤,會找一位權(quán)威的第三方中介做公證,交易雙方的信任問題依然存在获高,只是他們都相信了中介的權(quán)威性商源。類似的,區(qū)塊鏈也不會解決信任問題谋减,它只要讓大家相信自己就足夠了牡彻,這個問題就規(guī)約成怎么保證區(qū)塊鏈自己是可信任的?
區(qū)塊鏈為什么是可信任的呢出爹?因為人類相信數(shù)學庄吼。數(shù)學理論和加密學實踐可以確保了鏈上數(shù)據(jù)和所有權(quán)的可信程度。其次严就,區(qū)塊的確認基于多數(shù)人的共識总寻,這在某種程度上肯定了群體智慧,即大多數(shù)覺得正確的才是正確的梢为。再次渐行,精妙的算法和不可變數(shù)據(jù)結(jié)構(gòu)轰坊,Merkle tree可以快速證明交易是否存在于區(qū)塊中,Hash pointer決定了當前區(qū)塊的前趨區(qū)塊不可篡改祟印,進而保證前向區(qū)塊鏈的完整性肴沫。最后是經(jīng)濟博弈和人心,因為加密貨幣的加持蕴忆,凡是以破壞整個網(wǎng)絡的為目的手段颤芬,最可能導致整個網(wǎng)絡里的加密貨幣價值歸零,那么單純以攻擊為樂的算力威脅是失去理性的標識套鹅,理性經(jīng)濟人是區(qū)塊鏈網(wǎng)絡里的人心假設(shè)站蝠。這4條相輔相成的設(shè)計決策是比特幣的最負盛名的優(yōu)雅創(chuàng)造!
然而卓鹿,企業(yè)間的聯(lián)盟區(qū)塊鏈菱魔,它的信任更多地依賴于發(fā)起者品牌的背書。在允許這樣的背書之下吟孙,聯(lián)盟鏈的設(shè)計就變得相當靈活豌习,比如最先腰斬的就是代幣。
區(qū)塊鏈的行業(yè)應用
在工信部最新發(fā)表的《2018 年中國區(qū)塊鏈產(chǎn)業(yè)白皮書》中拔疚,區(qū)塊鏈產(chǎn)業(yè)生態(tài)分成了產(chǎn)業(yè)應用,包含金融和實體領(lǐng)域既荚;基礎(chǔ)設(shè)施和平臺稚失,如公有鏈和BaaS;行業(yè)服務恰聘,如媒體句各。而我們的關(guān)注點集中在產(chǎn)業(yè)應用當中。
金融領(lǐng)域由于本身數(shù)字化程度比較高晴叨,在證券化和以及ABS交易所等方向都有落地案例凿宾。在實體產(chǎn)業(yè)當中,供應鏈溯源兼蕊,身份存證等也多有應用初厚。再加上區(qū)塊鏈本身具有“信任穿透”的神奇功效,對于供應鏈金融構(gòu)建征信體系孙技,改善小微企業(yè)的融資困境也很有幫助产禾。
總得來說,區(qū)塊鏈技術(shù)幾乎在所有的產(chǎn)業(yè)場景都能落地應用牵啦。因為幾乎所有的產(chǎn)業(yè)場景都涉及交易亚情,都有降成本、提效率哈雏、優(yōu)化產(chǎn)業(yè)誠信環(huán)境的需求楞件。
我們在干什么
我們區(qū)塊鏈小分隊在不遺余力地建鏈∩郎現(xiàn)在在建某著名車廠的汽車(金融)聯(lián)盟鏈。
汽車金融
汽車金融中的核心資產(chǎn)是汽車土浸。汽車金融始終圍繞車的生命周期發(fā)生金融活動罪针。從零配件的生產(chǎn),到主機廠制造整車栅迄,然后通過各個區(qū)域的銷售公司站故,比如歐洲區(qū)、北美區(qū)毅舆、大中華區(qū)等等的銷售公司西篓,將整車賣給各區(qū)域內(nèi)的經(jīng)銷商。實際上在中國憋活,經(jīng)銷商還可以分為不同層級的二三級經(jīng)銷商岂津,最后才到顧客手中。而一旦新車完成銷售悦即,就邁入了后市場的廣闊天地吮成,以及二手車三手車的再銷售。
從汽車零配件的生產(chǎn)運輸和組裝到車賣給經(jīng)銷商辜梳,這些環(huán)節(jié)所涉及到的金融活動叫做供應鏈金融粱甫,而顧客通過金融活動來買車,不管是新車還是二手車作瞄,都屬于消費金融的范疇茶宵。
汽車金融公司的業(yè)務模式比較簡單清晰,參考下圖宗挥,1乌庶、2、3是汽車的批發(fā)契耿,4瞒大、5是汽車的零售。金融公司參與給授信經(jīng)銷商提供貸款進行車輛的批發(fā)交易搪桂,零售的過程中透敌,金融公司又繼續(xù)給消費者提供消費金融貸款或融資租賃等服務,緩解用戶購車的資金壓力踢械,促進汽車銷售拙泽。因為兩次貸款交易,我們可以看到這兩條方向相反的資金線裸燎,財務上我們管這個叫軋差顾瞻,也就是債務的互相抵消,而這兩次貸款行為的軋差讓金融公司以較低的凈現(xiàn)金賺取了批發(fā)環(huán)節(jié)和零售環(huán)節(jié)的兩次利息收入德绿。
針對汽車金融公司的應用場景荷荤,我們可以簡單總結(jié)業(yè)務痛點:
第一退渗,提升資金利用率是業(yè)務關(guān)鍵。金融服務商以提供資金融通服務進行盈利蕴纳,汽車金融公司的資金很大一部分是來源于汽車集團的財務公司会油,財務公司需要對現(xiàn)金流進出進行精準預測,以提高資金的利用率古毛。傳統(tǒng)的財務記賬方式翻翩,無法實時透明地彰顯資金的實時利用情況:比如有多少現(xiàn)金流即將產(chǎn)生,有多少資金出現(xiàn)了低效的浪費(重復貸款)稻薇,造成了多少潛在損失(壞賬)等等嫂冻。
第二,財務對賬主體數(shù)量較多塞椎,且效率不高桨仿。僅在中國區(qū)域內(nèi)可能就有多家銷售公司和金融公司,以及幾百家經(jīng)銷商案狠。從會計和審計角度服傍,即使每家公司只有兩名財務和審計人員,那么財務審計人員都超過一千名骂铁,更別提全球范圍內(nèi)了吹零。
第三,信任主體的審核門檻較高拉庵。因為金融貸款要控制風險需要信貸審核灿椅,而金融服務機構(gòu)的信審資源有限,審核流程繁雜且周期較長名段,經(jīng)銷商的銷售網(wǎng)絡又比較混亂,因此中小型經(jīng)銷商很容易成為“照顧不過來”的對象泣懊,造成經(jīng)銷商融資困難伸辟,同時也導致汽車金融公司的業(yè)務擴張受限。
我們能用區(qū)塊鏈要做的事情馍刮,一言以蔽之信夫,就是汽車資產(chǎn)上鏈以及圍繞汽車所發(fā)生的金融活動而產(chǎn)生債務的記錄。所以不難發(fā)現(xiàn)卡啰,分布式賬本和信任機器在這個場景下都有涉及静稻。
怎么建鏈
建鏈也是有套路的,我們大體總結(jié)成5個步驟匈辱,分別是識別上鏈數(shù)據(jù)振湾,智能合約涉及,API設(shè)計亡脸,部署單元和網(wǎng)絡拓撲架構(gòu)押搪。識別上鏈數(shù)據(jù)指的是如何識別哪些交易的事實值得記在鏈上树酪;智能合約設(shè)計,指的是買賣車及其相關(guān)金融活動如何通過可編程的方式自動完成大州;API設(shè)計則是如何對外暴露平臺能力续语,同時限制控制主體;部署單元和網(wǎng)絡部署架構(gòu)屬于實施范圍厦画,旨在解答分布式賬本如何真正運行在企業(yè)當中疮茄。整體技術(shù)架構(gòu)是基于Corda這個分布式賬本技術(shù)展開的,Corda準確來說不是區(qū)塊鏈根暑,而是一種受區(qū)塊鏈啟發(fā)的DLT力试,即分布式賬本技術(shù),它是由R3這個世界頂級金融區(qū)塊鏈聯(lián)盟開發(fā)和維護的购裙。
上鏈數(shù)據(jù)識別
我們要分析清楚的問題是車在什么時候轉(zhuǎn)移懂版,車在什么參與方之間轉(zhuǎn)移,車在轉(zhuǎn)移的過程中伴隨了什么數(shù)據(jù)的變化躏率。在分析這塊業(yè)務的時候躯畴,我們嘗試了事件風暴,分析了在各個法律參與實體之間發(fā)生車轉(zhuǎn)移的業(yè)務事件薇芝,然后進行了事件排序蓬抄,通過事件析出數(shù)據(jù),包括交易參與方夯到,車的詳細信息嚷缭,車的所有權(quán)和占有權(quán)以及債等等。這部分數(shù)據(jù)有一定的取舍耍贾,比如訂單就不在我們的核心資產(chǎn)當中阅爽,所以不上鏈。
我們開始進行數(shù)據(jù)建模荐开,在此之前付翁,有必要介紹一下Corda的編程模型——State,因為它會直接影響我們后續(xù)的模型設(shè)計晃听。Corda中核心概念之一就是State百侧,State是分布式賬本上的事實,它代表了交易參與方達成共識的結(jié)果能扒。以IOU這個欠條為例佣渴,State其實就是欠條關(guān)鍵屬性的集合,包含借款方初斑,欠款方辛润,金錢數(shù)量,還款截止日期见秤。當欠款部分歸還時频蛔,這個欠條的內(nèi)容就會發(fā)生變化灵迫,變化的方式就是將老的欠條標記成歷史的,進而生成包含新內(nèi)容的欠條晦溪。
在我們應用場景中瀑粥,核心的State就是車和債,因為Corda是運行在JVM上三圆,開發(fā)首選語言是kotlin狞换,所以這里我們直接拿kotlin中data class對車和債進行建模,而且統(tǒng)一繼承了Corda內(nèi)置的LinearState舟肉,LinearState擁有全局唯一ID修噪,在數(shù)據(jù)演化的過程中不會發(fā)生改變。如果有人了解DDD相關(guān)概念的話路媚,應該能自動映射到實體概念上黄琼。除此之外,Corda中還有一個核心State叫做Fungiable Asset整慎,可以類比成值對象脏款,例如:Cash。
State建模完成之后該怎么演化呢裤园?這就不得不提一個UTXO的概念撤师,UTXO全稱 unspent transaction ouput,最開始是比特幣網(wǎng)絡引入的拧揽,它有很多好處剃盾,比如可以追溯到每一筆輸出的源頭,幫助驗證是否存在雙花現(xiàn)象淤袜,Corda一樣繼承了類似的好處痒谴。銷售公司把車批發(fā)給經(jīng)銷商時,就會將所有權(quán)歸屬自己的車作為交易的輸入铡羡,產(chǎn)生輸出积蔚,輸出中包含了所有權(quán)的變更以及債務的生成。而作為輸入的車就會被標記成歷史的蓖墅。這筆交易本身也必須獲取到交易雙方的簽名才能成立库倘。
智能合約設(shè)計
上面我們聊到的都是鏈上的數(shù)據(jù)以及數(shù)據(jù)演化過程临扮,不過這些過程都不是自動執(zhí)行的论矾。對于復雜的金融合約,往往會涉及到多種state的變化杆勇,這個時候我們就必須使用自動化的流程封裝這些變化贪壳,封裝這些變化的東西其實就是智能合約。還是以經(jīng)銷商批發(fā)車為例蚜退,一個可能的合約模板就是規(guī)定車轉(zhuǎn)移的同時產(chǎn)生一筆債闰靴,以及對應的還款截止日期彪笼。這個合約強制state改變時,交易雙方必須參與簽名蚂且。
在進入智能合約實現(xiàn)之前配猫,我們得先了解一下Corda中flow和contract的概念。Flow是Corda中控制參與節(jié)點如何更新State的自動化流程杏死,它對如何獲取交易對手方的簽名進行了封裝泵肄。一個標準的flow流程包括獲取鏈上數(shù)據(jù),創(chuàng)建一筆交易淑翼,自簽名之后發(fā)送到對手方進行交易驗證腐巢,再簽名,最終在雙方的賬本上分別提交事務玄括。而Contract則是在交易驗證環(huán)節(jié)提供驗證所用的腳本冯丙。
在我們的應用場景中,智能合約長成這樣遭京,在flow中胃惜,先從鏈上取出原有車的數(shù)據(jù),拷貝得到一個新的所有權(quán)發(fā)生轉(zhuǎn)移的車以及對應一筆債洁墙;然后通過 txBuilder構(gòu)建一筆交易蛹疯,交易的輸入是原車,而輸出即是新車和債热监;最后就是驗證和簽名以及事務提交的過程捺弦。細心的聽眾可能已經(jīng)注意到txBuilder中有個firstNotary的參數(shù),這里提一下notary的概念孝扛,notary在corda中是一類特殊的節(jié)點列吼,專門用于防止資產(chǎn)雙花的問題。所以理論上苦始,每筆交易都需要notary節(jié)點參與寞钥,并對交易進行簽名。在交易驗證環(huán)節(jié)中陌选,我們定義的contract會被執(zhí)行理郑,這個contract非常簡單,簡單到只有一個叫做verify的純函數(shù)咨油。它的作用就是斷言每一個state的更新是否符合要求您炉。
API設(shè)計
有了智能合約之后,我們就得考慮如何暴露平臺的合約能力了役电。換句話說赚爵,從消費者的角度,我們該怎么利用平臺提供的能力完成自己的業(yè)務。所以這里我們利用了REST api設(shè)計的思路冀膝,抽象出平臺的能力作為資源呈現(xiàn)唁奢,定義以車為中心的URI,然后選擇合適的HTTP動詞窝剖,得出 REST api麻掸。
從數(shù)據(jù)上鏈識別,到智能合約設(shè)計赐纱,再到API設(shè)計论笔,我們在不同層次利用Corda這個分布式賬本技術(shù)。最底層的分布式賬本記錄每筆交易發(fā)生的事實千所,不可篡改可追溯狂魔;中間的智能合約層提供了合約抽象,甚至可以和現(xiàn)實中的合約一一對應淫痰;最上層的REST api以資源的方式呈現(xiàn)了平臺的金融活動能力最楷。
部署單元
這樣一個汽車金融平臺是怎么跑起來的呢?借助docker待错,我們把一個物理部署單元打包成了一個鏡像籽孙,底層是一個全功能的Corda節(jié)點,所有的智能合約和state都以jar包的方式部署在這個節(jié)點上火俄;同時利用springboot通過RPC的方式連接到Corda節(jié)點犯建,調(diào)用智能合約,對外暴露REST api瓜客;而Corda節(jié)點之間則通過messaging的方式互相通信适瓦。
網(wǎng)絡拓撲
打包成docker鏡像之后,就可以部署到運行環(huán)境中谱仪,形成一個分布式賬本的網(wǎng)絡玻熙。這里有2個節(jié)點需要留意,最左邊的 permission service 是用于對每個入網(wǎng)節(jié)點進行證書簽發(fā)疯攒,給予每個參與實體一個身份嗦随。中間的Network map類似于微服務中的 service discovery,Corda中節(jié)點的互相發(fā)現(xiàn)并不是通過廣播的方式發(fā)生敬尺,而是通過注冊Network map獲取其它節(jié)點的信息枚尼,從而實現(xiàn)找到對方。
回顧
最后砂吞,我們回顧一下先前提到的三層架構(gòu)署恍,用價值的視角重新評估一下整個平臺。傳統(tǒng)的平臺呜舒,通過api的方式暴露服務從而獲得價值輸入锭汛,但是區(qū)塊鏈平臺的核心資產(chǎn)其實在最底層的賬本中∠龋基于這些交易事實和債務或者支付記錄唤殴,我們可以很方便清算各個法律實體的數(shù)字資產(chǎn),計算實時的債務信息到腥,進行車輛的價值溯源朵逝,而且未來結(jié)合大數(shù)據(jù)分析和AI,更有可能打造出一個完整的供應鏈生態(tài)乡范。
推薦閱讀
麥肯錫報告翻譯:《超越狂歡:區(qū)塊鏈的商業(yè)戰(zhàn)略價值是什么配名?》
技術(shù)簡史的思考