cosmos-sdk/cmd/basecoin/start.go

105 lines
2.4 KiB
Go
Raw Normal View History

2017-01-28 18:12:58 -08:00
package main
import (
"errors"
"github.com/urfave/cli"
"github.com/tendermint/abci/server"
cmn "github.com/tendermint/go-common"
2017-01-29 11:41:21 -08:00
cfg "github.com/tendermint/go-config"
//logger "github.com/tendermint/go-logger"
2017-01-28 18:12:58 -08:00
eyes "github.com/tendermint/merkleeyes/client"
2017-01-29 11:41:21 -08:00
tmcfg "github.com/tendermint/tendermint/config/tendermint"
"github.com/tendermint/tendermint/node"
"github.com/tendermint/tendermint/proxy"
tmtypes "github.com/tendermint/tendermint/types"
"github.com/tendermint/basecoin/app"
2017-01-29 15:32:38 -08:00
"github.com/tendermint/basecoin/plugins/counter"
2017-01-28 18:12:58 -08:00
)
2017-01-29 11:41:21 -08:00
var config cfg.Config
2017-01-28 18:12:58 -08:00
const EyesCacheSize = 10000
func cmdStart(c *cli.Context) error {
// Connect to MerkleEyes
var eyesCli *eyes.Client
if c.String("eyes") == "local" {
eyesCli = eyes.NewLocalClient(c.String("eyes-db"), EyesCacheSize)
} else {
var err error
eyesCli, err = eyes.NewClient(c.String("eyes"))
if err != nil {
return errors.New("connect to MerkleEyes: " + err.Error())
}
}
// Create Basecoin app
2017-01-29 11:41:21 -08:00
basecoinApp := app.NewBasecoin(eyesCli)
2017-01-28 18:12:58 -08:00
2017-01-29 15:32:38 -08:00
switch c.String("plugin") {
case "counter":
basecoinApp.RegisterPlugin(counter.New("counter"))
case "":
// no plugins to register
default:
return errors.New(cmn.Fmt("Unknown plugin: %v", c.String("plugin")))
}
2017-01-28 18:12:58 -08:00
// If genesis file was specified, set key-value options
if c.String("genesis") != "" {
2017-01-29 11:41:21 -08:00
err := basecoinApp.LoadGenesis(c.String("genesis"))
2017-01-28 18:12:58 -08:00
if err != nil {
return errors.New(cmn.Fmt("%+v", err))
}
}
2017-01-29 11:41:21 -08:00
if c.Bool("in-proc") {
startTendermint(c, basecoinApp)
} else {
startBasecoinABCI(c, basecoinApp)
}
return nil
}
func startBasecoinABCI(c *cli.Context, basecoinApp *app.Basecoin) error {
// Start the ABCI listener
svr, err := server.NewServer(c.String("address"), "socket", basecoinApp)
2017-01-28 18:12:58 -08:00
if err != nil {
return errors.New("create listener: " + err.Error())
}
// Wait forever
cmn.TrapSignal(func() {
// Cleanup
svr.Stop()
})
return nil
2017-01-29 11:41:21 -08:00
}
func startTendermint(c *cli.Context, basecoinApp *app.Basecoin) {
// Get configuration
config = tmcfg.GetConfig("")
// logger.SetLogLevel("notice") //config.GetString("log_level"))
// parseFlags(config, args[1:]) // Command line overrides
// Create & start tendermint node
privValidatorFile := config.GetString("priv_validator_file")
privValidator := tmtypes.LoadOrGenPrivValidator(privValidatorFile)
n := node.NewNode(config, privValidator, proxy.NewLocalClientCreator(basecoinApp))
n.Start()
// Wait forever
cmn.TrapSignal(func() {
// Cleanup
n.Stop()
})
2017-01-28 18:12:58 -08:00
}