区块链共识与拜占庭将军问题的异同

in cn •  last month

拜占庭将军问题是将军发起一个提议 (同时向各个副官分别发提议), 然后副官们决定采取什么行动.

区块链共识也是由一个节点发起一个提议 (基于当前最长链出一个块), 然后其他节点决定采取什么行动 (是否接受这个块).

在拜占庭问题最简单的模型中, 副官们所做的就是相互询问将军给的提议是什么, 然后少数服从多数决定是进攻还是撤退.

而在区块链共识中将军们做的是先验证提议本身是否合法 (区块的工作量是否满足阈值), 再验证这个提议是不是基于以前所有提议得出的结果 (区块是不是基于最长的链). 二者有一者不满足, 这个提议都不会被接受.

拜占庭将军中可能会存在叛徒, 叛徒可能是将军也可能是副官, 叛徒作恶可能会使得不足一半的将军/副官去攻打城池, 从而大败. Lamport 在论文中给出了在将军/副官总数不小于 3f+1 的情况下的解决方案.

区块链共识中也可能存在叛徒, 叛徒可能是出块节点也可能是验证节点, 叛徒节点可以在作为验证节点时兴不起太大风浪, 但作为将军时可以不按照最长链出块, 进而导致双花问题. PoW 的解决方案就是让节点在出块前要先花很多钱, 如果不按照最长链出块, 那这些钱就白花了.

所以区块链的共识问题的解决是靠两点, 第一是最长链准则, 第二是出块前付出的成本, 这两点使得节点总数不用大于 3f, 只要大于 2f 就能保证链的正常运行.

其实区块链共识问题也可以用 Lamport 的方法来解, 那就是节点出块时也先向所有其他节点征求这个出块意见, 所有其它节点对是否允许出这个块达成一致, 这样就不需要靠 PoW 的那两点约束, 节点间就能总是达成共识, 当然也就不会出现分叉双花问题 (块会总是在一条链上增长), 当然, 这样一来节点总数也必须不小于 3f + 1.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!