corda - Corda 真的需要公证人才能达成唯一性共识吗?

标签 corda consensus

Corda introduction to consensus说“唯一性共识是由公证人提供的。”

我们是不是说,如果没有公证人,A 有可能说服 B 将一笔涉及状态 X 作为输入的交易提交到其账本,并同时或稍后说服 C 提交一个不同的交易涉及 X 到其账本?

在这种情况下,A 的账本将与 C 的账本不一致(或 B 或两者都不一致,具体取决于它选择提交的事务(如果有的话)),并且 A 将创建一种现在不一致的情况,并且永远不会变得不一致A、B、C 之间一致。

想必 Corda 框架试图尽可能地防止这种事情发生,那么这就是诚实吗? IE。我们讨论的是 A 完全颠覆了自己的基础设施的情况,即没有按预期使用 Corda,并且存在于它向其他方发送的所有消息中?


更新:这个问题最初是由于我错误地认为公证人是 Corda 系统的可选元素而提出的。它们不是,但对于特定交易来说,它们的参与可能是可选的,例如不涉及输入状态(因此本质上不存在双花问题)。

@joel 在他的回答中明确指出的重要一点是,即使各方相互信任,双花问题也可能是一个问题,即预计不会出现恶意行为。

一旦 Corda 中的一方确定已就某笔交易达成有效性共识,它就可以立即将该交易提交到自己的分类账中,即它不会首先尝试与其他方达成某种额外的 BFT 风格共识。也可以并且肯定会将交易提交到各自的分类账中。

因此,在上述场景中,A 可以诚实/错误地向 B 和 C 提出两笔不同的交易。B 和 C 都会就各自的交易达成有效性共识,并将其提交到自己的分类账中,而 A 只面临双重交易:当它随后尝试将两笔交易中的第二笔提交到自己的分类帐时,会出现支出问题。

公证人会避免这种情况(无论是否出于恶意)。

最佳答案

您需要公证人的原因有两个:

  • 恶意节点:节点故意从其保管库中提取消耗状态,在另一笔交易中消耗它,并将交易发送给未看到原始交易的交易对手
  • 竞争条件:两个节点同时提出消耗相同状态的交易

关于corda - Corda 真的需要公证人才能达成唯一性共识吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49259995/

相关文章:

networking - 有效请求前的多条消息

apache-zookeeper - Chubby Sequencer 的目的是什么

distributed - Raft 如何处理 AppendEntries RPC 中的延迟回复?

algorithm - raft 如何处理前一个的提交条目?

kotlin - 找不到流量的契约(Contract)附件

corda - 在 corda 中实现可调度状态

java - 使用 FIFO 队列和 peek() 方法实现共识协议(protocol)

java - 如何从build.gradle读取config.rpc.port的值到corda中的java类

linux - Corda 4.0 AWS 节点部署问题