tendermint/consensus
Anton Kaliaev dc0e8de9b0
extract some of the consensus types into ./types
so they can be used in rpc/core/types/responses.go.

```
So, it seems like we could use the actual structs here, but we don't want to have to import consensus to get them, as then clients are importing too much crap. So probably we should move some types from consensus into consensus/types so we can import.

Will these raw messages be identical to:

type ResultDumpConsensusState struct {
  RoundState cstypes.RoundState
  PeerRoundStates map[string]cstypes.PeerRoundState
}
```
https://github.com/tendermint/tendermint/pull/724#discussion_r143598193
2017-10-10 12:39:21 +04:00
..
test_data fix replay tests and update test wals for InitChain 2017-04-27 18:30:43 -04:00
types extract some of the consensus types into ./types 2017-10-10 12:39:21 +04:00
README.md some comments 2016-08-09 20:31:53 -04:00
byzantine_test.go all: no more anonymous imports 2017-10-04 16:40:45 -04:00
common.go fixes from review 2017-06-28 11:12:45 -04:00
common_test.go extract some of the consensus types into ./types 2017-10-10 12:39:21 +04:00
mempool_test.go all: no more anonymous imports 2017-10-04 16:40:45 -04:00
reactor.go extract some of the consensus types into ./types 2017-10-10 12:39:21 +04:00
reactor_test.go PrivValidatorFS is like old PrivValidator, for now 2017-09-21 16:46:31 -04:00
replay.go abci.Info takes a struct; less merkleeyes 2017-09-22 11:42:40 -04:00
replay_file.go node: NewNode takes DBProvider and GenDocProvider 2017-09-21 15:54:33 -04:00
replay_test.go abci.Info takes a struct; less merkleeyes 2017-09-22 11:42:40 -04:00
state.go extract some of the consensus types into ./types 2017-10-10 12:39:21 +04:00
state_test.go extract some of the consensus types into ./types 2017-10-10 12:39:21 +04:00
ticker.go consensus: more comments 2017-07-20 00:59:28 -04:00
version.go all: no more anonymous imports 2017-10-04 16:40:45 -04:00
wal.go all: no more anonymous imports 2017-10-04 16:40:45 -04:00

README.md

The core consensus algorithm.

  • state.go - The state machine as detailed in the whitepaper
  • reactor.go - A reactor that connects the state machine to the gossip network

Go-routine summary

The reactor runs 2 go-routines for each added peer: gossipDataRoutine and gossipVotesRoutine.

The consensus state runs two persistent go-routines: timeoutRoutine and receiveRoutine. Go-routines are also started to trigger timeouts and to avoid blocking when the internalMsgQueue is really backed up.

Replay/WAL

A write-ahead log is used to record all messages processed by the receiveRoutine, which amounts to all inputs to the consensus state machine: messages from peers, messages from ourselves, and timeouts. They can be played back deterministically at startup or using the replay console.