mirror of
https://github.com/fluencelabs/tendermint
synced 2025-05-22 02:41:19 +00:00
* abci/example: use base64 for update validator set * update kvstore/README.md * update CHANGELOG_PENDING.md and abci/example/kvstore/README.md
32 lines
1.2 KiB
Markdown
32 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 two 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:
|
|
|
|
```
|
|
"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.
|
|
|