package core import ( "github.com/tendermint/tendermint/binary" cm "github.com/tendermint/tendermint/consensus" ctypes "github.com/tendermint/tendermint/rpc/core/types" sm "github.com/tendermint/tendermint/state" ) func ListValidators() (*ctypes.ResponseListValidators, error) { var blockHeight uint var bondedValidators []*sm.Validator var unbondingValidators []*sm.Validator state := consensusState.GetState() blockHeight = state.LastBlockHeight state.BondedValidators.Iterate(func(index uint, val *sm.Validator) bool { bondedValidators = append(bondedValidators, val) return false }) state.UnbondingValidators.Iterate(func(index uint, val *sm.Validator) bool { unbondingValidators = append(unbondingValidators, val) return false }) return &ctypes.ResponseListValidators{blockHeight, bondedValidators, unbondingValidators}, nil } func DumpConsensusState() (*ctypes.ResponseDumpConsensusState, error) { roundState := consensusState.GetRoundState() peerRoundStates := []string{} for _, peer := range p2pSwitch.Peers().List() { // TODO: clean this up? peerState := peer.Data.Get(cm.PeerStateKey).(*cm.PeerState) peerRoundState := peerState.GetRoundState() peerRoundStateStr := peer.Key + ":" + string(binary.JSONBytes(peerRoundState)) peerRoundStates = append(peerRoundStates, peerRoundStateStr) } return &ctypes.ResponseDumpConsensusState{roundState.String(), peerRoundStates}, nil }