mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-29 00:32:14 +00:00
49 lines
1.7 KiB
Markdown
49 lines
1.7 KiB
Markdown
|
# Application Blockchain Interface (ABCI)
|
||
|
|
||
|
ABCI is the interface between Tendermint (a state-machine replication engine)
|
||
|
and an application (the actual state machine).
|
||
|
|
||
|
The ABCI message types are defined in a [protobuf
|
||
|
file](https://github.com/tendermint/abci/blob/master/types/types.proto).
|
||
|
For full details on the ABCI message types and protocol, see the [ABCI
|
||
|
specificaiton](https://github.com/tendermint/abci/blob/master/specification.rst).
|
||
|
For additional details on server implementation, see the [ABCI
|
||
|
readme](https://github.com/tendermint/abci#implementation).
|
||
|
|
||
|
Here we provide some more details around the use of ABCI by Tendermint and
|
||
|
clarify common "gotchas".
|
||
|
|
||
|
## Validator Updates
|
||
|
|
||
|
Updates to the Tendermint validator set can be made by returning `Validator`
|
||
|
objects in the `ResponseBeginBlock`:
|
||
|
|
||
|
```
|
||
|
message Validator {
|
||
|
bytes pub_key = 1;
|
||
|
int64 power = 2;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
The `pub_key` is the Amino encoded public key for the validator. For details on
|
||
|
Amino encoded public keys, see the [section of the encoding spec](./encoding.md#public-key-cryptography).
|
||
|
|
||
|
For example, the 32-byte Ed25519 pubkey
|
||
|
`76852933A4686A721442E931A8415F62F5F1AEDF4910F1F252FB393F74C40C85` would be
|
||
|
Amino encoded as
|
||
|
`1624DE622076852933A4686A721442E931A8415F62F5F1AEDF4910F1F252FB393F74C40C85`
|
||
|
|
||
|
The `power` is the new voting power for the validator, with the
|
||
|
following rules:
|
||
|
|
||
|
- power must be non-negative
|
||
|
- if power is 0, the validator must already exist, and will be removed from the
|
||
|
validator set
|
||
|
- if power is non-0:
|
||
|
- if the validator does not already exist, it will be added to the validator
|
||
|
set with the given power
|
||
|
- if the validator does already exist, its power will be adjusted to the given power
|
||
|
|
||
|
|
||
|
## Query
|