tendermint/abci

Initialisation of validator set

Closed this issue · 1 comments

Step 1

Currently, RequestInitChain passes in the validator set from the tendermint/genesis.json file and ResponseInitChain is an empty struct.

message RequestInitChain {
  repeated Validator validators = 1 [(gogoproto.nullable)=false];
  bytes app_state_bytes = 2;
}

ResponseInitChain should return Validator, a set of validators to start Tendermint consensus with.

message ResponseInitChain {
  repeated Validator validators = 1 [(gogoproto.nullable)=false];
}

Step 2

Furthermore, the field validators in both should not be nullable. InitChain should be a pure function, that takes a validator set and returns a validator set. Of course the RequestInitChain.validators field can be an empty array.

message RequestInitChain {
  repeated Validator validators;
  bytes app_state_bytes = 2;
}

message ResponseInitChain {
  repeated Validator validators;
}

This allows the ABCI protocol to easily support Proof of Stake as well as Proof of Authority (or some other not yet known Proof of XXX).

ref: #959

Closed by #233 - thanks!