|
|
- ## Blockchain Reactor
-
- * coordinates the pool for syncing
- * coordinates the store for persistence
- * coordinates the playing of blocks towards the app using a sm.BlockExecutor
- * handles switching between fastsync and consensus
- * it is a p2p.BaseReactor
- * starts the pool.Start() and its poolRoutine()
- * registers all the concrete types and interfaces for serialisation
-
- ### poolRoutine
-
- * listens to these channels:
- * pool requests blocks from a specific peer by posting to requestsCh, block reactor then sends
- a &bcBlockRequestMessage for a specific height
- * pool signals timeout of a specific peer by posting to timeoutsCh
- * switchToConsensusTicker to periodically try and switch to consensus
- * trySyncTicker to periodically check if we have fallen behind and then catch-up sync
- * if there aren't any new blocks available on the pool it skips syncing
- * tries to sync the app by taking downloaded blocks from the pool, gives them to the app and stores
- them on disk
- * implements Receive which is called by the switch/peer
- * calls AddBlock on the pool when it receives a new block from a peer
-
- ## Block Pool
-
- * responsible for downloading blocks from peers
- * makeRequestersRoutine()
- * removes timeout peers
- * starts new requesters by calling makeNextRequester()
- * requestRoutine():
- * picks a peer and sends the request, then blocks until:
- * pool is stopped by listening to pool.Quit
- * requester is stopped by listening to Quit
- * request is redone
- * we receive a block
- * gotBlockCh is strange
-
- ## Block Store
-
- * persists blocks to disk
-
- # TODO
-
- * How does the switch from bcR to conR happen? Does conR persist blocks to disk too?
- * What is the interaction between the consensus and blockchain reactors?
|