Corda技术核心概念之共识(Consensus)
概要
- 为了提交交易(把交易更新到账单),交易需要达成有效性和唯一性的共识
- 有效共识需要交易的合约有效性,以及交易的相关的组件为有效的(组件包括input,output,command,attachment,signaure)
- 唯一共识可以阻止双花
共识的两种类型
确定被提议的交易是一个有效的账单更新需要达到如下两种类型的共识:
- 有效性共识-在签名一个交易之前,需要验证必须的签名者
- 唯一性共识-仅仅是公证人服务进行验证
有效性共识
有效性共识是验证的一个过程,如下两个条件对于被提议的交易或者交易链上生成一个交易的input state的交易来说,都需要这两个条件:
- 合约需要接收交易的输入和输出状态
- 交易需要必须的签名
验证被提议的交易它自身是不够的。我们需要验证交易链上的每一个交易以此获取一个被提议的交易的正确的输入状态(input state)。
这是众所周知的“在链上行走”,比如,在网络上的一个节点提议了一个交易,给我们转移证券。我们认为证券转移是有效的仅仅因为如下条件:
- 在一个有效的发行交易中,这个证券是被中央银行发行的
- 关于这个证券后续的交易即使被他人拥有也任然有效
这是唯一的方式来确认这两个条件是在“链上行走”。我们可以可视化为如下过程:
当验证一个被提议的交易时,节点可能没有交易链上的每一个交易来进行验证。在这种情况,他们可以向交易的发起人请求漏掉的交易。交易发起人总是有完整的交易链,因此当需要验证交易的input state时,可以向交易发起人请求。
唯一共识性
想象Bob持有一个有效的中心银行发行的现在1,000,000美元。Bob现在能够创建两个交易:
- 一个交易转移$1,000,000给Charlie,并返回800,000(GBP)
- 另一个交易转移$1,000,000个Dan,并返回900,000(EUR)
这是一个问题,因为尽管这两个交易都满足共识的有效性,但是Bob能够管理美元的“双花”,去得到一定数量的GBP和EUR。我们可以可视化为如下:
为了阻止双花,一个有效的交易提议必须达到唯一性共识。唯一性共识是必须的,因为一个交易的输入状态不可能存在于另一个交易中的。
如果输入状态的一个或者多个已经存在于另一个交易,这就是众所周知的双花问题,并且交易的提议被考虑为有效的。
唯一性共识是公证人提供的。