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
This commit is contained in:
Alexander Peters 2021-10-25 15:23:19 +02:00 committed by GitHub
parent 465c085e15
commit dfba1395d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 438 additions and 323 deletions

View File

@ -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. |

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -87,7 +87,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,
}
}
@ -136,7 +136,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,
}
}

View File

@ -1,7 +1,6 @@
package keeper
import (
"encoding/json"
"testing"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
@ -35,7 +34,7 @@ func TestEncoding(t *testing.T) {
valAddr2 := make(sdk.ValAddress, sdk.AddrLen)
valAddr2[1] = 123
jsonMsg := json.RawMessage(`{"foo": 123}`)
jsonMsg := types.RawContractMessage(`{"foo": 123}`)
bankMsg := &banktypes.MsgSend{
FromAddress: addr2.String(),

View File

@ -324,7 +324,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))

View File

@ -89,9 +89,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{
@ -99,25 +99,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) {

View File

@ -3,12 +3,12 @@ package keeper
import (
"bytes"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"testing"
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"
@ -61,7 +61,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},
@ -94,7 +94,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},
@ -121,6 +121,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,
},
@ -130,7 +131,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 {

View File

@ -165,6 +165,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

View File

@ -3,11 +3,15 @@ package keeper
import (
"encoding/base64"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"testing"
"time"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
cosmwasm "github.com/CosmWasm/wasmvm"
wasmvmtypes "github.com/CosmWasm/wasmvm/types"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -121,7 +125,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":{}}`)},
@ -133,7 +137,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":{}}`)},
@ -143,7 +147,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
}
@ -188,7 +192,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)

View File

@ -469,7 +469,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 {

View File

@ -445,7 +445,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
}

View File

@ -369,7 +369,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)

View File

@ -397,7 +397,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)

View File

@ -4,7 +4,6 @@
package types
import (
encoding_json "encoding/json"
fmt "fmt"
io "io"
math "math"
@ -35,8 +34,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{} }
@ -118,28 +118,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) {

View File

@ -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
}

View File

@ -89,7 +89,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"`
}
@ -139,7 +139,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{} }
@ -360,50 +360,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 {

View File

@ -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))
})
}
}

View File

@ -6,7 +6,6 @@ package types
import (
bytes "bytes"
context "context"
encoding_json "encoding/json"
fmt "fmt"
io "io"
math "math"
@ -451,7 +450,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{} }
@ -491,7 +490,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{} }
@ -829,79 +828,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 {

View File

@ -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

View File

@ -126,7 +126,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"`
}
@ -212,7 +212,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"`
}
@ -298,7 +298,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{} }
@ -550,54 +550,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.

View File

@ -501,3 +501,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))
})
}
}

View File

@ -5,7 +5,6 @@ package types
import (
bytes "bytes"
encoding_json "encoding/json"
fmt "fmt"
io "io"
math "math"
@ -315,8 +314,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{} }
@ -452,81 +451,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 {