Corda 核心概念 – Consensus

概要

  • 为了能被提交,transaction 必须要同时满足有效性(validity) 和 唯一性(uniqueness)的共识
  • Validity consensus 需要 transaction 和 它的所有依赖都是 contractual validity 的,也就是都能通过 contract code 的验证的,并且得到了所有相关方的签名
  • Uniqueness consensus 可以避免“双花”

 

两种类型的共识

判断一个提议的交易是否是一次有效的账本更新要达到两种类型的共识:

  • 有效性共识(Validity Consensus):这给是交易的参与者在提供他们签名之前去校验的
  • 唯一性共识(Uniqueness Consensus :这个只会被 notary service 去验证

有效性共识 Validity Consensus

Corda 中,Validity Consensus 需要一个 transaction 满足以下两点,只有当两点都满足的时候,transaction 才会被提交,账本才会被修改:

  • Transaction 中的 input 和 output 的 contracts 所接受
  • Transaction 得到了所有要求的签名

仅仅检查提议的交易本身信息是不够的。我们还需要检查跟产生当前这个 transaction 的 inputs 有关的所有以前的 transaction 链。这个被称作在链上行走。假设,例如网络中的一个节点提交了一个交换债券的一笔交易。我们只有了解下边的情况才能确保这个债券的交换是有效的:

  • 这个债券应该是由中心银行发行的,而且应该是在一次有效的发行交易中
  • 关于这个债券的后续交易记录也应该都是有效的

确保两点都满足的唯一方式就是查看整个交易链。我们可以用下图表示:

当确认一个提交的交易的时候,给定的一方可能没有它需要验证的交易链上的所有交易信息。这种情况下,他可以向交易的提出方索要缺少的那部分交易。交易的提出方应该永远会有整个的交易链信息,因为他们应该在验证之前的交易中已经获取了相关的交易链信息。

唯一性共识 Uniqueness consensus

设想一下 Bob 持有有效的由中央银行发行的 $1,000,000 现金 state。Bob 可以创建两个交易提案:

  • 一笔交易要跟 Charlie 用这 $1,000,000 交换 £800,000
  • 一笔交易要跟 Dan 用这 $1,000,000 交换 €900,000

这会是一个问题,因为尽管这两笔交易都可以通过有效性共识,但是 Bob 确实现了一次“双花 double spend” 他的美元来获得了两倍价值的 GBP 和 EUR。我们可以用下图表示这个流程:

为了避免这样的问题发生,一个有效的交易提案同时也要满足唯一性共识。唯一性共识要求一个 transaction 的 input 不能被任何其他的 transaction 消费掉了。

当一个交易中的 input 已经被其他的交易消费掉的情况,通常被称为双花 double spend,那么相关的交易应该被视为无效的交易。

唯一性共识是有 notaries 提供的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注