You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1.8 KiB

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 #2657 #2313

Proposed Solution

We can split mutable and immutable parts with two structs:

// 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.

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

Accepted and implemented in #2870.

Consequences

Positive

  • separate the mutable and immutable of PrivValidator

Negative

  • need to add more config for file path

Neutral