|
package core
|
|
|
|
import (
|
|
"github.com/tendermint/go-wire"
|
|
cm "github.com/tendermint/tendermint/consensus"
|
|
ctypes "github.com/tendermint/tendermint/rpc/core/types"
|
|
"github.com/tendermint/tendermint/types"
|
|
)
|
|
|
|
func Validators() (*ctypes.ResultValidators, error) {
|
|
var blockHeight int
|
|
var validators []*types.Validator
|
|
|
|
// XXX: this is racy.
|
|
// Either use state.LoadState(db) or make state atomic (see #165)
|
|
state := consensusState.GetState()
|
|
blockHeight = state.LastBlockHeight
|
|
state.Validators.Iterate(func(index int, val *types.Validator) bool {
|
|
validators = append(validators, val)
|
|
return false
|
|
})
|
|
|
|
return &ctypes.ResultValidators{blockHeight, validators}, nil
|
|
}
|
|
|
|
func DumpConsensusState() (*ctypes.ResultDumpConsensusState, error) {
|
|
roundState := consensusState.GetRoundState()
|
|
peerRoundStates := []string{}
|
|
for _, peer := range p2pSwitch.Peers().List() {
|
|
// TODO: clean this up?
|
|
peerState := peer.Data.Get(types.PeerStateKey).(*cm.PeerState)
|
|
peerRoundState := peerState.GetRoundState()
|
|
peerRoundStateStr := peer.Key + ":" + string(wire.JSONBytes(peerRoundState))
|
|
peerRoundStates = append(peerRoundStates, peerRoundStateStr)
|
|
}
|
|
return &ctypes.ResultDumpConsensusState{roundState.String(), peerRoundStates}, nil
|
|
}
|