R3和Corda
说起Corda,不得不提R3。R3的全名是R3CEV。是一家成立于2015年9月的一家创业公司。
其中:
- C 即加密技术。代表全球金融市场中加密技术和分布式总账智能协议。
- E 即交易平台。代表创新的资产交易解决方案。
- V 即风险投资,代表区块链早期创业投资机会。
以此来看,金融市场、交易所、投资,都是它要做的事情。R3最终目标是利用区块链技术,解决金融领域的实际问题,来完成区块链的应用落地和商业化。
说是创业公司,但是它背后的创始机构可是大有来头,公开资料显示,R3共有9家创始机构:
- Barclays,巴克莱银行
- BBVA,西班牙对外银行
- Commonwealth Bank of Australia, 澳洲联邦银行
- Credit Suisse, 瑞士信贷银行
- Goldman Sachs,高盛
- J.P. Morgan,摩根大通
- Royal Bank of Scotland, 苏格兰皇家银行
- State Street, 道富银行
- UBS,瑞银
可以说这些高大上的名字,个个如雷贯耳,听起来也都是富得流油。实际上,到目前为之,所谓的R3联盟已经吸引了300多金融机构入驻。其中,有23家属于全球系统重要银行(G- SIB),也就是俗称的“大到不能倒的银行”。仔细研究G- SIB列表会发现除了中国的几家宇宙大行不在R3中,剩下的世界顶级银行几乎都加入了R3联盟。我们国家的中国平安、友邦保险、招商银行、民生银行等也加入到了R3联盟中。可以说,R3联盟俨然成了全球金融领域的行业联盟,势头格外强劲。
R3创始人、首席执行官David Rutter有30年华尔街从业经验,曾经是电子经纪商ICAP的老大。联合创始人、首席财务官Jesse Edwards曾是一个投资银行家,在投行生涯中,服务了多家大型国际金融机构和金融技术公司。联合创始人、首席运营官 Todd McDonald在渣打银行有14年工作经验。三位创始人都是在传统金融信息化行业老资历。R3能有今天的成绩,创始人的背景和人脉也是重要原因之一。
R3成立之初,最主要的工作是调研现有的区块链技术怎么跟金融领域的业务特点相结合,于是做了很多区块链测试的工作,测试的对象包括以太坊、Chain、 Eris Industries、 IBM 和Intel的产品。但是经过大量的测试之后,R3认为现有的区块链技术,并不能适应金融业务的特点,所以着手研发自己的区块链技术和产品,于是就有了Corda.
为什么会有Corda
Corda首先是一个分布式账本,分布式账本是区别于中心化账本的提法。中心化的账本,顾名思义,所有账本存储在一个逻辑上的中心服务器上(中心化的服务器并不是只有一个台机器,实践中服务器也是集群化的、分布式的,但是逻辑上归一方所有)。理论上,这个账本可以被中心服务器的所有者随意删改。分布式账本则不同,交易总账是存储于系统参与者各自的服务器上。这就使得市场中的一部分不完全信息博弈将变成完全信息博弈,没有任一一方可以随意篡改账本,监管机构将可以根据总账进行审计。从更高级的层面来说,可以打通各个金融机构之间的壁垒,使得账本互通,所有金融机构使用同一个账本。这就使得离柜市场和场内交易的边界将变得模糊。运营数据分析将会更加高效可靠。
在技术层面上,Corda首先定位为一个“去中心化数据库”,这一点对于理解Corda的设计和实现理念是非常重要的。
首先,在概念层面,去中心化数据库与传统的分布式数据库有着重要的区别:分布式数据库仍然是一个中心化的系统,其服务目标是接收客户端的消息来存储数据,重点关注的是解决系统内部各个节点之间数据同步的问题。去中心化数据库,则是相互独立的参与方各自的私有数据库,在一定前提条件下同步某一方面的数据,如果参与方可能有造假的可能,则无法使用分布式系统中标准的数据同步算法。因此,两类系统的关注点、设计和实现模式完全不一样。。
其次,在实现层面,去中心化数据库并不限于一种特定的技术:比特币使用的POW式的区块链技术,可以认为是去中心化数据库的一种实现方式,也是现阶段获得最多认可的一种方式,但不是唯一的方式。从这个角度讲,Corda通过一系列的设计,给我们带来了去中心化数据库的另一种实现方案,这种实现方案是为了金融业专门设计的“类区块链”系统。所谓“类区块链”的意思,就是Corda并没有区块链的结构,但这却是Corda系统的核心价值。
交易的可见性与隐私性
Corda中,每一个节点并不是像比特币那样保存账本的完整副本,节点只能看到网络中与自己相关的交易,这无疑意味着比传统的区块链更好的隐私。具体地说,节点能看到自己直接涉及的交易,以及需要验证这些交易的前置交易。举例来说,如果小丽创建了一个交易,消耗了她15元,同时转给小明10元和转给小强5元。在小丽向小明发送此交易后,小明可以检查交易的正确性和授权,验证输入和输出是否平衡以及小丽的签名,也就说这笔交易对小明可见。仅可见这笔交易本身还不够。小明还需要验证小丽的10元输入状态是否确实存在,这意味着我需要查看创建此交易状态的其他交易,并检查这些交易是否正确和授权。具体来说,如果小丽的这10元钱来自于小芳转给她的20元,那么小明也可以看到小芳转给小丽的20元交易。依此类推,一直回到创建资产的原始“发行”交易。同时还需要验证的交易数量取决于资产转手的次数和向后分支的程度。
当Corda节点处理交易时,它必须下载并验证该交易的所有祖先。因此,如果交易“树大根深”,新的交易可能需要验证大量的祖先,从而触发Corda的可伸缩性问题。此外,如果交易包含高度杂交,则新交易的祖先可能包括网络中的许多或大多数过去的交易。在这种情况下,Corda在隐私方面几乎没有什么优势。
相比之下,如果交易的历史很“浅”,并且包含许多不相互影响的断开的交易链,Corda的优势就凸显出来了。节点永远不需要同时验证大量交易,并且可以对与其自身无关的大多数交易保持沉默。如果用作财务分类账,我们可能会说Corda非常适合高度分散的市场,其资产很少易手。
可见,Corda还远远没有解决交易的机密性问题,因为节点仍然会看到一些与他们并不直接相关的交易。Corda的开发人员已经意识到了这个问题,提出了一些简单的策略。例如每个实体使用多个公钥或通过将资产返还给发行人进行重新发布来降低可追溯性(类似于加密货币“硬币混合器”)。它还提到了更先进的未来可能性,例如使用类似Tor的匿名化网络来隐藏参与者的IP地址,并利用零知识证明或英特尔的安全区域来验证交易而不泄露其内容。虽然所有这些建议都是有效的,但它们也可以使用输入输出模型应用于常规区块链,并且确实存在于加密货币中,例如Dash,Zcash和Verge。因此,Corda在机密性方面唯一独特的优势仍然是降低了交易可见性 ——而不是消除的交易泄露的风险—— 这是一个不完整的解决方案。
公证人机制
公证人是Corda网络交易验证和确认的核心机制,这个机制避免了交易信息在全网广播,这主要是为了支撑交易信息“适度可见”的能力。另一个目的是将共识机制与交易流程分开,变成一种标准服务,从而可以采用不同形态的共识实现方式,而非绑定到某种特定算法上。
公证人是有一个独立的、交易双方(多方)都信任的角色,可以确认交易的有效性。交易的有效性是指某项输入数据没有曾经或正在成为其他交易的输入,也就是保证没有发生“双花”。从这个角度讲,公证人机制就是比特币的共识机制——区块链——的替代物。从根本上来说,,公证人机制能够替代区块链的POW共识机制,还是Corda的定位所决定的。Corda并不是一个开放式的网络,而是一个半信任的网络,参与方和节点的加入都是可以事先经过审核的,这就很大程度上降低了攻击发生的概率。即使存在恶意攻击,参与方也需要付出声誉的成本和相应的法律风险,这跟比特币这种完全开放式的匿名网络是完全不同的。
事实上,基于公证人进行交易确认的方式,最早是InterLedger提出的——由于InterLedger的目标是跨账本的交易,一个“类区块链”账本系统内部的节点共识算法是无法应用在不同账本之间的,为此必须有账本间认可的(半)信任中介来承担交易确认的职责,Corda的技术白皮书中也确认其公证人的概念来自InterLedger。
公证人的具体实现机制比较简单,交易参与方将交易发送给公证人。公证人接收到交易后,根据自己以往记录的所有交易的输入,查询这个交易的输入是否曾经出现在另一个交易的输入项当中。如果确认这个交易的输入项都没发生过“双花”,则可以签署交易,此时交易就达到了最终生效(finality)的状态,也就完成了。如果公证人判断交易无效(其实就是发生了“双花”),就会返回异常,交易也就终止了。从这里也可以看出,使用公证人来做交易确认,本质上是要把交易的所有输入项发给他——由于系统的状态都是不可变的,所以只发输入项就够了。Corda网络也要求一个交易的输入项必须指向同一个公证人,也就是这个交易要提交验证的公证人。如果有些状态不是指向这个公证人,则首先要对这些状态执行公证人变更交易来实现转移。
此外,所谓的公证人服务,完全可以是一个集群式的网络,其中有多个公证人节点,但是他们依赖同一个数据库来存储信息,或者依赖一个能保证一致性的分布式数据。换句话说,只有各自独立运作,并不依赖一套数据存储的公证人,才能被认为是不同的公证人服务。上面提到的状态在公证人之间转移,指的是真正各自独立公证人之间的关系。
共识机制
某个公证人本身作为一个分布式系统,节点之间受到网络的影响,可能存在拜占庭失效,这是一个技术问题。各个节点之间需要达到状态同步或者数据一致,需要一个BFT的算法,Corda的共识机制讨论的是这个问题。目前区块链领域讨论最多的共识问题实际上指的多个真正相互独立的公证人,如果要共同参与某个交易,由于各自的信息掌握并不完整, 如何来达成共识即这个交易没有发生“双花”?这是一个很明显的歧义。网上有个精彩评论从另一个角度谈到了这一点:Corda网络的公证人可以有很多实现,其中比特币就可以作为公证人机制的实现——一个全球唯一的、相对低速的Notary;反过来也可以说,区块链就是比特币网络的全局唯一公证人。
由此可见,在Corda网络中,人机制的有效性是严格限定在其覆盖范围内的,更大范围的交易验证,必须依赖于一个更广范围的人的建立,或者多个原本无关的人的协同作业。而这一点,目前在Corda网络中没有给出参考实现或者实现方面的指导意见,因此Corda网络中人的使用、迁移和共识机制在实现层面仍有未解决/论述的问题。
数据存储
Corda数据存储方面的架构可以说是传统Java程序员的福音,它支持通过ORM的方式,将交易数据存储到标准关系型数据库中,并且是通过标准JPA接口。具体实现方面,Corda允许通过配置JDBC连接到任何标准数据库上。
从底层架构的角度看,Corda基本就是为了方便企业应用,完全开放了底层数据结构。一个金融机构完全可以通过把Corda的数据和自身业务数据放在一个数据库里的方式,实现数据层面的直接打通——通过SQL JOIN的方式对两部分数据进行统一查询。Corda的技术白皮书中对这种数据整合方式也是完全支持和鼓励的,明显是作为系统设计的一个目标,这与Corda的总体目标确实是一致的,也说明Corda的设计者们对于企业在采纳一个新的系统时所关注的应用整合场景非常了解。
Corda当中的“钱包”称为Vault(保险箱),就是存储了所有交易的实际资产信息的地方。如上所述,保险箱作为节点的一部分,也是完全基于这个JPA机制实现数据存储的。这样做的好处就是上面所说的,企业完全可以在数据层面将内部信息系统与Corda的保险箱打通,通过各种成熟的SQL查询模式,来实现应用整合,提升整个业务流程的开发效率,降低数据转移、核对等成本。
Corda 的优势
第一是性能好。在区块链领域,大家在绞尽脑汁比拼TPS时,Corda因为没有采用区块链的链式结构,很多“类区块链”系统一样,具有很高的tps。查询和写入性能也会相应高出很多。
第二是对金融业务的支持性高。Corda设计的时候考虑到了适配金融领域的多项典型业务,包括但不限于银行间转账,衍生品交易,货币基金,资产转移等。这种对业务场景的深刻考虑,使得开发者在面对具体业务的时候,可以快速部署Corda的应用。
Corda 存在的问题
第一是与实际的业务需求耦合度过高。Corda是专门为金融领域的业务而设计的,这种设计某种程度上屈从于现有金融业的业务模式,是一种“根据很多客户提出需求进行设计”产生一种奇怪的产品。这种设计理念不能说它不好,但是不可否认的是,可能会因为外部环境的变化而失去生命力,开发过程中也容易纠结于无法统一各种复杂情况而陷入停滞,优劣参半。
另一方面的问题是:相较于其宏伟的蓝图,Corda很多具体实现的细节层面还略显初级。比如上文提到的隐私性的保护。当然,我们了解,除了以太坊之外,其他的类区块链系统的实现也都还处于非常初级的阶段,并不一定比Corda更完善。但是,由于Corda在去中心化数据库的核心理念——共识机制(公证人)方面的“创新”,使得其这方面的实现必然更加为人们所关注。而恰恰是由于公证人机制,导致Corda面对了很多“公证人”权力过大的质疑。“如果公证人节点作恶怎么办”这个问题一直是Corda无法直面的质疑。
最后,Corda中的保险箱是存储在传统的数据库中,如果保险箱数据丢失,如何恢复将是一个特别大的难题。不同于开放的公链系统,Corda是一个准入式的网络,如果一个节点的保险箱出现问题,整个网络的稳定性和健壮性将会面临很大的考研。
Corda存在的意义
尽管对Corda的批评声音不绝于耳,但是我更愿意以一种积极的心态来看待这一技术。我们可以把Corda看做金融业务的一次渐进式升级,而不是专注于与区块链的比较。我们可以将“公证人”视为一个新型的“托管人”,这一切就看起来很有进步意义了。 在传统的金融业务中,中介机构扮演了一个重要的角色,我们的资产托管在中介机构之中,也在中介机构之间进行流转。实际上,从我们把钱存到中介机构到以现金形式取出来,中介机构对我们的资产具有支配权。Corda的出现改变了这一点,我们仍然需要一个托管人,但是这个托管人没有权力支配我们的资产,只对参与方之间的交易有签署的权力。这是一个巨大的进步,让资产的所有者不需要向中介机构让渡资产的支配权来进行资产的流转。
这是Corda带给我们的进步。
总结
如果我们想要持怀疑态度,我们可能会说Corda的团队设定了一项不可能完成的任务,设计一种适合银行资的区块链。但是区块链相对于集中式数据库的主要好处是去中介,这是以降低机密性为代价的。对于通过充当中间人赚钱并且对隐私高度敏感的金融机构而言,这种权衡怎么能有意义呢?从这个角度来看,人们可能会称颂Corda是一个英雄但最终不能令人满意的妥协,即R3成员要求做区块链的事情,以及它们存在的商业和监管限制。
一个好的类区块链/去中心化数据库系统,应该适度设计,具有一定的简单性:最主要的是将P2P网络、交易签名验证、拜占庭容错与补偿等核心机制进行整合,形成一个边界清晰的系统。在此基础上,如果特别关心性能、信息适度可见等特性,则可以引入Corda或者其他系统在这方面的设计理念进行扩充。重要的是,将上述特性在系统内部给出完善的实现。通过这样的方式,将可以构建出新一代面向价值转移的互联网基础设施,将分布式计算的能力发挥到一个新的层次。