CodeChain-io/codechain

Fixing safety and liveness in consensus

majecty opened this issue · 2 comments

Problem 1 - safety: Header verifier does not verify any signatures in a header.
Problem 2 - liveness: A peer does not send its commit to other peers.

How to solve them.

  1. In Tendermint check a header's signatures when it is needed.
  2. When a header is imported, Tendermint checks the header and update the best block if needed.
  3. Add a message that contains a height's finalized block and precommits.

I found that Tendermint does not use the best proposal header. So safety does not have any problem.

I'm implementing "Commit message" in Tendermint(#1770). It will fix the liveness issue.

Scenario

  1. A's tendermint height is 17, B's tendermint height is 18.
  2. A sends "Commit request" to B
  3. B sends "Commit" to A
  4. A moves to height 17's Commit state.

Liveness fixed by #1770