From 210cc51110151c4e116f2c990b748c233e220c05 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 25 Nov 2021 12:01:39 +0700 Subject: [PATCH] Fix message representation for signing (#658) * Introduce RawContractMessage type * Add json signbytes test for proposals * No assumptions on MsgIBCSend.data content * Smart query uses RawContractMessage * Revert method signature change to be consistent * Review comment * Update after discussions (cherry picked from commit dfba1395d90f43e40360de9240679e98226bb111) --- docs/proto/proto-docs.md | 2 +- proto/cosmwasm/wasm/v1/ibc.proto | 5 +- proto/cosmwasm/wasm/v1/proposal.proto | 4 +- proto/cosmwasm/wasm/v1/query.proto | 4 +- proto/cosmwasm/wasm/v1/tx.proto | 6 +- proto/cosmwasm/wasm/v1/types.proto | 2 +- x/wasm/client/rest/gov.go | 4 +- x/wasm/keeper/handler_plugin_encoders_test.go | 3 +- x/wasm/keeper/keeper_test.go | 2 +- x/wasm/keeper/legacy_querier.go | 20 +-- x/wasm/keeper/legacy_querier_test.go | 9 +- x/wasm/keeper/querier.go | 3 + x/wasm/keeper/querier_test.go | 17 +- x/wasm/keeper/query_plugins.go | 6 +- x/wasm/keeper/query_plugins_test.go | 2 +- x/wasm/relay_pingpong_test.go | 2 +- x/wasm/relay_test.go | 2 +- x/wasm/types/ibc.pb.go | 42 +++-- x/wasm/types/proposal.go | 10 +- x/wasm/types/proposal.pb.go | 91 +++++------ x/wasm/types/proposal_test.go | 37 ++++- x/wasm/types/query.pb.go | 151 +++++++++-------- x/wasm/types/tx.go | 47 +++++- x/wasm/types/tx.pb.go | 101 ++++++------ x/wasm/types/tx_test.go | 39 +++++ x/wasm/types/types.pb.go | 152 +++++++++--------- 26 files changed, 439 insertions(+), 324 deletions(-) diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index 4202e6cf6e..e9ea878143 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -617,7 +617,7 @@ MsgIBCSend | `channel` | [string](#string) | | the channel by which the packet will be sent | | `timeout_height` | [uint64](#uint64) | | Timeout height relative to the current block height. The timeout is disabled when set to 0. | | `timeout_timestamp` | [uint64](#uint64) | | Timeout timestamp (in nanoseconds) relative to the current block timestamp. The timeout is disabled when set to 0. | -| `data` | [bytes](#bytes) | | data is the payload to transfer | +| `data` | [bytes](#bytes) | | Data is the payload to transfer. We must not make assumption what format or content is in here. | diff --git a/proto/cosmwasm/wasm/v1/ibc.proto b/proto/cosmwasm/wasm/v1/ibc.proto index 1b30d315c9..d880a7078f 100644 --- a/proto/cosmwasm/wasm/v1/ibc.proto +++ b/proto/cosmwasm/wasm/v1/ibc.proto @@ -20,8 +20,9 @@ message MsgIBCSend { uint64 timeout_timestamp = 5 [ (gogoproto.moretags) = "yaml:\"timeout_timestamp\"" ]; - // data is the payload to transfer - bytes data = 6 [ (gogoproto.casttype) = "encoding/json.RawMessage" ]; + // Data is the payload to transfer. We must not make assumption what format or + // content is in here. + bytes data = 6; } // MsgIBCCloseChannel port and channel need to be owned by the contract diff --git a/proto/cosmwasm/wasm/v1/proposal.proto b/proto/cosmwasm/wasm/v1/proposal.proto index 551894ad03..759124c0f8 100644 --- a/proto/cosmwasm/wasm/v1/proposal.proto +++ b/proto/cosmwasm/wasm/v1/proposal.proto @@ -42,7 +42,7 @@ message InstantiateContractProposal { // Label is optional metadata to be stored with a constract instance. string label = 6; // Msg json encoded message to be passed to the contract on instantiation - bytes msg = 7; + bytes msg = 7 [ (gogoproto.casttype) = "RawContractMessage" ]; // Funds coins that are transferred to the contract on instantiation repeated cosmos.base.v1beta1.Coin funds = 8 [ (gogoproto.nullable) = false, @@ -63,7 +63,7 @@ message MigrateContractProposal { // CodeID references the new WASM code uint64 code_id = 5 [ (gogoproto.customname) = "CodeID" ]; // Msg json encoded message to be passed to the contract on migration - bytes msg = 6; + bytes msg = 6 [ (gogoproto.casttype) = "RawContractMessage" ]; } // UpdateAdminProposal gov proposal content type to set an admin for a contract. diff --git a/proto/cosmwasm/wasm/v1/query.proto b/proto/cosmwasm/wasm/v1/query.proto index efeb19bdf4..dbe7c0fbc4 100644 --- a/proto/cosmwasm/wasm/v1/query.proto +++ b/proto/cosmwasm/wasm/v1/query.proto @@ -154,14 +154,14 @@ message QuerySmartContractStateRequest { // address is the address of the contract string address = 1; // QueryData contains the query data passed to the contract - bytes query_data = 2; + bytes query_data = 2 [ (gogoproto.casttype) = "RawContractMessage" ]; } // QuerySmartContractStateResponse is the response type for the // Query/SmartContractState RPC method message QuerySmartContractStateResponse { // Data contains the json data returned from the smart contract - bytes data = 1 [ (gogoproto.casttype) = "encoding/json.RawMessage" ]; + bytes data = 1 [ (gogoproto.casttype) = "RawContractMessage" ]; } // QueryCodeRequest is the request type for the Query/Code RPC method diff --git a/proto/cosmwasm/wasm/v1/tx.proto b/proto/cosmwasm/wasm/v1/tx.proto index 768b0a01aa..8295907eb8 100644 --- a/proto/cosmwasm/wasm/v1/tx.proto +++ b/proto/cosmwasm/wasm/v1/tx.proto @@ -55,7 +55,7 @@ message MsgInstantiateContract { // Label is optional metadata to be stored with a contract instance. string label = 4; // Msg json encoded message to be passed to the contract on instantiation - bytes msg = 5; + bytes msg = 5 [ (gogoproto.casttype) = "RawContractMessage" ]; // Funds coins that are transferred to the contract on instantiation repeated cosmos.base.v1beta1.Coin funds = 6 [ (gogoproto.nullable) = false, @@ -77,7 +77,7 @@ message MsgExecuteContract { // Contract is the address of the smart contract string contract = 2; // Msg json encoded message to be passed to the contract - bytes msg = 3; + bytes msg = 3 [ (gogoproto.casttype) = "RawContractMessage" ]; // Funds coins that are transferred to the contract on execution repeated cosmos.base.v1beta1.Coin funds = 5 [ (gogoproto.nullable) = false, @@ -100,7 +100,7 @@ message MsgMigrateContract { // CodeID references the new WASM code uint64 code_id = 3 [ (gogoproto.customname) = "CodeID" ]; // Msg json encoded message to be passed to the contract on migration - bytes msg = 4; + bytes msg = 4 [ (gogoproto.casttype) = "RawContractMessage" ]; } // MsgMigrateContractResponse returns contract migration result data. diff --git a/proto/cosmwasm/wasm/v1/types.proto b/proto/cosmwasm/wasm/v1/types.proto index 482593323a..7ee2f639ee 100644 --- a/proto/cosmwasm/wasm/v1/types.proto +++ b/proto/cosmwasm/wasm/v1/types.proto @@ -117,7 +117,7 @@ message ContractCodeHistoryEntry { uint64 code_id = 2 [ (gogoproto.customname) = "CodeID" ]; // Updated Tx position when the operation was executed. AbsoluteTxPosition updated = 3; - bytes msg = 4 [ (gogoproto.casttype) = "encoding/json.RawMessage" ]; + bytes msg = 4 [ (gogoproto.casttype) = "RawContractMessage" ]; } // AbsoluteTxPosition is a unique transaction position that allows for global diff --git a/x/wasm/client/rest/gov.go b/x/wasm/client/rest/gov.go index 8e4e9cc640..0dd893e496 100644 --- a/x/wasm/client/rest/gov.go +++ b/x/wasm/client/rest/gov.go @@ -86,7 +86,7 @@ func (s InstantiateProposalJsonReq) Content() govtypes.Content { Admin: s.Admin, CodeID: s.Code, Label: s.Label, - Msg: s.Msg, + Msg: types.RawContractMessage(s.Msg), Funds: s.Funds, } } @@ -135,7 +135,7 @@ func (s MigrateProposalJsonReq) Content() govtypes.Content { Description: s.Description, Contract: s.Contract, CodeID: s.Code, - Msg: s.Msg, + Msg: types.RawContractMessage(s.Msg), RunAs: s.RunAs, } } diff --git a/x/wasm/keeper/handler_plugin_encoders_test.go b/x/wasm/keeper/handler_plugin_encoders_test.go index 76c66a453e..ccab8d96c5 100644 --- a/x/wasm/keeper/handler_plugin_encoders_test.go +++ b/x/wasm/keeper/handler_plugin_encoders_test.go @@ -1,7 +1,6 @@ package keeper import ( - "encoding/json" "testing" "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" @@ -34,7 +33,7 @@ func TestEncoding(t *testing.T) { valAddr2 := make(sdk.ValAddress, 32) valAddr2[1] = 123 - jsonMsg := json.RawMessage(`{"foo": 123}`) + jsonMsg := types.RawContractMessage(`{"foo": 123}`) bankMsg := &banktypes.MsgSend{ FromAddress: addr2.String(), diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 3f852d566f..70b788e9ce 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -321,7 +321,7 @@ func TestInstantiate(t *testing.T) { Operation: types.ContractCodeHistoryOperationTypeInit, CodeID: codeID, Updated: types.NewAbsoluteTxPosition(ctx), - Msg: json.RawMessage(initMsgBz), + Msg: initMsgBz, }} assert.Equal(t, exp, keepers.WasmKeeper.GetContractHistory(ctx, gotContractAddr)) diff --git a/x/wasm/keeper/legacy_querier.go b/x/wasm/keeper/legacy_querier.go index 283cfe7242..825940a5c6 100644 --- a/x/wasm/keeper/legacy_querier.go +++ b/x/wasm/keeper/legacy_querier.go @@ -88,9 +88,9 @@ func queryContractState(ctx sdk.Context, bech, queryMethod string, data []byte, return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, bech) } - var resultData []types.Model switch queryMethod { case QueryMethodContractStateAll: + resultData := make([]types.Model, 0) // this returns a serialized json object (which internally encoded binary fields properly) for iter := keeper.GetContractState(ctx, contractAddr); iter.Valid(); iter.Next() { resultData = append(resultData, types.Model{ @@ -98,25 +98,27 @@ func queryContractState(ctx sdk.Context, bech, queryMethod string, data []byte, Value: iter.Value(), }) } - if resultData == nil { - resultData = make([]types.Model, 0) + bz, err := json.Marshal(resultData) + if err != nil { + return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) } + return bz, nil case QueryMethodContractStateRaw: // this returns the raw data from the state, base64-encoded return keeper.QueryRaw(ctx, contractAddr, data), nil case QueryMethodContractStateSmart: // we enforce a subjective gas limit on all queries to avoid infinite loops ctx = ctx.WithGasMeter(sdk.NewGasMeter(gasLimit)) + msg := types.RawContractMessage(data) + if err := msg.ValidateBasic(); err != nil { + return nil, sdkerrors.Wrap(err, "json msg") + } // this returns raw bytes (must be base64-encoded) - return keeper.QuerySmart(ctx, contractAddr, data) + bz, err := keeper.QuerySmart(ctx, contractAddr, msg) + return bz, err default: return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, queryMethod) } - bz, err := json.Marshal(resultData) - if err != nil { - return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) - } - return bz, nil } func queryCodeList(ctx sdk.Context, keeper types.ViewKeeper) ([]types.CodeInfoResponse, error) { diff --git a/x/wasm/keeper/legacy_querier_test.go b/x/wasm/keeper/legacy_querier_test.go index cac1902bd0..d1144fd779 100644 --- a/x/wasm/keeper/legacy_querier_test.go +++ b/x/wasm/keeper/legacy_querier_test.go @@ -3,13 +3,13 @@ package keeper import ( "bytes" "encoding/json" + "errors" "fmt" "io/ioutil" "testing" "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" - sdkErrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" @@ -60,7 +60,7 @@ func TestLegacyQueryContractState(t *testing.T) { // if success and expSmartRes is not set, we parse into []types.Model and compare (all state) expModelLen int expModelContains []types.Model - expErr *sdkErrors.Error + expErr error }{ "query all": { srcPath: []string{QueryGetContractState, addr.String(), QueryMethodContractStateAll}, @@ -93,7 +93,7 @@ func TestLegacyQueryContractState(t *testing.T) { "query smart with invalid json": { srcPath: []string{QueryGetContractState, addr.String(), QueryMethodContractStateSmart}, srcReq: abci.RequestQuery{Data: []byte(`not a json string`)}, - expErr: types.ErrQueryFailed, + expErr: types.ErrInvalid, }, "query non-existent raw key": { srcPath: []string{QueryGetContractState, addr.String(), QueryMethodContractStateRaw}, @@ -120,6 +120,7 @@ func TestLegacyQueryContractState(t *testing.T) { }, "query smart with unknown address": { srcPath: []string{QueryGetContractState, anyAddr.String(), QueryMethodContractStateSmart}, + srcReq: abci.RequestQuery{Data: []byte(`{}`)}, expModelLen: 0, expErr: types.ErrNotFound, }, @@ -129,7 +130,7 @@ func TestLegacyQueryContractState(t *testing.T) { t.Run(msg, func(t *testing.T) { binResult, err := q(ctx, spec.srcPath, spec.srcReq) // require.True(t, spec.expErr.Is(err), "unexpected error") - require.True(t, spec.expErr.Is(err), err) + require.True(t, errors.Is(err, spec.expErr), err) // if smart query, check custom response if spec.srcPath[2] != QueryMethodContractStateAll { diff --git a/x/wasm/keeper/querier.go b/x/wasm/keeper/querier.go index d9cd3d2342..dc99332ae5 100644 --- a/x/wasm/keeper/querier.go +++ b/x/wasm/keeper/querier.go @@ -164,6 +164,9 @@ func (q grpcQuerier) SmartContractState(c context.Context, req *types.QuerySmart if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } + if err := req.QueryData.ValidateBasic(); err != nil { + return nil, status.Error(codes.InvalidArgument, "invalid query data") + } contractAddr, err := sdk.AccAddressFromBech32(req.Address) if err != nil { return nil, err diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index 196628cde3..c1edd2d92e 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -3,13 +3,14 @@ package keeper import ( "encoding/base64" "encoding/json" + "errors" "fmt" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "io/ioutil" "testing" "time" - "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" - "github.com/CosmWasm/wasmd/x/wasm/types" cosmwasm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -19,6 +20,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" + + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/types" ) func TestQueryAllContractState(t *testing.T) { @@ -120,7 +124,7 @@ func TestQuerySmartContractState(t *testing.T) { srcAddr sdk.AccAddress srcQuery *types.QuerySmartContractStateRequest expResp string - expErr *sdkErrors.Error + expErr error }{ "query smart": { srcQuery: &types.QuerySmartContractStateRequest{Address: contractAddr, QueryData: []byte(`{"verifier":{}}`)}, @@ -132,7 +136,7 @@ func TestQuerySmartContractState(t *testing.T) { }, "query smart with invalid json": { srcQuery: &types.QuerySmartContractStateRequest{Address: contractAddr, QueryData: []byte(`not a json string`)}, - expErr: types.ErrQueryFailed, + expErr: status.Error(codes.InvalidArgument, "invalid query data"), }, "query smart with unknown address": { srcQuery: &types.QuerySmartContractStateRequest{Address: RandomBech32AccountAddress(t), QueryData: []byte(`{"verifier":{}}`)}, @@ -142,7 +146,7 @@ func TestQuerySmartContractState(t *testing.T) { for msg, spec := range specs { t.Run(msg, func(t *testing.T) { got, err := q.SmartContractState(sdk.WrapSDKContext(ctx), spec.srcQuery) - require.True(t, spec.expErr.Is(err), "but got %+v", err) + require.True(t, errors.Is(err, spec.expErr), "but got %+v", err) if spec.expErr != nil { return } @@ -187,7 +191,8 @@ func TestQuerySmartContractPanics(t *testing.T) { // when q := Querier(keepers.WasmKeeper) got, err := q.SmartContractState(sdk.WrapSDKContext(ctx), &types.QuerySmartContractStateRequest{ - Address: contractAddr.String(), + Address: contractAddr.String(), + QueryData: types.RawContractMessage("{}"), }) require.True(t, spec.expErr.Is(err), "got error: %+v", err) assert.Nil(t, got) diff --git a/x/wasm/keeper/query_plugins.go b/x/wasm/keeper/query_plugins.go index 4c3cdf767d..2b0e3ebebc 100644 --- a/x/wasm/keeper/query_plugins.go +++ b/x/wasm/keeper/query_plugins.go @@ -468,7 +468,11 @@ func WasmQuerier(k wasmQueryKeeper) func(ctx sdk.Context, request *wasmvmtypes.W if err != nil { return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, request.Smart.ContractAddr) } - return k.QuerySmart(ctx, addr, request.Smart.Msg) + msg := types.RawContractMessage(request.Smart.Msg) + if err := msg.ValidateBasic(); err != nil { + return nil, sdkerrors.Wrap(err, "json msg") + } + return k.QuerySmart(ctx, addr, msg) case request.Raw != nil: addr, err := sdk.AccAddressFromBech32(request.Raw.ContractAddr) if err != nil { diff --git a/x/wasm/keeper/query_plugins_test.go b/x/wasm/keeper/query_plugins_test.go index 0ba41c7289..725ec4f9d4 100644 --- a/x/wasm/keeper/query_plugins_test.go +++ b/x/wasm/keeper/query_plugins_test.go @@ -444,7 +444,7 @@ func TestContractInfoWasmQuerier(t *testing.T) { type mockWasmQueryKeeper struct { GetContractInfoFn func(ctx sdk.Context, contractAddress sdk.AccAddress) *types.ContractInfo QueryRawFn func(ctx sdk.Context, contractAddress sdk.AccAddress, key []byte) []byte - QuerySmartFn func(ctx sdk.Context, contractAddr sdk.AccAddress, req []byte) ([]byte, error) + QuerySmartFn func(ctx sdk.Context, contractAddr sdk.AccAddress, req types.RawContractMessage) ([]byte, error) IsPinnedCodeFn func(ctx sdk.Context, codeID uint64) bool } diff --git a/x/wasm/relay_pingpong_test.go b/x/wasm/relay_pingpong_test.go index 89a90dc350..8ad6fe237e 100644 --- a/x/wasm/relay_pingpong_test.go +++ b/x/wasm/relay_pingpong_test.go @@ -390,7 +390,7 @@ type startGame struct { MaxValue uint64 `json:"max_value,omitempty"` } -func (g startGame) GetBytes() json.RawMessage { +func (g startGame) GetBytes() wasmtypes.RawContractMessage { b, err := json.Marshal(g) if err != nil { panic(err) diff --git a/x/wasm/relay_test.go b/x/wasm/relay_test.go index 615f353d71..04d70c1c6e 100644 --- a/x/wasm/relay_test.go +++ b/x/wasm/relay_test.go @@ -442,7 +442,7 @@ type startTransfer struct { Timeout uint64 } -func (g startTransfer) GetBytes() json.RawMessage { +func (g startTransfer) GetBytes() types.RawContractMessage { b, err := json.Marshal(g) if err != nil { panic(err) diff --git a/x/wasm/types/ibc.pb.go b/x/wasm/types/ibc.pb.go index 1cbc5d8315..ac6c9f0060 100644 --- a/x/wasm/types/ibc.pb.go +++ b/x/wasm/types/ibc.pb.go @@ -4,7 +4,6 @@ package types import ( - encoding_json "encoding/json" fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" @@ -34,8 +33,9 @@ type MsgIBCSend struct { // Timeout timestamp (in nanoseconds) relative to the current block timestamp. // The timeout is disabled when set to 0. TimeoutTimestamp uint64 `protobuf:"varint,5,opt,name=timeout_timestamp,json=timeoutTimestamp,proto3" json:"timeout_timestamp,omitempty" yaml:"timeout_timestamp"` - // data is the payload to transfer - Data encoding_json.RawMessage `protobuf:"bytes,6,opt,name=data,proto3,casttype=encoding/json.RawMessage" json:"data,omitempty"` + // Data is the payload to transfer. We must not make assumption what format or + // content is in here. + Data []byte `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"` } func (m *MsgIBCSend) Reset() { *m = MsgIBCSend{} } @@ -117,28 +117,26 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/ibc.proto", fileDescriptor_af0d1c43ea53c4b9) } var fileDescriptor_af0d1c43ea53c4b9 = []byte{ - // 329 bytes of a gzipped FileDescriptorProto + // 299 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4a, 0xce, 0x2f, 0xce, 0x2d, 0x4f, 0x2c, 0xce, 0xd5, 0x07, 0x13, 0x65, 0x86, 0xfa, 0x99, 0x49, 0xc9, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x02, 0x30, 0x39, 0x3d, 0x30, 0x51, 0x66, 0x28, 0x25, 0x92, 0x9e, 0x9f, - 0x9e, 0x0f, 0x96, 0xd4, 0x07, 0xb1, 0x20, 0xea, 0x94, 0x1a, 0x98, 0xb8, 0xb8, 0x7c, 0x8b, 0xd3, - 0x3d, 0x9d, 0x9c, 0x83, 0x53, 0xf3, 0x52, 0x84, 0x8c, 0xb9, 0xd8, 0x93, 0x33, 0x12, 0xf3, 0xf2, - 0x52, 0x73, 0x24, 0x98, 0x14, 0x18, 0x35, 0x38, 0x9d, 0x24, 0x3f, 0xdd, 0x93, 0x17, 0xad, 0x4c, - 0xcc, 0xcd, 0xb1, 0x52, 0x2a, 0xce, 0x2f, 0x2d, 0x4a, 0x4e, 0x8d, 0x87, 0xca, 0x2b, 0x05, 0xc1, - 0x54, 0x0a, 0x39, 0x70, 0xf1, 0x95, 0x64, 0xe6, 0xa6, 0xe6, 0x97, 0x96, 0xc4, 0x67, 0xa4, 0x66, - 0xa6, 0x67, 0x94, 0x48, 0xb0, 0x28, 0x30, 0x6a, 0xb0, 0x20, 0xeb, 0x45, 0x95, 0x57, 0x0a, 0xe2, - 0x85, 0x0a, 0x78, 0x80, 0xf9, 0x42, 0x9e, 0x5c, 0x82, 0x30, 0x15, 0x20, 0xba, 0xb8, 0x24, 0x31, - 0xb7, 0x40, 0x82, 0x15, 0x6c, 0x88, 0xcc, 0xa7, 0x7b, 0xf2, 0x12, 0xa8, 0x86, 0xc0, 0x95, 0x28, - 0x05, 0x09, 0x40, 0xc5, 0x42, 0x60, 0x42, 0x42, 0x06, 0x5c, 0x2c, 0x29, 0x89, 0x25, 0x89, 0x12, - 0x6c, 0x0a, 0x8c, 0x1a, 0x3c, 0x4e, 0x32, 0xbf, 0xee, 0xc9, 0x4b, 0xa4, 0xe6, 0x25, 0xe7, 0xa7, - 0x64, 0xe6, 0xa5, 0xeb, 0x67, 0x15, 0xe7, 0xe7, 0xe9, 0x05, 0x25, 0x96, 0xfb, 0xa6, 0x16, 0x17, - 0x27, 0xa6, 0xa7, 0x06, 0x81, 0x55, 0x2a, 0x79, 0x72, 0x09, 0x41, 0x42, 0xc0, 0x39, 0x27, 0xbf, - 0x38, 0xd5, 0x19, 0xea, 0x29, 0x72, 0x42, 0xc2, 0xc9, 0xe5, 0xc4, 0x43, 0x39, 0x86, 0x13, 0x8f, - 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, - 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x52, 0x4b, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, - 0x4b, 0xce, 0xcf, 0xd5, 0x77, 0xce, 0x2f, 0xce, 0x0d, 0x87, 0x45, 0x5d, 0x8a, 0x7e, 0x05, 0x24, - 0x0a, 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x51, 0x63, 0x0c, 0x08, 0x00, 0x00, 0xff, - 0xff, 0x0b, 0xb9, 0xf3, 0x8c, 0xe0, 0x01, 0x00, 0x00, + 0x9e, 0x0f, 0x96, 0xd4, 0x07, 0xb1, 0x20, 0xea, 0x94, 0x1e, 0x31, 0x72, 0x71, 0xf9, 0x16, 0xa7, + 0x7b, 0x3a, 0x39, 0x07, 0xa7, 0xe6, 0xa5, 0x08, 0x19, 0x73, 0xb1, 0x27, 0x67, 0x24, 0xe6, 0xe5, + 0xa5, 0xe6, 0x48, 0x30, 0x29, 0x30, 0x6a, 0x70, 0x3a, 0x49, 0x7e, 0xba, 0x27, 0x2f, 0x5a, 0x99, + 0x98, 0x9b, 0x63, 0xa5, 0x54, 0x9c, 0x5f, 0x5a, 0x94, 0x9c, 0x1a, 0x0f, 0x95, 0x57, 0x0a, 0x82, + 0xa9, 0x14, 0x72, 0xe0, 0xe2, 0x2b, 0xc9, 0xcc, 0x4d, 0xcd, 0x2f, 0x2d, 0x89, 0xcf, 0x48, 0xcd, + 0x4c, 0xcf, 0x28, 0x91, 0x60, 0x51, 0x60, 0xd4, 0x60, 0x41, 0xd6, 0x8b, 0x2a, 0xaf, 0x14, 0xc4, + 0x0b, 0x15, 0xf0, 0x00, 0xf3, 0x85, 0x3c, 0xb9, 0x04, 0x61, 0x2a, 0x40, 0x74, 0x71, 0x49, 0x62, + 0x6e, 0x81, 0x04, 0x2b, 0xd8, 0x10, 0x99, 0x4f, 0xf7, 0xe4, 0x25, 0x50, 0x0d, 0x81, 0x2b, 0x51, + 0x0a, 0x12, 0x80, 0x8a, 0x85, 0xc0, 0x84, 0x84, 0x84, 0xb8, 0x58, 0x52, 0x12, 0x4b, 0x12, 0x25, + 0xd8, 0x14, 0x18, 0x35, 0x78, 0x82, 0xc0, 0x6c, 0x25, 0x4f, 0x2e, 0x21, 0x88, 0x1f, 0x9d, 0x73, + 0xf2, 0x8b, 0x53, 0x9d, 0xa1, 0xce, 0x26, 0xc7, 0xaf, 0x4e, 0x2e, 0x27, 0x1e, 0xca, 0x31, 0x9c, + 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, + 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x5a, 0x7a, 0x66, 0x49, 0x46, 0x69, + 0x92, 0x5e, 0x72, 0x7e, 0xae, 0xbe, 0x73, 0x7e, 0x71, 0x6e, 0x38, 0x2c, 0x72, 0x52, 0xf4, 0x2b, + 0x20, 0x91, 0x54, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x0e, 0x7c, 0x63, 0x40, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x4d, 0x60, 0x95, 0x31, 0xc2, 0x01, 0x00, 0x00, } func (m *MsgIBCSend) Marshal() (dAtA []byte, err error) { diff --git a/x/wasm/types/proposal.go b/x/wasm/types/proposal.go index 66db4ea609..c3fc543ed9 100644 --- a/x/wasm/types/proposal.go +++ b/x/wasm/types/proposal.go @@ -2,7 +2,6 @@ package types import ( "encoding/base64" - "encoding/json" "fmt" "strings" @@ -172,10 +171,9 @@ func (p InstantiateContractProposal) ValidateBasic() error { return err } } - if !json.Valid(p.Msg) { - return sdkerrors.Wrap(ErrInvalid, "init msg json") + if err := p.Msg.ValidateBasic(); err != nil { + return sdkerrors.Wrap(err, "payload msg") } - return nil } @@ -242,8 +240,8 @@ func (p MigrateContractProposal) ValidateBasic() error { if _, err := sdk.AccAddressFromBech32(p.RunAs); err != nil { return sdkerrors.Wrap(err, "run as") } - if !json.Valid(p.Msg) { - return sdkerrors.Wrap(ErrInvalid, "migrate msg json") + if err := p.Msg.ValidateBasic(); err != nil { + return sdkerrors.Wrap(err, "payload msg") } return nil } diff --git a/x/wasm/types/proposal.pb.go b/x/wasm/types/proposal.pb.go index 7754c43474..bd7525c3d5 100644 --- a/x/wasm/types/proposal.pb.go +++ b/x/wasm/types/proposal.pb.go @@ -88,7 +88,7 @@ type InstantiateContractProposal struct { // Label is optional metadata to be stored with a constract instance. Label string `protobuf:"bytes,6,opt,name=label,proto3" json:"label,omitempty"` // Msg json encoded message to be passed to the contract on instantiation - Msg []byte `protobuf:"bytes,7,opt,name=msg,proto3" json:"msg,omitempty"` + Msg RawContractMessage `protobuf:"bytes,7,opt,name=msg,proto3,casttype=RawContractMessage" json:"msg,omitempty"` // Funds coins that are transferred to the contract on instantiation Funds github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,8,rep,name=funds,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"funds"` } @@ -138,7 +138,7 @@ type MigrateContractProposal struct { // CodeID references the new WASM code CodeID uint64 `protobuf:"varint,5,opt,name=code_id,json=codeId,proto3" json:"code_id,omitempty"` // Msg json encoded message to be passed to the contract on migration - Msg []byte `protobuf:"bytes,6,opt,name=msg,proto3" json:"msg,omitempty"` + Msg RawContractMessage `protobuf:"bytes,6,opt,name=msg,proto3,casttype=RawContractMessage" json:"msg,omitempty"` } func (m *MigrateContractProposal) Reset() { *m = MigrateContractProposal{} } @@ -359,50 +359,51 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/proposal.proto", fileDescriptor_be6422d717c730cb) } var fileDescriptor_be6422d717c730cb = []byte{ - // 681 bytes of a gzipped FileDescriptorProto + // 698 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x54, 0xcd, 0x6e, 0xd3, 0x4a, - 0x14, 0x8e, 0x9b, 0xc4, 0x49, 0xa7, 0xd1, 0xbd, 0xbe, 0xbe, 0x69, 0x6f, 0x6e, 0x41, 0x76, 0x64, - 0xa4, 0x2a, 0x1b, 0x6c, 0x52, 0x24, 0x04, 0xec, 0xe2, 0xb0, 0x69, 0x45, 0xa5, 0xca, 0x55, 0x55, - 0x89, 0x4d, 0x34, 0xb1, 0xa7, 0xe9, 0x88, 0x78, 0xc6, 0xf2, 0x4c, 0x5a, 0xf2, 0x16, 0x3c, 0x00, - 0x0f, 0x80, 0xd8, 0x20, 0xd8, 0xf2, 0x02, 0x5d, 0x76, 0xd9, 0x95, 0xa1, 0xe9, 0x1b, 0x64, 0x8f, - 0x84, 0x66, 0xc6, 0x09, 0x69, 0x41, 0x08, 0x89, 0x1f, 0x89, 0x8d, 0xed, 0xe3, 0xf3, 0x9d, 0xf9, - 0xbe, 0xf9, 0xce, 0x99, 0x01, 0x76, 0x48, 0x59, 0x7c, 0x02, 0x59, 0xec, 0xc9, 0xc7, 0x71, 0xdb, - 0x4b, 0x52, 0x9a, 0x50, 0x06, 0x87, 0x6e, 0x92, 0x52, 0x4e, 0x4d, 0x63, 0x06, 0x70, 0xe5, 0xe3, - 0xb8, 0xbd, 0x5e, 0x1f, 0xd0, 0x01, 0x95, 0x49, 0x4f, 0x7c, 0x29, 0xdc, 0xba, 0x25, 0x70, 0x94, - 0x79, 0x7d, 0xc8, 0x90, 0x77, 0xdc, 0xee, 0x23, 0x0e, 0xdb, 0x5e, 0x48, 0x31, 0xc9, 0xf3, 0x37, - 0xbf, 0x20, 0xe2, 0xe3, 0x04, 0x31, 0x95, 0x75, 0x3e, 0x6a, 0xe0, 0x9f, 0x3d, 0x4e, 0x53, 0xd4, - 0xa5, 0x11, 0xda, 0xcd, 0x15, 0x98, 0x75, 0x50, 0xe6, 0x98, 0x0f, 0x51, 0x43, 0x6b, 0x6a, 0xad, - 0xe5, 0x40, 0x05, 0x66, 0x13, 0xac, 0x44, 0x88, 0x85, 0x29, 0x4e, 0x38, 0xa6, 0xa4, 0xb1, 0x24, - 0x73, 0x8b, 0xbf, 0xcc, 0x55, 0xa0, 0xa7, 0x23, 0xd2, 0x83, 0xac, 0x51, 0x54, 0x85, 0xe9, 0x88, - 0x74, 0x98, 0x79, 0x0f, 0xfc, 0x25, 0xb8, 0x7b, 0xfd, 0x31, 0x47, 0xbd, 0x90, 0x46, 0xa8, 0x51, - 0x6a, 0x6a, 0xad, 0x9a, 0x6f, 0x4c, 0x32, 0xbb, 0x76, 0xd0, 0xd9, 0xdb, 0xf1, 0xc7, 0x5c, 0x0a, - 0x08, 0x6a, 0x02, 0x37, 0x8b, 0xcc, 0x7d, 0xb0, 0x86, 0x09, 0xe3, 0x90, 0x70, 0x0c, 0x39, 0xea, - 0x25, 0x28, 0x8d, 0x31, 0x63, 0x82, 0xbb, 0xd2, 0xd4, 0x5a, 0x2b, 0x9b, 0x96, 0x7b, 0xdd, 0x23, - 0xb7, 0x13, 0x86, 0x88, 0xb1, 0x2e, 0x25, 0x87, 0x78, 0x10, 0xac, 0x2e, 0x54, 0xef, 0xce, 0x8b, - 0xb7, 0x4b, 0xd5, 0xb2, 0xa1, 0x6f, 0x97, 0xaa, 0xba, 0x51, 0x71, 0xde, 0x2e, 0x81, 0x1b, 0x5b, - 0x9f, 0x51, 0x5d, 0x4a, 0x78, 0x0a, 0x43, 0xfe, 0xab, 0x9c, 0xa8, 0x83, 0x32, 0x8c, 0x62, 0x4c, - 0xa4, 0x01, 0xcb, 0x81, 0x0a, 0xcc, 0x5b, 0xa0, 0x22, 0x5c, 0xe9, 0xe1, 0xa8, 0x51, 0x6e, 0x6a, - 0xad, 0x92, 0x0f, 0x26, 0x99, 0xad, 0x0b, 0x0b, 0xb6, 0x1e, 0x05, 0xba, 0x48, 0x6d, 0x45, 0xa2, - 0x74, 0x08, 0xfb, 0x68, 0xd8, 0xd0, 0x55, 0xa9, 0x0c, 0x4c, 0x03, 0x14, 0x63, 0x36, 0x90, 0x7e, - 0xd4, 0x02, 0xf1, 0x69, 0x42, 0x50, 0x3e, 0x1c, 0x91, 0x88, 0x35, 0xaa, 0xcd, 0x62, 0x6b, 0x65, - 0xf3, 0x7f, 0x57, 0xcd, 0x87, 0x2b, 0xe6, 0xc3, 0xcd, 0xe7, 0xc3, 0xed, 0x52, 0x4c, 0xfc, 0x3b, - 0xa7, 0x99, 0x5d, 0x78, 0xf5, 0xde, 0x6e, 0x0d, 0x30, 0x3f, 0x1a, 0xf5, 0xdd, 0x90, 0xc6, 0x5e, - 0x3e, 0x4c, 0xea, 0x75, 0x9b, 0x45, 0x4f, 0xf3, 0x69, 0x11, 0x05, 0x2c, 0x50, 0x2b, 0x3b, 0xef, - 0x34, 0xf0, 0xdf, 0x0e, 0x1e, 0xa4, 0xbf, 0xc1, 0xb0, 0x75, 0x50, 0x0d, 0x73, 0x8a, 0xdc, 0xb3, - 0x79, 0xfc, 0x7d, 0xb6, 0xe5, 0x06, 0xe9, 0x73, 0x83, 0x9c, 0x17, 0x1a, 0xf8, 0x77, 0x3f, 0x89, - 0x20, 0x47, 0x1d, 0xe1, 0xfe, 0x0f, 0x2b, 0x6f, 0x83, 0x65, 0x82, 0x4e, 0x7a, 0xaa, 0xaf, 0x52, - 0xbc, 0x5f, 0x9f, 0x66, 0xb6, 0x31, 0x86, 0xf1, 0xf0, 0xa1, 0x33, 0x4f, 0x39, 0x41, 0x95, 0xa0, - 0x13, 0x49, 0xf9, 0xad, 0x5d, 0x39, 0x47, 0xc0, 0xec, 0x0e, 0x11, 0x4c, 0x7f, 0x8e, 0xb8, 0x45, - 0xa6, 0xe2, 0x35, 0xa6, 0xd7, 0x1a, 0x30, 0x76, 0x31, 0x11, 0x86, 0xb1, 0x39, 0xd1, 0xc6, 0x15, - 0x22, 0xdf, 0x98, 0x66, 0x76, 0x4d, 0xed, 0x44, 0xfe, 0x76, 0x66, 0xd4, 0xf7, 0xbf, 0x42, 0xed, - 0xaf, 0x4d, 0x33, 0xdb, 0x54, 0xe8, 0x85, 0xa4, 0x73, 0x55, 0xd2, 0x03, 0x21, 0x49, 0xb6, 0x4d, - 0xf4, 0xba, 0xd8, 0x2a, 0xf9, 0xd6, 0x24, 0xb3, 0x2b, 0xaa, 0x6f, 0x6c, 0x9a, 0xd9, 0x7f, 0xab, - 0x15, 0x66, 0x20, 0x27, 0xa8, 0xa8, 0x5e, 0x32, 0xe7, 0x8d, 0x06, 0xcc, 0x7d, 0x92, 0xfc, 0x49, - 0x9a, 0xfd, 0xc7, 0xa7, 0x17, 0x56, 0xe1, 0xfc, 0xc2, 0x2a, 0xbc, 0x9c, 0x58, 0xda, 0xe9, 0xc4, - 0xd2, 0xce, 0x26, 0x96, 0xf6, 0x61, 0x62, 0x69, 0xcf, 0x2f, 0xad, 0xc2, 0xd9, 0xa5, 0x55, 0x38, - 0xbf, 0xb4, 0x0a, 0x4f, 0x36, 0x16, 0xce, 0x60, 0x97, 0xb2, 0xf8, 0x60, 0x76, 0x61, 0x47, 0xde, - 0x33, 0x75, 0x71, 0xcb, 0x73, 0xd8, 0xd7, 0xe5, 0xb5, 0x7d, 0xf7, 0x53, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x74, 0x84, 0x77, 0xba, 0x3f, 0x06, 0x00, 0x00, + 0x14, 0x8e, 0x9b, 0xc4, 0x49, 0xa7, 0xd1, 0xbd, 0xb9, 0xbe, 0x69, 0x6f, 0x6e, 0x41, 0x76, 0x64, + 0xa4, 0xca, 0x1b, 0x6c, 0x52, 0x24, 0x04, 0xec, 0xe2, 0xb0, 0x69, 0x45, 0xa5, 0xca, 0x55, 0x55, + 0x89, 0x4d, 0x34, 0xb1, 0xa7, 0xa9, 0x45, 0x3c, 0x63, 0x79, 0x26, 0x0d, 0x79, 0x0b, 0x1e, 0x80, + 0x07, 0x40, 0x6c, 0x10, 0x6f, 0x51, 0xb1, 0xaa, 0xc4, 0xa6, 0x2b, 0x43, 0xdd, 0x37, 0xc8, 0x12, + 0x09, 0x09, 0xcd, 0x8c, 0x13, 0xd2, 0x82, 0x00, 0x89, 0x1f, 0x89, 0xcd, 0xd8, 0x67, 0xce, 0x77, + 0xe6, 0x3b, 0xe7, 0x3b, 0x67, 0x06, 0x18, 0x3e, 0xa1, 0xd1, 0x18, 0xd2, 0xc8, 0x11, 0xcb, 0x71, + 0xdb, 0x89, 0x13, 0x12, 0x13, 0x0a, 0x87, 0x76, 0x9c, 0x10, 0x46, 0xb4, 0xfa, 0x0c, 0x60, 0x8b, + 0xe5, 0xb8, 0xbd, 0xde, 0x18, 0x90, 0x01, 0x11, 0x4e, 0x87, 0xff, 0x49, 0xdc, 0xba, 0xce, 0x71, + 0x84, 0x3a, 0x7d, 0x48, 0x91, 0x73, 0xdc, 0xee, 0x23, 0x06, 0xdb, 0x8e, 0x4f, 0x42, 0x9c, 0xfb, + 0xaf, 0x7f, 0x46, 0xc4, 0x26, 0x31, 0xa2, 0xd2, 0x6b, 0x7e, 0x50, 0xc0, 0x3f, 0x7b, 0x8c, 0x24, + 0xa8, 0x4b, 0x02, 0xb4, 0x9b, 0x67, 0xa0, 0x35, 0x40, 0x99, 0x85, 0x6c, 0x88, 0x9a, 0x4a, 0x4b, + 0xb1, 0x96, 0x3d, 0x69, 0x68, 0x2d, 0xb0, 0x12, 0x20, 0xea, 0x27, 0x61, 0xcc, 0x42, 0x82, 0x9b, + 0x4b, 0xc2, 0xb7, 0xb8, 0xa5, 0xad, 0x02, 0x35, 0x19, 0xe1, 0x1e, 0xa4, 0xcd, 0xa2, 0x0c, 0x4c, + 0x46, 0xb8, 0x43, 0xb5, 0x3b, 0xe0, 0x2f, 0xce, 0xdd, 0xeb, 0x4f, 0x18, 0xea, 0xf9, 0x24, 0x40, + 0xcd, 0x52, 0x4b, 0xb1, 0x6a, 0x6e, 0x3d, 0x4b, 0x8d, 0xda, 0x41, 0x67, 0x6f, 0xc7, 0x9d, 0x30, + 0x91, 0x80, 0x57, 0xe3, 0xb8, 0x99, 0xa5, 0xed, 0x83, 0xb5, 0x10, 0x53, 0x06, 0x31, 0x0b, 0x21, + 0x43, 0xbd, 0x18, 0x25, 0x51, 0x48, 0x29, 0xe7, 0xae, 0xb4, 0x14, 0x6b, 0x65, 0x53, 0xb7, 0xaf, + 0x6a, 0x64, 0x77, 0x7c, 0x1f, 0x51, 0xda, 0x25, 0xf8, 0x30, 0x1c, 0x78, 0xab, 0x0b, 0xd1, 0xbb, + 0xf3, 0xe0, 0xed, 0x52, 0xb5, 0x5c, 0x57, 0xb7, 0x4b, 0x55, 0xb5, 0x5e, 0x31, 0x5f, 0x2f, 0x81, + 0x6b, 0x5b, 0x9f, 0x50, 0x5d, 0x82, 0x59, 0x02, 0x7d, 0xf6, 0xab, 0x94, 0x68, 0x80, 0x32, 0x0c, + 0xa2, 0x10, 0x0b, 0x01, 0x96, 0x3d, 0x69, 0x68, 0x37, 0x40, 0x85, 0xab, 0xd2, 0x0b, 0x83, 0x66, + 0xb9, 0xa5, 0x58, 0x25, 0x17, 0x64, 0xa9, 0xa1, 0x72, 0x09, 0xb6, 0x1e, 0x78, 0x2a, 0x77, 0x6d, + 0x05, 0x3c, 0x74, 0x08, 0xfb, 0x68, 0xd8, 0x54, 0x65, 0xa8, 0x30, 0x34, 0x0b, 0x14, 0x23, 0x3a, + 0x10, 0x7a, 0xd4, 0xdc, 0xb5, 0xf7, 0xa9, 0xa1, 0x79, 0x70, 0x3c, 0xab, 0x62, 0x07, 0x51, 0x0a, + 0x07, 0xc8, 0xe3, 0x10, 0x0d, 0x82, 0xf2, 0xe1, 0x08, 0x07, 0xb4, 0x59, 0x6d, 0x15, 0xad, 0x95, + 0xcd, 0xff, 0x6d, 0x39, 0x37, 0x36, 0x9f, 0x1b, 0x3b, 0x9f, 0x1b, 0xbb, 0x4b, 0x42, 0xec, 0xde, + 0x3a, 0x49, 0x8d, 0xc2, 0x8b, 0xb7, 0x86, 0x35, 0x08, 0xd9, 0xd1, 0xa8, 0x6f, 0xfb, 0x24, 0x72, + 0xf2, 0x21, 0x93, 0x9f, 0x9b, 0x34, 0x78, 0x9c, 0x4f, 0x11, 0x0f, 0xa0, 0x9e, 0x3c, 0xd9, 0x7c, + 0xa3, 0x80, 0xff, 0x76, 0xc2, 0x41, 0xf2, 0x1b, 0x84, 0x5c, 0x07, 0x55, 0x3f, 0xa7, 0xc8, 0xb5, + 0x9c, 0xdb, 0xdf, 0x27, 0x67, 0x2e, 0x9c, 0xfa, 0x4d, 0xe1, 0xcc, 0x67, 0x0a, 0xf8, 0x77, 0x3f, + 0x0e, 0x20, 0x43, 0x1d, 0xde, 0xad, 0x1f, 0xae, 0xa8, 0x0d, 0x96, 0x31, 0x1a, 0xf7, 0xe4, 0x1c, + 0x88, 0xa2, 0xdc, 0xc6, 0x34, 0x35, 0xea, 0x13, 0x18, 0x0d, 0xef, 0x9b, 0x73, 0x97, 0xe9, 0x55, + 0x31, 0x1a, 0x0b, 0xca, 0xaf, 0x55, 0x6b, 0x1e, 0x01, 0xad, 0x3b, 0x44, 0x30, 0xf9, 0x39, 0xc9, + 0x2d, 0x32, 0x15, 0xaf, 0x30, 0xbd, 0x54, 0x40, 0x7d, 0x37, 0xc4, 0x5c, 0x48, 0x3a, 0x27, 0xda, + 0xb8, 0x44, 0xe4, 0xd6, 0xa7, 0xa9, 0x51, 0x93, 0x95, 0x88, 0x6d, 0x73, 0x46, 0x7d, 0xf7, 0x0b, + 0xd4, 0xee, 0xda, 0x34, 0x35, 0x34, 0x89, 0x5e, 0x70, 0x9a, 0x97, 0x53, 0xba, 0xc7, 0x53, 0x12, + 0xed, 0xe4, 0x33, 0x50, 0xb4, 0x4a, 0xae, 0x9e, 0xa5, 0x46, 0x45, 0xf6, 0x93, 0x4e, 0x53, 0xe3, + 0x6f, 0x79, 0xc2, 0x0c, 0x64, 0x7a, 0x15, 0xd9, 0x63, 0x6a, 0xbe, 0x52, 0x80, 0xb6, 0x8f, 0xe3, + 0x3f, 0x29, 0x67, 0xf7, 0xe1, 0xc9, 0xb9, 0x5e, 0x38, 0x3b, 0xd7, 0x0b, 0xcf, 0x33, 0x5d, 0x39, + 0xc9, 0x74, 0xe5, 0x34, 0xd3, 0x95, 0x77, 0x99, 0xae, 0x3c, 0xbd, 0xd0, 0x0b, 0xa7, 0x17, 0x7a, + 0xe1, 0xec, 0x42, 0x2f, 0x3c, 0xda, 0x58, 0xb8, 0x9b, 0x5d, 0x42, 0xa3, 0x83, 0xd9, 0x03, 0x1f, + 0x38, 0x4f, 0xe4, 0x43, 0x2f, 0xee, 0x67, 0x5f, 0x15, 0xcf, 0xfc, 0xed, 0x8f, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x9a, 0x01, 0xce, 0x1b, 0x6f, 0x06, 0x00, 0x00, } func (this *StoreCodeProposal) Equal(that interface{}) bool { diff --git a/x/wasm/types/proposal_test.go b/x/wasm/types/proposal_test.go index 05d172a82a..5d90e2f56e 100644 --- a/x/wasm/types/proposal_test.go +++ b/x/wasm/types/proposal_test.go @@ -703,7 +703,7 @@ func TestUnmarshalContentFromJson(t *testing.T) { "admin": "myAdminAddress", "code_id": 1, "funds": [{"denom": "ALX", "amount": "2"},{"denom": "BLX","amount": "3"}], - "msg": "e30=", + "msg": {}, "label": "testing", "run_as": "myRunAsAddress" }`, @@ -726,7 +726,7 @@ func TestUnmarshalContentFromJson(t *testing.T) { "description": "bar", "code_id": 1, "contract": "myContractAddr", - "msg": "e30=", + "msg": {}, "run_as": "myRunAsAddress" }`, got: &MigrateContractProposal{}, @@ -746,5 +746,38 @@ func TestUnmarshalContentFromJson(t *testing.T) { assert.Equal(t, spec.exp, spec.got) }) } +} + +func TestProposalJsonSignBytes(t *testing.T) { + const myInnerMsg = `{"foo":"bar"}` + specs := map[string]struct { + src govtypes.Content + exp string + }{ + "instantiate contract": { + src: &InstantiateContractProposal{Msg: RawContractMessage(myInnerMsg)}, + exp: ` +{ + "type":"cosmos-sdk/MsgSubmitProposal", + "value":{"content":{"type":"wasm/InstantiateContractProposal","value":{"funds":[],"msg":{"foo":"bar"}}},"initial_deposit":[]} +}`, + }, + "migrate contract": { + src: &MigrateContractProposal{Msg: RawContractMessage(myInnerMsg)}, + exp: ` +{ + "type":"cosmos-sdk/MsgSubmitProposal", + "value":{"content":{"type":"wasm/MigrateContractProposal","value":{"msg":{"foo":"bar"}}},"initial_deposit":[]} +}`, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + msg, err := govtypes.NewMsgSubmitProposal(spec.src, sdk.NewCoins(), []byte{}) + require.NoError(t, err) + bz := msg.GetSignBytes() + assert.JSONEq(t, spec.exp, string(bz), "raw: %s", string(bz)) + }) + } } diff --git a/x/wasm/types/query.pb.go b/x/wasm/types/query.pb.go index 7809974a26..a6f0f8e710 100644 --- a/x/wasm/types/query.pb.go +++ b/x/wasm/types/query.pb.go @@ -6,7 +6,6 @@ package types import ( bytes "bytes" context "context" - encoding_json "encoding/json" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" @@ -450,7 +449,7 @@ type QuerySmartContractStateRequest struct { // address is the address of the contract Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` // QueryData contains the query data passed to the contract - QueryData []byte `protobuf:"bytes,2,opt,name=query_data,json=queryData,proto3" json:"query_data,omitempty"` + QueryData RawContractMessage `protobuf:"bytes,2,opt,name=query_data,json=queryData,proto3,casttype=RawContractMessage" json:"query_data,omitempty"` } func (m *QuerySmartContractStateRequest) Reset() { *m = QuerySmartContractStateRequest{} } @@ -490,7 +489,7 @@ var xxx_messageInfo_QuerySmartContractStateRequest proto.InternalMessageInfo // Query/SmartContractState RPC method type QuerySmartContractStateResponse struct { // Data contains the json data returned from the smart contract - Data encoding_json.RawMessage `protobuf:"bytes,1,opt,name=data,proto3,casttype=encoding/json.RawMessage" json:"data,omitempty"` + Data RawContractMessage `protobuf:"bytes,1,opt,name=data,proto3,casttype=RawContractMessage" json:"data,omitempty"` } func (m *QuerySmartContractStateResponse) Reset() { *m = QuerySmartContractStateResponse{} } @@ -828,79 +827,79 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/query.proto", fileDescriptor_9677c207036b9f2b) } var fileDescriptor_9677c207036b9f2b = []byte{ - // 1149 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x97, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xc7, 0x3d, 0xa9, 0x13, 0xdb, 0x93, 0xa0, 0x9a, 0x11, 0x22, 0xc6, 0xa4, 0xbb, 0xd1, 0x52, - 0x85, 0x34, 0x0d, 0x3b, 0x49, 0x1a, 0x10, 0xe2, 0xc6, 0xa6, 0xd0, 0x24, 0x52, 0xa5, 0x76, 0x23, - 0x54, 0x01, 0x87, 0x68, 0xec, 0x9d, 0x3a, 0x8b, 0xec, 0x1d, 0x77, 0x67, 0x92, 0xd4, 0x8a, 0x02, - 0xa8, 0x12, 0x37, 0x04, 0x48, 0x88, 0x33, 0x1c, 0x50, 0x81, 0x23, 0xe2, 0x1f, 0xe0, 0x98, 0x63, - 0x24, 0x2e, 0x9c, 0x2c, 0x70, 0x38, 0xa0, 0xfc, 0x03, 0x48, 0x3d, 0xa1, 0x9d, 0x9d, 0x8d, 0xd7, - 0x3f, 0xd6, 0x76, 0x2b, 0xab, 0x97, 0x68, 0x37, 0xf3, 0xde, 0x9b, 0xcf, 0xfb, 0xee, 0x9b, 0xf7, - 0xc6, 0x70, 0xae, 0xcc, 0x78, 0xed, 0x90, 0xf0, 0x1a, 0x96, 0x7f, 0x0e, 0x56, 0xf1, 0x83, 0x7d, - 0xea, 0x37, 0xcc, 0xba, 0xcf, 0x04, 0x43, 0xf9, 0x68, 0xd5, 0x94, 0x7f, 0x0e, 0x56, 0x8b, 0x2f, - 0x55, 0x58, 0x85, 0xc9, 0x45, 0x1c, 0x3c, 0x85, 0x76, 0xc5, 0xde, 0x28, 0xa2, 0x51, 0xa7, 0x3c, - 0x5a, 0xad, 0x30, 0x56, 0xa9, 0x52, 0x4c, 0xea, 0x2e, 0x26, 0x9e, 0xc7, 0x04, 0x11, 0x2e, 0xf3, - 0xa2, 0xd5, 0xa5, 0xc0, 0x97, 0x71, 0x5c, 0x22, 0x9c, 0x86, 0x9b, 0xe3, 0x83, 0xd5, 0x12, 0x15, - 0x64, 0x15, 0xd7, 0x49, 0xc5, 0xf5, 0xa4, 0x71, 0x68, 0x6b, 0xac, 0xc3, 0xc2, 0xdd, 0xc0, 0x62, - 0x83, 0x79, 0xc2, 0x27, 0x65, 0xb1, 0xe5, 0xdd, 0x67, 0x36, 0x7d, 0xb0, 0x4f, 0xb9, 0x40, 0x05, - 0x98, 0x21, 0x8e, 0xe3, 0x53, 0xce, 0x0b, 0x60, 0x1e, 0x2c, 0xe6, 0xec, 0xe8, 0xd5, 0xf8, 0x0a, - 0xc0, 0x57, 0xfa, 0xb8, 0xf1, 0x3a, 0xf3, 0x38, 0x4d, 0xf6, 0x43, 0x77, 0xe1, 0x0b, 0x65, 0xe5, - 0xb1, 0xeb, 0x7a, 0xf7, 0x59, 0x61, 0x62, 0x1e, 0x2c, 0x4e, 0xaf, 0x69, 0x66, 0xb7, 0x2a, 0x66, - 0x3c, 0xb0, 0x35, 0x73, 0xd2, 0xd4, 0x53, 0xa7, 0x4d, 0x1d, 0x9c, 0x37, 0xf5, 0x94, 0x3d, 0x53, - 0x8e, 0xad, 0xbd, 0x93, 0xfe, 0xf7, 0x07, 0x1d, 0x18, 0x9f, 0xc1, 0x57, 0x3b, 0x78, 0x36, 0x5d, - 0x2e, 0x98, 0xdf, 0x18, 0x9a, 0x09, 0x7a, 0x1f, 0xc2, 0xb6, 0x26, 0x0a, 0x67, 0xc1, 0x0c, 0x05, - 0x34, 0x03, 0x01, 0xcd, 0xf0, 0xeb, 0x29, 0x01, 0xcd, 0x3b, 0xa4, 0x42, 0x55, 0x54, 0x3b, 0xe6, - 0x69, 0xfc, 0x06, 0xe0, 0x5c, 0x7f, 0x02, 0x25, 0xca, 0x36, 0xcc, 0x50, 0x4f, 0xf8, 0x2e, 0x0d, - 0x10, 0x2e, 0x2d, 0x4e, 0xaf, 0x2d, 0x25, 0x27, 0xbd, 0xc1, 0x1c, 0xaa, 0xfc, 0xdf, 0xf3, 0x84, - 0xdf, 0xb0, 0xd2, 0x81, 0x00, 0x76, 0x14, 0x00, 0xdd, 0xea, 0x03, 0xfd, 0xfa, 0x50, 0xe8, 0x10, - 0xa4, 0x83, 0xfa, 0xd3, 0x2e, 0xd9, 0xb8, 0xd5, 0x08, 0xf6, 0x8e, 0x64, 0x9b, 0x85, 0x99, 0x32, - 0x73, 0xe8, 0xae, 0xeb, 0x48, 0xd9, 0xd2, 0xf6, 0x54, 0xf0, 0xba, 0xe5, 0x8c, 0x4d, 0xb5, 0x2f, - 0xba, 0x55, 0xbb, 0x00, 0x50, 0xaa, 0xcd, 0xc1, 0x5c, 0xf4, 0xb5, 0x43, 0xdd, 0x72, 0x76, 0xfb, - 0x1f, 0xe3, 0xd3, 0xe1, 0xf3, 0x88, 0xe3, 0xdd, 0x6a, 0x35, 0x42, 0xd9, 0x11, 0x44, 0xd0, 0xe7, - 0x57, 0x40, 0xdf, 0x03, 0x78, 0x25, 0x01, 0x41, 0x69, 0xf1, 0x26, 0x9c, 0xaa, 0x31, 0x87, 0x56, - 0xa3, 0x02, 0x9a, 0xed, 0x2d, 0xa0, 0xdb, 0xc1, 0xba, 0xaa, 0x16, 0x65, 0x3c, 0x3e, 0x91, 0xee, - 0x29, 0x8d, 0x6c, 0x72, 0xf8, 0x94, 0x1a, 0x5d, 0x81, 0x50, 0xee, 0xb1, 0xeb, 0x10, 0x41, 0x24, - 0xc2, 0x8c, 0x9d, 0x93, 0xff, 0xb9, 0x49, 0x04, 0x31, 0x6e, 0xa8, 0xcc, 0x7b, 0x03, 0xab, 0xcc, - 0x11, 0x4c, 0x4b, 0x4f, 0x20, 0x3d, 0xe5, 0xb3, 0xf1, 0x21, 0xd4, 0xa4, 0xd3, 0x4e, 0x8d, 0xf8, - 0x62, 0xbc, 0x3c, 0x3b, 0x50, 0x4f, 0x0c, 0xad, 0x88, 0x56, 0xe2, 0x44, 0xd6, 0xdc, 0x93, 0xa6, - 0x5e, 0xa0, 0x5e, 0x99, 0x39, 0xae, 0x57, 0xc1, 0x9f, 0x70, 0xe6, 0x99, 0x36, 0x39, 0xbc, 0x4d, - 0x39, 0x0f, 0xb4, 0x0c, 0x79, 0xaf, 0xc3, 0xbc, 0xaa, 0xf4, 0xe1, 0xe7, 0xcb, 0xf8, 0x1d, 0xc0, - 0x7c, 0x60, 0xd8, 0xd1, 0x56, 0xaf, 0x75, 0x59, 0x5b, 0xf9, 0x56, 0x53, 0x9f, 0x92, 0x66, 0x37, - 0xcf, 0x9b, 0xfa, 0x84, 0xeb, 0x5c, 0x9c, 0xcf, 0x02, 0xcc, 0x94, 0x7d, 0x4a, 0x04, 0xf3, 0x65, - 0x76, 0x39, 0x3b, 0x7a, 0x45, 0x1f, 0xc0, 0x5c, 0x80, 0xb3, 0xbb, 0x47, 0xf8, 0x5e, 0xe1, 0x92, - 0xa4, 0x7f, 0xfb, 0x49, 0x53, 0x5f, 0xaf, 0xb8, 0x62, 0x6f, 0xbf, 0x64, 0x96, 0x59, 0x0d, 0x0b, - 0xea, 0x39, 0xd4, 0xaf, 0xb9, 0x9e, 0x88, 0x3f, 0x56, 0xdd, 0x12, 0xc7, 0xa5, 0x86, 0xa0, 0xdc, - 0xdc, 0xa4, 0x0f, 0xad, 0xe0, 0xc1, 0xce, 0x06, 0xa1, 0x36, 0x09, 0xdf, 0x0b, 0xbb, 0xf0, 0x76, - 0x3a, 0x9b, 0xce, 0x4f, 0x6e, 0xa7, 0xb3, 0x93, 0xf9, 0x29, 0xe3, 0x11, 0x80, 0x2f, 0xc6, 0x12, - 0x56, 0x39, 0x6c, 0x05, 0xe7, 0x39, 0xc8, 0x21, 0x68, 0xfe, 0x40, 0xd6, 0xa2, 0xd1, 0xaf, 0x0f, - 0x76, 0xa6, 0x6e, 0x65, 0x2f, 0x9a, 0x7f, 0xb6, 0xac, 0xd6, 0xd0, 0x9c, 0xfa, 0x04, 0xf2, 0xf3, - 0x59, 0xd9, 0xf3, 0xa6, 0x2e, 0xdf, 0x43, 0xb9, 0xd5, 0x58, 0xf8, 0x38, 0xc6, 0xc0, 0x23, 0xd5, - 0x3b, 0x4f, 0x2c, 0x78, 0xe6, 0x13, 0xfb, 0x18, 0x40, 0x14, 0x8f, 0xae, 0x52, 0xbc, 0x05, 0xe1, - 0x45, 0x8a, 0xd1, 0x51, 0x1d, 0x25, 0xc7, 0xf0, 0xd4, 0xe6, 0xa2, 0xfc, 0xc6, 0x78, 0x70, 0x09, - 0x9c, 0x95, 0x9c, 0x77, 0x5c, 0xcf, 0xa3, 0xce, 0x00, 0x2d, 0x9e, 0xbd, 0x7b, 0x7d, 0x0d, 0xd4, - 0x3d, 0xa2, 0x63, 0x0f, 0xa5, 0xc8, 0x12, 0xcc, 0xaa, 0xc2, 0x0d, 0xf5, 0x48, 0x5b, 0x97, 0x83, - 0x5c, 0x5b, 0x4d, 0x3d, 0x13, 0x56, 0x2f, 0xb7, 0x33, 0x61, 0xe1, 0x8e, 0x2f, 0xe9, 0xb5, 0xff, - 0x20, 0x9c, 0x94, 0x44, 0xe8, 0x3b, 0x00, 0x67, 0xe2, 0xd7, 0x09, 0xd4, 0x67, 0xf2, 0x26, 0xdd, - 0x81, 0x8a, 0xd7, 0x47, 0xb2, 0x0d, 0xf7, 0x37, 0x96, 0x1f, 0xfd, 0xf1, 0xcf, 0xb7, 0x13, 0x0b, - 0xe8, 0x2a, 0xee, 0xb9, 0xbd, 0x45, 0x43, 0x0b, 0x1f, 0xa9, 0x26, 0x74, 0x8c, 0x1e, 0x03, 0x78, - 0xb9, 0xeb, 0xb6, 0x80, 0xde, 0x18, 0xb2, 0x5d, 0xe7, 0xbd, 0xa6, 0x68, 0x8e, 0x6a, 0xae, 0x00, - 0xd7, 0x25, 0xa0, 0x89, 0x96, 0x47, 0x01, 0xc4, 0x7b, 0x0a, 0xea, 0xc7, 0x18, 0xa8, 0x1a, 0xd0, - 0x43, 0x41, 0x3b, 0x6f, 0x12, 0x43, 0x41, 0xbb, 0xe6, 0xbe, 0xb1, 0x26, 0x41, 0x97, 0xd1, 0x52, - 0x3f, 0x50, 0x87, 0xe2, 0x23, 0x55, 0x50, 0xc7, 0xb8, 0x7d, 0x1b, 0xf8, 0x09, 0xc0, 0x7c, 0xf7, - 0xf0, 0x44, 0x49, 0x1b, 0x27, 0x0c, 0xfa, 0x22, 0x1e, 0xd9, 0x7e, 0x14, 0xd2, 0x1e, 0x49, 0xb9, - 0x84, 0xfa, 0x05, 0xc0, 0x7c, 0xf7, 0xb0, 0x4b, 0x24, 0x4d, 0x18, 0xb7, 0x89, 0xa4, 0x49, 0x53, - 0x34, 0xf6, 0xf1, 0x07, 0x00, 0xfa, 0xe4, 0x10, 0x1f, 0xb5, 0x87, 0xe3, 0x31, 0xfa, 0x15, 0x40, - 0xd4, 0x3b, 0x08, 0xd1, 0x4a, 0xc2, 0xee, 0x89, 0xe3, 0xb8, 0xb8, 0xfa, 0x14, 0x1e, 0x8a, 0xf8, - 0x2d, 0x49, 0xbc, 0x82, 0xcc, 0x81, 0x92, 0x06, 0xfe, 0x9d, 0xcc, 0x0d, 0x98, 0x96, 0x45, 0x6a, - 0x24, 0x56, 0x5d, 0xbb, 0x32, 0x5f, 0x1b, 0x68, 0xa3, 0x40, 0x16, 0x25, 0x88, 0x81, 0xe6, 0x87, - 0x95, 0x23, 0xf2, 0xe1, 0xa4, 0x6c, 0x7e, 0x68, 0x50, 0xdc, 0xa8, 0xfd, 0x16, 0xaf, 0x0e, 0x36, - 0x52, 0xbb, 0x6b, 0x72, 0xf7, 0x02, 0x7a, 0xb9, 0xff, 0xee, 0xe8, 0x4b, 0x00, 0xa7, 0x63, 0x7d, - 0x17, 0x5d, 0x4b, 0x88, 0xda, 0xdb, 0xff, 0x8b, 0x4b, 0xa3, 0x98, 0x2a, 0x8c, 0x05, 0x89, 0x31, - 0x8f, 0xb4, 0xfe, 0x18, 0x1c, 0xd7, 0xa5, 0x93, 0xb5, 0x79, 0xf2, 0xb7, 0x96, 0xfa, 0xb9, 0xa5, - 0xa5, 0x4e, 0x5a, 0x1a, 0x38, 0x6d, 0x69, 0xe0, 0xaf, 0x96, 0x06, 0xbe, 0x39, 0xd3, 0x52, 0xa7, - 0x67, 0x5a, 0xea, 0xcf, 0x33, 0x2d, 0xf5, 0xd1, 0x42, 0xec, 0xb6, 0xb1, 0xc1, 0x78, 0xed, 0x5e, - 0x14, 0xcb, 0xc1, 0x0f, 0xc3, 0x98, 0xf2, 0xc7, 0x6e, 0x69, 0x4a, 0xfe, 0x46, 0xbd, 0xf1, 0x7f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x47, 0xc6, 0xdb, 0xf0, 0x53, 0x0f, 0x00, 0x00, + // 1142 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x97, 0x4d, 0x6f, 0x1b, 0x45, + 0x18, 0xc7, 0x3d, 0xa9, 0xe3, 0x97, 0x49, 0x50, 0xcd, 0x08, 0x35, 0xc6, 0xa4, 0xbb, 0xd1, 0x52, + 0x85, 0xd4, 0x0d, 0xbb, 0x75, 0x9a, 0x22, 0xc4, 0x0d, 0xa7, 0xd0, 0x24, 0x52, 0xa4, 0x76, 0x2b, + 0x54, 0x09, 0x0e, 0xd1, 0xd8, 0x3b, 0xb5, 0x57, 0xb2, 0x77, 0x9c, 0x9d, 0x49, 0x52, 0x2b, 0x0a, + 0xa0, 0x4a, 0xdc, 0x10, 0x20, 0x21, 0xce, 0x70, 0x40, 0x05, 0x8e, 0x88, 0x2f, 0xc0, 0x31, 0xc7, + 0x48, 0x5c, 0x38, 0x59, 0xe0, 0x70, 0x40, 0xf9, 0x02, 0x48, 0x3d, 0xa1, 0x9d, 0x9d, 0xb5, 0xd7, + 0x2f, 0x6b, 0x3b, 0x91, 0xd5, 0x4b, 0xb4, 0x9b, 0x79, 0x5e, 0x7e, 0xcf, 0x7f, 0x9f, 0x99, 0x67, + 0x0c, 0x17, 0xcb, 0x94, 0xd5, 0x0f, 0x31, 0xab, 0x1b, 0xe2, 0xcf, 0x41, 0xc1, 0xd8, 0xdb, 0x27, + 0x6e, 0x53, 0x6f, 0xb8, 0x94, 0x53, 0x94, 0x09, 0x56, 0x75, 0xf1, 0xe7, 0xa0, 0x90, 0x7b, 0xad, + 0x42, 0x2b, 0x54, 0x2c, 0x1a, 0xde, 0x93, 0x6f, 0x97, 0x1b, 0x8c, 0xc2, 0x9b, 0x0d, 0xc2, 0x82, + 0xd5, 0x0a, 0xa5, 0x95, 0x1a, 0x31, 0x70, 0xc3, 0x36, 0xb0, 0xe3, 0x50, 0x8e, 0xb9, 0x4d, 0x9d, + 0x60, 0x35, 0xef, 0xf9, 0x52, 0x66, 0x94, 0x30, 0x23, 0x7e, 0x72, 0xe3, 0xa0, 0x50, 0x22, 0x1c, + 0x17, 0x8c, 0x06, 0xae, 0xd8, 0x8e, 0x30, 0xf6, 0x6d, 0xb5, 0x75, 0x98, 0x7d, 0xe8, 0x59, 0x6c, + 0x50, 0x87, 0xbb, 0xb8, 0xcc, 0xb7, 0x9c, 0x27, 0xd4, 0x24, 0x7b, 0xfb, 0x84, 0x71, 0x94, 0x85, + 0x49, 0x6c, 0x59, 0x2e, 0x61, 0x2c, 0x0b, 0x96, 0xc0, 0x4a, 0xda, 0x0c, 0x5e, 0xb5, 0xaf, 0x00, + 0x7c, 0x7d, 0x88, 0x1b, 0x6b, 0x50, 0x87, 0x91, 0x68, 0x3f, 0xf4, 0x10, 0xbe, 0x52, 0x96, 0x1e, + 0xbb, 0xb6, 0xf3, 0x84, 0x66, 0x67, 0x96, 0xc0, 0xca, 0xdc, 0x9a, 0xa2, 0xf7, 0xab, 0xa2, 0x87, + 0x03, 0x17, 0xe7, 0x4f, 0x5a, 0x6a, 0xec, 0xb4, 0xa5, 0x82, 0xf3, 0x96, 0x1a, 0x33, 0xe7, 0xcb, + 0xa1, 0xb5, 0xf7, 0xe2, 0xff, 0xfe, 0xa0, 0x02, 0xed, 0x33, 0xf8, 0x46, 0x0f, 0xcf, 0xa6, 0xcd, + 0x38, 0x75, 0x9b, 0x63, 0x2b, 0x41, 0x1f, 0x42, 0xd8, 0xd5, 0x44, 0xe2, 0x2c, 0xeb, 0xbe, 0x80, + 0xba, 0x27, 0xa0, 0xee, 0x7f, 0x3d, 0x29, 0xa0, 0xfe, 0x00, 0x57, 0x88, 0x8c, 0x6a, 0x86, 0x3c, + 0xb5, 0xdf, 0x00, 0x5c, 0x1c, 0x4e, 0x20, 0x45, 0xd9, 0x86, 0x49, 0xe2, 0x70, 0xd7, 0x26, 0x1e, + 0xc2, 0x95, 0x95, 0xb9, 0xb5, 0x7c, 0x74, 0xd1, 0x1b, 0xd4, 0x22, 0xd2, 0xff, 0x03, 0x87, 0xbb, + 0xcd, 0x62, 0xdc, 0x13, 0xc0, 0x0c, 0x02, 0xa0, 0xfb, 0x43, 0xa0, 0xdf, 0x1a, 0x0b, 0xed, 0x83, + 0xf4, 0x50, 0x7f, 0xda, 0x27, 0x1b, 0x2b, 0x36, 0xbd, 0xdc, 0x81, 0x6c, 0x0b, 0x30, 0x59, 0xa6, + 0x16, 0xd9, 0xb5, 0x2d, 0x21, 0x5b, 0xdc, 0x4c, 0x78, 0xaf, 0x5b, 0xd6, 0xd4, 0x54, 0xfb, 0xa2, + 0x5f, 0xb5, 0x0e, 0x80, 0x54, 0x6d, 0x11, 0xa6, 0x83, 0xaf, 0xed, 0xeb, 0x96, 0x36, 0xbb, 0xff, + 0x98, 0x9e, 0x0e, 0x9f, 0x07, 0x1c, 0xef, 0xd7, 0x6a, 0x01, 0xca, 0x23, 0x8e, 0x39, 0x79, 0x79, + 0x0d, 0xf4, 0x3d, 0x80, 0xd7, 0x23, 0x10, 0xa4, 0x16, 0x77, 0x61, 0xa2, 0x4e, 0x2d, 0x52, 0x0b, + 0x1a, 0x68, 0x61, 0xb0, 0x81, 0x76, 0xbc, 0x75, 0xd9, 0x2d, 0xd2, 0x78, 0x7a, 0x22, 0x3d, 0x96, + 0x1a, 0x99, 0xf8, 0xf0, 0x82, 0x1a, 0x5d, 0x87, 0x50, 0xe4, 0xd8, 0xb5, 0x30, 0xc7, 0x02, 0x61, + 0xde, 0x4c, 0x8b, 0xff, 0xdc, 0xc3, 0x1c, 0x6b, 0x77, 0x64, 0xe5, 0x83, 0x81, 0x65, 0xe5, 0x08, + 0xc6, 0x85, 0x27, 0x10, 0x9e, 0xe2, 0x59, 0xdb, 0x83, 0x8a, 0x70, 0x7a, 0x54, 0xc7, 0x2e, 0xbf, + 0x20, 0xcf, 0xdd, 0x41, 0x9e, 0xe2, 0xb5, 0x17, 0x2d, 0x15, 0x85, 0x08, 0x76, 0x08, 0x63, 0x9e, + 0x12, 0x21, 0xce, 0x1d, 0xa8, 0x46, 0xa6, 0x94, 0xa4, 0xf9, 0x30, 0x69, 0x64, 0x4c, 0xbf, 0x82, + 0x5b, 0x30, 0x23, 0x7b, 0x7f, 0xfc, 0x8e, 0xd3, 0x7e, 0x07, 0x30, 0xe3, 0x19, 0xf6, 0x1c, 0xb4, + 0x37, 0xfb, 0xac, 0x8b, 0x99, 0x76, 0x4b, 0x4d, 0x08, 0xb3, 0x7b, 0xe7, 0x2d, 0x75, 0xc6, 0xb6, + 0x3a, 0x3b, 0x36, 0x0b, 0x93, 0x65, 0x97, 0x60, 0x4e, 0x5d, 0x51, 0x6f, 0xda, 0x0c, 0x5e, 0xd1, + 0x47, 0x30, 0xed, 0xe1, 0xec, 0x56, 0x31, 0xab, 0x66, 0xaf, 0x08, 0xee, 0x77, 0x5f, 0xb4, 0xd4, + 0xf5, 0x8a, 0xcd, 0xab, 0xfb, 0x25, 0xbd, 0x4c, 0xeb, 0x06, 0x27, 0x8e, 0x45, 0xdc, 0xba, 0xed, + 0xf0, 0xf0, 0x63, 0xcd, 0x2e, 0x31, 0xa3, 0xd4, 0xe4, 0x84, 0xe9, 0x9b, 0xe4, 0x69, 0xd1, 0x7b, + 0x30, 0x53, 0x5e, 0xa8, 0x4d, 0xcc, 0xaa, 0xfe, 0xb9, 0xbc, 0x1d, 0x4f, 0xc5, 0x33, 0xb3, 0xdb, + 0xf1, 0xd4, 0x6c, 0x26, 0xa1, 0x3d, 0x03, 0xf0, 0xd5, 0x50, 0xc1, 0xb2, 0x86, 0x2d, 0x6f, 0x87, + 0x7b, 0x35, 0x78, 0xe3, 0x00, 0x88, 0xee, 0xd4, 0x86, 0x9d, 0x8c, 0xbd, 0xa5, 0x17, 0x53, 0x9d, + 0x71, 0x90, 0x2a, 0xcb, 0x35, 0xb4, 0x28, 0xc5, 0xf7, 0x3f, 0x68, 0xea, 0xbc, 0xa5, 0x8a, 0x77, + 0x5f, 0x6e, 0x39, 0x28, 0x3e, 0x09, 0x31, 0xb0, 0x40, 0xf5, 0xde, 0x3d, 0x0c, 0x2e, 0xbd, 0x87, + 0x9f, 0x03, 0x88, 0xc2, 0xd1, 0x65, 0x89, 0xf7, 0x21, 0xec, 0x94, 0x18, 0x6c, 0xde, 0x49, 0x6a, + 0xf4, 0xf7, 0x71, 0x3a, 0xa8, 0x6f, 0x8a, 0x5b, 0x19, 0xc3, 0x05, 0xc1, 0xf9, 0xc0, 0x76, 0x1c, + 0x62, 0x8d, 0xd0, 0xe2, 0xf2, 0xe7, 0xd9, 0xd7, 0x40, 0xde, 0x2c, 0x7a, 0x72, 0x74, 0xb6, 0x49, + 0x4a, 0x36, 0xae, 0xaf, 0x47, 0xbc, 0x78, 0xd5, 0xab, 0xb5, 0xdd, 0x52, 0x93, 0x7e, 0xf7, 0x32, + 0x33, 0xe9, 0x37, 0xee, 0xf4, 0x8a, 0x5e, 0xfb, 0x0f, 0xc2, 0x59, 0x41, 0x84, 0xbe, 0x03, 0x70, + 0x3e, 0x7c, 0xc1, 0x40, 0x43, 0x66, 0x71, 0xd4, 0xad, 0x28, 0x77, 0x6b, 0x22, 0x5b, 0x3f, 0xbf, + 0xb6, 0xfa, 0xec, 0x8f, 0x7f, 0xbe, 0x9d, 0x59, 0x46, 0x37, 0x8c, 0x81, 0xfb, 0x5c, 0x30, 0xc6, + 0x8c, 0x23, 0x79, 0x2c, 0x1d, 0xa3, 0xe7, 0x00, 0x5e, 0xed, 0xbb, 0x3f, 0xa0, 0xb7, 0xc7, 0xa4, + 0xeb, 0xbd, 0xe9, 0xe4, 0xf4, 0x49, 0xcd, 0x25, 0xe0, 0xba, 0x00, 0xd4, 0xd1, 0xea, 0x24, 0x80, + 0x46, 0x55, 0x42, 0xfd, 0x18, 0x02, 0x95, 0x23, 0x7b, 0x2c, 0x68, 0xef, 0xdd, 0x62, 0x2c, 0x68, + 0xdf, 0x4d, 0x40, 0x5b, 0x13, 0xa0, 0xab, 0x28, 0x3f, 0x0c, 0xd4, 0x22, 0xc6, 0x91, 0x6c, 0xa8, + 0x63, 0xa3, 0x7b, 0x3f, 0xf8, 0x09, 0xc0, 0x4c, 0xff, 0x38, 0x45, 0x51, 0x89, 0x23, 0x46, 0x7f, + 0xce, 0x98, 0xd8, 0x7e, 0x12, 0xd2, 0x01, 0x49, 0x99, 0x80, 0xfa, 0x05, 0xc0, 0x4c, 0xff, 0xf8, + 0x8b, 0x24, 0x8d, 0x18, 0xc0, 0x91, 0xa4, 0x51, 0x73, 0x35, 0xf4, 0xf1, 0x47, 0x00, 0xba, 0xf8, + 0xd0, 0x38, 0xea, 0x8e, 0xcb, 0x63, 0xf4, 0x2b, 0x80, 0x68, 0x70, 0x04, 0xa2, 0xdb, 0x11, 0xd9, + 0x23, 0x07, 0x74, 0xae, 0x70, 0x01, 0x0f, 0x49, 0xfc, 0x8e, 0x20, 0xbe, 0x8d, 0xf4, 0x91, 0x92, + 0x7a, 0xfe, 0xbd, 0xcc, 0x4d, 0x18, 0x17, 0x4d, 0xaa, 0x45, 0x76, 0x5d, 0xb7, 0x33, 0xdf, 0x1c, + 0x69, 0x23, 0x41, 0x56, 0x04, 0x88, 0x86, 0x96, 0xc6, 0xb5, 0x23, 0x72, 0xe1, 0xac, 0x38, 0xfc, + 0xd0, 0xa8, 0xb8, 0xc1, 0xf1, 0x9b, 0xbb, 0x31, 0xda, 0x48, 0x66, 0x57, 0x44, 0xf6, 0x2c, 0xba, + 0x36, 0x3c, 0x3b, 0xfa, 0x12, 0xc0, 0xb9, 0xd0, 0xb9, 0x8b, 0x6e, 0x46, 0x44, 0x1d, 0x3c, 0xff, + 0x73, 0xf9, 0x49, 0x4c, 0x25, 0xc6, 0xb2, 0xc0, 0x58, 0x42, 0xca, 0x70, 0x0c, 0x66, 0x34, 0x84, + 0x53, 0x71, 0xf3, 0xe4, 0x6f, 0x25, 0xf6, 0x73, 0x5b, 0x89, 0x9d, 0xb4, 0x15, 0x70, 0xda, 0x56, + 0xc0, 0x5f, 0x6d, 0x05, 0x7c, 0x73, 0xa6, 0xc4, 0x4e, 0xcf, 0x94, 0xd8, 0x9f, 0x67, 0x4a, 0xec, + 0xe3, 0xe5, 0xd0, 0x6d, 0x63, 0x83, 0xb2, 0xfa, 0xe3, 0x20, 0x96, 0x65, 0x3c, 0xf5, 0x63, 0x8a, + 0x9f, 0xbf, 0xa5, 0x84, 0xf8, 0xd5, 0x7a, 0xe7, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x33, + 0xf7, 0x66, 0x65, 0x0f, 0x00, 0x00, } func (this *QueryContractInfoResponse) Equal(that interface{}) bool { diff --git a/x/wasm/types/tx.go b/x/wasm/types/tx.go index 2599eb42b5..3461bd4d69 100644 --- a/x/wasm/types/tx.go +++ b/x/wasm/types/tx.go @@ -2,12 +2,45 @@ package types import ( "encoding/json" + "errors" "strings" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) +// RawContractMessage defines a json message that is sent or returned by a wasm contract. +// This type can hold any type of bytes. Until validateBasic is called there should not be +// any assumptions made that the data is valid syntax or semantic. +type RawContractMessage []byte + +func (r RawContractMessage) MarshalJSON() ([]byte, error) { + return json.RawMessage(r).MarshalJSON() +} + +func (r *RawContractMessage) UnmarshalJSON(b []byte) error { + if r == nil { + return errors.New("unmarshalJSON on nil pointer") + } + *r = append((*r)[0:0], b...) + return nil +} + +func (r *RawContractMessage) ValidateBasic() error { + if r == nil { + return ErrEmpty + } + if !json.Valid(*r) { + return ErrInvalid + } + return nil +} + +// Bytes returns raw bytes type +func (r RawContractMessage) Bytes() []byte { + return r +} + func (msg MsgStoreCode) Route() string { return RouterKey } @@ -77,8 +110,8 @@ func (msg MsgInstantiateContract) ValidateBasic() error { return sdkerrors.Wrap(err, "admin") } } - if !json.Valid(msg.Msg) { - return sdkerrors.Wrap(ErrInvalid, "init msg json") + if err := msg.Msg.ValidateBasic(); err != nil { + return sdkerrors.Wrap(err, "payload msg") } return nil } @@ -94,7 +127,6 @@ func (msg MsgInstantiateContract) GetSigners() []sdk.AccAddress { panic(err.Error()) } return []sdk.AccAddress{senderAddr} - } func (msg MsgExecuteContract) Route() string { @@ -116,8 +148,8 @@ func (msg MsgExecuteContract) ValidateBasic() error { if !msg.Funds.IsValid() { return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, "sentFunds") } - if !json.Valid(msg.Msg) { - return sdkerrors.Wrap(ErrInvalid, "msg json") + if err := msg.Msg.ValidateBasic(); err != nil { + return sdkerrors.Wrap(err, "payload msg") } return nil } @@ -154,8 +186,9 @@ func (msg MsgMigrateContract) ValidateBasic() error { if _, err := sdk.AccAddressFromBech32(msg.Contract); err != nil { return sdkerrors.Wrap(err, "contract") } - if !json.Valid(msg.Msg) { - return sdkerrors.Wrap(ErrInvalid, "migrate msg json") + + if err := msg.Msg.ValidateBasic(); err != nil { + return sdkerrors.Wrap(err, "payload msg") } return nil diff --git a/x/wasm/types/tx.pb.go b/x/wasm/types/tx.pb.go index 261db54537..dd82a4ae1b 100644 --- a/x/wasm/types/tx.pb.go +++ b/x/wasm/types/tx.pb.go @@ -125,7 +125,7 @@ type MsgInstantiateContract struct { // Label is optional metadata to be stored with a contract instance. Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"` // Msg json encoded message to be passed to the contract on instantiation - Msg []byte `protobuf:"bytes,5,opt,name=msg,proto3" json:"msg,omitempty"` + Msg RawContractMessage `protobuf:"bytes,5,opt,name=msg,proto3,casttype=RawContractMessage" json:"msg,omitempty"` // Funds coins that are transferred to the contract on instantiation Funds github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,6,rep,name=funds,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"funds"` } @@ -211,7 +211,7 @@ type MsgExecuteContract struct { // Contract is the address of the smart contract Contract string `protobuf:"bytes,2,opt,name=contract,proto3" json:"contract,omitempty"` // Msg json encoded message to be passed to the contract - Msg []byte `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"` + Msg RawContractMessage `protobuf:"bytes,3,opt,name=msg,proto3,casttype=RawContractMessage" json:"msg,omitempty"` // Funds coins that are transferred to the contract on execution Funds github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,5,rep,name=funds,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"funds"` } @@ -297,7 +297,7 @@ type MsgMigrateContract struct { // CodeID references the new WASM code CodeID uint64 `protobuf:"varint,3,opt,name=code_id,json=codeId,proto3" json:"code_id,omitempty"` // Msg json encoded message to be passed to the contract on migration - Msg []byte `protobuf:"bytes,4,opt,name=msg,proto3" json:"msg,omitempty"` + Msg RawContractMessage `protobuf:"bytes,4,opt,name=msg,proto3,casttype=RawContractMessage" json:"msg,omitempty"` } func (m *MsgMigrateContract) Reset() { *m = MsgMigrateContract{} } @@ -549,54 +549,55 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/tx.proto", fileDescriptor_4f74d82755520264) } var fileDescriptor_4f74d82755520264 = []byte{ - // 741 bytes of a gzipped FileDescriptorProto + // 759 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcd, 0x6e, 0xd3, 0x4a, - 0x14, 0x8e, 0x6f, 0x9c, 0x34, 0x39, 0xcd, 0xed, 0x8d, 0x7c, 0xdb, 0x92, 0x1a, 0xe4, 0x44, 0x01, - 0x95, 0x2c, 0xc0, 0x6e, 0x8a, 0xc4, 0x86, 0x55, 0xe3, 0xb2, 0x68, 0x25, 0x23, 0xe4, 0xaa, 0x54, - 0xb0, 0x89, 0x26, 0xf6, 0xd4, 0x58, 0xd4, 0x9e, 0xe0, 0x99, 0xfe, 0xad, 0x78, 0x05, 0x9e, 0x83, - 0x77, 0x60, 0xc1, 0xae, 0x2b, 0xd4, 0x25, 0xab, 0x02, 0xe9, 0x3b, 0xb0, 0x46, 0x1e, 0xff, 0xd4, - 0x4d, 0x9d, 0x34, 0x12, 0x62, 0x63, 0xcf, 0xf1, 0x7c, 0xdf, 0xf9, 0xf9, 0xe6, 0xf8, 0x0c, 0xac, - 0x58, 0x84, 0x7a, 0xc7, 0x88, 0x7a, 0x1a, 0x7f, 0x1c, 0x75, 0x35, 0x76, 0xa2, 0x0e, 0x03, 0xc2, - 0x88, 0x54, 0x4f, 0xb6, 0x54, 0xfe, 0x38, 0xea, 0xca, 0x4a, 0xf8, 0x85, 0x50, 0x6d, 0x80, 0x28, - 0xd6, 0x8e, 0xba, 0x03, 0xcc, 0x50, 0x57, 0xb3, 0x88, 0xeb, 0x47, 0x0c, 0x79, 0xd1, 0x21, 0x0e, - 0xe1, 0x4b, 0x2d, 0x5c, 0xc5, 0x5f, 0xef, 0xdd, 0x0c, 0x71, 0x3a, 0xc4, 0x34, 0xda, 0x6d, 0x7f, - 0x11, 0xa0, 0x66, 0x50, 0x67, 0x87, 0x91, 0x00, 0xeb, 0xc4, 0xc6, 0xd2, 0x32, 0x94, 0x29, 0xf6, - 0x6d, 0x1c, 0x34, 0x84, 0x96, 0xd0, 0xa9, 0x9a, 0xb1, 0x25, 0x3d, 0x85, 0x85, 0x90, 0xdf, 0x1f, - 0x9c, 0x32, 0xdc, 0xb7, 0x88, 0x8d, 0x1b, 0xff, 0xb4, 0x84, 0x4e, 0xad, 0x57, 0x1f, 0x5d, 0x34, - 0x6b, 0x7b, 0x1b, 0x3b, 0x46, 0xef, 0x94, 0x71, 0x0f, 0x66, 0x2d, 0xc4, 0x25, 0x96, 0xb4, 0x0b, - 0xcb, 0xae, 0x4f, 0x19, 0xf2, 0x99, 0x8b, 0x18, 0xee, 0x0f, 0x71, 0xe0, 0xb9, 0x94, 0xba, 0xc4, - 0x6f, 0x94, 0x5a, 0x42, 0x67, 0x7e, 0x5d, 0x51, 0xc7, 0xeb, 0x54, 0x37, 0x2c, 0x0b, 0x53, 0xaa, - 0x13, 0x7f, 0xdf, 0x75, 0xcc, 0xa5, 0x0c, 0xfb, 0x65, 0x4a, 0xde, 0x16, 0x2b, 0xc5, 0xba, 0xb8, - 0x2d, 0x56, 0xc4, 0x7a, 0xa9, 0xfd, 0x0c, 0x16, 0xb3, 0x25, 0x98, 0x98, 0x0e, 0x89, 0x4f, 0xb1, - 0x74, 0x1f, 0xe6, 0xc2, 0x44, 0xfb, 0xae, 0xcd, 0x6b, 0x11, 0x7b, 0x30, 0xba, 0x68, 0x96, 0x43, - 0xc8, 0xd6, 0xa6, 0x59, 0x0e, 0xb7, 0xb6, 0xec, 0xf6, 0x2f, 0x01, 0x96, 0x0d, 0xea, 0x6c, 0x5d, - 0x45, 0xd1, 0x89, 0xcf, 0x02, 0x64, 0xb1, 0x89, 0x52, 0x2c, 0x42, 0x09, 0xd9, 0x9e, 0xeb, 0x73, - 0x05, 0xaa, 0x66, 0x64, 0x64, 0xa3, 0x15, 0x27, 0x45, 0x0b, 0xa9, 0x07, 0x68, 0x80, 0x0f, 0x1a, - 0x62, 0x44, 0xe5, 0x86, 0x54, 0x87, 0xa2, 0x47, 0x1d, 0x2e, 0x48, 0xcd, 0x0c, 0x97, 0x12, 0x82, - 0xd2, 0xfe, 0xa1, 0x6f, 0xd3, 0x46, 0xb9, 0x55, 0xec, 0xcc, 0xaf, 0xaf, 0xa8, 0xd1, 0xd1, 0xab, - 0xe1, 0xd1, 0xab, 0xf1, 0xd1, 0xab, 0x3a, 0x71, 0xfd, 0xde, 0xda, 0xd9, 0x45, 0xb3, 0xf0, 0xe9, - 0x7b, 0xb3, 0xe3, 0xb8, 0xec, 0xed, 0xe1, 0x40, 0xb5, 0x88, 0xa7, 0xc5, 0x7d, 0x12, 0xbd, 0x1e, - 0x53, 0xfb, 0x5d, 0x7c, 0xe4, 0x21, 0x81, 0x9a, 0x91, 0xe7, 0xf6, 0x0b, 0x50, 0xf2, 0xeb, 0x4e, - 0xf5, 0x6b, 0xc0, 0x1c, 0xb2, 0xed, 0x00, 0x53, 0x1a, 0x0b, 0x90, 0x98, 0x92, 0x04, 0xa2, 0x8d, - 0x18, 0x8a, 0x5a, 0xc0, 0xe4, 0xeb, 0xf6, 0x67, 0x01, 0x24, 0x83, 0x3a, 0xcf, 0x4f, 0xb0, 0x75, - 0x38, 0x83, 0x88, 0x32, 0x54, 0xac, 0x18, 0x13, 0xeb, 0x98, 0xda, 0x89, 0x1e, 0xc5, 0x1c, 0x3d, - 0x4a, 0x7f, 0x4d, 0x8f, 0x35, 0x90, 0x6f, 0xa6, 0x9f, 0x6a, 0x91, 0x54, 0x2c, 0x64, 0x2a, 0xfe, - 0xc0, 0x0b, 0x36, 0x5c, 0x27, 0x40, 0x7f, 0x58, 0xf0, 0x4c, 0xbd, 0x13, 0xab, 0x22, 0xa6, 0xaa, - 0xc4, 0x29, 0x8f, 0x25, 0x30, 0x35, 0x65, 0x04, 0x0b, 0x06, 0x75, 0x76, 0x87, 0x36, 0x62, 0x78, - 0x83, 0xb7, 0xed, 0xa4, 0x74, 0xef, 0x42, 0xd5, 0xc7, 0xc7, 0xfd, 0x6c, 0xa3, 0x57, 0x7c, 0x7c, - 0x1c, 0x91, 0xb2, 0xb5, 0x14, 0xaf, 0xd7, 0xd2, 0x6e, 0xf0, 0xff, 0x29, 0x13, 0x22, 0x49, 0xa8, - 0xad, 0xc3, 0xbf, 0x06, 0x75, 0xf4, 0x03, 0x8c, 0x82, 0xe9, 0xb1, 0xa7, 0xb9, 0xbf, 0x03, 0x4b, - 0xd7, 0x9c, 0x24, 0xde, 0xd7, 0xbf, 0x8a, 0x50, 0x34, 0xa8, 0x23, 0xed, 0x40, 0xf5, 0x6a, 0x9a, - 0xe5, 0x4c, 0x97, 0xec, 0xa8, 0x90, 0x57, 0xa7, 0xef, 0xa7, 0x5a, 0xbe, 0x87, 0xff, 0xf3, 0x26, - 0x44, 0x27, 0x97, 0x9e, 0x83, 0x94, 0xd7, 0x66, 0x45, 0xa6, 0x21, 0x31, 0xfc, 0x37, 0xfe, 0x2f, - 0x3d, 0xc8, 0x75, 0x32, 0x86, 0x92, 0x1f, 0xcd, 0x82, 0xca, 0x86, 0x19, 0xef, 0xe0, 0xfc, 0x30, - 0x63, 0xa8, 0x09, 0x61, 0x26, 0x35, 0xe3, 0x6b, 0x98, 0xcf, 0x76, 0x5d, 0x2b, 0x97, 0x9c, 0x41, - 0xc8, 0x9d, 0xdb, 0x10, 0xa9, 0xeb, 0x57, 0x00, 0x99, 0x9e, 0x6a, 0xe6, 0xf2, 0xae, 0x00, 0xf2, - 0xc3, 0x5b, 0x00, 0x89, 0xdf, 0xde, 0xe6, 0xd9, 0x4f, 0xa5, 0x70, 0x36, 0x52, 0x84, 0xf3, 0x91, - 0x22, 0xfc, 0x18, 0x29, 0xc2, 0xc7, 0x4b, 0xa5, 0x70, 0x7e, 0xa9, 0x14, 0xbe, 0x5d, 0x2a, 0x85, - 0x37, 0xab, 0x99, 0xf9, 0xa2, 0x13, 0xea, 0xed, 0x25, 0x37, 0xac, 0xad, 0x9d, 0x44, 0x37, 0x2d, - 0x9f, 0x31, 0x83, 0x32, 0xbf, 0x67, 0x9f, 0xfc, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe2, 0xe2, - 0x10, 0xea, 0x07, 0x00, 0x00, + 0x14, 0x8e, 0x1b, 0x27, 0x4d, 0x4e, 0x73, 0x7b, 0x23, 0xdf, 0x36, 0x37, 0xf5, 0xbd, 0x72, 0xa2, + 0x80, 0x8a, 0x17, 0x60, 0x37, 0x45, 0x62, 0xc3, 0xaa, 0x49, 0x59, 0xb4, 0x92, 0x11, 0x72, 0x55, + 0x2a, 0xd8, 0x44, 0x13, 0x7b, 0x6a, 0x2c, 0x1a, 0x4f, 0xf0, 0x71, 0x9b, 0xf6, 0x25, 0x10, 0x3b, + 0xde, 0x81, 0xb7, 0x60, 0xd7, 0x15, 0xea, 0x06, 0x89, 0x55, 0x80, 0xf4, 0x2d, 0x58, 0x21, 0xff, + 0xa5, 0x6e, 0xea, 0xa4, 0x41, 0x88, 0x4d, 0x32, 0xc7, 0xf3, 0x7d, 0xe7, 0xcc, 0xf9, 0xf4, 0xcd, + 0x19, 0x58, 0x33, 0x18, 0xf6, 0x06, 0x04, 0x7b, 0x6a, 0xf0, 0x73, 0xd2, 0x54, 0xbd, 0x53, 0xa5, + 0xef, 0x32, 0x8f, 0x09, 0xe5, 0x78, 0x4b, 0x09, 0x7e, 0x4e, 0x9a, 0xa2, 0xe4, 0x7f, 0x61, 0xa8, + 0x76, 0x09, 0x52, 0xf5, 0xa4, 0xd9, 0xa5, 0x1e, 0x69, 0xaa, 0x06, 0xb3, 0x9d, 0x90, 0x21, 0xae, + 0x58, 0xcc, 0x62, 0xc1, 0x52, 0xf5, 0x57, 0xd1, 0xd7, 0xff, 0x6f, 0x96, 0x38, 0xeb, 0x53, 0x0c, + 0x77, 0x1b, 0x1f, 0x39, 0x28, 0x69, 0x68, 0xed, 0x79, 0xcc, 0xa5, 0x6d, 0x66, 0x52, 0xa1, 0x02, + 0x79, 0xa4, 0x8e, 0x49, 0xdd, 0x2a, 0x57, 0xe7, 0xe4, 0xa2, 0x1e, 0x45, 0xc2, 0x23, 0x58, 0xf6, + 0xf9, 0x9d, 0xee, 0x99, 0x47, 0x3b, 0x06, 0x33, 0x69, 0x75, 0xa1, 0xce, 0xc9, 0xa5, 0x56, 0x79, + 0x34, 0xac, 0x95, 0x0e, 0xb6, 0xf6, 0xb4, 0xd6, 0x99, 0x17, 0x64, 0xd0, 0x4b, 0x3e, 0x2e, 0x8e, + 0x84, 0x7d, 0xa8, 0xd8, 0x0e, 0x7a, 0xc4, 0xf1, 0x6c, 0xe2, 0xd1, 0x4e, 0x9f, 0xba, 0x3d, 0x1b, + 0xd1, 0x66, 0x4e, 0x35, 0x57, 0xe7, 0xe4, 0xa5, 0x4d, 0x49, 0x99, 0xec, 0x53, 0xd9, 0x32, 0x0c, + 0x8a, 0xd8, 0x66, 0xce, 0xa1, 0x6d, 0xe9, 0xab, 0x09, 0xf6, 0xb3, 0x31, 0x79, 0x97, 0x2f, 0x64, + 0xcb, 0xfc, 0x2e, 0x5f, 0xe0, 0xcb, 0xb9, 0xc6, 0x63, 0x58, 0x49, 0xb6, 0xa0, 0x53, 0xec, 0x33, + 0x07, 0xa9, 0x70, 0x07, 0x16, 0xfd, 0x83, 0x76, 0x6c, 0x33, 0xe8, 0x85, 0x6f, 0xc1, 0x68, 0x58, + 0xcb, 0xfb, 0x90, 0x9d, 0x6d, 0x3d, 0xef, 0x6f, 0xed, 0x98, 0x8d, 0xb7, 0x0b, 0x50, 0xd1, 0xd0, + 0xda, 0xb9, 0xaa, 0xd2, 0x66, 0x8e, 0xe7, 0x12, 0xc3, 0x9b, 0x2a, 0xc5, 0x0a, 0xe4, 0x88, 0xd9, + 0xb3, 0x9d, 0x40, 0x81, 0xa2, 0x1e, 0x06, 0xc9, 0x6a, 0xd9, 0x69, 0xd5, 0x7c, 0xea, 0x11, 0xe9, + 0xd2, 0xa3, 0x2a, 0x1f, 0x52, 0x83, 0x40, 0x90, 0x21, 0xdb, 0x43, 0x2b, 0x10, 0xa4, 0xd4, 0xaa, + 0xfc, 0x18, 0xd6, 0x04, 0x9d, 0x0c, 0xe2, 0x63, 0x68, 0x14, 0x91, 0x58, 0x54, 0xf7, 0x21, 0x02, + 0x81, 0xdc, 0xe1, 0xb1, 0x63, 0x62, 0x35, 0x5f, 0xcf, 0xca, 0x4b, 0x9b, 0x6b, 0x4a, 0x68, 0x09, + 0xc5, 0xb7, 0x84, 0x12, 0x59, 0x42, 0x69, 0x33, 0xdb, 0x69, 0x6d, 0x9c, 0x0f, 0x6b, 0x99, 0x0f, + 0x5f, 0x6b, 0xb2, 0x65, 0x7b, 0xaf, 0x8e, 0xbb, 0x8a, 0xc1, 0x7a, 0x6a, 0xe4, 0x9f, 0xf0, 0xef, + 0x01, 0x9a, 0xaf, 0x23, 0x2b, 0xf8, 0x04, 0xd4, 0xc3, 0xcc, 0x8d, 0xa7, 0x20, 0xa5, 0xeb, 0x31, + 0xd6, 0xb5, 0x0a, 0x8b, 0xc4, 0x34, 0x5d, 0x8a, 0x18, 0x09, 0x13, 0x87, 0x82, 0x00, 0xbc, 0x49, + 0x3c, 0x12, 0x5a, 0x43, 0x0f, 0xd6, 0x8d, 0xcf, 0x1c, 0x08, 0x1a, 0x5a, 0x4f, 0x4e, 0xa9, 0x71, + 0x3c, 0x87, 0xb8, 0x22, 0x14, 0x8c, 0x08, 0x13, 0xe9, 0x3b, 0x8e, 0x63, 0x9d, 0xb2, 0xbf, 0xa0, + 0x53, 0xee, 0x8f, 0xe9, 0xb4, 0x01, 0xe2, 0xcd, 0xb6, 0xc6, 0x1a, 0xc5, 0x4a, 0x70, 0x09, 0x25, + 0xde, 0x87, 0x4a, 0x68, 0xb6, 0xe5, 0x92, 0xdf, 0x54, 0x62, 0x2e, 0xb3, 0x45, 0x72, 0xf1, 0xb7, + 0xca, 0x15, 0xf5, 0x32, 0x71, 0xb0, 0x99, 0xbd, 0x10, 0x58, 0xd6, 0xd0, 0xda, 0xef, 0x9b, 0xc4, + 0xa3, 0x5b, 0x81, 0xff, 0xa7, 0xb5, 0xf1, 0x1f, 0x14, 0x1d, 0x3a, 0xe8, 0x24, 0x6f, 0x4c, 0xc1, + 0xa1, 0x83, 0x90, 0x94, 0xec, 0x31, 0x7b, 0xbd, 0xc7, 0x46, 0x35, 0xb8, 0x98, 0x89, 0x12, 0xf1, + 0x81, 0x1a, 0x6d, 0xf8, 0x4b, 0x43, 0xab, 0x7d, 0x44, 0x89, 0x3b, 0xbb, 0xf6, 0xac, 0xf4, 0xff, + 0xc2, 0xea, 0xb5, 0x24, 0x71, 0xf6, 0xcd, 0x4f, 0x3c, 0x64, 0x35, 0xb4, 0x84, 0x3d, 0x28, 0x5e, + 0x8d, 0xc5, 0x94, 0x31, 0x95, 0x9c, 0x39, 0xe2, 0xfa, 0xec, 0xfd, 0xb1, 0x96, 0x6f, 0xe0, 0x9f, + 0xb4, 0x51, 0x23, 0xa7, 0xd2, 0x53, 0x90, 0xe2, 0xc6, 0xbc, 0xc8, 0x71, 0x49, 0x0a, 0x7f, 0x4f, + 0x5e, 0xbe, 0xbb, 0xa9, 0x49, 0x26, 0x50, 0xe2, 0xfd, 0x79, 0x50, 0xc9, 0x32, 0x93, 0xce, 0x4e, + 0x2f, 0x33, 0x81, 0x9a, 0x52, 0x66, 0x9a, 0x19, 0x5f, 0xc0, 0x52, 0xd2, 0x75, 0xf5, 0x54, 0x72, + 0x02, 0x21, 0xca, 0xb7, 0x21, 0xc6, 0xa9, 0x9f, 0x03, 0x24, 0x3c, 0x55, 0x4b, 0xe5, 0x5d, 0x01, + 0xc4, 0x7b, 0xb7, 0x00, 0xe2, 0xbc, 0xad, 0xed, 0xf3, 0xef, 0x52, 0xe6, 0x7c, 0x24, 0x71, 0x17, + 0x23, 0x89, 0xfb, 0x36, 0x92, 0xb8, 0x77, 0x97, 0x52, 0xe6, 0xe2, 0x52, 0xca, 0x7c, 0xb9, 0x94, + 0x32, 0x2f, 0xd7, 0x13, 0x83, 0xa7, 0xcd, 0xb0, 0x77, 0x10, 0x3f, 0xd5, 0xa6, 0x7a, 0x1a, 0x3e, + 0xd9, 0xc1, 0xf0, 0xe9, 0xe6, 0x83, 0x07, 0xfb, 0xe1, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, + 0xd2, 0x4b, 0x17, 0x33, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/wasm/types/tx_test.go b/x/wasm/types/tx_test.go index d86a11b12b..c120b7cf52 100644 --- a/x/wasm/types/tx_test.go +++ b/x/wasm/types/tx_test.go @@ -489,3 +489,42 @@ func TestMsgMigrateContract(t *testing.T) { }) } } + +func TestMsgJsonSignBytes(t *testing.T) { + const myInnerMsg = `{"foo":"bar"}` + specs := map[string]struct { + src sdk.Msg + exp string + }{ + "MsgInstantiateContract": { + src: &MsgInstantiateContract{Msg: RawContractMessage(myInnerMsg)}, + exp: ` +{ + "type":"wasm/MsgInstantiateContract", + "value": {"msg": {"foo":"bar"}, "funds":[]} +}`, + }, + "MsgExecuteContract": { + src: &MsgExecuteContract{Msg: RawContractMessage(myInnerMsg)}, + exp: ` +{ + "type":"wasm/MsgExecuteContract", + "value": {"msg": {"foo":"bar"}, "funds":[]} +}`, + }, + "MsgMigrateContract": { + src: &MsgMigrateContract{Msg: RawContractMessage(myInnerMsg)}, + exp: ` +{ + "type":"wasm/MsgMigrateContract", + "value": {"msg": {"foo":"bar"}} +}`, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + bz := spec.src.GetSignBytes() + assert.JSONEq(t, spec.exp, string(bz), "raw: %s", string(bz)) + }) + } +} diff --git a/x/wasm/types/types.pb.go b/x/wasm/types/types.pb.go index e70892ed58..93f1a612f1 100644 --- a/x/wasm/types/types.pb.go +++ b/x/wasm/types/types.pb.go @@ -5,7 +5,6 @@ package types import ( bytes "bytes" - encoding_json "encoding/json" fmt "fmt" types "github.com/cosmos/cosmos-sdk/codec/types" _ "github.com/gogo/protobuf/gogoproto" @@ -314,8 +313,8 @@ type ContractCodeHistoryEntry struct { // CodeID is the reference to the stored WASM code CodeID uint64 `protobuf:"varint,2,opt,name=code_id,json=codeId,proto3" json:"code_id,omitempty"` // Updated Tx position when the operation was executed. - Updated *AbsoluteTxPosition `protobuf:"bytes,3,opt,name=updated,proto3" json:"updated,omitempty"` - Msg encoding_json.RawMessage `protobuf:"bytes,4,opt,name=msg,proto3,casttype=encoding/json.RawMessage" json:"msg,omitempty"` + Updated *AbsoluteTxPosition `protobuf:"bytes,3,opt,name=updated,proto3" json:"updated,omitempty"` + Msg RawContractMessage `protobuf:"bytes,4,opt,name=msg,proto3,casttype=RawContractMessage" json:"msg,omitempty"` } func (m *ContractCodeHistoryEntry) Reset() { *m = ContractCodeHistoryEntry{} } @@ -451,81 +450,80 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/types.proto", fileDescriptor_e6155d98fa173e02) } var fileDescriptor_e6155d98fa173e02 = []byte{ - // 1173 bytes of a gzipped FileDescriptorProto + // 1164 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xcb, 0x6f, 0x1b, 0xc5, - 0x1f, 0xf7, 0xda, 0xce, 0xc3, 0xd3, 0xfc, 0x5a, 0x77, 0x7e, 0x89, 0xea, 0x98, 0x60, 0xbb, 0x4b, - 0x81, 0xf4, 0x65, 0xd3, 0x80, 0x00, 0xf5, 0x50, 0xc9, 0x8f, 0xa5, 0xd9, 0x88, 0xd8, 0xd6, 0xd8, - 0xa5, 0x0a, 0x52, 0xb5, 0x1a, 0xef, 0x4e, 0x9c, 0xa1, 0xde, 0x1d, 0x6b, 0x67, 0x9c, 0x7a, 0x7b, - 0xe3, 0x86, 0x22, 0x21, 0x71, 0x83, 0x4b, 0x24, 0x04, 0x08, 0xf5, 0x0f, 0xe0, 0xca, 0xbd, 0xe2, - 0xd4, 0x23, 0x12, 0x92, 0x05, 0xe9, 0x05, 0xae, 0x39, 0xf6, 0x84, 0x76, 0xc6, 0x96, 0x57, 0x4d, - 0xda, 0x98, 0xcb, 0x6a, 0xbe, 0x8f, 0xcf, 0xe7, 0xfb, 0x9a, 0xf9, 0x6a, 0xc1, 0x9a, 0xcd, 0xb8, - 0xfb, 0x08, 0x73, 0xb7, 0x24, 0x3f, 0xfb, 0xb7, 0x4a, 0x22, 0xe8, 0x13, 0x5e, 0xec, 0xfb, 0x4c, - 0x30, 0x98, 0x9e, 0x58, 0x8b, 0xf2, 0xb3, 0x7f, 0x2b, 0xbb, 0x1a, 0x6a, 0x18, 0xb7, 0xa4, 0xbd, - 0xa4, 0x04, 0xe5, 0x9c, 0x5d, 0xee, 0xb2, 0x2e, 0x53, 0xfa, 0xf0, 0x34, 0xd6, 0xae, 0x76, 0x19, - 0xeb, 0xf6, 0x48, 0x49, 0x4a, 0x9d, 0xc1, 0x6e, 0x09, 0x7b, 0x81, 0x32, 0xe9, 0x0f, 0xc0, 0x85, - 0xb2, 0x6d, 0x13, 0xce, 0xdb, 0x41, 0x9f, 0x34, 0xb1, 0x8f, 0x5d, 0x58, 0x03, 0x73, 0xfb, 0xb8, - 0x37, 0x20, 0x19, 0xad, 0xa0, 0xad, 0x9f, 0xdf, 0x58, 0x2b, 0xbe, 0x9c, 0x40, 0x71, 0x8a, 0xa8, - 0xa4, 0x8f, 0x47, 0xf9, 0xa5, 0x00, 0xbb, 0xbd, 0xdb, 0xba, 0x04, 0xe9, 0x48, 0x81, 0x6f, 0x27, - 0xbf, 0xfb, 0x3e, 0xaf, 0xe9, 0xdf, 0x6a, 0x60, 0x49, 0x79, 0x57, 0x99, 0xb7, 0x4b, 0xbb, 0xb0, - 0x05, 0x40, 0x9f, 0xf8, 0x2e, 0xe5, 0x9c, 0x32, 0x6f, 0xa6, 0x08, 0x2b, 0xc7, 0xa3, 0xfc, 0x45, - 0x15, 0x61, 0x8a, 0xd4, 0x51, 0x84, 0x06, 0xde, 0x00, 0x0b, 0xd8, 0x71, 0x7c, 0xc2, 0x79, 0x26, - 0x5e, 0xd0, 0xd6, 0x53, 0x15, 0x78, 0x3c, 0xca, 0x9f, 0x57, 0x98, 0xb1, 0x41, 0x47, 0x13, 0x97, - 0x71, 0x66, 0x7f, 0xc4, 0xc1, 0xbc, 0xac, 0x97, 0x43, 0x06, 0xa0, 0xcd, 0x1c, 0x62, 0x0d, 0xfa, - 0x3d, 0x86, 0x1d, 0x0b, 0xcb, 0xd8, 0x32, 0xb7, 0x73, 0x1b, 0xb9, 0x57, 0xe5, 0xa6, 0xea, 0xa9, - 0x5c, 0x7e, 0x3a, 0xca, 0xc7, 0x8e, 0x47, 0xf9, 0x55, 0x15, 0xed, 0x24, 0x8f, 0x8e, 0xd2, 0xa1, - 0xf2, 0x9e, 0xd4, 0x29, 0x28, 0xfc, 0x5a, 0x03, 0x39, 0xea, 0x71, 0x81, 0x3d, 0x41, 0xb1, 0x20, - 0x96, 0x43, 0x76, 0xf1, 0xa0, 0x27, 0xac, 0x48, 0x67, 0xe2, 0x33, 0x74, 0xe6, 0xea, 0xf1, 0x28, - 0xff, 0xb6, 0x8a, 0xfb, 0x7a, 0x36, 0x1d, 0xad, 0x45, 0x1c, 0x6a, 0xca, 0xde, 0x9c, 0xf6, 0x6f, - 0x0b, 0x40, 0x17, 0x0f, 0xad, 0x30, 0x84, 0x25, 0x2b, 0xe0, 0xf4, 0x31, 0xc9, 0x24, 0x0a, 0xda, - 0x7a, 0xb2, 0xf2, 0xe6, 0xb4, 0xb8, 0x93, 0x3e, 0x3a, 0xba, 0xe0, 0xe2, 0xe1, 0x7d, 0xcc, 0xdd, - 0x2a, 0x73, 0x48, 0x8b, 0x3e, 0x56, 0x73, 0x8f, 0xe9, 0x3f, 0x68, 0x60, 0x31, 0x54, 0x99, 0xde, - 0x2e, 0x83, 0x6f, 0x80, 0x94, 0x44, 0xec, 0x61, 0xbe, 0x27, 0xdb, 0xba, 0x84, 0x16, 0x43, 0xc5, - 0x26, 0xe6, 0x7b, 0x30, 0x03, 0x16, 0x6c, 0x9f, 0x60, 0xc1, 0x7c, 0x35, 0x3b, 0x34, 0x11, 0x61, - 0x0b, 0xc0, 0x68, 0x59, 0xb6, 0x6c, 0x78, 0x66, 0x6e, 0xa6, 0xb1, 0x24, 0xc3, 0xb1, 0xa0, 0x8b, - 0x11, 0xbc, 0x32, 0x6c, 0x25, 0x17, 0x13, 0xe9, 0xe4, 0x56, 0x72, 0x31, 0x99, 0x9e, 0xd3, 0x7f, - 0x8d, 0x83, 0xa5, 0x2a, 0xf3, 0x84, 0x8f, 0x6d, 0x21, 0x13, 0x7d, 0x0b, 0x2c, 0xc8, 0x44, 0xa9, - 0x23, 0xd3, 0x4c, 0x56, 0xc0, 0xd1, 0x28, 0x3f, 0x2f, 0xeb, 0xa8, 0xa1, 0xf9, 0xd0, 0x64, 0x3a, - 0xaf, 0x49, 0x78, 0x19, 0xcc, 0x61, 0xc7, 0xa5, 0x9e, 0xec, 0x5c, 0x0a, 0x29, 0x21, 0xd4, 0xf6, - 0x70, 0x87, 0xf4, 0x32, 0x49, 0xa5, 0x95, 0x02, 0xbc, 0x33, 0x66, 0x21, 0xce, 0xb8, 0xa2, 0x2b, - 0xa7, 0x54, 0xd4, 0xe1, 0xac, 0x37, 0x10, 0xa4, 0x3d, 0x6c, 0x32, 0x4e, 0x05, 0x65, 0x1e, 0x9a, - 0x80, 0xe0, 0x4d, 0x70, 0x8e, 0x76, 0x6c, 0xab, 0xcf, 0x7c, 0x11, 0xa6, 0x3b, 0x2f, 0xaf, 0xfd, - 0xff, 0x8e, 0x46, 0xf9, 0x94, 0x59, 0xa9, 0x36, 0x99, 0x2f, 0xcc, 0x1a, 0x4a, 0xd1, 0x8e, 0x2d, - 0x8f, 0x0e, 0xdc, 0x06, 0x29, 0x32, 0x14, 0xc4, 0x93, 0x77, 0x6b, 0x41, 0x06, 0x5c, 0x2e, 0xaa, - 0xad, 0x50, 0x9c, 0x6c, 0x85, 0x62, 0xd9, 0x0b, 0x2a, 0xab, 0xbf, 0xfd, 0x72, 0x73, 0x25, 0xda, - 0x14, 0x63, 0x02, 0x43, 0x53, 0x86, 0xdb, 0xc9, 0xbf, 0xc3, 0x27, 0xf4, 0x65, 0x1c, 0x64, 0x26, - 0xae, 0x61, 0x93, 0x36, 0x29, 0x17, 0xcc, 0x0f, 0x0c, 0x4f, 0xf8, 0x01, 0x6c, 0x82, 0x14, 0xeb, - 0x13, 0x1f, 0x8b, 0xe9, 0x3b, 0xdf, 0x38, 0x59, 0xe2, 0x29, 0xf0, 0xc6, 0x04, 0x15, 0xde, 0x71, - 0x34, 0x25, 0x89, 0x4e, 0x27, 0xfe, 0xca, 0xe9, 0xdc, 0x01, 0x0b, 0x83, 0xbe, 0x23, 0xfb, 0x9a, - 0xf8, 0x2f, 0x7d, 0x1d, 0x83, 0x60, 0x11, 0x24, 0x5c, 0xde, 0x95, 0xb3, 0x5a, 0xaa, 0xac, 0xbd, - 0x18, 0xe5, 0x33, 0xc4, 0xb3, 0x99, 0x43, 0xbd, 0x6e, 0xe9, 0x0b, 0xce, 0xbc, 0x22, 0xc2, 0x8f, - 0xb6, 0x09, 0xe7, 0xb8, 0x4b, 0x50, 0xe8, 0xa8, 0x23, 0x00, 0x4f, 0xd2, 0xc1, 0xcb, 0x60, 0xa9, - 0xd3, 0x63, 0xf6, 0x43, 0x6b, 0x8f, 0xd0, 0xee, 0x9e, 0x50, 0xb7, 0x09, 0x9d, 0x93, 0xba, 0x4d, - 0xa9, 0x82, 0xab, 0x60, 0x51, 0x0c, 0x2d, 0xea, 0x39, 0x64, 0xa8, 0xca, 0x41, 0x0b, 0x62, 0x68, - 0x86, 0xa2, 0x4e, 0xc1, 0xdc, 0x36, 0x73, 0x48, 0x0f, 0x6e, 0x81, 0xc4, 0x43, 0x12, 0xa8, 0x27, - 0x53, 0xf9, 0xf8, 0xc5, 0x28, 0xff, 0x41, 0x97, 0x8a, 0xbd, 0x41, 0xa7, 0x68, 0x33, 0xb7, 0x24, - 0x88, 0xe7, 0x84, 0x4f, 0xd8, 0x13, 0xd1, 0x63, 0x8f, 0x76, 0x78, 0xa9, 0x13, 0x08, 0xc2, 0x8b, - 0x9b, 0x64, 0x58, 0x09, 0x0f, 0x28, 0x24, 0x09, 0xaf, 0xa1, 0xda, 0xea, 0x71, 0xf9, 0x00, 0x95, - 0x70, 0xed, 0x1f, 0x0d, 0x80, 0xe9, 0x46, 0x81, 0x1f, 0x82, 0x4b, 0xe5, 0x6a, 0xd5, 0x68, 0xb5, - 0xac, 0xf6, 0x4e, 0xd3, 0xb0, 0xee, 0xd5, 0x5b, 0x4d, 0xa3, 0x6a, 0x7e, 0x62, 0x1a, 0xb5, 0x74, - 0x2c, 0xbb, 0x7a, 0x70, 0x58, 0x58, 0x99, 0x3a, 0xdf, 0xf3, 0x78, 0x9f, 0xd8, 0x74, 0x97, 0x12, - 0x07, 0xde, 0x00, 0x30, 0x8a, 0xab, 0x37, 0x2a, 0x8d, 0xda, 0x4e, 0x5a, 0xcb, 0x2e, 0x1f, 0x1c, - 0x16, 0xd2, 0x53, 0x48, 0x9d, 0x75, 0x98, 0x13, 0xc0, 0x8f, 0x40, 0x26, 0xea, 0xdd, 0xa8, 0x7f, - 0xba, 0x63, 0x95, 0x6b, 0x35, 0x64, 0xb4, 0x5a, 0xe9, 0xf8, 0xcb, 0x61, 0x1a, 0x5e, 0x2f, 0x28, - 0xab, 0xcd, 0x0d, 0x37, 0xc0, 0x4a, 0x14, 0x68, 0x7c, 0x66, 0xa0, 0x1d, 0x19, 0x29, 0x91, 0xbd, - 0x74, 0x70, 0x58, 0xf8, 0xff, 0x14, 0x65, 0xec, 0x13, 0x3f, 0x08, 0x83, 0x65, 0x17, 0xbf, 0xfa, - 0x31, 0x17, 0x7b, 0xf2, 0x53, 0x2e, 0x76, 0xed, 0xe7, 0x04, 0x28, 0x9c, 0x75, 0xdf, 0x20, 0x01, - 0xef, 0x55, 0x1b, 0xf5, 0x36, 0x2a, 0x57, 0xdb, 0x56, 0xb5, 0x51, 0x33, 0xac, 0x4d, 0xb3, 0xd5, - 0x6e, 0xa0, 0x1d, 0xab, 0xd1, 0x34, 0x50, 0xb9, 0x6d, 0x36, 0xea, 0xa7, 0xb5, 0xa6, 0x74, 0x70, - 0x58, 0xb8, 0x7e, 0x16, 0x77, 0xb4, 0x61, 0xf7, 0xc1, 0xd5, 0x99, 0xc2, 0x98, 0x75, 0xb3, 0x9d, - 0xd6, 0xb2, 0xeb, 0x07, 0x87, 0x85, 0x2b, 0x67, 0xf1, 0x9b, 0x1e, 0x15, 0xf0, 0x01, 0xb8, 0x31, - 0x13, 0xf1, 0xb6, 0x79, 0x17, 0x95, 0xdb, 0x46, 0x3a, 0x9e, 0xbd, 0x7e, 0x70, 0x58, 0x78, 0xf7, - 0x2c, 0xee, 0x6d, 0xda, 0xf5, 0xb1, 0x20, 0x33, 0xd3, 0xdf, 0x35, 0xea, 0x46, 0xcb, 0x6c, 0xa5, - 0x13, 0xb3, 0xd1, 0xdf, 0x25, 0x1e, 0xe1, 0x94, 0x67, 0x93, 0xe1, 0xb0, 0x2a, 0x9b, 0x4f, 0xff, - 0xca, 0xc5, 0x9e, 0x1c, 0xe5, 0xb4, 0xa7, 0x47, 0x39, 0xed, 0xd9, 0x51, 0x4e, 0xfb, 0xf3, 0x28, - 0xa7, 0x7d, 0xf3, 0x3c, 0x17, 0x7b, 0xf6, 0x3c, 0x17, 0xfb, 0xfd, 0x79, 0x2e, 0xf6, 0xf9, 0x3b, - 0x91, 0x77, 0x50, 0x65, 0xdc, 0xbd, 0x3f, 0xf9, 0x79, 0x72, 0x4a, 0x43, 0xf5, 0x13, 0x25, 0xff, - 0xa0, 0x3a, 0xf3, 0x72, 0xb7, 0xbd, 0xff, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd6, 0xce, 0x83, - 0x88, 0x62, 0x09, 0x00, 0x00, + 0x1f, 0xf7, 0xda, 0xce, 0xc3, 0xd3, 0xfc, 0x5a, 0x77, 0x7e, 0x09, 0x75, 0x4c, 0xb1, 0xdd, 0xa5, + 0x40, 0xfa, 0xb2, 0x69, 0x40, 0x80, 0x7a, 0xa8, 0xe4, 0xc7, 0xd2, 0x6c, 0x44, 0x6c, 0x6b, 0xec, + 0x52, 0x05, 0xa9, 0x5a, 0x8d, 0x77, 0x27, 0xce, 0xa8, 0xbb, 0x3b, 0xd6, 0xce, 0x38, 0xf5, 0xf6, + 0x2f, 0x40, 0x91, 0x90, 0xb8, 0xc1, 0x25, 0x12, 0x02, 0x84, 0xfa, 0x07, 0x70, 0xe5, 0x5e, 0x71, + 0xea, 0x11, 0x09, 0xc9, 0x82, 0xf4, 0x02, 0xd7, 0x1c, 0xcb, 0x05, 0xed, 0x4c, 0x2c, 0xaf, 0x9a, + 0xb6, 0x31, 0x97, 0xd5, 0x7c, 0x1f, 0x9f, 0xcf, 0xf7, 0x35, 0xf3, 0xd5, 0x82, 0x8b, 0x36, 0xe3, + 0xde, 0x43, 0xcc, 0xbd, 0x8a, 0xfc, 0xec, 0xdd, 0xac, 0x88, 0x70, 0x40, 0x78, 0x79, 0x10, 0x30, + 0xc1, 0x60, 0x76, 0x62, 0x2d, 0xcb, 0xcf, 0xde, 0xcd, 0xfc, 0x6a, 0xa4, 0x61, 0xdc, 0x92, 0xf6, + 0x8a, 0x12, 0x94, 0x73, 0x7e, 0xb9, 0xcf, 0xfa, 0x4c, 0xe9, 0xa3, 0xd3, 0xb1, 0x76, 0xb5, 0xcf, + 0x58, 0xdf, 0x25, 0x15, 0x29, 0xf5, 0x86, 0x3b, 0x15, 0xec, 0x87, 0xca, 0xa4, 0xdf, 0x07, 0xe7, + 0xaa, 0xb6, 0x4d, 0x38, 0xef, 0x86, 0x03, 0xd2, 0xc6, 0x01, 0xf6, 0x60, 0x03, 0xcc, 0xed, 0x61, + 0x77, 0x48, 0x72, 0x5a, 0x49, 0x5b, 0x3b, 0xbb, 0x7e, 0xb1, 0xfc, 0x62, 0x02, 0xe5, 0x29, 0xa2, + 0x96, 0x3d, 0x1a, 0x17, 0x97, 0x42, 0xec, 0xb9, 0xb7, 0x74, 0x09, 0xd2, 0x91, 0x02, 0xdf, 0x4a, + 0x7f, 0xfb, 0x5d, 0x51, 0xd3, 0xbf, 0xd1, 0xc0, 0x92, 0xf2, 0xae, 0x33, 0x7f, 0x87, 0xf6, 0x61, + 0x07, 0x80, 0x01, 0x09, 0x3c, 0xca, 0x39, 0x65, 0xfe, 0x4c, 0x11, 0x56, 0x8e, 0xc6, 0xc5, 0xf3, + 0x2a, 0xc2, 0x14, 0xa9, 0xa3, 0x18, 0x0d, 0xbc, 0x0e, 0x16, 0xb0, 0xe3, 0x04, 0x84, 0xf3, 0x5c, + 0xb2, 0xa4, 0xad, 0x65, 0x6a, 0xf0, 0x68, 0x5c, 0x3c, 0xab, 0x30, 0xc7, 0x06, 0x1d, 0x4d, 0x5c, + 0x8e, 0x33, 0xfb, 0x3d, 0x09, 0xe6, 0x65, 0xbd, 0x1c, 0x32, 0x00, 0x6d, 0xe6, 0x10, 0x6b, 0x38, + 0x70, 0x19, 0x76, 0x2c, 0x2c, 0x63, 0xcb, 0xdc, 0xce, 0xac, 0x17, 0x5e, 0x95, 0x9b, 0xaa, 0xa7, + 0x76, 0xe9, 0xc9, 0xb8, 0x98, 0x38, 0x1a, 0x17, 0x57, 0x55, 0xb4, 0x93, 0x3c, 0x3a, 0xca, 0x46, + 0xca, 0xbb, 0x52, 0xa7, 0xa0, 0xf0, 0x2b, 0x0d, 0x14, 0xa8, 0xcf, 0x05, 0xf6, 0x05, 0xc5, 0x82, + 0x58, 0x0e, 0xd9, 0xc1, 0x43, 0x57, 0x58, 0xb1, 0xce, 0x24, 0x67, 0xe8, 0xcc, 0x95, 0xa3, 0x71, + 0xf1, 0x1d, 0x15, 0xf7, 0xf5, 0x6c, 0x3a, 0xba, 0x18, 0x73, 0x68, 0x28, 0x7b, 0x7b, 0xda, 0xbf, + 0x4d, 0x00, 0x3d, 0x3c, 0xb2, 0xa2, 0x10, 0x96, 0xac, 0x80, 0xd3, 0x47, 0x24, 0x97, 0x2a, 0x69, + 0x6b, 0xe9, 0xda, 0x5b, 0xd3, 0xe2, 0x4e, 0xfa, 0xe8, 0xe8, 0x9c, 0x87, 0x47, 0xf7, 0x30, 0xf7, + 0xea, 0xcc, 0x21, 0x1d, 0xfa, 0x48, 0xcd, 0x3d, 0xa1, 0x7f, 0xaf, 0x81, 0xc5, 0x48, 0x65, 0xfa, + 0x3b, 0x0c, 0xbe, 0x09, 0x32, 0x12, 0xb1, 0x8b, 0xf9, 0xae, 0x6c, 0xeb, 0x12, 0x5a, 0x8c, 0x14, + 0x1b, 0x98, 0xef, 0xc2, 0x1c, 0x58, 0xb0, 0x03, 0x82, 0x05, 0x0b, 0xd4, 0xec, 0xd0, 0x44, 0x84, + 0x1d, 0x00, 0xe3, 0x65, 0xd9, 0xb2, 0xe1, 0xb9, 0xb9, 0x99, 0xc6, 0x92, 0x8e, 0xc6, 0x82, 0xce, + 0xc7, 0xf0, 0xca, 0xb0, 0x99, 0x5e, 0x4c, 0x65, 0xd3, 0x9b, 0xe9, 0xc5, 0x74, 0x76, 0x4e, 0xff, + 0x25, 0x09, 0x96, 0xea, 0xcc, 0x17, 0x01, 0xb6, 0x85, 0x4c, 0xf4, 0x6d, 0xb0, 0x20, 0x13, 0xa5, + 0x8e, 0x4c, 0x33, 0x5d, 0x03, 0x87, 0xe3, 0xe2, 0xbc, 0xac, 0xa3, 0x81, 0xe6, 0x23, 0x93, 0xe9, + 0xbc, 0x26, 0xe1, 0x65, 0x30, 0x87, 0x1d, 0x8f, 0xfa, 0xb2, 0x73, 0x19, 0xa4, 0x84, 0x48, 0xeb, + 0xe2, 0x1e, 0x71, 0x73, 0x69, 0xa5, 0x95, 0x02, 0xbc, 0x7d, 0xcc, 0x42, 0x9c, 0xe3, 0x8a, 0x2e, + 0xbf, 0xa4, 0xa2, 0x1e, 0x67, 0xee, 0x50, 0x90, 0xee, 0xa8, 0xcd, 0x38, 0x15, 0x94, 0xf9, 0x68, + 0x02, 0x82, 0x37, 0xc0, 0x19, 0xda, 0xb3, 0xad, 0x01, 0x0b, 0x44, 0x94, 0xee, 0xbc, 0xbc, 0xf6, + 0xff, 0x3b, 0x1c, 0x17, 0x33, 0x66, 0xad, 0xde, 0x66, 0x81, 0x30, 0x1b, 0x28, 0x43, 0x7b, 0xb6, + 0x3c, 0x3a, 0x70, 0x0b, 0x64, 0xc8, 0x48, 0x10, 0x5f, 0xde, 0xad, 0x05, 0x19, 0x70, 0xb9, 0xac, + 0xb6, 0x42, 0x79, 0xb2, 0x15, 0xca, 0x55, 0x3f, 0xac, 0xad, 0xfe, 0xfa, 0xf3, 0x8d, 0x95, 0x78, + 0x53, 0x8c, 0x09, 0x0c, 0x4d, 0x19, 0x6e, 0xa5, 0xff, 0x8a, 0x9e, 0xd0, 0x3f, 0x1a, 0xc8, 0x4d, + 0x5c, 0xa3, 0x26, 0x6d, 0x50, 0x2e, 0x58, 0x10, 0x1a, 0xbe, 0x08, 0x42, 0xd8, 0x06, 0x19, 0x36, + 0x20, 0x01, 0x16, 0xd3, 0x77, 0xbe, 0x7e, 0xb2, 0xc4, 0x97, 0xc0, 0x5b, 0x13, 0x54, 0x74, 0xc7, + 0xd1, 0x94, 0x24, 0x3e, 0x9d, 0xe4, 0x2b, 0xa7, 0x73, 0x1b, 0x2c, 0x0c, 0x07, 0x8e, 0xec, 0x6b, + 0xea, 0xbf, 0xf4, 0xf5, 0x18, 0x04, 0xd7, 0x40, 0xca, 0xe3, 0x7d, 0x39, 0xab, 0xa5, 0xda, 0x1b, + 0xcf, 0xc7, 0x45, 0x88, 0xf0, 0xc3, 0x49, 0x96, 0x5b, 0x84, 0x73, 0xdc, 0x27, 0x28, 0x72, 0xd1, + 0x11, 0x80, 0x27, 0x89, 0xe0, 0x25, 0xb0, 0xd4, 0x73, 0x99, 0xfd, 0xc0, 0xda, 0x25, 0xb4, 0xbf, + 0x2b, 0xd4, 0x3d, 0x42, 0x67, 0xa4, 0x6e, 0x43, 0xaa, 0xe0, 0x2a, 0x58, 0x14, 0x23, 0x8b, 0xfa, + 0x0e, 0x19, 0xa9, 0x42, 0xd0, 0x82, 0x18, 0x99, 0x91, 0xa8, 0x53, 0x30, 0xb7, 0xc5, 0x1c, 0xe2, + 0xc2, 0x4d, 0x90, 0x7a, 0x40, 0x42, 0xf5, 0x58, 0x6a, 0x9f, 0x3c, 0x1f, 0x17, 0x3f, 0xec, 0x53, + 0xb1, 0x3b, 0xec, 0x95, 0x6d, 0xe6, 0x55, 0x04, 0xf1, 0x9d, 0xe8, 0xf1, 0xfa, 0x22, 0x7e, 0x74, + 0x69, 0x8f, 0x57, 0x7a, 0xa1, 0x20, 0xbc, 0xbc, 0x41, 0x46, 0xb5, 0xe8, 0x80, 0x22, 0x92, 0xe8, + 0x02, 0xaa, 0x7d, 0x9e, 0x94, 0x4f, 0x4f, 0x09, 0x57, 0xff, 0xd6, 0x00, 0x98, 0xee, 0x12, 0xf8, + 0x11, 0xb8, 0x50, 0xad, 0xd7, 0x8d, 0x4e, 0xc7, 0xea, 0x6e, 0xb7, 0x0d, 0xeb, 0x6e, 0xb3, 0xd3, + 0x36, 0xea, 0xe6, 0xa7, 0xa6, 0xd1, 0xc8, 0x26, 0xf2, 0xab, 0xfb, 0x07, 0xa5, 0x95, 0xa9, 0xf3, + 0x5d, 0x9f, 0x0f, 0x88, 0x4d, 0x77, 0x28, 0x71, 0xe0, 0x75, 0x00, 0xe3, 0xb8, 0x66, 0xab, 0xd6, + 0x6a, 0x6c, 0x67, 0xb5, 0xfc, 0xf2, 0xfe, 0x41, 0x29, 0x3b, 0x85, 0x34, 0x59, 0x8f, 0x39, 0x21, + 0xfc, 0x18, 0xe4, 0xe2, 0xde, 0xad, 0xe6, 0x67, 0xdb, 0x56, 0xb5, 0xd1, 0x40, 0x46, 0xa7, 0x93, + 0x4d, 0xbe, 0x18, 0xa6, 0xe5, 0xbb, 0x61, 0x55, 0xed, 0x6c, 0xb8, 0x0e, 0x56, 0xe2, 0x40, 0xe3, + 0x73, 0x03, 0x6d, 0xcb, 0x48, 0xa9, 0xfc, 0x85, 0xfd, 0x83, 0xd2, 0xff, 0xa7, 0x28, 0x63, 0x8f, + 0x04, 0x61, 0x14, 0x2c, 0xbf, 0xf8, 0xe5, 0x0f, 0x85, 0xc4, 0xe3, 0x1f, 0x0b, 0x89, 0xab, 0x3f, + 0xa5, 0x40, 0xe9, 0xb4, 0x9b, 0x06, 0x09, 0x78, 0xbf, 0xde, 0x6a, 0x76, 0x51, 0xb5, 0xde, 0xb5, + 0xea, 0xad, 0x86, 0x61, 0x6d, 0x98, 0x9d, 0x6e, 0x0b, 0x6d, 0x5b, 0xad, 0xb6, 0x81, 0xaa, 0x5d, + 0xb3, 0xd5, 0x7c, 0x59, 0x6b, 0x2a, 0xfb, 0x07, 0xa5, 0x6b, 0xa7, 0x71, 0xc7, 0x1b, 0x76, 0x0f, + 0x5c, 0x99, 0x29, 0x8c, 0xd9, 0x34, 0xbb, 0x59, 0x2d, 0xbf, 0xb6, 0x7f, 0x50, 0xba, 0x7c, 0x1a, + 0xbf, 0xe9, 0x53, 0x01, 0xef, 0x83, 0xeb, 0x33, 0x11, 0x6f, 0x99, 0x77, 0x50, 0xb5, 0x6b, 0x64, + 0x93, 0xf9, 0x6b, 0xfb, 0x07, 0xa5, 0xf7, 0x4e, 0xe3, 0xde, 0xa2, 0xfd, 0x00, 0x0b, 0x32, 0x33, + 0xfd, 0x1d, 0xa3, 0x69, 0x74, 0xcc, 0x4e, 0x36, 0x35, 0x1b, 0xfd, 0x1d, 0xe2, 0x13, 0x4e, 0x79, + 0x3e, 0x1d, 0x0d, 0xab, 0xb6, 0xf1, 0xe4, 0xcf, 0x42, 0xe2, 0xf1, 0x61, 0x41, 0x7b, 0x72, 0x58, + 0xd0, 0x9e, 0x1e, 0x16, 0xb4, 0x3f, 0x0e, 0x0b, 0xda, 0xd7, 0xcf, 0x0a, 0x89, 0xa7, 0xcf, 0x0a, + 0x89, 0xdf, 0x9e, 0x15, 0x12, 0x5f, 0xbc, 0x1b, 0x7b, 0x07, 0x75, 0xc6, 0xbd, 0x7b, 0x93, 0xdf, + 0x26, 0xa7, 0x32, 0x52, 0xbf, 0x4f, 0xf2, 0xdf, 0xa9, 0x37, 0x2f, 0xb7, 0xda, 0x07, 0xff, 0x06, + 0x00, 0x00, 0xff, 0xff, 0x18, 0x23, 0xa5, 0x9f, 0x5c, 0x09, 0x00, 0x00, } func (this *AccessTypeParam) Equal(that interface{}) bool {