diff --git a/cmd/serve.go b/cmd/serve.go index 0f560031deb931f4110f13828846c16514274928..b355d884dcd2e8835159815008bf467d80c9756f 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -145,6 +145,10 @@ func Serve(cmd *cobra.Command, args []string) { log.Fatalf("Failed to start servers: %s.", err) os.Exit(1) } + _, err = newCore.NewGatewayTendermint(serverConfig) + if err != nil { + log.Fatalf("Failed to start Tendermint gateway") + } <- serverProcess.StopEventChannel() } diff --git a/core/core.go b/core/core.go index 97d251ea30db4f494aab24ee3e75e4d8c1a9957a..ca69aadb064ca6810c81554eebbc0da2cff21686 100644 --- a/core/core.go +++ b/core/core.go @@ -31,9 +31,8 @@ import ( manager "github.com/eris-ltd/eris-db/manager" // rpc_v0 is carried over from Eris-DBv0.11 and before on port 1337 rpc_v0 "github.com/eris-ltd/eris-db/rpc/v0" - rpc_tendermint "github.com/eris-ltd/eris-db/rpc/tendermint/core" // rpc_tendermint is carried over from Eris-DBv0.11 and before on port 46657 - // rpc_tendermint "github.com/eris-ltd/eris-db/rpc/tendermint" + rpc_tendermint "github.com/eris-ltd/eris-db/rpc/tendermint/core" server "github.com/eris-ltd/eris-db/server" ) @@ -60,11 +59,22 @@ func NewCore(chainId string, consensusConfig *config.ModuleConfig, log.Debug("Loaded pipe with application manager") // pass the consensus engine into the pipe consensus.LoadConsensusEngineInPipe(consensusConfig, pipe) - + tendermintPipe, err := pipe.GetTendermintPipe() + if err != nil { + log.Warn(fmt.Sprintf("Tendermint gateway not supported by %s", + managerConfig.Version)) + return &Core{ + chainId: chainId, + evsw: evsw, + pipe: pipe, + tendermintPipe: nil, + }, nil + } return &Core{ - chainId: chainId, - evsw: evsw, - pipe: pipe, + chainId: chainId, + evsw: evsw, + pipe: pipe, + tendermintPipe: tendermintPipe, }, nil } @@ -109,36 +119,3 @@ func (core *Core) NewGatewayTendermint(config *server.ServerConfig) ( return rpc_tendermint.NewTendermintWebsocketServer(config, core.tendermintPipe, core.evsw) } - -// func (core *Core) StartRPC(config server.ServerConfig) ([]net.Listener, error) { -// rpc_tendermint.SetConfig(config) -// -// rpc_tendermint.SetErisMint(core.pipe.GetApplication()) -// rpc_tendermint.SetBlockStore(n.BlockStore()) -// rpc_tendermint.SetConsensusState(n.ConsensusState()) -// rpc_tendermint.SetConsensusReactor(n.ConsensusReactor()) -// rpc_tendermint.SetMempoolReactor(n.MempoolReactor()) -// rpc_tendermint.SetSwitch(n.Switch()) -// rpc_tendermint.SetPrivValidator(n.PrivValidator()) -// // TODO: programming -// //rpc_tendermint.SetGenDoc(LoadGenDoc(config.GetString("genesis_file"))) -// -// // TODO: also programming -// //listenAddrs := strings.Split(config.GetString("rpc_laddr"), ",") -// listenAddrs := strings.Split("127.0.0.1", ",") -// -// // we may expose the rpc over both a unix and tcp socket -// listeners := make([]net.Listener, len(listenAddrs)) -// for i, listenAddr := range listenAddrs { -// mux := http.NewServeMux() -// wm := rpcserver.NewWebsocketManager(rpc_tendermint.Routes, n.EventSwitch()) -// mux.HandleFunc("/websocket", wm.WebsocketHandler) -// rpcserver.RegisterRPCFuncs(mux, rpc_tendermint.Routes) -// listener, err := rpcserver.StartHTTPServer(listenAddr, mux) -// if err != nil { -// return nil, err -// } -// listeners[i] = listener -// } -// return listeners, nil -// } diff --git a/definitions/pipe.go b/definitions/pipe.go index 070c3d22bdc1b4ca3b226f4e5aa7937fbac38c56..f3c6978df937e19eb49b5a703f76048247ba08de 100644 --- a/definitions/pipe.go +++ b/definitions/pipe.go @@ -45,6 +45,8 @@ type Pipe interface { // NOTE: [ben] added to Pipe interface on 0.12 refactor GetApplication() manager_types.Application SetConsensusEngine(consensus ConsensusEngine) error + // Support for Tendermint RPC + GetTendermintPipe() (TendermintPipe, error) } type Accounts interface { diff --git a/manager/eris-mint/pipe.go b/manager/eris-mint/pipe.go index c7b68461f175c49fb9b075fec73d9bef579805e6..bf322ee7660cfba53fabdac0ec251114ad7da9a0 100644 --- a/manager/eris-mint/pipe.go +++ b/manager/eris-mint/pipe.go @@ -62,8 +62,8 @@ type ErisMintPipe struct { var _ definitions.Pipe = (*ErisMintPipe)(nil) // NOTE [ben] Compiler check to ensure ErisMintPipe successfully implements -// eris-db/definitions.TendermintPipe -// var _ definitions.TendermintPipe = (*ErisMintPipe)(nil) +// eris-db/definitions.erisTendermintPipe +var _ definitions.TendermintPipe = (*ErisMintPipe)(nil) func NewErisMintPipe(moduleConfig *config.ModuleConfig, eventSwitch *tendermint_events.EventSwitch) (*ErisMintPipe, error) { @@ -208,6 +208,11 @@ func (pipe *ErisMintPipe) SetConsensusEngine( return nil } +func (pipe *ErisMintPipe) GetTendermintPipe() (definitions.TendermintPipe, + error) { + return definitions.TendermintPipe(pipe), nil +} + //------------------------------------------------------------------------------ // Implement definitions.TendermintPipe for ErisMintPipe