mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-25 06:42:16 +00:00
73 lines
1.8 KiB
Markdown
73 lines
1.8 KiB
Markdown
|
# ADR 034: PrivValidator file structure
|
||
|
|
||
|
## Changelog
|
||
|
|
||
|
03-11-2018: Initial Draft
|
||
|
|
||
|
## Context
|
||
|
|
||
|
For now, the PrivValidator file `priv_validator.json` contains mutable and immutable parts.
|
||
|
Even in an insecure mode which does not encrypt private key on disk, it is reasonable to separate
|
||
|
the mutable part and immutable part.
|
||
|
|
||
|
References:
|
||
|
[#1181](https://github.com/tendermint/tendermint/issues/1181)
|
||
|
[#2657](https://github.com/tendermint/tendermint/issues/2657)
|
||
|
[#2313](https://github.com/tendermint/tendermint/issues/2313)
|
||
|
|
||
|
## Proposed Solution
|
||
|
|
||
|
We can split mutable and immutable parts with two structs:
|
||
|
```go
|
||
|
// FilePVKey stores the immutable part of PrivValidator
|
||
|
type FilePVKey struct {
|
||
|
Address types.Address `json:"address"`
|
||
|
PubKey crypto.PubKey `json:"pub_key"`
|
||
|
PrivKey crypto.PrivKey `json:"priv_key"`
|
||
|
|
||
|
filePath string
|
||
|
}
|
||
|
|
||
|
// FilePVState stores the mutable part of PrivValidator
|
||
|
type FilePVLastSignState struct {
|
||
|
Height int64 `json:"height"`
|
||
|
Round int `json:"round"`
|
||
|
Step int8 `json:"step"`
|
||
|
Signature []byte `json:"signature,omitempty"`
|
||
|
SignBytes cmn.HexBytes `json:"signbytes,omitempty"`
|
||
|
|
||
|
filePath string
|
||
|
mtx sync.Mutex
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Then we can combine `FilePVKey` with `FilePVLastSignState` and will get the original `FilePV`.
|
||
|
|
||
|
```go
|
||
|
type FilePV struct {
|
||
|
Key FilePVKey
|
||
|
LastSignState FilePVLastSignState
|
||
|
}
|
||
|
```
|
||
|
|
||
|
As discussed, `FilePV` should be located in `config`, and `FilePVLastSignState` should be stored in `data`. The
|
||
|
store path of each file should be specified in `config.yml`.
|
||
|
|
||
|
What we need to do next is changing the methods of `FilePV`.
|
||
|
|
||
|
## Status
|
||
|
|
||
|
Draft.
|
||
|
|
||
|
## Consequences
|
||
|
|
||
|
### Positive
|
||
|
|
||
|
- separate the mutable and immutable of PrivValidator
|
||
|
|
||
|
### Negative
|
||
|
|
||
|
- need to add more config for file path
|
||
|
|
||
|
### Neutral
|