Corda是否必须依赖Notary实现唯一性共识?无Notary会致账本不一致吗?
Corda的唯一性共识:Notary是必不可少的吗?
答案很明确:是的,Corda必须依赖Notary来实现唯一性共识,官方文档里“唯一性共识由Notary提供”的表述完全准确。
咱们来拆解你提到的那个场景——如果没有Notary,这种“双花”情况真的会发生:
- 主体A完全可以先撺掇B签署一份以状态X为输入的交易,把这份交易提交到B的账本;
- 紧接着或者过段时间,再哄着C签署另一份同样用状态X做输入的交易,提交到C的账本。
这时候混乱就来了:B的账本里状态X已经被消耗,对应产生了新的输出状态;C的账本里状态X也被消耗,但对应的输出是另一个完全不同的状态;而A自己的账本可能会选择记录其中一份交易,甚至同时保留两份(毕竟节点自己维护账本),最终导致A、B、C三方的账本彻底不一致。这种情况就是破坏账本可信度的核心问题——双花,而Notary的存在就是专门堵这个漏洞的。
再深入说下Corda的共识逻辑:它的共识分成两个独立部分:
- 一个是事务性共识:由交易的参与节点共同验证交易的逻辑是否合法、签名是否有效、状态是否符合规则等;
- 另一个就是唯一性共识:完全由Notary负责,它的核心职责就是跟踪哪些状态已经被消耗,确保同一个状态不会被用于多笔交易。
Notary相当于一个可信的“状态守护者”——不管是单个节点的Notary,还是Raft/BFT集群式的Notary,它都会维护一份权威的已消耗状态记录。每笔交易在完成事务性共识后,都必须向Notary申请“唯一性验证”:只有Notary确认所有输入状态都未被消耗,这笔交易才能被各节点最终认可并写入账本。没有Notary的话,就没有任何权威方来做这个验证,节点之间根本无法保证不会出现重复消耗状态的情况,整个账本的一致性就无从谈起。
内容的提问来源于stack exchange,提问作者George Hawkins
相关产品推荐
相关产品推荐

