diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 223da0ea5..1da26fe3f 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -49,7 +49,6 @@ type BaseApp struct { // must be set txDecoder sdk.TxDecoder // unmarshal []byte into sdk.Tx anteHandler sdk.AnteHandler // ante handler for fee and auth - txGasLimit sdk.Gas // per-transaction gas limit // may be nil initChainer sdk.InitChainer // initialize state with validators and state blob @@ -74,7 +73,7 @@ var _ abci.Application = (*BaseApp)(nil) // Create and name new BaseApp // NOTE: The db is used to store the version number for now. -func NewBaseApp(name string, cdc *wire.Codec, logger log.Logger, db dbm.DB, txGasLimit sdk.Gas) *BaseApp { +func NewBaseApp(name string, cdc *wire.Codec, logger log.Logger, db dbm.DB) *BaseApp { app := &BaseApp{ Logger: logger, name: name, @@ -84,7 +83,6 @@ func NewBaseApp(name string, cdc *wire.Codec, logger log.Logger, db dbm.DB, txGa router: NewRouter(), codespacer: sdk.NewCodespacer(), txDecoder: defaultTxDecoder(cdc), - txGasLimit: txGasLimit, } // Register the undefined & root codespaces, which should not be used by any modules app.codespacer.RegisterOrPanic(sdk.CodespaceUndefined) @@ -235,9 +233,9 @@ func (app *BaseApp) initFromStore(mainKey sdk.StoreKey) error { // NewContext returns a new Context with the correct store, the given header, and nil txBytes. func (app *BaseApp) NewContext(isCheckTx bool, header abci.Header) sdk.Context { if isCheckTx { - return sdk.NewContext(app.checkState.ms, header, true, nil, app.Logger, app.txGasLimit) + return sdk.NewContext(app.checkState.ms, header, true, nil, app.Logger, 0) } - return sdk.NewContext(app.deliverState.ms, header, false, nil, app.Logger, app.txGasLimit) + return sdk.NewContext(app.deliverState.ms, header, false, nil, app.Logger, 0) } type state struct { @@ -253,7 +251,7 @@ func (app *BaseApp) setCheckState(header abci.Header) { ms := app.cms.CacheMultiStore() app.checkState = &state{ ms: ms, - ctx: sdk.NewContext(ms, header, true, nil, app.Logger, app.txGasLimit), + ctx: sdk.NewContext(ms, header, true, nil, app.Logger, 0), } } @@ -261,7 +259,7 @@ func (app *BaseApp) setDeliverState(header abci.Header) { ms := app.cms.CacheMultiStore() app.deliverState = &state{ ms: ms, - ctx: sdk.NewContext(ms, header, false, nil, app.Logger, app.txGasLimit), + ctx: sdk.NewContext(ms, header, false, nil, app.Logger, 0), } } diff --git a/baseapp/baseapp_test.go b/baseapp/baseapp_test.go index 25de7ef7e..969a9f9ad 100644 --- a/baseapp/baseapp_test.go +++ b/baseapp/baseapp_test.go @@ -29,7 +29,7 @@ func newBaseApp(name string) *BaseApp { db := dbm.NewMemDB() codec := wire.NewCodec() wire.RegisterCrypto(codec) - return NewBaseApp(name, codec, logger, db, 10000) + return NewBaseApp(name, codec, logger, db) } func TestMountStores(t *testing.T) { @@ -63,7 +63,7 @@ func TestLoadVersion(t *testing.T) { logger := defaultLogger() db := dbm.NewMemDB() name := t.Name() - app := NewBaseApp(name, nil, logger, db, 10000) + app := NewBaseApp(name, nil, logger, db) // make a cap key and mount the store capKey := sdk.NewKVStoreKey("main") @@ -85,7 +85,7 @@ func TestLoadVersion(t *testing.T) { commitID := sdk.CommitID{1, res.Data} // reload - app = NewBaseApp(name, nil, logger, db, 10000) + app = NewBaseApp(name, nil, logger, db) app.MountStoresIAVL(capKey) err = app.LoadLatestVersion(capKey) // needed to make stores non-nil assert.Nil(t, err) @@ -151,7 +151,7 @@ func TestInitChainer(t *testing.T) { name := t.Name() db := dbm.NewMemDB() logger := defaultLogger() - app := NewBaseApp(name, nil, logger, db, 10000) + app := NewBaseApp(name, nil, logger, db) // make cap keys and mount the stores // NOTE/TODO: mounting multiple stores is broken // see https://github.com/cosmos/cosmos-sdk/issues/532 @@ -188,7 +188,7 @@ func TestInitChainer(t *testing.T) { assert.Equal(t, value, res.Value) // reload app - app = NewBaseApp(name, nil, logger, db, 10000) + app = NewBaseApp(name, nil, logger, db) app.MountStoresIAVL(capKey, capKey2) err = app.LoadLatestVersion(capKey) // needed to make stores non-nil assert.Nil(t, err) @@ -328,7 +328,7 @@ func TestSimulateTx(t *testing.T) { func TestTxGasLimits(t *testing.T) { logger := defaultLogger() db := dbm.NewMemDB() - app := NewBaseApp(t.Name(), nil, logger, db, 0) + app := NewBaseApp(t.Name(), nil, logger, db) // make a cap key and mount the store capKey := sdk.NewKVStoreKey("main") @@ -336,7 +336,10 @@ func TestTxGasLimits(t *testing.T) { err := app.LoadLatestVersion(capKey) // needed to make stores non-nil assert.Nil(t, err) - app.SetAnteHandler(func(ctx sdk.Context, tx sdk.Tx) (newCtx sdk.Context, res sdk.Result, abort bool) { return }) + app.SetAnteHandler(func(ctx sdk.Context, tx sdk.Tx) (newCtx sdk.Context, res sdk.Result, abort bool) { + newCtx = ctx.WithGasMeter(sdk.NewGasMeter(0)) + return + }) app.Router().AddRoute(msgType, func(ctx sdk.Context, msg sdk.Msg) sdk.Result { ctx.GasMeter().ConsumeGas(10, "counter") return sdk.Result{} diff --git a/cmd/gaia/app/app.go b/cmd/gaia/app/app.go index eac94bf5e..5ff532bff 100644 --- a/cmd/gaia/app/app.go +++ b/cmd/gaia/app/app.go @@ -51,7 +51,7 @@ func NewGaiaApp(logger log.Logger, db dbm.DB) *GaiaApp { // create your application object var app = &GaiaApp{ - BaseApp: bam.NewBaseApp(appName, cdc, logger, db, 1000000), + BaseApp: bam.NewBaseApp(appName, cdc, logger, db), cdc: cdc, keyMain: sdk.NewKVStoreKey("main"), keyAccount: sdk.NewKVStoreKey("acc"), diff --git a/examples/basecoin/app/app.go b/examples/basecoin/app/app.go index 06c493d91..b1a434fa2 100644 --- a/examples/basecoin/app/app.go +++ b/examples/basecoin/app/app.go @@ -48,7 +48,7 @@ func NewBasecoinApp(logger log.Logger, db dbm.DB) *BasecoinApp { // Create your application object. var app = &BasecoinApp{ - BaseApp: bam.NewBaseApp(appName, cdc, logger, db, 1000000), + BaseApp: bam.NewBaseApp(appName, cdc, logger, db), cdc: cdc, keyMain: sdk.NewKVStoreKey("main"), keyAccount: sdk.NewKVStoreKey("acc"), diff --git a/examples/democoin/app/app.go b/examples/democoin/app/app.go index 7f6c5fd4d..7c8250b18 100644 --- a/examples/democoin/app/app.go +++ b/examples/democoin/app/app.go @@ -56,7 +56,7 @@ func NewDemocoinApp(logger log.Logger, db dbm.DB) *DemocoinApp { // Create your application object. var app = &DemocoinApp{ - BaseApp: bam.NewBaseApp(appName, cdc, logger, db, 1000000), + BaseApp: bam.NewBaseApp(appName, cdc, logger, db), cdc: cdc, capKeyMainStore: sdk.NewKVStoreKey("main"), capKeyAccountStore: sdk.NewKVStoreKey("acc"), diff --git a/examples/kvstore/main.go b/examples/kvstore/main.go index bd10d31e9..856538f63 100644 --- a/examples/kvstore/main.go +++ b/examples/kvstore/main.go @@ -32,7 +32,7 @@ func main() { var capKeyMainStore = sdk.NewKVStoreKey("main") // Create BaseApp. - var baseApp = bam.NewBaseApp("kvstore", nil, logger, db, 10000) + var baseApp = bam.NewBaseApp("kvstore", nil, logger, db) // Set mounts for BaseApp's MultiStore. baseApp.MountStoresIAVL(capKeyMainStore) diff --git a/mock/app.go b/mock/app.go index 4799b726a..ab1a8447a 100644 --- a/mock/app.go +++ b/mock/app.go @@ -29,7 +29,7 @@ func NewApp(rootDir string, logger log.Logger) (abci.Application, error) { capKeyMainStore := sdk.NewKVStoreKey("main") // Create BaseApp. - baseApp := bam.NewBaseApp("kvstore", nil, logger, db, 10000) + baseApp := bam.NewBaseApp("kvstore", nil, logger, db) // Set mounts for BaseApp's MultiStore. baseApp.MountStoresIAVL(capKeyMainStore) diff --git a/types/context.go b/types/context.go index 50619f9b7..4ffd88160 100644 --- a/types/context.go +++ b/types/context.go @@ -43,7 +43,7 @@ func NewContext(ms MultiStore, header abci.Header, isCheckTx bool, txBytes []byt c = c.WithIsCheckTx(isCheckTx) c = c.WithTxBytes(txBytes) c = c.WithLogger(logger) - c = c.WithGasMeter(NewGasMeter(gasLimit)) + c = c.WithGasMeter(NewInfiniteGasMeter()) return c } diff --git a/types/gas.go b/types/gas.go index 78246be2d..49bfa27ec 100644 --- a/types/gas.go +++ b/types/gas.go @@ -38,3 +38,21 @@ func (g *basicGasMeter) ConsumeGas(amount Gas, descriptor string) { panic(ErrorOutOfGas{descriptor}) } } + +type infiniteGasMeter struct { + consumed Gas +} + +func NewInfiniteGasMeter() GasMeter { + return &infiniteGasMeter{ + consumed: 0, + } +} + +func (g *infiniteGasMeter) GasConsumed() Gas { + return g.consumed +} + +func (g *infiniteGasMeter) ConsumeGas(amount Gas, descriptor string) { + g.consumed += amount +}