Corda 核心概念:Notaries

原文地址:https://docs.corda.net/key-concepts-notaries.html

概要

总览

一个公证人 Notary 是一个网络服务,通过证明一个给定的交易的 input 是没有被其他的交易消费过的方式提供了唯一性共识。

对于给定的一个交易, notary 会进行下边两种操作中的一种:

通过这样做,notary 就在系统中提供了一个最后的步骤。在最终获得 notary 的签名之前,交易各方并不能确定交易的有效性。但是当收到了 notary 的签名之后,我们可以确认的是,交易中的 Input 是没有被其他任何的交易所消费过的。因此公证(notarisation)在系统里是最后的一步。

每个 state 都会有一个指定的 notary,而且 notary 也只会去公正那些 input 指定它为公证人的 transaction。

共识算法 Consensus algorithms

Corda 拥有一套“可插拔 pluggable” 的共识机制,允许 notaries 根据不同的需求来选择一种共识算法。

也就是说 notary 可能因为下边的原因不同:

验证 Validation

一个 notary service 还需要选择是否在提交之前通过验证每个 transaction 的有效性来提供这种有效性共识(validity consensus)服务。为了做出这个选择,他们需要面对下边的问题:

对于非验证模式,Corda 的可控数据分布模型(controlled data distribution modal) 意味着未被消费的 states 不会被大面积的共享。另外, Corda 的 permissioned network 也意味着 notary 能够存储造成 “denial of state” transaction 的一方,这就允许能够在账本外去解决掉这个袭击。

对于 validating model,对于匿名的使用,使用新生成的公钥而不是使用法律的名字(legal identities)来标记各方也限制了 notary 能够看到的信息

多个 Notaries Multiple notaries

每个 Corda network 允许存在多个 notaries,每个 notary 可能会运行一套不同的共识算法。这会带来以下的好处:

更换 Notaries Changing notaries

一个 notary 只有当它是这个 transaction 里的所有 input states 指定的 notary 的情况下才可以提供签名。然而下边的情况可能需要换一个 state 的指定的 notary:

当这样的 transactions 被创建之前,states 必须首先被指定到同一个 notary。这可以通过一个 notary-change transaction 来实现:

如果该 transaction 不会造成“双花”,这个 input state 指定的 notary 会为该 transaction 提供签名。