diff --git a/consensus/tendermint/tendermint.go b/consensus/tendermint/tendermint.go index b294708a2ec67613910c588d66045884770671ba..9b80324206d1a3b6a10a5aa5ef530a62c1edf4a9 100644 --- a/consensus/tendermint/tendermint.go +++ b/consensus/tendermint/tendermint.go @@ -33,9 +33,10 @@ import ( log "github.com/eris-ltd/eris-logger" - config "github.com/eris-ltd/eris-db/config" - definitions "github.com/eris-ltd/eris-db/definitions" - manager_types "github.com/eris-ltd/eris-db/manager/types" + config "github.com/eris-ltd/eris-db/config" + definitions "github.com/eris-ltd/eris-db/definitions" + manager_types "github.com/eris-ltd/eris-db/manager/types" + rpc_tendermint_types "github.com/eris-ltd/eris-db/rpc/tendermint/core/types" // files "github.com/eris-ltd/eris-db/files" ) @@ -147,6 +148,28 @@ func (this *TendermintNode) LoadBlockMeta(height int) *tendermint_types.BlockMet return this.tmintNode.BlockStore().LoadBlockMeta(height) } +func (this *TendermintNode) IsListening() bool { + return this.tmintNode.Switch().IsListening() +} + +func (this *TendermintNode) Listeners() []p2p.Listener { + var copyListeners []p2p.Listener + // copy slice of Listeners + copy(copyListeners[:], this.tmintNode.Switch().Listeners()) + return copyListeners +} + +func (this *TendermintNode) Peers() []rpc_tendermint_types.Peer { + peers := []rpc_tendermint_types.Peer{} + for _, peer := range this.tmintNode.Switch().Peers().List() { + peers = append(peers, rpc_tendermint_types.Peer { + NodeInfo: *peer.NodeInfo, + IsOutbound: peer.IsOutbound(), + }) + } + return peers +} + func (this *TendermintNode) NodeInfo() *p2p.NodeInfo { var copyNodeInfo = new(p2p.NodeInfo) // call Switch().NodeInfo is not go-routine safe, so copy diff --git a/core/core.go b/core/core.go index ca69aadb064ca6810c81554eebbc0da2cff21686..43b54402745d1f7b447c900547fd79924d8716c3 100644 --- a/core/core.go +++ b/core/core.go @@ -63,14 +63,14 @@ func NewCore(chainId string, consensusConfig *config.ModuleConfig, if err != nil { log.Warn(fmt.Sprintf("Tendermint gateway not supported by %s", managerConfig.Version)) - return &Core{ + return &Core { chainId: chainId, evsw: evsw, pipe: pipe, tendermintPipe: nil, }, nil } - return &Core{ + return &Core { chainId: chainId, evsw: evsw, pipe: pipe, diff --git a/definitions/consensus.go b/definitions/consensus.go index f2546c8ecbc7461ea6dbedab5626491c2569c62b..20735cb2e925d6091360eb7972082594d2fd7997 100644 --- a/definitions/consensus.go +++ b/definitions/consensus.go @@ -20,6 +20,8 @@ import ( crypto "github.com/tendermint/go-crypto" p2p "github.com/tendermint/go-p2p" tendermint_types "github.com/tendermint/tendermint/types" + + rpc_tendermint_types "github.com/eris-ltd/eris-db/rpc/tendermint/core/types" ) // TODO: [ben] explore the value of abstracting the consensus into an interface @@ -32,10 +34,14 @@ type ConsensusEngine interface { LoadBlockMeta(height int) *tendermint_types.BlockMeta // Peer-2-Peer + IsListening() bool + Listeners() []p2p.Listener NodeInfo() *p2p.NodeInfo + Peers() []rpc_tendermint_types.Peer // Private Validator PublicValidatorKey() crypto.PubKey + } // type Communicator interface { diff --git a/manager/eris-mint/pipe.go b/manager/eris-mint/pipe.go index bf322ee7660cfba53fabdac0ec251114ad7da9a0..5845397084d6eb3a91aba5c1c1ed57b4fc35f6c7 100644 --- a/manager/eris-mint/pipe.go +++ b/manager/eris-mint/pipe.go @@ -246,7 +246,17 @@ func (pipe *ErisMintPipe) Status() (*rpc_tendermint_types.ResultStatus, error) { } func (pipe *ErisMintPipe) NetInfo() (*rpc_tendermint_types.ResultNetInfo, error) { - return nil, fmt.Errorf("Unimplemented.") + listening := pipe.consensusEngine.IsListening() + listeners := []string{} + for _, listener := range pipe.consensusEngine.Listeners() { + listeners = append(listeners, listener.String()) + } + peers := pipe.consensusEngine.Peers() + return &rpc_tendermint_types.ResultNetInfo{ + Listening: listening, + Listeners: listeners, + Peers: peers, + }, nil } func (pipe *ErisMintPipe) Genesis() (*rpc_tendermint_types.ResultGenesis, error) { diff --git a/rpc/tendermint/core/net.go b/rpc/tendermint/core/net.go index ae06c6033e0e6f6c42bec0ef6d22ab98dca4d56f..a515f3a494de49f911b05ebf1295fc0a2f6663fa 100644 --- a/rpc/tendermint/core/net.go +++ b/rpc/tendermint/core/net.go @@ -3,64 +3,64 @@ package core import ( ctypes "github.com/eris-ltd/eris-db/rpc/tendermint/core/types" sm "github.com/eris-ltd/eris-db/manager/eris-mint/state" - "github.com/tendermint/tendermint/types" + // "github.com/tendermint/tendermint/types" - dbm "github.com/tendermint/go-db" + // dbm "github.com/tendermint/go-db" ) - +// TODO:[ben] remove commented code //----------------------------------------------------------------------------- // cache the genesis state var genesisState *sm.State -func Status() (*ctypes.ResultStatus, error) { - db := dbm.NewMemDB() - if genesisState == nil { - genesisState = sm.MakeGenesisState(db, genDoc) - } - genesisHash := genesisState.Hash() - latestHeight := blockStore.Height() - var ( - latestBlockMeta *types.BlockMeta - latestBlockHash []byte - latestBlockTime int64 - ) - if latestHeight != 0 { - latestBlockMeta = blockStore.LoadBlockMeta(latestHeight) - latestBlockHash = latestBlockMeta.Hash - latestBlockTime = latestBlockMeta.Header.Time.UnixNano() - } - - return &ctypes.ResultStatus{ - NodeInfo: p2pSwitch.NodeInfo(), - GenesisHash: genesisHash, - PubKey: privValidator.PubKey, - LatestBlockHash: latestBlockHash, - LatestBlockHeight: latestHeight, - LatestBlockTime: latestBlockTime}, nil -} +// func Status() (*ctypes.ResultStatus, error) { +// db := dbm.NewMemDB() +// if genesisState == nil { +// genesisState = sm.MakeGenesisState(db, genDoc) +// } +// genesisHash := genesisState.Hash() +// latestHeight := blockStore.Height() +// var ( +// latestBlockMeta *types.BlockMeta +// latestBlockHash []byte +// latestBlockTime int64 +// ) +// if latestHeight != 0 { +// latestBlockMeta = blockStore.LoadBlockMeta(latestHeight) +// latestBlockHash = latestBlockMeta.Hash +// latestBlockTime = latestBlockMeta.Header.Time.UnixNano() +// } +// +// return &ctypes.ResultStatus{ +// NodeInfo: p2pSwitch.NodeInfo(), +// GenesisHash: genesisHash, +// PubKey: privValidator.PubKey, +// LatestBlockHash: latestBlockHash, +// LatestBlockHeight: latestHeight, +// LatestBlockTime: latestBlockTime}, nil +// } //----------------------------------------------------------------------------- -func NetInfo() (*ctypes.ResultNetInfo, error) { - listening := p2pSwitch.IsListening() - listeners := []string{} - for _, listener := range p2pSwitch.Listeners() { - listeners = append(listeners, listener.String()) - } - peers := []ctypes.Peer{} - for _, peer := range p2pSwitch.Peers().List() { - peers = append(peers, ctypes.Peer{ - NodeInfo: *peer.NodeInfo, - IsOutbound: peer.IsOutbound(), - }) - } - return &ctypes.ResultNetInfo{ - Listening: listening, - Listeners: listeners, - Peers: peers, - }, nil -} +// func NetInfo() (*ctypes.ResultNetInfo, error) { +// listening := p2pSwitch.IsListening() +// listeners := []string{} +// for _, listener := range p2pSwitch.Listeners() { +// listeners = append(listeners, listener.String()) +// } +// peers := []ctypes.Peer{} +// for _, peer := range p2pSwitch.Peers().List() { +// peers = append(peers, ctypes.Peer{ +// NodeInfo: *peer.NodeInfo, +// IsOutbound: peer.IsOutbound(), +// }) +// } +// return &ctypes.ResultNetInfo{ +// Listening: listening, +// Listeners: listeners, +// Peers: peers, +// }, nil +// } //----------------------------------------------------------------------------- diff --git a/rpc/tendermint/core/pipe.go b/rpc/tendermint/core/pipe.go index fa124670a6704c84f7f8b54d82077cd2fc4f7035..2d06c3c1d30333b9da7efb558cba469ae7069940 100644 --- a/rpc/tendermint/core/pipe.go +++ b/rpc/tendermint/core/pipe.go @@ -28,7 +28,7 @@ func SetConfig(c server.ServerConfig) { config = c } -func SetErisMint(em *erismint.ErisMint) { +func SetApplication(em *erismint.ErisMint) { erisMint = em }