package app import ( abci "github.com/tendermint/abci/types" sdk "github.com/cosmos/cosmos-sdk" "github.com/cosmos/cosmos-sdk/errors" "github.com/cosmos/cosmos-sdk/util" ) // BaseApp - The ABCI application type BaseApp struct { *StoreApp handler sdk.Handler clock sdk.Ticker } var _ abci.Application = &BaseApp{} // NewBaseApp extends a StoreApp with a handler and a ticker, // which it binds to the proper abci calls func NewBaseApp(store *StoreApp, handler sdk.Handler, clock sdk.Ticker) *BaseApp { return &BaseApp{ StoreApp: store, handler: handler, clock: clock, } } // DeliverTx - ABCI - dispatches to the handler func (app *BaseApp) DeliverTx(txBytes []byte) abci.Result { // TODO: use real context on refactor ctx := util.MockContext( app.GetChainID(), app.WorkingHeight(), ) // Note: first decorator must parse bytes res, err := app.handler.DeliverTx(ctx, app.Append(), txBytes) if err != nil { return errors.Result(err) } app.AddValChange(res.Diff) return sdk.ToABCI(res) } // CheckTx - ABCI - dispatches to the handler func (app *BaseApp) CheckTx(txBytes []byte) abci.Result { // TODO: use real context on refactor ctx := util.MockContext( app.GetChainID(), app.WorkingHeight(), ) // Note: first decorator must parse bytes res, err := app.handler.CheckTx(ctx, app.Check(), txBytes) if err != nil { return errors.Result(err) } return sdk.ToABCI(res) } // BeginBlock - ABCI - triggers Tick actions func (app *BaseApp) BeginBlock(req abci.RequestBeginBlock) { // execute tick if present if app.clock != nil { ctx := util.MockContext( app.GetChainID(), app.WorkingHeight(), ) diff, err := app.clock.Tick(ctx, app.Append()) if err != nil { panic(err) } app.AddValChange(diff) } }