Channels
State sync has four distinct channels. The channel identifiers are listed below.Message Types
SnapshotRequest
When a new node begin state syncing, it will ask all peers it encounters if it has any available snapshots:SnapShotResponse
The receiver will query the local ABCI application viaListSnapshots, and send a message
containing snapshot metadata (limited to 4 MB) for each of the 10 most recent snapshots: and stored at the application layer. When a peer is starting it will request snapshots.
ChunkRequest
The node running state sync will offer these snapshots to the local ABCI application viaOfferSnapshot ABCI calls, and keep track of which peers contain which snapshots. Once a snapshot
is accepted, the state syncer will request snapshot chunks from appropriate peers:
ChunkResponse
The receiver will load the requested chunk from its local application viaLoadSnapshotChunk,
and respond with it (limited to 16 MB):
Here,
Missing is used to signify that the chunk was not found on the peer, since an empty
chunk is a valid (although unlikely) response.
The returned chunk is given to the ABCI application via ApplySnapshotChunk until the snapshot
is restored. If a chunk response is not returned within some time, it will be re-requested,
possibly from a different peer.
The ABCI application is able to request peer bans and chunk refetching as part of the ABCI protocol.
LightBlockRequest
To verify state and to provide state relevant information for consensus, the node will ask peers for light blocks at specified heights.LightBlockResponse
The receiver will retrieve and construct the light block from both the block and state stores. The receiver will verify the data by comparing the hashes and store the header, commit and validator set if necessary. The light block at the height of the snapshot will be used to verify theAppHash.
State sync will use light client verification to verify
the light blocks.
If no state sync is in progress (i.e. during normal operation), any unsolicited response messages
are discarded.
ParamsRequest
In order to build the state, the state provider will request the params at the height of the snapshot and use the header to verify it.ParamsResponse
A reciever to the request will use the state store to fetch the consensus params at that height and return it to the sender.Message
Message is aoneof protobuf type. The oneof consists of eight messages.