Skip to content

Commit 4c5feae

Browse files
authored
Merge pull request #2103 from CosmWasm/co/limit-gas
Adjust `SmartContractState` query gas limit
2 parents dee9c15 + e563aa8 commit 4c5feae

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

x/wasm/keeper/querier.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,11 @@ func (q GrpcQuerier) SmartContractState(c context.Context, req *types.QuerySmart
200200
if err != nil {
201201
return nil, err
202202
}
203-
ctx := sdk.UnwrapSDKContext(c).WithGasMeter(storetypes.NewGasMeter(q.queryGasLimit))
203+
204+
// limit the gas to the queryGasLimit or the remaining gas, whichever is smaller
205+
ctx := sdk.UnwrapSDKContext(c)
206+
gasLimit := min(ctx.GasMeter().GasRemaining(), q.queryGasLimit)
207+
ctx = ctx.WithGasMeter(storetypes.NewGasMeter(gasLimit))
204208
// recover from out-of-gas panic
205209
defer func() {
206210
if r := recover(); r != nil {

x/wasm/keeper/querier_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,15 +178,15 @@ func TestQuerySmartContractPanics(t *testing.T) {
178178
CodeID: 1,
179179
Created: types.NewAbsoluteTxPosition(ctx),
180180
})
181-
ctx = ctx.WithGasMeter(storetypes.NewGasMeter(types.DefaultInstanceCost)).WithLogger(log.NewTestLogger(t))
181+
gasLimit := types.DefaultInstanceCost + 5000
182182

183183
specs := map[string]struct {
184184
doInContract func()
185185
expErr *errorsmod.Error
186186
}{
187187
"out of gas": {
188188
doInContract: func() {
189-
ctx.GasMeter().ConsumeGas(ctx.GasMeter().Limit()+1, "test - consume more than limit")
189+
ctx.GasMeter().ConsumeGas(gasLimit+1, "test - consume more than limit")
190190
},
191191
expErr: sdkErrors.ErrOutOfGas,
192192
},
@@ -199,6 +199,9 @@ func TestQuerySmartContractPanics(t *testing.T) {
199199
}
200200
for msg, spec := range specs {
201201
t.Run(msg, func(t *testing.T) {
202+
// reset gas meter
203+
ctx = ctx.WithGasMeter(storetypes.NewGasMeter(gasLimit)).WithLogger(log.NewTestLogger(t))
204+
202205
keepers.WasmKeeper.wasmVM = &wasmtesting.MockWasmEngine{QueryFn: func(checksum wasmvm.Checksum, env wasmvmtypes.Env, queryMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.QueryResult, uint64, error) {
203206
spec.doInContract()
204207
return &wasmvmtypes.QueryResult{}, 0, nil

0 commit comments

Comments
 (0)