@@ -24,12 +24,16 @@ import (
24
24
"github.com/CosmWasm/wasmd/x/wasm/types"
25
25
)
26
26
27
+ // anyMsgGasCost is the gas cost for unpacking an AnyMsg, in CosmWasm gas units (not SDK gas units).
28
+ // With the default gas multiplier, this amounts to 5 SDK gas.
29
+ const anyMsgGasCost = 700000
30
+
27
31
type (
28
32
BankEncoder func (sender sdk.AccAddress , msg * wasmvmtypes.BankMsg ) ([]sdk.Msg , error )
29
33
CustomEncoder func (sender sdk.AccAddress , msg json.RawMessage ) ([]sdk.Msg , error )
30
34
DistributionEncoder func (sender sdk.AccAddress , msg * wasmvmtypes.DistributionMsg ) ([]sdk.Msg , error )
31
35
StakingEncoder func (sender sdk.AccAddress , msg * wasmvmtypes.StakingMsg ) ([]sdk.Msg , error )
32
- AnyEncoder func (sender sdk.AccAddress , msg * wasmvmtypes.AnyMsg ) ([]sdk.Msg , error )
36
+ AnyEncoder func (ctx sdk. Context , sender sdk.AccAddress , msg * wasmvmtypes.AnyMsg ) ([]sdk.Msg , error )
33
37
WasmEncoder func (sender sdk.AccAddress , msg * wasmvmtypes.WasmMsg ) ([]sdk.Msg , error )
34
38
IBCEncoder func (ctx sdk.Context , sender sdk.AccAddress , contractIBCPortID string , msg * wasmvmtypes.IBCMsg ) ([]sdk.Msg , error )
35
39
)
@@ -40,7 +44,7 @@ type MessageEncoders struct {
40
44
Distribution func (sender sdk.AccAddress , msg * wasmvmtypes.DistributionMsg ) ([]sdk.Msg , error )
41
45
IBC func (ctx sdk.Context , sender sdk.AccAddress , contractIBCPortID string , msg * wasmvmtypes.IBCMsg ) ([]sdk.Msg , error )
42
46
Staking func (sender sdk.AccAddress , msg * wasmvmtypes.StakingMsg ) ([]sdk.Msg , error )
43
- Any func (sender sdk.AccAddress , msg * wasmvmtypes.AnyMsg ) ([]sdk.Msg , error )
47
+ Any func (ctx sdk. Context , sender sdk.AccAddress , msg * wasmvmtypes.AnyMsg ) ([]sdk.Msg , error )
44
48
Wasm func (sender sdk.AccAddress , msg * wasmvmtypes.WasmMsg ) ([]sdk.Msg , error )
45
49
Gov func (sender sdk.AccAddress , msg * wasmvmtypes.GovMsg ) ([]sdk.Msg , error )
46
50
}
@@ -102,7 +106,7 @@ func (e MessageEncoders) Encode(ctx sdk.Context, contractAddr sdk.AccAddress, co
102
106
case msg .Staking != nil :
103
107
return e .Staking (contractAddr , msg .Staking )
104
108
case msg .Any != nil :
105
- return e .Any (contractAddr , msg .Any )
109
+ return e .Any (ctx , contractAddr , msg .Any )
106
110
case msg .Wasm != nil :
107
111
return e .Wasm (contractAddr , msg .Wasm )
108
112
case msg .Gov != nil :
@@ -206,12 +210,14 @@ func EncodeStakingMsg(sender sdk.AccAddress, msg *wasmvmtypes.StakingMsg) ([]sdk
206
210
}
207
211
208
212
func EncodeAnyMsg (unpacker codectypes.AnyUnpacker ) AnyEncoder {
209
- return func (sender sdk.AccAddress , msg * wasmvmtypes.AnyMsg ) ([]sdk.Msg , error ) {
213
+ return func (ctx sdk. Context , sender sdk.AccAddress , msg * wasmvmtypes.AnyMsg ) ([]sdk.Msg , error ) {
210
214
codecAny := codectypes.Any {
211
215
TypeUrl : msg .TypeURL ,
212
216
Value : msg .Value ,
213
217
}
214
218
var sdkMsg sdk.Msg
219
+
220
+ ctx .GasMeter ().ConsumeGas (anyMsgGasCost / types .DefaultGasMultiplier , "unpacking AnyMsg" )
215
221
if err := unpacker .UnpackAny (& codecAny , & sdkMsg ); err != nil {
216
222
return nil , errorsmod .Wrap (types .ErrInvalidMsg , fmt .Sprintf ("Cannot unpack proto message with type URL: %s" , msg .TypeURL ))
217
223
}
0 commit comments