diff --git a/examples/democoin/x/pow/handler_test.go b/examples/democoin/x/pow/handler_test.go index 48e9c53e76..df83125025 100644 --- a/examples/democoin/x/pow/handler_test.go +++ b/examples/democoin/x/pow/handler_test.go @@ -20,7 +20,7 @@ func TestPowHandler(t *testing.T) { auth.RegisterBaseAccount(cdc) am := auth.NewAccountMapper(cdc, capKey, &auth.BaseAccount{}) - ctx := sdk.NewContext(ms, abci.Header{}, false, nil, log.NewNopLogger(), 0) + ctx := sdk.NewContext(ms, abci.Header{}, false, nil, log.NewNopLogger(), 1000) config := NewConfig("pow", int64(1)) ck := bank.NewKeeper(am) keeper := NewKeeper(capKey, config, ck, DefaultCodespace) diff --git a/x/bank/keeper.go b/x/bank/keeper.go index 8bcbb2c867..efb2f01092 100644 --- a/x/bank/keeper.go +++ b/x/bank/keeper.go @@ -119,6 +119,9 @@ func getCoins(ctx sdk.Context, am sdk.AccountMapper, addr sdk.Address) (sdk.Coin } func setCoins(ctx sdk.Context, am sdk.AccountMapper, addr sdk.Address, amt sdk.Coins) sdk.Error { + if ctx.GasMeter().ConsumeGasOrFail(100) { + return sdk.ErrOutOfGas("out of gas in setCoins") + } acc := am.GetAccount(ctx, addr) if acc == nil { acc = am.NewAccountWithAddress(ctx, addr) diff --git a/x/bank/keeper_test.go b/x/bank/keeper_test.go index 430b87c736..a711a893c4 100644 --- a/x/bank/keeper_test.go +++ b/x/bank/keeper_test.go @@ -135,6 +135,31 @@ func TestKeeper(t *testing.T) { } +func TestKeeperGas(t *testing.T) { + ms, authKey := setupMultiStore() + + cdc := wire.NewCodec() + auth.RegisterBaseAccount(cdc) + + ctx := sdk.NewContext(ms, abci.Header{}, false, nil, log.NewNopLogger(), 10) + accountMapper := auth.NewAccountMapper(cdc, authKey, &auth.BaseAccount{}) + coinKeeper := NewKeeper(accountMapper) + + addr := sdk.Address([]byte("addr1")) + acc := accountMapper.NewAccountWithAddress(ctx, addr) + + // Test GetCoins/SetCoins + accountMapper.SetAccount(ctx, acc) + coins, err := coinKeeper.GetCoins(ctx, addr) + assert.Nil(t, err) + assert.True(t, coins.IsEqual(sdk.Coins{})) + + coinKeeper.SetCoins(ctx, addr, sdk.Coins{{"foocoin", 10}}) + coins, err = coinKeeper.GetCoins(ctx, addr) + assert.NotNil(t, err) + assert.True(t, coins.IsEqual(sdk.Coins{})) +} + func TestSendKeeper(t *testing.T) { ms, authKey := setupMultiStore()