R3-CEV 因为联结了42家银行金融机构研究区块链,它的一举一动备受瞩目。这次是官方首次披露他们的系统 Corda 的相关细节,Corda 宣称的去「区块链」概念博人眼球,系统设计上确实有许多区别于区块链的点。通篇读下来发现 CTO Brown 讲述团队在设计这个系统的背后思考,对于国内参与金融机构区块链研究以及构造联盟链的参与者,也是颇具价值。
正如「Bloomberg」今早所报道的,我在这非常荣幸公布 R3 及其合作银行们正在为金融服务所研发的分布式账本:Corda.
过去的六个月,我的团队以及 R3 联盟参与者一起,从头打造一个「分布式账本」平台原型,它是为传统金融机构间管理「金融合约」 而特别打造的。对于 James Carlyle (首席工程师),Mike Hearn(平台开发主管)为首的团队所取得的进展,我感到特别兴奋,是时候跟大家分享一些细节了。
Corda:用以记录和管理「金融合约」的分布式账本
Corda 是一套分布式账本系统,用来记录、管理和同步传统金融机构间的「金融合约」。它很大程度上受启发于「区块链」系统,但是排除了一些不适合银行业应用场景的设计思路。
Corda 的关键特性包括:
- Corda 没有采用全局共享数据:即只有在合约范围内的合法参与主体才可见;
- Corda 没有中心控制节点来干预参与主体之间的流程;
- Corda 能就主体之间的单笔交易(这样的粒度)取得共识,而非系统级别;
- Corda 可以引入监管和监督节点;
- Corda 交易的确认由交易参与方完成,而不是由其它很多非相关的验证者确认;
- Corda 支持多种「共识机制」
- Corda 会明确记录「人类语言的法律文件」与「机器智能合约代码」之间的关联;
- Corda 由工业级别的工具打造;
- Corda 没有原生的「加密数字货币」;
Corda 是我们和银行联盟成员们一起,反复研究需求,不断迭代原型的技术成果,待它再渐进成熟一点,我们会开放源代码。
接下来,我还想跟大家分享一些我们倍受影响的观点。为什么我们要打造 Corda?为什么我们会做这样的设计决策?它的代码什么时候能让大家审阅或者打造应用?它与其它平台和项目之间的关系?
思考历程
当我2015年9月离开 IBM 加入 R3,我强迫自己停下来,开始思考。「区块链」这辆「花车」正在全速前进,当时我刚被委任到一个区块链金融项目做 CTO,但是有个问题一直困扰着我... 如何避免陷入过度迷信「区块链魔力」?
我想象着自己将来某个时刻和我们某个银行联盟的 CIO 面对面坐着……我想象着我们幼稚的选择了当时最流行的 'blockchain for finance' (译注:区块链金融) 并在上面部署了一系列产品和服务。我想象着我们坚信了「区块链魔力」,放弃了批判性思维,忽视了任何工程问题。在这样的想象场景里,我对面坐着的应该是一脸愤怒的 CIO,他很想知道为什么系统会如此失败?为什么我要这样设计系统?
我可能会总结一个完全不合理的答案:「因为区块链在2015相当酷!」不,简直不可理喻。
事实上,把既定的设计方案往随意的问题上套的解决思路从来都不会成功。我之前每一个成功的项目都是从需求开始,而不是一项很酷的技术,我决定要把这个准则贯彻到 R3 的工作中来。
再次提醒自己:为什么宣称要革银行命的系统同时又扮演它们的救世主?
还有一个理由我要小心看待:2015年初技术流派和金融行业集体宣称「区块链技术」将是金融服务的未来。
其实,我也是这个观点的积极倡导者之一。但是「区块链技术」举足轻重的缘由非常精妙,大部分没有看到这个精妙点。
要理解这点,我们得提到比特币。
比特币的系统架构,如我常写的,简直太神奇了。比特币的各个组件环环相扣,如此不凡,它们事后看起来显而易见,却也只能天才才能创造。
然而比特币最牛逼的地方并不是它的系统架构。我认为它最牛逼的地方是它解决的商业问题。我们不要以为它只是解决了一个普通的商业问题,它完美解决了「如何构建一个系统使得没有人能阻止我花自己的钱?」现在,我无法揣测 Satoshi 的想法,他当然不是按这个思路来写白皮书的,但是它激发了非常有价值的想法。
事实上,一旦你写下这个「商业问题」,设计方案不经意就显现出来了。(几乎...)你总是希望可以花掉自己的钱?那么系统就不能被中心节点控制,因为它可能会被权力机关关闭。你也不能依赖一群已知身份的验证者,因为它们可以联合起来关闭系统。马上你发现自己需要一个大规模的基于复制的共识系统,以及如果不想牵涉真实世界的身份信息,你还需要像 POW「工作量证明」这样的系统来完成投票工作。你按这样的逻辑走,基本上整个系统设计就出来了(区块链,挖矿机制,区块奖励,甚至 UTXO (Unspent Transaction Output) 模式,等等...)。当然,系统把很多工作丢给了用户:比如只要知道了对方私钥就可以没收了他的比特币...(译注:言下之意就是用户自己要做好保存私钥的工作) 不过我们先把这个放一边。
按这样的思路来考虑问题非常重要,因为它强调了比特币的区块链是在解决具体的商业问题。Satoshi Nakamoto 并不会哪天早上醒来说「把区块链应用到金融领域」。区块链只是一个工具,是当时为解决一个实际问题而创建。
我们现在有一个难题,对吧?如果是这样,那为什么还在争论银行业是否需要区块链?
实际上,按我之前确认,银行存在的问题跟我之前提的比特币要解决的问题截然相反。
区块链系统有哪些特质?
十月的大部分日子我都是静静地坐在一个小黑屋里(真的!当时我们伦敦的第一个办公室,租的伦敦市区一个共享办公室的4人间),思量区块链最基本的一些假设,到底什么地方吸引了银行业?
大部分人已经完成思维跳跃,对于一揽子比特币系统,无法 take-it-or-leave-it (要么全盘接受要么全盘否定):打个比方,「工作量证明」完全没必要部署在私有链上。然而由我观察,这些公司似乎接受了除此之外比特币的其它特质... 作为一个行业,这看起来有点奇怪,我们揶揄了「比特币系统」里的某个部分却又止步于次。
我在 IBM 最初几年是担任「技术销售」的职位。如果你跟大 IT 供应商有过商务往来,你应该有接触过跟我类似的角色。我们作为技术专家跟销售代表一起拜访客户,我们需要跟客户解释产品是如何工作的,确保向客户推荐的方案是对的,然后扫清完成这笔交易的所有技术障碍。
从这份经历中我学到:这不取决于你有多努力,或跟客户谈判多少次,或销售代表有多激进,如果你的解决方案不能解决客户的真实问题,那么生意永远谈不成。如果靠那些真能起作用,我坚信最终你会后悔...
快速回到2015年10月,我所调研的区块链领域,一些名躁的公司在兜售区块链解决方案,然而之于我要解决的问题没有一点意义。我曾一度自我怀疑:也许他们是对的,是我疯了?!
我继续刨根问底:即时他们的「take it or leave it 」区块链设计思路是对的,可以成为金融行业的救世主, 那我也会尽我职责向我们的银行联盟解释缘由。
所以我们开始从我们使用的「区块链组合」中做挑选。
我们可以从比特币、以太坊或别的私有链中提炼出区块链的五个彼此相关但又独具特点的服务。最理想的方式是把它们当作菜单,针对不同商业问题,就好比按不同口味,再进行选择、定制、组合。
CONSENSUS 共识
第一个,也是区块链最为重要的特质(是伴随着 scale 和 scope 的新概念)。区块链的共识帮助解决了这个世界真实问题:参与方看到的事实就是其它权益方看到的事实。
如: 「我看到你所看到... 同时我知道我看到的也是你所看到的」
再如:「我知道你知道我知道什么!」
再如:「我知道你知道我知道你知道什么...」
等等...
它使得互联网不可信双方变得可以信赖。当然,共识系统和复制性状态机早已存在,但是共识系统在互联网范围内,面对非信任参与方或者强权对手方,这是这种进步。
对于比特币,这个公认的事实是:「哪些比特币未被使用以及怎么确保它们能被正确支付使用」,这个事实是所有全节点都共享的。
对于以太坊,公认的事实是抽象虚拟机的状态。
但非常有意思的是:并没有一套自然法则规定一部分人的共识需要整个世界一起达成共识。比特币恰好这么做是因为它所解决的特别的商业问题。如果你不是要解决这样的问题你要小心那些卖你比特币解决方案的公司。
VALIDITY 确认
第二个「区块链组合」中的特质是「有效性」。和共识紧密相关,这个特性能让我们知道向系统发起更改的操作是否有效。这是我们设计的「游戏规则」,什么是这个系统的有效事实?对这个事实的更改如何是合法的?
UNIQUENESS 唯一性
第三个「区块链组合」中的特质是「唯一性服务」。我可以很容易的创建两个有效的更新操作,但是它们彼此间冲突时,我们需要让利益相关方一致地选出其中一种。区块链的「反双花」特性提供了这个服务,这特别得重要。
IMMUTABILITY 不可变
第四个「区块链组合」中的特质是「不可变」,即数据一旦写入,就无法再修改。
这看起不太对劲:如果是我的数据我当然能够修改它。
但这里真正的含义是:交易一旦提交,没有其他人会接受一个已经被其它权益方接受,然后我再修改数据生成的交易。
区块链是这么实现的:新的交易打包上一笔交易的输出,新的区块打包上一个区块的内容。只有为上一次不可变的内容正确打包,新的步骤才是有效的。
AUTHENTICATION 验证
最后一个「区块链组合」的关键特性是「验证」:系统内每一个操作都跟私钥关联,没有传统系统里「主密码」或「管理员密码」的概念。这点从安全角度来看,跟传统企业系统里的超级用户帐号的固化方式大不相同。
再来看看金融机构的商业问题是什么?
为什么我让大家了解整个分析的过程?是因为它能帮助我们抓住「分布式账本」领域核心:这些新兴平台可以让互联网的不可控、非信任参与主体,对于「公认事实」的存在以及演变达成共识。
那如果是这样,那么金融领域的「公认事实」是什么呢?到底什么商业问题需要我们用这套机制去解决?
就在这我们瞬间开窍了,Corda 项目的最基本的洞察来自于,这些金融机构间重要的「公认事实」就是它们的「金融合约」:
- 银行 A 和银行 B 认同:银行A欠银行B 100万美金,按需通过 RTGS (Real-time gross settlement) 方式支付; -- 这是活期储蓄
- 银行 A 和银行 B 认同:他们是一份「信用违约掉期」合约的参与双方;-- 这是一个金融衍生品合约
- 银行 A 和银行 B 认同:银行 A 有义务履行,三天内交付 1000 股 Bigco 的普通股给银行 B,银行 B 支付 15万美金现金;-- 这是一份「货到付款」合约 ......
金融行业基本成型于公司之间的合约,而这些公司有个普遍的问题:合约由双方记录,在各自的不同系统里,一旦有不一致产生,就会造成巨大的成本。多个研究机构表明每年为此花费的开销在数百亿美金。
特别地,这些系统间主要交换信息:我发给一个更新结果,希望你收到的是新的合约是跟我的一致的。这就是为什么要花那么多钱来协同确保双方的一致性,还要花费更多钱在我没有提及的问题上。
现在想象我们有这样一套系统,它帮助记录和管理合约,合约在参与公司之间共享并且保证记录的一致性和唯一性。系统对相关监管者可见,由工业级工具打造,关注系统间互操作性、渐进部署、防范数据泄露。系统可以让你知道你跟对手方签订的合约,并确保:
「我看到也是你看到的,我们双方都知道我们看到的是同一个事实,同时我们双方都知道这就是我们向监管者报告的事实。」
这就是 Corda.
Corda 从「区块链组合」菜单里选择了什么?
现在我们了解了金融服务的需求,我们再来看看上面提到的「区块链组合」菜单中,我们都做什么选择。
CONSENSUS 共识
Corda 的一个关键设计哲学是我们要解决「我知道你看到的和我看到的公认事实是一致的」。
但并不代表无关第三方也需要看到它:我们的共识发生在交易对手方之间,而不是所有的参与者。
VALIDITY 确认
进而,在 Corda,只有合约的参与方才是「事实」的权益方:假设你跟我达成合约,那为什么要管无关第三方关心什么?为什么还要考虑给他们发送副本以便他们发表意见?所以 Corda 提供工业标准的工具让用户来写交易确认的逻辑,我们来确定谁将是每份合约的相关方。
UNIQUENESS 唯一性
和其它「分布式账本」一样,我们也需要保证两个有效但冲突的交易不能并存于系统中。但我们同时意识到,不同的场景需要不同的权衡,所以 Corda 的设计提供了「唯一性服务」的不同实现方式,其中一个就是「经典区块链」方案。不止于次,出于我们的目的,我们还会根据 Brewer 的 CAP 定理 的不同权衡来实现不同的服务,例如:一些金融服务客户需要优先 C「一致性」的要求,牺牲部分A「可用性」和网络的 P「分区容错性」。
IMMUTABILITY AND AUTHENTICATION 不可变和验证
这两点,Corda 的设计与现有区块链系统基本一致:数据是不可变的,区块也是由数字签名的交易组成。
所以 Corda 基本上承袭了区块链的 「authentication」「immutability」「uniqueness service」的特性,但「共识」(单笔交易的参与方 vs 所有参与者) 和 「确认」(合法权益方 vs 普通验证者)改动很大。
Corda 有什么不同?
等下,这是不是其它区块链公司也在鼓吹的点?并不是。
值得注意的几点:
- 我们不是在打造区块链;
- 和其它做区块链的比较,我们的出发点是公司之间的单笔合约(状态对象被合约代码管理,法律合规);
- 我们摒弃了数据在所有节点间同步,哪怕数据是加密的;
其次,我们专注于合约:法律合规从一开始就考虑在内。我们知道这点争议性很大,我们会想办法解决。
第三,我们非常重视管理金融合约的现实问题。仅仅一套共识系统是不够的,我们要让编码商业逻辑变得简单,容易和现有代码集成,我们需要关注系统间互操作性。我们需要支持合约顺应公司之间的业务流程。
不同问题用不同解决方案
但是... 我们需要清醒认识到,我们并不能把 Corda 当作所有问题的解决方案。这个模型对于一些使用场景非常强大但不一定适合别的。这也是为什么我们需要和所有合作伙伴紧密合作互补平台,我们并不是无所不能。而且我们还有许多重要的设计和调研问题有待解决,还有很多工作要做。
我感到非常惊讶,除 Corda 之外,我们的实验室已经有许多高质量的平台产生并将持续产生。「不同问题用不同的解决方案」是我们的赞歌。最近几个月参加会议或培训课的人可能已经听我说起过了。
Corda 不是要和其它公司竞争或业务重叠,事实上我们创建它是因为市面上没有一个平台能解决我们的领域问题。这个领域潜能无限。