@@ -24,12 +24,16 @@ import (
2424 "github.com/CosmWasm/wasmd/x/wasm/types"
2525)
2626
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+
2731type (
2832 BankEncoder func (sender sdk.AccAddress , msg * wasmvmtypes.BankMsg ) ([]sdk.Msg , error )
2933 CustomEncoder func (sender sdk.AccAddress , msg json.RawMessage ) ([]sdk.Msg , error )
3034 DistributionEncoder func (sender sdk.AccAddress , msg * wasmvmtypes.DistributionMsg ) ([]sdk.Msg , error )
3135 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 )
3337 WasmEncoder func (sender sdk.AccAddress , msg * wasmvmtypes.WasmMsg ) ([]sdk.Msg , error )
3438 IBCEncoder func (ctx sdk.Context , sender sdk.AccAddress , contractIBCPortID string , msg * wasmvmtypes.IBCMsg ) ([]sdk.Msg , error )
3539)
@@ -40,7 +44,7 @@ type MessageEncoders struct {
4044 Distribution func (sender sdk.AccAddress , msg * wasmvmtypes.DistributionMsg ) ([]sdk.Msg , error )
4145 IBC func (ctx sdk.Context , sender sdk.AccAddress , contractIBCPortID string , msg * wasmvmtypes.IBCMsg ) ([]sdk.Msg , error )
4246 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 )
4448 Wasm func (sender sdk.AccAddress , msg * wasmvmtypes.WasmMsg ) ([]sdk.Msg , error )
4549 Gov func (sender sdk.AccAddress , msg * wasmvmtypes.GovMsg ) ([]sdk.Msg , error )
4650}
@@ -102,7 +106,7 @@ func (e MessageEncoders) Encode(ctx sdk.Context, contractAddr sdk.AccAddress, co
102106 case msg .Staking != nil :
103107 return e .Staking (contractAddr , msg .Staking )
104108 case msg .Any != nil :
105- return e .Any (contractAddr , msg .Any )
109+ return e .Any (ctx , contractAddr , msg .Any )
106110 case msg .Wasm != nil :
107111 return e .Wasm (contractAddr , msg .Wasm )
108112 case msg .Gov != nil :
@@ -206,12 +210,14 @@ func EncodeStakingMsg(sender sdk.AccAddress, msg *wasmvmtypes.StakingMsg) ([]sdk
206210}
207211
208212func 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 ) {
210214 codecAny := codectypes.Any {
211215 TypeUrl : msg .TypeURL ,
212216 Value : msg .Value ,
213217 }
214218 var sdkMsg sdk.Msg
219+
220+ ctx .GasMeter ().ConsumeGas (anyMsgGasCost / types .DefaultGasMultiplier , "unpacking AnyMsg" )
215221 if err := unpacker .UnpackAny (& codecAny , & sdkMsg ); err != nil {
216222 return nil , errorsmod .Wrap (types .ErrInvalidMsg , fmt .Sprintf ("Cannot unpack proto message with type URL: %s" , msg .TypeURL ))
217223 }
0 commit comments