mirror of
https://github.com/tendermint/tendermint.git
synced 2026-02-05 19:40:44 +00:00
* add proto, add boilerplates * add canonical * fix tests * add vote signing test * Update internal/consensus/msgs_test.go * modify state execution in progress * add extension signing * VoteExtension -> ExtendVote * apply review * update data structures * Add comments * Apply suggestions from code review Co-authored-by: Aleksandr Bezobchuk <alexanderbez@users.noreply.github.com> * *Signed -> *ToSign * add Vote to RequestExtendVote * apply reviews * Apply suggestions from code review Co-authored-by: Dev Ojha <ValarDragon@users.noreply.github.com> Co-authored-by: Aleksandr Bezobchuk <alexanderbez@users.noreply.github.com> * fix typo, modify proto Co-authored-by: Aleksandr Bezobchuk <alexanderbez@users.noreply.github.com> Co-authored-by: Dev Ojha <ValarDragon@users.noreply.github.com>
31 lines
1.2 KiB
Markdown
31 lines
1.2 KiB
Markdown
# KVStore
|
|
|
|
There are two app's here: the KVStoreApplication and the PersistentKVStoreApplication.
|
|
|
|
## KVStoreApplication
|
|
|
|
The KVStoreApplication is a simple merkle key-value store.
|
|
Transactions of the form `key=value` are stored as key-value pairs in the tree.
|
|
Transactions without an `=` sign set the value to the key.
|
|
The app has no replay protection (other than what the mempool provides).
|
|
|
|
## PersistentKVStoreApplication
|
|
|
|
The PersistentKVStoreApplication wraps the KVStoreApplication
|
|
and provides three additional features:
|
|
|
|
1) persistence of state across app restarts (using Tendermint's ABCI-Handshake mechanism)
|
|
2) validator set changes
|
|
|
|
The state is persisted in leveldb along with the last block committed,
|
|
and the Handshake allows any necessary blocks to be replayed.
|
|
Validator set changes are effected using the following transaction format:
|
|
|
|
```md
|
|
"val:pubkey1!power1,pubkey2!power2,pubkey3!power3"
|
|
```
|
|
|
|
where `pubkeyN` is a base64-encoded 32-byte ed25519 key and `powerN` is a new voting power for the validator with `pubkeyN` (possibly a new one).
|
|
To remove a validator from the validator set, set power to `0`.
|
|
There is no sybil protection against new validators joining.
|