Sumeragi Error Handling

For error handling, you also need to add:

  • CreateLeaderSuspect/SignLeaderSuspect
  • CreateCommitTimout/SignCommitTimeout
  • CreateVotingTimeout/SignVotingTimeout

Here is some info about each:
LeaderSuspect

  • f+1 signatures are needed to elect a new leader
  • used when someone sends a tx to the leader but a new block is not created within some expected time (like the block time)

CommitTimout

  • f+1 signatures are needed and if f+1 are received on this message, the f+1 signatures and the block hash are written into the successfully created block; this is done to prevent forking of stake via a committed block withholding attack
  • every time a peer votes for a block, they expect a commit message within a certain amount of time and this timeout occurs if they don't get a commit message when expected; the solution is therefore to invalidate their vote and the old block and elect a new leader and proxy tail (probably randomly recording everyone so that a new leader and new proxy tail are elected is good. obviously any random reordering needs to be deterministic as every peer will need to compute the new order independently)

VotingTimeout

  • this message can only be created by the proxy tail
  • the proxy tail starts a timer when they receive first vote or block proposal and if the 2f+1 votes for a block are not all received before the timer goes off, the proxy tail creates this voting timeout and sends it to all the peers
  • we MAY be able to get rid of this as a separate type as the commit timeout should handle this as well; let's explore this simplification