0
本文作者: 張利 | 2017-03-31 17:53 |
雷鋒網(wǎng)AI金融評論按:本文作者白碩,ChinaLedger技術(shù)委員會主任,上海證券交易所前總工程師,中科院博士生導師,資深Fintech專家。本文經(jīng)作者授權(quán)轉(zhuǎn)載。
關(guān)于Corda是什么,我們有三句話:首先,Corda是一個分布式賬本;第二,Corda是一個去中心化數(shù)據(jù)庫;第三,Corda是一個“受區(qū)塊鏈啟發(fā)的”技術(shù)平臺。
Corda是一個分布式賬本,這句話很好理解,一筆交易多處記載、同步維護么。但是這個分布式賬本與我們看到的其他分布式賬本有很大一個不同,就是它并沒有一個統(tǒng)一的基礎(chǔ)賬本,“多處”復制并不是“全網(wǎng)”復制。沒有基礎(chǔ)賬本也就意味著沒有統(tǒng)一的全局不可更改的事件時序,沒有一個不可逆轉(zhuǎn)的“時間之矢”。時序只是在需要發(fā)生與時間相關(guān)的邏輯關(guān)系時才出場,只是一個“偏序”。Corda的時序并不追求時點的精確性,而只是側(cè)重時段的包含、覆蓋、接續(xù)、交叉等關(guān)系。
Corda是一個去中心化的數(shù)據(jù)庫,這點我們需要強調(diào)。在沒有全局統(tǒng)一賬本的大前提下,Corda的本地數(shù)據(jù)庫在數(shù)據(jù)的記錄方面發(fā)揮著至關(guān)重要的作用,甚至Corda還專門預留了SQL接口。但是,這個本地數(shù)據(jù)庫是受到多交易主體之間的業(yè)務關(guān)系約束的。約束體現(xiàn)在:
交易相關(guān)人必須保證關(guān)于交易的數(shù)據(jù)記錄是一致的,如不一致,首先背離共識的一方將無法在后續(xù)的交易中自證清白。
交易相關(guān)人必須保證,只有在經(jīng)過驗證表明,雙方關(guān)于交易達成的輸入輸出狀態(tài)的檢驗條件全部符合后,交易方能放行。
交易相關(guān)人必須把交易的輸出狀態(tài)存儲好、組織好,在后續(xù)遇到必須出示這筆交易的輸出狀態(tài)作為證據(jù)的一部分的時候,不能掉鏈子。所以,即使沒有全局統(tǒng)一賬本,一個邏輯上的“節(jié)點”(可以視為與身份一一對應),按照高等級關(guān)鍵業(yè)務系統(tǒng)的默認部署方式,在物理上應該包含相應的冗余備份節(jié)點,從網(wǎng)絡、主機、存儲、應用幾個方面做好容災準備。
按照R3內(nèi)部人士的話說,Corda是一個“受區(qū)塊鏈啟發(fā)的(blockchain-inspired)”平臺。我們看到,區(qū)塊鏈的啟發(fā)確實彌漫在Corda各處。密碼學、分布式系統(tǒng)、P2P網(wǎng)絡不僅是區(qū)塊鏈的基礎(chǔ)技術(shù),也同樣是Corda的基礎(chǔ)技術(shù)。在較差的信任環(huán)境下達成較好的信任效果,不僅是區(qū)塊鏈的宗旨和追求,也同樣是Corda的宗旨和追求。但是,人們有權(quán)利選擇不同的錘子來砸細節(jié)略有差異的釘子。在金融機構(gòu)嚴謹?shù)暮弦?guī)氛圍中,Corda的開發(fā)者們發(fā)現(xiàn)套用現(xiàn)有的區(qū)塊鏈技術(shù)無法達到業(yè)內(nèi)的合規(guī)標準,又等不及現(xiàn)有區(qū)塊鏈技術(shù)的后續(xù)優(yōu)化,只好被逼采用目前公布出來的技術(shù)架構(gòu)。他們出于對區(qū)塊鏈業(yè)界先賢們的尊重,稱Corda為“受區(qū)塊鏈啟發(fā)的(blockchain-inspired)”平臺,是比較實事求是的。
關(guān)于Corda“不是什么”,我們可以很明確地斷定:Corda不是一個“供所有人見證所有交易的”平臺。如果“所有人見證所有交易”是成為區(qū)塊鏈的不可缺少的特質(zhì),那么Corda就確實不是區(qū)塊鏈。但是這只是表面,不是精髓?!霸谳^差的信任環(huán)境里達成較好的信任效果”才是區(qū)塊鏈的精髓。所以,做到“所有人見證所有交易”只是形似,做到“在較差的信任環(huán)境里達成較好的信任效果”卻是神似。在這一意義上,說Corda“不是區(qū)塊鏈,勝似區(qū)塊鏈”也不為過。
Corda采用了比特幣的UTXO模型而不是以太坊的“賬戶-余額模型”,這一點是值得贊許的。UTXO模型與賬戶-余額模型最大的不同點,就是它直接記載原始事實,而不是根據(jù)原始事實推斷出來的余額。不錯,余額往往直接可用,但余額與原始事實畢竟隔了一層甚至多層。從以太坊的經(jīng)驗看,僅憑余額狀態(tài)的日志,有時不足以完整解釋余額狀態(tài)何以發(fā)生。所以,以注重原始單據(jù)合法合規(guī)性的銀行應用為背景的Corda,選擇UTXO模型來組織基礎(chǔ)數(shù)據(jù),是完全可以理解的。
然而,關(guān)于Corda所使用的UTXO模型,我們要說的還不止這些。我們發(fā)現(xiàn),Corda所使用的UTXO模型,是一種擴展了外延的UTXO模型。它不僅可以描述價值轉(zhuǎn)移,還可以描述準價值、非價值類型的單據(jù)的鑒別、確認、記錄和以此為基礎(chǔ)的流程展開。以信用證應用為例,信用證所依據(jù)的輸入/輸出單據(jù)中,有些就完全可以是非價值類型的,比如到貨的確認單據(jù)。無論是金融流程中的各類單據(jù)、證明,還是金融業(yè)務中的指令、操作,都可以表示為在這一擴展意義下的UTXO。交易,就是一組經(jīng)驗證合法合規(guī)的UTXO(扇入),在相應業(yè)務邏輯條件滿足時映射為另一組即時生效、合法合規(guī)的UTXO(扇出)的函數(shù)。有人說,把Corda的交易串接起來,就是一個典型的基于函數(shù)程序設(shè)計的流式結(jié)構(gòu)(請熟悉大數(shù)據(jù)處理流式架構(gòu)的讀者自行參照Spark)。了解了Corda對UTXO外延的這番擴展,可知此言不虛。
圖譜(Graph),在Corda中起著核心的作用。它的作用,用大白話說就是“自帶證據(jù)、自證清白”。
因為沒了統(tǒng)一總賬,沒了“所有人見證所有交易”的機制,發(fā)起交易并主張預期交易結(jié)果的人必須有相應的替代機制去推進交易的達成,具體落地就體現(xiàn)為“圖譜”。圖譜把需要自帶的證據(jù)組織成有向無環(huán)圖(DAG)結(jié)構(gòu),交易對手方或流程下游的主體可沿著圖譜的走向一一驗證。理論上,要想驗證一筆交易,不僅要驗證直接證據(jù),還要驗證產(chǎn)生直接證據(jù)的各層間接證據(jù),乃至一直追溯到源頭。
為什么一定要間接證據(jù)?因為從邏輯因果的角度來看,“僅雙邊”的交易畢竟只是極少數(shù)。如果B向C的轉(zhuǎn)賬必須以A向B的轉(zhuǎn)賬為前提,那么A向B的轉(zhuǎn)賬就絕不只是A和B之間的私事,B必須讓C信服A向B的轉(zhuǎn)賬不是杜撰出來的。擴大到“有限多邊”,間接證據(jù)就一定要進來。
對于圖譜機制,我是聽到過一些微詞的??偲饋碚f就是認為它的計算和存儲開銷可能過大。但這和Corda把交易的知曉和見證范圍最大限度地壓縮到交易的直接相關(guān)人的策略是分不開的。筆者發(fā)現(xiàn),在目前技術(shù)條件下,去中心化、縮小交易的知曉見證范圍和縮小計算存儲開銷,三個目標最多只能達成兩個,這跟著名的CAP定理頗有些相似。這就是為什么如果從“有限多邊”進一步擴大到“任意多邊”,純粹基于圖譜自證的方案已難以“清一色地”貫徹到底,半路又殺出個“公證人”的原因。
公證人(Notary),是Corda區(qū)別于其他分布式賬本平臺的最大不同點,某種意義上可以認為是一筆特定交易的交易雙方共同認可的可信第三方。這在傳統(tǒng)銀行業(yè)務中本不是問題,但是在分布式賬本平臺當中,確實顯得另類。有人批評說公證人的引入使得本來從技術(shù)上可以完全去除可信第三方的區(qū)塊鏈技術(shù)又倒退回了必須依賴可信第三方的中心化局面,這話聽上去不無道理。但是,Corda中的公證人和傳統(tǒng)意義上的可信第三方,還是有很大不同的。
第一,Corda中的公證人,實際上是一個有簽發(fā)單據(jù)權(quán)限(也就是說,擁有私鑰)的節(jié)點。這個節(jié)點雖不排除有時不得不采用“人肉”操作,但一般是自動化的程序,可以說除了私鑰,公證人的所有操作依據(jù)都是規(guī)范透明的。傳統(tǒng)意義上的可信第三方則很難做到這一點。
第二,Corda中的公證人,是各交易參與方共同指定并明確認可的,其簽發(fā)的輸出單據(jù)對各交易參與方都有約束力。你可以選擇不交易,但是一旦必須交易,選擇相信公證人,還是要比選擇把一切歷史舊賬的細節(jié)都暴露給并不怎么熟悉的交易對手方要靠譜一些。
第三,Corda中的公證人其實不是“一個人”或“一個節(jié)點”,而是需要達成共識的“一群人”或“一群節(jié)點”,所采用的共識機制是可插拔的,文件上說是PBFT,也不排除作為PBFT簡化和弱化版本的RAFT。不管強弱,公證環(huán)節(jié)總還是受到監(jiān)督制衡的。
所以,Corda中的公證人,客觀性和容錯能力上還是遠強于傳統(tǒng)意義上的可信第三方的。
Corda中的智能合約,是為驗證輸入狀態(tài)(單據(jù))是否有效和輸出狀態(tài)(單據(jù))簽發(fā)條件是否為真而設(shè)定的程序代碼,在Corda里統(tǒng)一命名為verify()函數(shù)。這種智能合約程序代碼在Corda中被轉(zhuǎn)譯為字節(jié)碼,在特定的JAVA虛擬機上運行。在“使用虛擬機”、“反映可編程的自動業(yè)務邏輯”等宏觀方面,和一般的智能合約大致相同。但是和其他區(qū)塊鏈平臺體系中的智能合約比起來,Corda中的智能合約也有這樣幾點不同:
首先,Corda中的智能合約是相當“碎片化的”,打散為一段段針對輸入輸出狀態(tài)(單據(jù))的“驗證程序”,由交易來驅(qū)動。也就是說,智能合約不是一段包含有多個交易環(huán)節(jié)的完整的“大程序”,而是由每個交易環(huán)節(jié)按需調(diào)用的“小程序”。這樣,對智能合約是否圖靈完備、是否隱含死循環(huán)、是否惡意消耗虛擬機計算資源等等的考量和擔憂,對這樣一個個碎片化的“驗證程序”來說就比較好把握。無論是直接上形式化驗證手段,還是上傳統(tǒng)的測試與代碼走查手段,對付這樣的碎片化智能合約,難度都會下降很多。
其次,Corda中的智能合約的程序代碼是和合約的法律文本一起,作為交易狀態(tài)的附件共同存證的。一旦出現(xiàn)與去年以太坊上The DAO被攻擊事件類似的情況,合約的法律文本在法律上具有更強更直接的法律效力,智能合約程序代碼中與合約的法律文本不相符的實現(xiàn),會被清晰地認定為程序設(shè)計缺陷(bug),而不會在“Code is law”的光鮮大旗下將錯就錯。
還有,Corda中的智能合約只是“驗證程序”,似乎只對轉(zhuǎn)入/轉(zhuǎn)出價值和簽發(fā)單據(jù)起到控制閥的作用,而不具備對價值轉(zhuǎn)入和轉(zhuǎn)出直接實施操作的身份與能力。真正進行價值轉(zhuǎn)入轉(zhuǎn)出操作的乃是“交易”。因此,單獨看這樣的智能合約,在“價值可編程”這一點上和通常的智能合約有不小的差距。但是如上所述,Corda中的“交易”與其他分布式賬本平臺上的“交易”相比,卻又多了一些價值再分配的潛在功能。Corda中的“流式架構(gòu)”再把多個交易串成流程,就可以實現(xiàn)相對復雜的價值再分配業(yè)務邏輯。所以總起來看,Corda中的“交易”、“智能合約”和“流式架構(gòu)”加起來,與其他分布式賬本平臺上通常的“智能合約”在表達能力和計算能力上才是大體相當?shù)摹?/p>
在Corda中,隱私保護的理念是貫穿始終的。Corda之所以長成現(xiàn)在這個樣子,與Corda所秉持的隱私保護理念有莫大的關(guān)系。Corda的隱私保護理念在落地為隱私保護措施的程序?qū)崿F(xiàn)的過程中,采用了以下兩項重要的隱私保護技術(shù)。
一是抽離(Tear-off)部分敏感內(nèi)容的類盲簽名技術(shù)。該技術(shù)采用把敏感字段和非敏感字段分組哈希,再分層構(gòu)建Merkel樹的方式,使得去掉敏感字段后,剩余的Merkel樹仍然具有樹狀結(jié)構(gòu)和針對非敏感字段的驗證價值,可在其基礎(chǔ)上達到類似盲簽名的效果。同時一旦發(fā)生法律糾紛,如已去除的敏感字段內(nèi)容被偽造,該Merkel樹還可用作鑒別證據(jù)真?zhèn)沃谩?/p>
二是復合簽名技術(shù)。該技術(shù)使用感知機模型,對多個簽名主體賦權(quán),并設(shè)置加權(quán)求和閾值。一旦一個指定群體中簽名的主體所占加權(quán)和超過閾值,則復合簽名生效。這個模型可以實現(xiàn)一組簽名的“與/或”邏輯組合,但在涉及“異或”這樣的邏輯組合時失效。
本人分析了各種隱私保護技術(shù)并將其投射到由“隱私保護強度”和“去中心化程度”組成的二位坐標平面。在該平面上,Tear-off和復合簽名都屬于在兩個維度間保持大體均衡的隱私保護策略。理想的(完美的)策略(如零知識證明、同態(tài)加密等)大都基于較為復雜的密碼學技術(shù),還沒有看到效率上能夠接近實用水平的工程技術(shù)實現(xiàn)。
監(jiān)管介入,體現(xiàn)在Corda的如下一些技術(shù)環(huán)節(jié):(1)許可環(huán)節(jié),可提出實名制要求、設(shè)置準入條件、通過證書和名字服務將監(jiān)管要求落地;(2)運營環(huán)節(jié),可賦予監(jiān)管節(jié)點訪問一切節(jié)點上本地數(shù)據(jù)庫的權(quán)限,獲取全部交易數(shù)據(jù),達到“看穿式”效果;(3)應急處置環(huán)節(jié),可賦予特定節(jié)點進行應急處置操作的特權(quán),包括但不限于暫停交易、糾正錯誤交易等。
運營控制的需求,Corda也給予了較為充分的考慮。Corda在流式架構(gòu)的設(shè)計中,對流程的實時監(jiān)控和展示給予了高度重視并給出了相應的接口。在Corda中,特定參與方名下的價值,并非只有該方的私鑰才能實現(xiàn)轉(zhuǎn)移。理論上,只要在業(yè)務上合規(guī)的前提下,設(shè)計合適的交易、合適的合約,具有應急處置操作特權(quán)的用戶同樣可以轉(zhuǎn)移他人名下的價值,以此來糾正錯誤交易。當然,這類面向應急處置操作的交易和合約必須嚴格限制其使用范圍,防止被濫用。
由于Corda是面向銀行間或銀行與其商業(yè)用戶之間的互操作場景的平臺,其對股票、債券等市場的運行控制沒有特別的考慮,在這方面可借鑒的內(nèi)容不多。
在Corda中,由于沒有統(tǒng)一總賬,每個“節(jié)點”必須自行存儲自己的交易數(shù)據(jù)。這就意味著,每個節(jié)點必須自行解決自身的網(wǎng)絡級、系統(tǒng)級、應用級、數(shù)據(jù)級的容災備份問題,否則,在需要出示單據(jù)時,上述任何一個級別出現(xiàn)不給力,都將導致重大事故。
在Corda中,任何一個“節(jié)點”都是和“身份”綁定的,而“身份”在數(shù)字世界的具體代表就是證書及私鑰。在這樣一個聯(lián)盟鏈中,私鑰和節(jié)點之間的關(guān)系是至關(guān)重要的。按照某些國家和地區(qū)的信息安全法律法規(guī),核心金融機構(gòu)的私鑰可能必須采用獨立于節(jié)點設(shè)備的物理介質(zhì)(類似U盾)的形式,采用指定的密碼學算法標準并且禁止私鑰在規(guī)定物理介質(zhì)之外存儲。人和私鑰在物理場景中的分離,私鑰信息在無人看管的節(jié)點機內(nèi)存儲,這都是私鑰安全的大忌。
反觀比特幣、以太坊等公鏈平臺,無人操作的挖礦/記賬節(jié)點上不存儲私鑰,隨同這些節(jié)點部署的智能合約也不使用私鑰,所有私鑰均部署于“端”,這已是一個常識性的問題?;谶@一點,很多人對于Corda的私鑰部署問題有所非議,甚至說Corda的設(shè)計者“外行”。個人認為,Corda針對的是金融機構(gòu)及其商業(yè)客戶組成的聯(lián)盟鏈,不存在礦池或者類似Fabric提供的本質(zhì)上是“軟件定義的區(qū)塊鏈”這種情況。這些都是用戶在物理上夠不著的公共服務設(shè)施,每家參與機構(gòu)自身的節(jié)點就部署在自己可控的區(qū)域之內(nèi)。私鑰安全在這樣的場景下是相對而言有保障的。
即便如此,也會提出一旦私鑰丟失,應該如何應對的問題。這個問題還可以進一步分解為“如何防止該用的人不能用”和“如何防止不該用的人試圖用”兩個子問題。在Corda中,前一個問題可以通過復合密鑰來解決(在主用私鑰和備用私鑰之間設(shè)置“或”邏輯),而后一個問題是否可以僅通過網(wǎng)絡訪問控制措施來解決,還是一個疑問。
這是一個爭議很大的問題。有人說,R3花了幾千萬美元,連個區(qū)塊鏈都做不出來,是個徹頭徹尾的失敗。這話太不公道。暫且不說人家的目標根本就不是做一個在數(shù)據(jù)結(jié)構(gòu)方面具有鏈式勾稽關(guān)系的基礎(chǔ)賬本,而是幫助金融機構(gòu)在合規(guī)合法的前提下建立可互操作的去中心化數(shù)據(jù)庫。評價一個分布式賬本項目是否成功,也不是僅有技術(shù)一個決定因素,甚至技術(shù)可能根本就不是一個決定因素。更何況Corda在技術(shù)架構(gòu)上還有那么多有特色的創(chuàng)新呢。這些技術(shù)上事情,回答前面幾個問題的時候都已經(jīng)把我的觀點差不多都講了,剩下一個軟件成熟度的問題我覺得就是一個熬時間的問題,目前除了比特幣之外別人也沒好到哪里去。現(xiàn)在讓我們撇下技術(shù)來談業(yè)務和商業(yè)模式。
首先談業(yè)務。不可否認的是,Corda是所有的分布式賬本平臺里“長得最像銀行的”。它出自銀行業(yè)務大咖們之手,在架構(gòu)設(shè)計上充分考慮了商業(yè)銀行與商業(yè)銀行之間,商業(yè)銀行與它們的商業(yè)客戶之間業(yè)務上互聯(lián)互通互操作的復雜需求,特別是對銀行這類機構(gòu)內(nèi)部涉及合法合規(guī)穩(wěn)健運營的要求有著十分深刻的理解。這種與業(yè)務需求的得天獨厚的貼近是令其他分布式賬本項目十分羨慕的。
但是,Corda的最終成功意味著包含銀行和銀行的商業(yè)客戶在內(nèi)的一群大機構(gòu)基于分布式賬本技術(shù)實現(xiàn)互操作生態(tài)的落地。這絕不是一件小事情。以本人的經(jīng)驗而言,構(gòu)建一個一強多弱,一大N小的生態(tài),在聯(lián)盟鏈里成功率是最高的。多強格局是最難搞定的。然而,Corda從一開始的定位就無法擺脫這個最難搞定的目標,多家銀行加上它們的商業(yè)客戶,這樣生態(tài)就算是成熟技術(shù)都很難伺候,遑論創(chuàng)新成長中的技術(shù)了!
所以,Corda是在為一個最難搞定的聯(lián)盟形態(tài)提供技術(shù)平臺,這是一條最艱難的道路。在這條道路上,R3聯(lián)盟的同行們做了非常有意義的探索和實踐,取得了階段性的成果。當然,他們的努力也招來了一些非議,R3聯(lián)盟本身也遭到了其個別創(chuàng)始成員的“退群”。如果把Corda的成功界定為把這個最難搞定的生態(tài)建起來,用平臺支撐它轉(zhuǎn)起來,那確實這條道路既漫長、又兇險,失敗的可能性不小。但我個人判斷,失敗的原因只有極小的可能性是因為技術(shù)!即使Corda失敗了,后來的成功者也很難無視Corda在探索與實踐中形成經(jīng)驗和教訓。在這個意義上,無論Corda將來是先驅(qū)還是先烈,他們在技術(shù)上的探索與實踐都是十分值得我們尊敬的。
相關(guān)文章:
阿里終于用區(qū)塊鏈打假了,聯(lián)合普華永道打擊假食品
觀點 | 99%區(qū)塊鏈公司會死掉,1%的幸存者都是區(qū)塊鏈+
觀點 | 加密數(shù)字貨幣不會成為主流,區(qū)塊鏈是RegTech不是FinTech
IBM攜手全球大宗商品巨頭托克,打造區(qū)塊鏈原油貿(mào)易融資平臺
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。