mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-25 14:52:17 +00:00
Merge pull request #2149 from tendermint/bucky/adr-abci-validators
[ADR] ABCI Validators
This commit is contained in:
commit
6f8b62d1f3
95
docs/architecture/adr-018-ABCI-Validators.md
Normal file
95
docs/architecture/adr-018-ABCI-Validators.md
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
# ADR 018: ABCI Validator Improvements
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
05-08-2018: Initial draft
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
ADR 009 introduced major improvements to the ABCI around validators and the use
|
||||||
|
of Amino. Here we follow up with some additional changes to improve the naming
|
||||||
|
and expected use of Validator messages.
|
||||||
|
|
||||||
|
We also fix how we communicate the commit round - there is no defined commit
|
||||||
|
round, as validators can commit the same block in different rounds, so we
|
||||||
|
should communicate the round each validator committed in.
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
### Validator
|
||||||
|
|
||||||
|
Currently a Validator contains address and `pub_key`, and one or the other is
|
||||||
|
optional/not-sent depending on the use case. Instead, we should have a
|
||||||
|
Validator (with just the address) and a ValidatorUpdate (with the pubkey):
|
||||||
|
|
||||||
|
```
|
||||||
|
message Validator {
|
||||||
|
bytes address
|
||||||
|
int64 power
|
||||||
|
}
|
||||||
|
|
||||||
|
message ValidatorUpdate {
|
||||||
|
PubKey pub_key
|
||||||
|
int64 power
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### RequestBeginBlock
|
||||||
|
|
||||||
|
LastCommitInfo currently has an array of `SigningValidator` that contains
|
||||||
|
information for each validator in the entire validator set.
|
||||||
|
Instead, this should be called `VoteInfo`, since it is information about the
|
||||||
|
validator votes.
|
||||||
|
|
||||||
|
Additionally, we have a single CommitRound in the LastCommitInfo,
|
||||||
|
but such a round does not exist. Instead, we
|
||||||
|
should include the round associated with each commit vote:
|
||||||
|
|
||||||
|
```
|
||||||
|
message LastCommitInfo {
|
||||||
|
repeated VoteInfo commit_votes
|
||||||
|
}
|
||||||
|
|
||||||
|
message VoteInfo {
|
||||||
|
Validator validator
|
||||||
|
bool signed_last_block
|
||||||
|
int64 round
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### ResponseEndBlock
|
||||||
|
|
||||||
|
Use ValidatorUpdates instead of Validators. Then it's clear we don't need an
|
||||||
|
address, and we do need a pubkey.
|
||||||
|
|
||||||
|
### InitChain
|
||||||
|
|
||||||
|
Use ValidatorUpdates for both Request and Response. InitChain
|
||||||
|
is about setting/updating the initial validator set, unlike BeginBlock
|
||||||
|
which is just informational.
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Proposal.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
### Positive
|
||||||
|
|
||||||
|
- Easier for developers to build on and understand the ABCI
|
||||||
|
- Apps get more information about the votes (ie. the round they're from)
|
||||||
|
|
||||||
|
### Negative
|
||||||
|
|
||||||
|
- There are two validator types
|
||||||
|
|
||||||
|
### Neutral
|
||||||
|
|
||||||
|
-
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [Latest ABCI Spec](https://github.com/tendermint/tendermint/blob/v0.22.8/docs/app-dev/abci-spec.md)
|
||||||
|
- [ADR-009](https://github.com/tendermint/tendermint/blob/v0.22.8/docs/architecture/adr-009-ABCI-design.md)
|
||||||
|
- [Issue #1712 - Don't send PubKey in
|
||||||
|
RequestBeginBlock](https://github.com/tendermint/tendermint/issues/1712)
|
Loading…
x
Reference in New Issue
Block a user