无链之链:R3 Corda带来的新视角

关注微信公众号 区块链大本营,获取更多区块链开发技能

著名的金融领域分布式账本R3项目由于有众多金融机构的参与和支持,并且获得了数千万美元的融资,自宣布之日起就受到整个区块链生态环境的瞩目。从公布的一些新闻稿、白皮书中,人们已经了解到:R3的最大特点之一,就是一个没有区块链的“类区块链”系统,但是具体实现方案是什么,与区块链相关的系统对比又有什么特色,还是一个未知数。

随着R3的基础设施Corda项目在2016年11月30日宣布开源,笔者在第一时间对其技术白皮书、在线文档和源代码做了初步的阅读和分析。我们看到Corda的交易验证、共识机制等特性,采用了基于Notary(公证员)的模式。同时,为了服务于现实世界中的企业,Corda还具有很多与外部世界通讯的能力,例如:汇率、股票价格等信息的接收,可以通过一个叫做Oracle(先知)的角色来实现。总之,与此类似的设计还有不少,这一系列选择都是R3根据自身定位有意为之。R3 Corda是一个基于半信任环境的、服务于现实世界金融活动的分布式账本,同时满足信息适度可见和高性能两个核心特性。

Corda区别于其他“类区块链”系统的另一个重要特点,就是系统本身基于一个小众语言Kotlin来开发,运行在JVM之上。从实现层面来看,Corda有着鲜明的Java生态环境特点,例如:其节点使用的通讯、存储技术都是Java领域普遍采用的开源框架组合模型,相信这一点使得Corda非常适合企业使用,同时其自身开发成本也很低。此外,Corda中的合约(contract)以及Dapp应用,原则上是可以基于JVM上的任何语言来开发的,在应用开发者层面,一定程度上减小了kotlin小众化问题的影响。

除此之外,Corda作为较新的类区块链平台,还有很多令人关注的特性,本文将对其与区块链概念相关的各方面特性做一个概览,以便读者较为快速地了解这一著名的金融领域分布式账本。

基本概念与模型

去中心化数据库(Decentralized Database)

在技术层面上,Corda的定位是一个“去中心化数据库”,这一点对于理解Corda的设计和实现理念是非常重要的。

首先,在概念层面,去中心化数据库与分布式数据库有着重要的区别:分布式数据库仍然是一个中心化的系统,其服务目标是接收客户端的消息来存储数据,重点关注的是解决系统内部各个节点之间数据同步的问题。去中心化数据库,则是相互独立的参与方各自的私有数据库,在一定前提条件下同步某一方面的数据,如果参与方之间不完全的互相信任,则无法使用分布式系统中标准的数据同步算法。因此,两类系统的关注点、设计和实现模式大相径庭。

其次,在实现层面,去中心化数据库并不限于一种特定的技术:区块链这一随着比特币诞生的基础设施,可以认为是去中心化数据库的一种实现方式,也是现阶段获得最多认可的一种方式,但不是唯一的方式。从这个角度讲,Corda通过一系列的设计,给我们带来了去中心化数据库的另一种实现方案,这就是Corda系统的核心价值,一旦为人们所接受,必然会在“类区块链”生态系统中占有一席之地。

因此,Corda系统中最基本的概念、数据结构、算法和实现方式,在技术层面都是围绕“去中心化数据库”这一概念来完成的。

状态(State)与UTXO

状态是Corda网络中最基本的概念,我们可以理解状态就是“系统中的事实”,例如:“Alice拥有5000美元”,这就是一个状态。Corda系统的状态设计是基于交易的,也就是说只有一个有效交易的输出才是系统认可的有效状态,这实际上就是人们已经比较了解的UTXO模型。系统中还可以有另一个状态,就是“Alice拥有3000美元”,这是Alice参与的另一个交易产生的输出。假定系统中不再有任何Alice拥有某种资产的事实存在的话,那么从现实世界的角度看,可以认为Alice拥有8000美元。但是,Corda系统中并不存在“Alice拥有8000美元”这一事实,只有前述两个事实。熟悉“类区块链”系统的人都知道,在一个UTXO模型的系统中,Alice只有跟自己做一次交易,以前述两个状态作为输入,才能产生一个新的“Alice拥有8000”美元的状态。与此同时,前两个状态在系统中也就失效了。

与基于交易的状态模型对应的,是所谓基于账户的状态设计。也就是说,每一个交易会形成对账户状态的改变,就像银行存款账户的“余额”会随着该账户的每一次交易而变化。以太坊等区块链系统,采用的就是基于账户的模型(可能有人知道,Serenity声明也支持建立一个UTXO模型的代币系统,只在这里顺便提一句,就不展开了)。这两种模型的优劣,有相关的文章进行讨论,不是本文的重点。笔者的观点是,它们之间的差异与面向对象(O-O)的模式和函数式(functional)的模式之间的差异可以类比。

值得指出的是:采用了UTXO模型的系统,其交易之间实际上就有一个“链式结构”:一个交易的输出,成为另一个交易的输入,交易与交易之间就通过这个方式被串起来了。这样的链式结构,实际上是一个有向无环图(DAG),读者可以自行验证。同时,由于Corda系统的数据不是全局的,所以这样的“链”在系统中会存在多个,相互之间没有连接。因此,Corda系统中虽然没有“区块链”,但是仍然有“交易链”,这也就是笔者称Corda为“无链之链”的原因。

交易(Transaction)

交易就是状态转换的过程,简单地说是{输入状态、交易指令、输出状态}组成的元组,其中输入、输出都可以是一个状态列表。此外,交易还包括其他一些要素,如:附件、时间戳、各种签名以及为采用硬件加密的目的而使用的文字摘要(summeries),比较重要的部分都会在本文中讨论到。这一定义与其他“类区块链”系统中的交易定义区别不大,最主要的差异在于“交易指令”(command)这一概念,它描述的是这个交易具体是做什么的。

Corda的设计目标是对现实世界中各种交易类型进行支撑,因此要具有描述交

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值