proper integration of tick functionality

This commit is contained in:
rigelrozanski 2017-10-03 19:01:02 -04:00
parent 20e1b92ad4
commit 6eb884017b
2 changed files with 60 additions and 4 deletions

View File

@ -28,12 +28,16 @@ type Basecoin struct {
state *Store
handler sdk.Handler
tick Ticker
pending []*abci.Validator
height uint64
logger log.Logger
}
// Ticker - tick function
type Ticker func(sm.SimpleDB) ([]*abci.Validator, error)
var _ abci.Application = &Basecoin{}
// NewBasecoin - create a new instance of the basecoin application
@ -46,6 +50,17 @@ func NewBasecoin(handler sdk.Handler, store *Store, logger log.Logger) *Basecoin
}
}
// NewBasecoinTick - create a new instance of the basecoin application with tick functionality
func NewBasecoinTick(handler sdk.Handler, store *Store, logger log.Logger, tick Ticker) *Basecoin {
return &Basecoin{
handler: handler,
info: sm.NewChainState(),
state: store,
logger: logger,
tick: tick,
}
}
// GetChainID returns the currently stored chain
func (app *Basecoin) GetChainID() string {
return app.info.GetChainID(app.state.Committed())
@ -170,6 +185,14 @@ func (app *Basecoin) BeginBlock(req abci.RequestBeginBlock) {
// for _, plugin := range app.plugins.GetList() {
// plugin.BeginBlock(app.state, hash, header)
// }
if app.tick != nil {
diff, err := app.tick(app.state.Append())
if err != nil {
panic(err)
}
app.addValChange(diff)
}
}
// EndBlock - ABCI

View File

@ -9,8 +9,8 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/viper"
sdk "github.com/cosmos/cosmos-sdk"
"github.com/tendermint/abci/server"
abci "github.com/tendermint/abci/types"
"github.com/tendermint/tmlibs/cli"
cmn "github.com/tendermint/tmlibs/common"
@ -19,6 +19,7 @@ import (
"github.com/tendermint/tendermint/proxy"
"github.com/tendermint/tendermint/types"
sdk "github.com/cosmos/cosmos-sdk"
"github.com/cosmos/cosmos-sdk/app"
)
@ -29,6 +30,15 @@ var StartCmd = &cobra.Command{
RunE: startCmd,
}
// TickStartCmd - command to create a start command with tick
func TickStartCmd(tick app.Ticker) *cobra.Command {
return &cobra.Command{
Use: "start",
Short: "Start this full node",
RunE: tickStartCmd(tick),
}
}
// nolint TODO: move to config file
const EyesCacheSize = 10000
@ -52,6 +62,26 @@ func init() {
tcmd.AddNodeFlags(StartCmd)
}
//returns the start command which uses the tick
func tickStartCmd(tick app.Ticker) func(cmd *cobra.Command, args []string) error {
return func(cmd *cobra.Command, args []string) error {
rootDir := viper.GetString(cli.HomeFlag)
store, err := app.NewStore(
path.Join(rootDir, "data", "merkleeyes.db"),
EyesCacheSize,
logger.With("module", "store"),
)
if err != nil {
return err
}
// Create Basecoin app
basecoinApp := app.NewBasecoinTick(Handler, store, logger.With("module", "app"), tick)
return start(rootDir, store, basecoinApp)
}
}
func startCmd(cmd *cobra.Command, args []string) error {
rootDir := viper.GetString(cli.HomeFlag)
@ -63,9 +93,12 @@ func startCmd(cmd *cobra.Command, args []string) error {
if err != nil {
return err
}
// Create Basecoin app
basecoinApp := app.NewBasecoin(Handler, store, logger.With("module", "app"))
return start(rootDir, store, basecoinApp)
}
func start(rootDir string, store *app.Store, basecoinApp *app.Basecoin) error {
// if chain_id has not been set yet, load the genesis.
// else, assume it's been loaded
@ -93,7 +126,7 @@ func startCmd(cmd *cobra.Command, args []string) error {
return startTendermint(rootDir, basecoinApp)
}
func startBasecoinABCI(basecoinApp *app.Basecoin) error {
func startBasecoinABCI(basecoinApp abci.Application) error {
// Start the ABCI listener
addr := viper.GetString(FlagAddress)
svr, err := server.NewServer(addr, "socket", basecoinApp)
@ -111,7 +144,7 @@ func startBasecoinABCI(basecoinApp *app.Basecoin) error {
return nil
}
func startTendermint(dir string, basecoinApp *app.Basecoin) error {
func startTendermint(dir string, basecoinApp abci.Application) error {
cfg, err := tcmd.ParseConfig()
if err != nil {
return err