Skip to content

Commit e9a51ce

Browse files
committed
Add setup cost for IBC operations
1 parent 532e6ca commit e9a51ce

File tree

1 file changed

+74
-1
lines changed

1 file changed

+74
-1
lines changed

x/wasm/keeper/relay.go

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package keeper
22

33
import (
4+
"encoding/json"
45
"time"
56

67
wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types"
@@ -29,11 +30,20 @@ func (k Keeper) OnOpenChannel(
2930
msg wasmvmtypes.IBCChannelOpenMsg,
3031
) (string, error) {
3132
defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-open-channel")
32-
_, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr)
33+
contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr)
3334
if err != nil {
3435
return "", err
3536
}
3637

38+
msgBz, err := json.Marshal(msg) // this is not great
39+
if err != nil {
40+
// this should never happen, as we just built this message
41+
return "", errorsmod.Wrap(types.ErrInvalidMsg, err.Error())
42+
}
43+
sdkCtx := sdk.UnwrapSDKContext(ctx)
44+
setupCost := k.gasRegister.SetupContractCost(k.IsPinnedCode(ctx, contractInfo.CodeID), len(msgBz))
45+
sdkCtx.GasMeter().ConsumeGas(setupCost, "Loading CosmWasm module: ibc-open-channel")
46+
3747
env := types.NewEnv(ctx, contractAddr)
3848
querier := k.newQueryHandler(ctx, contractAddr)
3949

@@ -78,6 +88,15 @@ func (k Keeper) OnConnectChannel(
7888
return err
7989
}
8090

91+
msgBz, err := json.Marshal(msg) // this is not great
92+
if err != nil {
93+
// this should never happen, as we just built this message
94+
return errorsmod.Wrap(types.ErrInvalidMsg, err.Error())
95+
}
96+
sdkCtx := sdk.UnwrapSDKContext(ctx)
97+
setupCost := k.gasRegister.SetupContractCost(k.IsPinnedCode(ctx, contractInfo.CodeID), len(msgBz))
98+
sdkCtx.GasMeter().ConsumeGas(setupCost, "Loading CosmWasm module: ibc-connect-channel")
99+
81100
env := types.NewEnv(ctx, contractAddr)
82101
querier := k.newQueryHandler(ctx, contractAddr)
83102

@@ -116,6 +135,15 @@ func (k Keeper) OnCloseChannel(
116135
return err
117136
}
118137

138+
msgBz, err := json.Marshal(msg) // this is not great
139+
if err != nil {
140+
// this should never happen, as we just built this message
141+
return errorsmod.Wrap(types.ErrInvalidMsg, err.Error())
142+
}
143+
sdkCtx := sdk.UnwrapSDKContext(ctx)
144+
setupCost := k.gasRegister.SetupContractCost(k.IsPinnedCode(ctx, contractInfo.CodeID), len(msgBz))
145+
sdkCtx.GasMeter().ConsumeGas(setupCost, "Loading CosmWasm module: ibc-close-channel")
146+
119147
params := types.NewEnv(ctx, contractAddr)
120148
querier := k.newQueryHandler(ctx, contractAddr)
121149

@@ -153,6 +181,15 @@ func (k Keeper) OnRecvPacket(
153181
return nil, err
154182
}
155183

184+
msgBz, err := json.Marshal(msg) // this is not great
185+
if err != nil {
186+
// this should never happen, as we just built this message
187+
return nil, errorsmod.Wrap(types.ErrInvalidMsg, err.Error())
188+
}
189+
sdkCtx := sdk.UnwrapSDKContext(ctx)
190+
setupCost := k.gasRegister.SetupContractCost(k.IsPinnedCode(ctx, contractInfo.CodeID), len(msgBz))
191+
sdkCtx.GasMeter().ConsumeGas(setupCost, "Loading CosmWasm module: ibc-recv-packet")
192+
156193
env := types.NewEnv(ctx, contractAddr)
157194
querier := k.newQueryHandler(ctx, contractAddr)
158195

@@ -226,6 +263,15 @@ func (k Keeper) OnAckPacket(
226263
return err
227264
}
228265

266+
msgBz, err := json.Marshal(msg) // this is not great
267+
if err != nil {
268+
// this should never happen, as we just built this message
269+
return errorsmod.Wrap(types.ErrInvalidMsg, err.Error())
270+
}
271+
sdkCtx := sdk.UnwrapSDKContext(ctx)
272+
setupCost := k.gasRegister.SetupContractCost(k.IsPinnedCode(ctx, contractInfo.CodeID), len(msgBz))
273+
sdkCtx.GasMeter().ConsumeGas(setupCost, "Loading CosmWasm module: ibc-ack-packet")
274+
229275
env := types.NewEnv(ctx, contractAddr)
230276
querier := k.newQueryHandler(ctx, contractAddr)
231277

@@ -261,6 +307,15 @@ func (k Keeper) OnTimeoutPacket(
261307
return err
262308
}
263309

310+
msgBz, err := json.Marshal(msg) // this is not great
311+
if err != nil {
312+
// this should never happen, as we just built this message
313+
return errorsmod.Wrap(types.ErrInvalidMsg, err.Error())
314+
}
315+
sdkCtx := sdk.UnwrapSDKContext(ctx)
316+
setupCost := k.gasRegister.SetupContractCost(k.IsPinnedCode(ctx, contractInfo.CodeID), len(msgBz))
317+
sdkCtx.GasMeter().ConsumeGas(setupCost, "Loading CosmWasm module: ibc-timeout-packet")
318+
264319
env := types.NewEnv(ctx, contractAddr)
265320
querier := k.newQueryHandler(ctx, contractAddr)
266321

@@ -295,6 +350,15 @@ func (k Keeper) IBCSourceCallback(
295350
return err
296351
}
297352

353+
msgBz, err := json.Marshal(msg) // this is not great
354+
if err != nil {
355+
// this should never happen, as we just built this message
356+
return errorsmod.Wrap(types.ErrInvalidMsg, err.Error())
357+
}
358+
sdkCtx := sdk.UnwrapSDKContext(ctx)
359+
setupCost := k.gasRegister.SetupContractCost(k.IsPinnedCode(ctx, contractInfo.CodeID), len(msgBz))
360+
sdkCtx.GasMeter().ConsumeGas(setupCost, "Loading CosmWasm module: ibc-source-chain-callback")
361+
298362
env := types.NewEnv(ctx, contractAddr)
299363
querier := k.newQueryHandler(ctx, contractAddr)
300364

@@ -329,6 +393,15 @@ func (k Keeper) IBCDestinationCallback(
329393
return err
330394
}
331395

396+
msgBz, err := json.Marshal(msg) // this is not great
397+
if err != nil {
398+
// this should never happen, as we just built this message
399+
return errorsmod.Wrap(types.ErrInvalidMsg, err.Error())
400+
}
401+
sdkCtx := sdk.UnwrapSDKContext(ctx)
402+
setupCost := k.gasRegister.SetupContractCost(k.IsPinnedCode(ctx, contractInfo.CodeID), len(msgBz))
403+
sdkCtx.GasMeter().ConsumeGas(setupCost, "Loading CosmWasm module: ibc-destination-chain-callback")
404+
332405
env := types.NewEnv(ctx, contractAddr)
333406
querier := k.newQueryHandler(ctx, contractAddr)
334407

0 commit comments

Comments
 (0)