tendermint源码阅读(九)
2018-11-09 本文已影响42人
印随2018
关注点:validator
一个Tendermint 节点要想要变成validator的话,有两个途径
- 在genesis.json中内置
- 创建create_validator交易
这里的关键逻辑就是把validator和delegator创建关联关系,validator获得的奖励就会发送到delegator的账户中。这个过程类似于以太坊中设置basecoin账户。
如果是想移动validator节点,只需要移动priv_validator.json文件即可,原来的节点需要删除priv_validator.json,然后重新启动就可以了。
下面是加载priv_validator.json的逻辑
github.com/tendermint/tendermint/privval/priv_validator.go
// LoadOrGenFilePV loads a FilePV from the given filePath
// or else generates a new one and saves it to the filePath.
func LoadOrGenFilePV(filePath string) *FilePV {
var pv *FilePV
if cmn.FileExists(filePath) {
pv = LoadFilePV(filePath)
} else {
pv = GenFilePV(filePath)
pv.Save()
}
return pv
}
上面可以看出,如果配置文件不存在的话,就自动创建一个。这就说明配置文件priv_validator.json我们可以随时删除,tendermint就会重新生成一个新的配置文件。
注意: 在移动priv-validator.json的时候,务必删除文件里名称为last_*的所有字段,因为这几个字段保存了和链相关的状态信息。