0
本文作者: 张利 | 2017-03-31 17:53 |
雷锋网AI金融评论按:本文作者白硕,ChinaLedger技术委员会主任,上海证券交易所前总工程师,中科院博士生导师,资深Fintech专家。本文经作者授权转载。
关于Corda是什么,我们有三句话:首先,Corda是一个分布式账本;第二,Corda是一个去中心化数据库;第三,Corda是一个“受区块链启发的”技术平台。
Corda是一个分布式账本,这句话很好理解,一笔交易多处记载、同步维护么。但是这个分布式账本与我们看到的其他分布式账本有很大一个不同,就是它并没有一个统一的基础账本,“多处”复制并不是“全网”复制。没有基础账本也就意味着没有统一的全局不可更改的事件时序,没有一个不可逆转的“时间之矢”。时序只是在需要发生与时间相关的逻辑关系时才出场,只是一个“偏序”。Corda的时序并不追求时点的精确性,而只是侧重时段的包含、覆盖、接续、交叉等关系。
Corda是一个去中心化的数据库,这点我们需要强调。在没有全局统一账本的大前提下,Corda的本地数据库在数据的记录方面发挥着至关重要的作用,甚至Corda还专门预留了SQL接口。但是,这个本地数据库是受到多交易主体之间的业务关系约束的。约束体现在:
交易相关人必须保证关于交易的数据记录是一致的,如不一致,首先背离共识的一方将无法在后续的交易中自证清白。
交易相关人必须保证,只有在经过验证表明,双方关于交易达成的输入输出状态的检验条件全部符合后,交易方能放行。
交易相关人必须把交易的输出状态存储好、组织好,在后续遇到必须出示这笔交易的输出状态作为证据的一部分的时候,不能掉链子。所以,即使没有全局统一账本,一个逻辑上的“节点”(可以视为与身份一一对应),按照高等级关键业务系统的默认部署方式,在物理上应该包含相应的冗余备份节点,从网络、主机、存储、应用几个方面做好容灾准备。
按照R3内部人士的话说,Corda是一个“受区块链启发的(blockchain-inspired)”平台。我们看到,区块链的启发确实弥漫在Corda各处。密码学、分布式系统、P2P网络不仅是区块链的基础技术,也同样是Corda的基础技术。在较差的信任环境下达成较好的信任效果,不仅是区块链的宗旨和追求,也同样是Corda的宗旨和追求。但是,人们有权利选择不同的锤子来砸细节略有差异的钉子。在金融机构严谨的合规氛围中,Corda的开发者们发现套用现有的区块链技术无法达到业内的合规标准,又等不及现有区块链技术的后续优化,只好被逼采用目前公布出来的技术架构。他们出于对区块链业界先贤们的尊重,称Corda为“受区块链启发的(blockchain-inspired)”平台,是比较实事求是的。
关于Corda“不是什么”,我们可以很明确地断定:Corda不是一个“供所有人见证所有交易的”平台。如果“所有人见证所有交易”是成为区块链的不可缺少的特质,那么Corda就确实不是区块链。但是这只是表面,不是精髓。“在较差的信任环境里达成较好的信任效果”才是区块链的精髓。所以,做到“所有人见证所有交易”只是形似,做到“在较差的信任环境里达成较好的信任效果”却是神似。在这一意义上,说Corda“不是区块链,胜似区块链”也不为过。
Corda采用了比特币的UTXO模型而不是以太坊的“账户-余额模型”,这一点是值得赞许的。UTXO模型与账户-余额模型最大的不同点,就是它直接记载原始事实,而不是根据原始事实推断出来的余额。不错,余额往往直接可用,但余额与原始事实毕竟隔了一层甚至多层。从以太坊的经验看,仅凭余额状态的日志,有时不足以完整解释余额状态何以发生。所以,以注重原始单据合法合规性的银行应用为背景的Corda,选择UTXO模型来组织基础数据,是完全可以理解的。
然而,关于Corda所使用的UTXO模型,我们要说的还不止这些。我们发现,Corda所使用的UTXO模型,是一种扩展了外延的UTXO模型。它不仅可以描述价值转移,还可以描述准价值、非价值类型的单据的鉴别、确认、记录和以此为基础的流程展开。以信用证应用为例,信用证所依据的输入/输出单据中,有些就完全可以是非价值类型的,比如到货的确认单据。无论是金融流程中的各类单据、证明,还是金融业务中的指令、操作,都可以表示为在这一扩展意义下的UTXO。交易,就是一组经验证合法合规的UTXO(扇入),在相应业务逻辑条件满足时映射为另一组即时生效、合法合规的UTXO(扇出)的函数。有人说,把Corda的交易串接起来,就是一个典型的基于函数程序设计的流式结构(请熟悉大数据处理流式架构的读者自行参照Spark)。了解了Corda对UTXO外延的这番扩展,可知此言不虚。
图谱(Graph),在Corda中起着核心的作用。它的作用,用大白话说就是“自带证据、自证清白”。
因为没了统一总账,没了“所有人见证所有交易”的机制,发起交易并主张预期交易结果的人必须有相应的替代机制去推进交易的达成,具体落地就体现为“图谱”。图谱把需要自带的证据组织成有向无环图(DAG)结构,交易对手方或流程下游的主体可沿着图谱的走向一一验证。理论上,要想验证一笔交易,不仅要验证直接证据,还要验证产生直接证据的各层间接证据,乃至一直追溯到源头。
为什么一定要间接证据?因为从逻辑因果的角度来看,“仅双边”的交易毕竟只是极少数。如果B向C的转账必须以A向B的转账为前提,那么A向B的转账就绝不只是A和B之间的私事,B必须让C信服A向B的转账不是杜撰出来的。扩大到“有限多边”,间接证据就一定要进来。
对于图谱机制,我是听到过一些微词的。总起来说就是认为它的计算和存储开销可能过大。但这和Corda把交易的知晓和见证范围最大限度地压缩到交易的直接相关人的策略是分不开的。笔者发现,在目前技术条件下,去中心化、缩小交易的知晓见证范围和缩小计算存储开销,三个目标最多只能达成两个,这跟著名的CAP定理颇有些相似。这就是为什么如果从“有限多边”进一步扩大到“任意多边”,纯粹基于图谱自证的方案已难以“清一色地”贯彻到底,半路又杀出个“公证人”的原因。
公证人(Notary),是Corda区别于其他分布式账本平台的最大不同点,某种意义上可以认为是一笔特定交易的交易双方共同认可的可信第三方。这在传统银行业务中本不是问题,但是在分布式账本平台当中,确实显得另类。有人批评说公证人的引入使得本来从技术上可以完全去除可信第三方的区块链技术又倒退回了必须依赖可信第三方的中心化局面,这话听上去不无道理。但是,Corda中的公证人和传统意义上的可信第三方,还是有很大不同的。
第一,Corda中的公证人,实际上是一个有签发单据权限(也就是说,拥有私钥)的节点。这个节点虽不排除有时不得不采用“人肉”操作,但一般是自动化的程序,可以说除了私钥,公证人的所有操作依据都是规范透明的。传统意义上的可信第三方则很难做到这一点。
第二,Corda中的公证人,是各交易参与方共同指定并明确认可的,其签发的输出单据对各交易参与方都有约束力。你可以选择不交易,但是一旦必须交易,选择相信公证人,还是要比选择把一切历史旧账的细节都暴露给并不怎么熟悉的交易对手方要靠谱一些。
第三,Corda中的公证人其实不是“一个人”或“一个节点”,而是需要达成共识的“一群人”或“一群节点”,所采用的共识机制是可插拔的,文件上说是PBFT,也不排除作为PBFT简化和弱化版本的RAFT。不管强弱,公证环节总还是受到监督制衡的。
所以,Corda中的公证人,客观性和容错能力上还是远强于传统意义上的可信第三方的。
Corda中的智能合约,是为验证输入状态(单据)是否有效和输出状态(单据)签发条件是否为真而设定的程序代码,在Corda里统一命名为verify()函数。这种智能合约程序代码在Corda中被转译为字节码,在特定的JAVA虚拟机上运行。在“使用虚拟机”、“反映可编程的自动业务逻辑”等宏观方面,和一般的智能合约大致相同。但是和其他区块链平台体系中的智能合约比起来,Corda中的智能合约也有这样几点不同:
首先,Corda中的智能合约是相当“碎片化的”,打散为一段段针对输入输出状态(单据)的“验证程序”,由交易来驱动。也就是说,智能合约不是一段包含有多个交易环节的完整的“大程序”,而是由每个交易环节按需调用的“小程序”。这样,对智能合约是否图灵完备、是否隐含死循环、是否恶意消耗虚拟机计算资源等等的考量和担忧,对这样一个个碎片化的“验证程序”来说就比较好把握。无论是直接上形式化验证手段,还是上传统的测试与代码走查手段,对付这样的碎片化智能合约,难度都会下降很多。
其次,Corda中的智能合约的程序代码是和合约的法律文本一起,作为交易状态的附件共同存证的。一旦出现与去年以太坊上The DAO被攻击事件类似的情况,合约的法律文本在法律上具有更强更直接的法律效力,智能合约程序代码中与合约的法律文本不相符的实现,会被清晰地认定为程序设计缺陷(bug),而不会在“Code is law”的光鲜大旗下将错就错。
还有,Corda中的智能合约只是“验证程序”,似乎只对转入/转出价值和签发单据起到控制阀的作用,而不具备对价值转入和转出直接实施操作的身份与能力。真正进行价值转入转出操作的乃是“交易”。因此,单独看这样的智能合约,在“价值可编程”这一点上和通常的智能合约有不小的差距。但是如上所述,Corda中的“交易”与其他分布式账本平台上的“交易”相比,却又多了一些价值再分配的潜在功能。Corda中的“流式架构”再把多个交易串成流程,就可以实现相对复杂的价值再分配业务逻辑。所以总起来看,Corda中的“交易”、“智能合约”和“流式架构”加起来,与其他分布式账本平台上通常的“智能合约”在表达能力和计算能力上才是大体相当的。
在Corda中,隐私保护的理念是贯穿始终的。Corda之所以长成现在这个样子,与Corda所秉持的隐私保护理念有莫大的关系。Corda的隐私保护理念在落地为隐私保护措施的程序实现的过程中,采用了以下两项重要的隐私保护技术。
一是抽离(Tear-off)部分敏感内容的类盲签名技术。该技术采用把敏感字段和非敏感字段分组哈希,再分层构建Merkel树的方式,使得去掉敏感字段后,剩余的Merkel树仍然具有树状结构和针对非敏感字段的验证价值,可在其基础上达到类似盲签名的效果。同时一旦发生法律纠纷,如已去除的敏感字段内容被伪造,该Merkel树还可用作鉴别证据真伪之用。
二是复合签名技术。该技术使用感知机模型,对多个签名主体赋权,并设置加权求和阈值。一旦一个指定群体中签名的主体所占加权和超过阈值,则复合签名生效。这个模型可以实现一组签名的“与/或”逻辑组合,但在涉及“异或”这样的逻辑组合时失效。
本人分析了各种隐私保护技术并将其投射到由“隐私保护强度”和“去中心化程度”组成的二位坐标平面。在该平面上,Tear-off和复合签名都属于在两个维度间保持大体均衡的隐私保护策略。理想的(完美的)策略(如零知识证明、同态加密等)大都基于较为复杂的密码学技术,还没有看到效率上能够接近实用水平的工程技术实现。
监管介入,体现在Corda的如下一些技术环节:(1)许可环节,可提出实名制要求、设置准入条件、通过证书和名字服务将监管要求落地;(2)运营环节,可赋予监管节点访问一切节点上本地数据库的权限,获取全部交易数据,达到“看穿式”效果;(3)应急处置环节,可赋予特定节点进行应急处置操作的特权,包括但不限于暂停交易、纠正错误交易等。
运营控制的需求,Corda也给予了较为充分的考虑。Corda在流式架构的设计中,对流程的实时监控和展示给予了高度重视并给出了相应的接口。在Corda中,特定参与方名下的价值,并非只有该方的私钥才能实现转移。理论上,只要在业务上合规的前提下,设计合适的交易、合适的合约,具有应急处置操作特权的用户同样可以转移他人名下的价值,以此来纠正错误交易。当然,这类面向应急处置操作的交易和合约必须严格限制其使用范围,防止被滥用。
由于Corda是面向银行间或银行与其商业用户之间的互操作场景的平台,其对股票、债券等市场的运行控制没有特别的考虑,在这方面可借鉴的内容不多。
在Corda中,由于没有统一总账,每个“节点”必须自行存储自己的交易数据。这就意味着,每个节点必须自行解决自身的网络级、系统级、应用级、数据级的容灾备份问题,否则,在需要出示单据时,上述任何一个级别出现不给力,都将导致重大事故。
在Corda中,任何一个“节点”都是和“身份”绑定的,而“身份”在数字世界的具体代表就是证书及私钥。在这样一个联盟链中,私钥和节点之间的关系是至关重要的。按照某些国家和地区的信息安全法律法规,核心金融机构的私钥可能必须采用独立于节点设备的物理介质(类似U盾)的形式,采用指定的密码学算法标准并且禁止私钥在规定物理介质之外存储。人和私钥在物理场景中的分离,私钥信息在无人看管的节点机内存储,这都是私钥安全的大忌。
反观比特币、以太坊等公链平台,无人操作的挖矿/记账节点上不存储私钥,随同这些节点部署的智能合约也不使用私钥,所有私钥均部署于“端”,这已是一个常识性的问题。基于这一点,很多人对于Corda的私钥部署问题有所非议,甚至说Corda的设计者“外行”。个人认为,Corda针对的是金融机构及其商业客户组成的联盟链,不存在矿池或者类似Fabric提供的本质上是“软件定义的区块链”这种情况。这些都是用户在物理上够不着的公共服务设施,每家参与机构自身的节点就部署在自己可控的区域之内。私钥安全在这样的场景下是相对而言有保障的。
即便如此,也会提出一旦私钥丢失,应该如何应对的问题。这个问题还可以进一步分解为“如何防止该用的人不能用”和“如何防止不该用的人试图用”两个子问题。在Corda中,前一个问题可以通过复合密钥来解决(在主用私钥和备用私钥之间设置“或”逻辑),而后一个问题是否可以仅通过网络访问控制措施来解决,还是一个疑问。
这是一个争议很大的问题。有人说,R3花了几千万美元,连个区块链都做不出来,是个彻头彻尾的失败。这话太不公道。暂且不说人家的目标根本就不是做一个在数据结构方面具有链式勾稽关系的基础账本,而是帮助金融机构在合规合法的前提下建立可互操作的去中心化数据库。评价一个分布式账本项目是否成功,也不是仅有技术一个决定因素,甚至技术可能根本就不是一个决定因素。更何况Corda在技术架构上还有那么多有特色的创新呢。这些技术上事情,回答前面几个问题的时候都已经把我的观点差不多都讲了,剩下一个软件成熟度的问题我觉得就是一个熬时间的问题,目前除了比特币之外别人也没好到哪里去。现在让我们撇下技术来谈业务和商业模式。
首先谈业务。不可否认的是,Corda是所有的分布式账本平台里“长得最像银行的”。它出自银行业务大咖们之手,在架构设计上充分考虑了商业银行与商业银行之间,商业银行与它们的商业客户之间业务上互联互通互操作的复杂需求,特别是对银行这类机构内部涉及合法合规稳健运营的要求有着十分深刻的理解。这种与业务需求的得天独厚的贴近是令其他分布式账本项目十分羡慕的。
但是,Corda的最终成功意味着包含银行和银行的商业客户在内的一群大机构基于分布式账本技术实现互操作生态的落地。这绝不是一件小事情。以本人的经验而言,构建一个一强多弱,一大N小的生态,在联盟链里成功率是最高的。多强格局是最难搞定的。然而,Corda从一开始的定位就无法摆脱这个最难搞定的目标,多家银行加上它们的商业客户,这样生态就算是成熟技术都很难伺候,遑论创新成长中的技术了!
所以,Corda是在为一个最难搞定的联盟形态提供技术平台,这是一条最艰难的道路。在这条道路上,R3联盟的同行们做了非常有意义的探索和实践,取得了阶段性的成果。当然,他们的努力也招来了一些非议,R3联盟本身也遭到了其个别创始成员的“退群”。如果把Corda的成功界定为把这个最难搞定的生态建起来,用平台支撑它转起来,那确实这条道路既漫长、又凶险,失败的可能性不小。但我个人判断,失败的原因只有极小的可能性是因为技术!即使Corda失败了,后来的成功者也很难无视Corda在探索与实践中形成经验和教训。在这个意义上,无论Corda将来是先驱还是先烈,他们在技术上的探索与实践都是十分值得我们尊敬的。
相关文章:
观点 | 加密数字货币不会成为主流,区块链是RegTech不是FinTech
雷峰网版权文章,未经授权禁止转载。详情见转载须知。