From 60b5100aa618b8e240a0d9b2001ec336b6ab2890 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Thu, 11 Mar 2021 09:09:53 +0100 Subject: [PATCH 01/56] Fix blocklist --- app/app.go | 13 +------------ app/app_test.go | 6 +++++- go.mod | 2 +- go.sum | 4 ++-- 4 files changed, 9 insertions(+), 16 deletions(-) diff --git a/app/app.go b/app/app.go index a646d208a5..5d9f63b53f 100644 --- a/app/app.go +++ b/app/app.go @@ -288,7 +288,7 @@ func NewWasmApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b appCodec, keys[authtypes.StoreKey], app.getSubspace(authtypes.ModuleName), authtypes.ProtoBaseAccount, maccPerms, ) app.bankKeeper = bankkeeper.NewBaseKeeper( - appCodec, keys[banktypes.StoreKey], app.accountKeeper, app.getSubspace(banktypes.ModuleName), app.BlockedAddrs(), + appCodec, keys[banktypes.StoreKey], app.accountKeeper, app.getSubspace(banktypes.ModuleName), app.ModuleAccountAddrs(), ) stakingKeeper := stakingkeeper.NewKeeper( appCodec, keys[stakingtypes.StoreKey], app.accountKeeper, app.bankKeeper, app.getSubspace(stakingtypes.ModuleName), @@ -556,17 +556,6 @@ func (app *WasmApp) ModuleAccountAddrs() map[string]bool { return modAccAddrs } -// BlockedAddrs returns all the app's module account addresses that are not -// allowed to receive external tokens. -func (app *WasmApp) BlockedAddrs() map[string]bool { - blockedAddrs := make(map[string]bool) - for acc := range maccPerms { - blockedAddrs[authtypes.NewModuleAddress(acc).String()] = !allowedReceivingModAcc[acc] - } - - return blockedAddrs -} - // LegacyAmino returns SimApp's amino codec. // // NOTE: This is solely to be used for testing purposes as it may be desirable diff --git a/app/app_test.go b/app/app_test.go index a36dd79c48..f3251080bd 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -45,7 +45,11 @@ func TestBlockedAddrs(t *testing.T) { gapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, wasm.EnableAllProposals, EmptyBaseAppOptions{}, emptyWasmOpts) for acc := range maccPerms { - require.Equal(t, !allowedReceivingModAcc[acc], gapp.bankKeeper.BlockedAddr(gapp.accountKeeper.GetModuleAddress(acc))) + t.Run(acc, func(t *testing.T) { + require.True(t, gapp.bankKeeper.BlockedAddr(gapp.accountKeeper.GetModuleAddress(acc)), + "ensure that blocked addresses are properly set in bank keeper", + ) + }) } } diff --git a/go.mod b/go.mod index a39c04142c..8c2d00fef8 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.15 require ( github.com/CosmWasm/wasmvm v0.14.0-beta1 - github.com/cosmos/cosmos-sdk v0.42.0 + github.com/cosmos/cosmos-sdk v0.42.1 github.com/cosmos/iavl v0.15.3 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b github.com/gogo/protobuf v1.3.3 diff --git a/go.sum b/go.sum index ee8eec4088..735beba437 100644 --- a/go.sum +++ b/go.sum @@ -101,8 +101,8 @@ github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cosmos/cosmos-sdk v0.42.0 h1:oQ+rUTYZ5gUq8/YEW83NosCJ3+41iA/3/wZ3pfEIYH8= -github.com/cosmos/cosmos-sdk v0.42.0/go.mod h1:xiLp1G8mumj82S5KLJGCAyeAlD+7VNomg/aRSJV12yk= +github.com/cosmos/cosmos-sdk v0.42.1 h1:/0SqvXdxbHBRUFRTLdiL4VYE18DMNXd2ONhC5d90EBQ= +github.com/cosmos/cosmos-sdk v0.42.1/go.mod h1:xiLp1G8mumj82S5KLJGCAyeAlD+7VNomg/aRSJV12yk= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= From ffb7c29a7a8f49c1dd75024e001aad418cbaee34 Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Fri, 12 Mar 2021 08:06:20 +0100 Subject: [PATCH 02/56] Upgrade relayer-test for rly latest (cf49cb4) (#458) --- contrib/relayer-tests/README.md | 8 ++++++++ contrib/relayer-tests/RELAYER_TEST.md | 8 -------- .../relayer-tests/configs/wasmd/{ => chains}/ibc-0.json | 0 .../relayer-tests/configs/wasmd/{ => chains}/ibc-1.json | 0 contrib/relayer-tests/configs/wasmd/{ => paths}/demo.json | 0 contrib/relayer-tests/init_two_chainz_relayer.sh | 3 ++- 6 files changed, 10 insertions(+), 9 deletions(-) delete mode 100644 contrib/relayer-tests/RELAYER_TEST.md rename contrib/relayer-tests/configs/wasmd/{ => chains}/ibc-0.json (100%) rename contrib/relayer-tests/configs/wasmd/{ => chains}/ibc-1.json (100%) rename contrib/relayer-tests/configs/wasmd/{ => paths}/demo.json (100%) diff --git a/contrib/relayer-tests/README.md b/contrib/relayer-tests/README.md index 317f830b91..199b00a493 100644 --- a/contrib/relayer-tests/README.md +++ b/contrib/relayer-tests/README.md @@ -1,5 +1,13 @@ # Relayer tests +These scripts helps to test go-relayer with two local wasmd chains. \ +Make sure you run below scripts under `wasmd/contrib/relayer-tests` directory. + +- `./init_two_chainz_relayer.sh` will spin two chains and runs +- `./one_chain.sh` will spin a single chain. This script used by the one above +- `./test_ibc_transfer.sh` will setup a path between chains and send tokens between chains. + +## Thank you The setup scripts here are taken from [cosmos/relayer](https://github.com/cosmos/relayer) Thank your relayer team for these scripts. diff --git a/contrib/relayer-tests/RELAYER_TEST.md b/contrib/relayer-tests/RELAYER_TEST.md deleted file mode 100644 index fbdd682499..0000000000 --- a/contrib/relayer-tests/RELAYER_TEST.md +++ /dev/null @@ -1,8 +0,0 @@ -# Relayer tests - -These scripts helps to test go-relayer with two local wasmd chains. \ -Make sure you run below scripts under `wasmd/contrib/relayer-tests` directory. - -- `./init_two_chainz_relayer.sh` will spin two chains and runs -- `./one_chain.sh` will spin a single chain. This script used by the one above --`./test_ibc_transfer.sh` will setup a path between chains and send tokens between chains. diff --git a/contrib/relayer-tests/configs/wasmd/ibc-0.json b/contrib/relayer-tests/configs/wasmd/chains/ibc-0.json similarity index 100% rename from contrib/relayer-tests/configs/wasmd/ibc-0.json rename to contrib/relayer-tests/configs/wasmd/chains/ibc-0.json diff --git a/contrib/relayer-tests/configs/wasmd/ibc-1.json b/contrib/relayer-tests/configs/wasmd/chains/ibc-1.json similarity index 100% rename from contrib/relayer-tests/configs/wasmd/ibc-1.json rename to contrib/relayer-tests/configs/wasmd/chains/ibc-1.json diff --git a/contrib/relayer-tests/configs/wasmd/demo.json b/contrib/relayer-tests/configs/wasmd/paths/demo.json similarity index 100% rename from contrib/relayer-tests/configs/wasmd/demo.json rename to contrib/relayer-tests/configs/wasmd/paths/demo.json diff --git a/contrib/relayer-tests/init_two_chainz_relayer.sh b/contrib/relayer-tests/init_two_chainz_relayer.sh index bcedb7c862..f93d62300c 100755 --- a/contrib/relayer-tests/init_two_chainz_relayer.sh +++ b/contrib/relayer-tests/init_two_chainz_relayer.sh @@ -51,7 +51,8 @@ mkdir -p $WASMD_DATA && cd $WASMD_DATA && cd ../ echo "Generating rly configurations..." rly config init -rly config add-dir configs/wasmd/ +rly config add-chains configs/wasmd/chains +rly config add-paths configs/wasmd/paths SEED0=$(jq -r '.mnemonic' $WASMD_DATA/ibc-0/key_seed.json) SEED1=$(jq -r '.mnemonic' $WASMD_DATA/ibc-1/key_seed.json) From 2eb45fc526d18e45a32b52375706ec80515fb030 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Mon, 15 Mar 2021 13:54:23 +0100 Subject: [PATCH 03/56] Handle nil in grpc querier --- x/wasm/internal/keeper/querier.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/x/wasm/internal/keeper/querier.go b/x/wasm/internal/keeper/querier.go index 08c959a78b..4e7fb08fae 100644 --- a/x/wasm/internal/keeper/querier.go +++ b/x/wasm/internal/keeper/querier.go @@ -3,6 +3,8 @@ package keeper import ( "context" "encoding/binary" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "runtime/debug" "github.com/CosmWasm/wasmd/x/wasm/internal/types" @@ -23,6 +25,9 @@ func NewQuerier(keeper *Keeper) grpcQuerier { } func (q grpcQuerier) ContractInfo(c context.Context, req *types.QueryContractInfoRequest) (*types.QueryContractInfoResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } contractAddr, err := sdk.AccAddressFromBech32(req.Address) if err != nil { return nil, err @@ -41,6 +46,9 @@ func (q grpcQuerier) ContractInfo(c context.Context, req *types.QueryContractInf } func (q grpcQuerier) ContractHistory(c context.Context, req *types.QueryContractHistoryRequest) (*types.QueryContractHistoryResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } contractAddr, err := sdk.AccAddressFromBech32(req.Address) if err != nil { return nil, err @@ -71,6 +79,9 @@ func (q grpcQuerier) ContractHistory(c context.Context, req *types.QueryContract } func (q grpcQuerier) ContractsByCode(c context.Context, req *types.QueryContractsByCodeRequest) (*types.QueryContractsByCodeResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } if req.CodeId == 0 { return nil, sdkerrors.Wrap(types.ErrInvalid, "code id") } @@ -103,6 +114,9 @@ func (q grpcQuerier) ContractsByCode(c context.Context, req *types.QueryContract } func (q grpcQuerier) AllContractState(c context.Context, req *types.QueryAllContractStateRequest) (*types.QueryAllContractStateResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } contractAddr, err := sdk.AccAddressFromBech32(req.Address) if err != nil { return nil, err @@ -133,6 +147,9 @@ func (q grpcQuerier) AllContractState(c context.Context, req *types.QueryAllCont } func (q grpcQuerier) RawContractState(c context.Context, req *types.QueryRawContractStateRequest) (*types.QueryRawContractStateResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } ctx := sdk.UnwrapSDKContext(c) contractAddr, err := sdk.AccAddressFromBech32(req.Address) @@ -148,6 +165,9 @@ func (q grpcQuerier) RawContractState(c context.Context, req *types.QueryRawCont } func (q grpcQuerier) SmartContractState(c context.Context, req *types.QuerySmartContractStateRequest) (rsp *types.QuerySmartContractStateResponse, err error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } contractAddr, err := sdk.AccAddressFromBech32(req.Address) if err != nil { return nil, err @@ -186,6 +206,9 @@ func (q grpcQuerier) SmartContractState(c context.Context, req *types.QuerySmart } func (q grpcQuerier) Code(c context.Context, req *types.QueryCodeRequest) (*types.QueryCodeResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } if req.CodeId == 0 { return nil, sdkerrors.Wrap(types.ErrInvalid, "code id") } @@ -203,6 +226,9 @@ func (q grpcQuerier) Code(c context.Context, req *types.QueryCodeRequest) (*type } func (q grpcQuerier) Codes(c context.Context, req *types.QueryCodesRequest) (*types.QueryCodesResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } ctx := sdk.UnwrapSDKContext(c) r := make([]types.CodeInfoResponse, 0) prefixStore := prefix.NewStore(ctx.KVStore(q.keeper.storeKey), types.CodeKeyPrefix) From 293c96da771c74ee0317aaac640399dcbacb7e47 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 18 Mar 2021 06:48:15 +0000 Subject: [PATCH 04/56] Bump github.com/golang/protobuf from 1.4.3 to 1.5.1 Bumps [github.com/golang/protobuf](https://github.com/golang/protobuf) from 1.4.3 to 1.5.1. - [Release notes](https://github.com/golang/protobuf/releases) - [Commits](https://github.com/golang/protobuf/compare/v1.4.3...v1.5.1) Signed-off-by: dependabot-preview[bot] --- go.mod | 2 +- go.sum | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 8c2d00fef8..3a8375c42b 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/cosmos/iavl v0.15.3 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b github.com/gogo/protobuf v1.3.3 - github.com/golang/protobuf v1.4.3 + github.com/golang/protobuf v1.5.1 github.com/google/gofuzz v1.2.0 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 diff --git a/go.sum b/go.sum index 735beba437..7232b55902 100644 --- a/go.sum +++ b/go.sum @@ -206,6 +206,8 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw= @@ -219,6 +221,7 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= @@ -812,6 +815,8 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 8e35dc260b8989bd1ae821331a64395b3607d4c0 Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Thu, 18 Mar 2021 15:31:12 +0100 Subject: [PATCH 05/56] Refactor wasm message handlers and query plugin (#460) * Refactor wasm message handlers * Add handler plugin tests * Review feedback * Add handler and query tests --- app/app.go | 2 - x/wasm/alias.go | 2 +- x/wasm/internal/keeper/bench_test.go | 2 +- x/wasm/internal/keeper/genesis_test.go | 2 +- x/wasm/internal/keeper/handler_plugin.go | 413 +++-------- .../keeper/handler_plugin_encoders.go | 292 ++++++++ .../keeper/handler_plugin_encoders_test.go | 445 ++++++++++++ x/wasm/internal/keeper/handler_plugin_test.go | 683 +++++++----------- x/wasm/internal/keeper/ibc_test.go | 4 +- x/wasm/internal/keeper/keeper.go | 77 +- x/wasm/internal/keeper/keeper_test.go | 50 +- x/wasm/internal/keeper/legacy_querier_test.go | 8 +- x/wasm/internal/keeper/options.go | 53 +- x/wasm/internal/keeper/options_test.go | 29 +- .../keeper/proposal_integration_test.go | 14 +- x/wasm/internal/keeper/querier_test.go | 16 +- x/wasm/internal/keeper/query_plugins.go | 75 +- x/wasm/internal/keeper/query_plugins_test.go | 255 +++++++ x/wasm/internal/keeper/recurse_test.go | 12 +- x/wasm/internal/keeper/reflect_test.go | 22 +- x/wasm/internal/keeper/relay.go | 24 +- x/wasm/internal/keeper/relay_test.go | 12 +- x/wasm/internal/keeper/staking_test.go | 4 +- x/wasm/internal/keeper/submsg_test.go | 6 +- x/wasm/internal/keeper/test_common.go | 20 +- .../keeper/wasmtesting/mock_keepers.go | 30 +- .../keeper/wasmtesting/query_handler.go | 17 + x/wasm/internal/types/errors.go | 3 + x/wasm/module_test.go | 2 +- 29 files changed, 1616 insertions(+), 958 deletions(-) create mode 100644 x/wasm/internal/keeper/handler_plugin_encoders.go create mode 100644 x/wasm/internal/keeper/handler_plugin_encoders_test.go create mode 100644 x/wasm/internal/keeper/query_plugins_test.go create mode 100644 x/wasm/internal/keeper/wasmtesting/query_handler.go diff --git a/app/app.go b/app/app.go index 5d9f63b53f..3f4a3e2ad1 100644 --- a/app/app.go +++ b/app/app.go @@ -371,8 +371,6 @@ func NewWasmApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b wasmDir, wasmConfig, supportedFeatures, - nil, - nil, wasmOpts..., ) diff --git a/x/wasm/alias.go b/x/wasm/alias.go index 6ae30298f6..608c1ec3fd 100644 --- a/x/wasm/alias.go +++ b/x/wasm/alias.go @@ -127,7 +127,7 @@ type ( Config = types.WasmConfig ContractInfoWithAddress = types.ContractInfoWithAddress CodeInfoResponse = types.CodeInfoResponse - MessageHandler = keeper.DefaultMessageHandler + MessageHandler = keeper.SDKMessageHandler BankEncoder = keeper.BankEncoder CustomEncoder = keeper.CustomEncoder StakingEncoder = keeper.StakingEncoder diff --git a/x/wasm/internal/keeper/bench_test.go b/x/wasm/internal/keeper/bench_test.go index 42fe9cf6a5..44e17930f1 100644 --- a/x/wasm/internal/keeper/bench_test.go +++ b/x/wasm/internal/keeper/bench_test.go @@ -40,7 +40,7 @@ func BenchmarkExecution(b *testing.B) { for name, spec := range specs { b.Run(name, func(b *testing.B) { wasmConfig := types.WasmConfig{MemoryCacheSize: 0} - ctx, keepers := createTestInput(b, false, SupportedFeatures, nil, nil, wasmConfig, spec.db()) + ctx, keepers := createTestInput(b, false, SupportedFeatures, wasmConfig, spec.db()) example := InstantiateHackatomExampleContract(b, ctx, keepers) if spec.pinned { require.NoError(b, keepers.WasmKeeper.PinCode(ctx, example.CodeID)) diff --git a/x/wasm/internal/keeper/genesis_test.go b/x/wasm/internal/keeper/genesis_test.go index c3de008a16..f7ff5e2044 100644 --- a/x/wasm/internal/keeper/genesis_test.go +++ b/x/wasm/internal/keeper/genesis_test.go @@ -643,7 +643,7 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { wasmConfig := wasmTypes.DefaultWasmConfig() pk := paramskeeper.NewKeeper(encodingConfig.Marshaler, encodingConfig.Amino, keyParams, tkeyParams) - srcKeeper := NewKeeper(encodingConfig.Marshaler, keyWasm, pk.Subspace(wasmTypes.DefaultParamspace), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, tempDir, wasmConfig, SupportedFeatures, nil, nil) + srcKeeper := NewKeeper(encodingConfig.Marshaler, keyWasm, pk.Subspace(wasmTypes.DefaultParamspace), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, tempDir, wasmConfig, SupportedFeatures) return &srcKeeper, ctx, []sdk.StoreKey{keyWasm, keyParams} } diff --git a/x/wasm/internal/keeper/handler_plugin.go b/x/wasm/internal/keeper/handler_plugin.go index e263e2fa4b..61c9436869 100644 --- a/x/wasm/internal/keeper/handler_plugin.go +++ b/x/wasm/internal/keeper/handler_plugin.go @@ -1,326 +1,48 @@ package keeper import ( - "encoding/json" + "errors" "fmt" "github.com/CosmWasm/wasmd/x/wasm/internal/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" - ibcclienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ) -type DefaultMessageHandler struct { - router sdk.Router - encoders MessageEncoders +// msgEncoder is an extension point to customize encodings +type msgEncoder interface { + // Encode converts wasmvm message to n cosmos message types + Encode(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) ([]sdk.Msg, error) } -func NewDefaultMessageHandler(router sdk.Router, channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper, unpacker codectypes.AnyUnpacker, customEncoders *MessageEncoders) DefaultMessageHandler { - encoders := DefaultEncoders(channelKeeper, capabilityKeeper, unpacker).Merge(customEncoders) - return DefaultMessageHandler{ - router: router, - encoders: encoders, - } -} - -type BankEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.BankMsg) ([]sdk.Msg, error) -type CustomEncoder func(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) -type StakingEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.StakingMsg) ([]sdk.Msg, error) -type StargateEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.StargateMsg) ([]sdk.Msg, error) -type WasmEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, error) -type IBCEncoder func(ctx sdk.Context, sender sdk.AccAddress, contractIBCPortID string, msg *wasmvmtypes.IBCMsg) ([]sdk.Msg, error) - -type MessageEncoders struct { - Bank BankEncoder - Custom CustomEncoder - IBC IBCEncoder - Staking StakingEncoder - Stargate StargateEncoder - Wasm WasmEncoder -} - -func DefaultEncoders(channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper, unpacker codectypes.AnyUnpacker) MessageEncoders { - return MessageEncoders{ - Bank: EncodeBankMsg, - Custom: NoCustomMsg, - IBC: EncodeIBCMsg(channelKeeper, capabilityKeeper), - Staking: EncodeStakingMsg, - Stargate: EncodeStargateMsg(unpacker), - Wasm: EncodeWasmMsg, - } -} - -func (e MessageEncoders) Merge(o *MessageEncoders) MessageEncoders { - if o == nil { - return e - } - if o.Bank != nil { - e.Bank = o.Bank - } - if o.Custom != nil { - e.Custom = o.Custom - } - if o.IBC != nil { - e.IBC = o.IBC - } - if o.Staking != nil { - e.Staking = o.Staking - } - if o.Stargate != nil { - e.Stargate = o.Stargate - } - if o.Wasm != nil { - e.Wasm = o.Wasm - } - return e -} - -func (e MessageEncoders) Encode(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) ([]sdk.Msg, error) { - switch { - case msg.Bank != nil: - return e.Bank(contractAddr, msg.Bank) - case msg.Custom != nil: - return e.Custom(contractAddr, msg.Custom) - case msg.IBC != nil: - return e.IBC(ctx, contractAddr, contractIBCPortID, msg.IBC) - case msg.Staking != nil: - return e.Staking(contractAddr, msg.Staking) - case msg.Stargate != nil: - return e.Stargate(contractAddr, msg.Stargate) - case msg.Wasm != nil: - return e.Wasm(contractAddr, msg.Wasm) - } - return nil, sdkerrors.Wrap(types.ErrInvalidMsg, "Unknown variant of Wasm") -} - -func EncodeBankMsg(sender sdk.AccAddress, msg *wasmvmtypes.BankMsg) ([]sdk.Msg, error) { - if msg.Send == nil { - return nil, sdkerrors.Wrap(types.ErrInvalidMsg, "Unknown variant of Bank") - } - if len(msg.Send.Amount) == 0 { - return nil, nil - } - toSend, err := convertWasmCoinsToSdkCoins(msg.Send.Amount) - if err != nil { - return nil, err - } - sdkMsg := banktypes.MsgSend{ - FromAddress: sender.String(), - ToAddress: msg.Send.ToAddress, - Amount: toSend, - } - return []sdk.Msg{&sdkMsg}, nil -} - -func NoCustomMsg(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) { - return nil, sdkerrors.Wrap(types.ErrInvalidMsg, "Custom variant not supported") -} - -func EncodeStakingMsg(sender sdk.AccAddress, msg *wasmvmtypes.StakingMsg) ([]sdk.Msg, error) { - switch { - case msg.Delegate != nil: - coin, err := convertWasmCoinToSdkCoin(msg.Delegate.Amount) - if err != nil { - return nil, err - } - sdkMsg := stakingtypes.MsgDelegate{ - DelegatorAddress: sender.String(), - ValidatorAddress: msg.Delegate.Validator, - Amount: coin, - } - return []sdk.Msg{&sdkMsg}, nil - - case msg.Redelegate != nil: - coin, err := convertWasmCoinToSdkCoin(msg.Redelegate.Amount) - if err != nil { - return nil, err - } - sdkMsg := stakingtypes.MsgBeginRedelegate{ - DelegatorAddress: sender.String(), - ValidatorSrcAddress: msg.Redelegate.SrcValidator, - ValidatorDstAddress: msg.Redelegate.DstValidator, - Amount: coin, - } - return []sdk.Msg{&sdkMsg}, nil - case msg.Undelegate != nil: - coin, err := convertWasmCoinToSdkCoin(msg.Undelegate.Amount) - if err != nil { - return nil, err - } - sdkMsg := stakingtypes.MsgUndelegate{ - DelegatorAddress: sender.String(), - ValidatorAddress: msg.Undelegate.Validator, - Amount: coin, - } - return []sdk.Msg{&sdkMsg}, nil - case msg.Withdraw != nil: - senderAddr := sender.String() - rcpt := senderAddr - if len(msg.Withdraw.Recipient) != 0 { - rcpt = msg.Withdraw.Recipient - } - setMsg := distributiontypes.MsgSetWithdrawAddress{ - DelegatorAddress: senderAddr, - WithdrawAddress: rcpt, - } - withdrawMsg := distributiontypes.MsgWithdrawDelegatorReward{ - DelegatorAddress: senderAddr, - ValidatorAddress: msg.Withdraw.Validator, - } - return []sdk.Msg{&setMsg, &withdrawMsg}, nil - default: - return nil, sdkerrors.Wrap(types.ErrInvalidMsg, "Unknown variant of Staking") - } -} - -func EncodeStargateMsg(unpacker codectypes.AnyUnpacker) StargateEncoder { - return func(sender sdk.AccAddress, msg *wasmvmtypes.StargateMsg) ([]sdk.Msg, error) { - any := codectypes.Any{ - TypeUrl: msg.TypeURL, - Value: msg.Value, - } - var sdkMsg sdk.Msg - if err := unpacker.UnpackAny(&any, &sdkMsg); err != nil { - return nil, sdkerrors.Wrap(types.ErrInvalidMsg, fmt.Sprintf("Cannot unpack proto message with type URL: %s", msg.TypeURL)) - } - if err := codectypes.UnpackInterfaces(sdkMsg, unpacker); err != nil { - return nil, sdkerrors.Wrap(types.ErrInvalidMsg, fmt.Sprintf("UnpackInterfaces inside msg: %s", err)) - } - return []sdk.Msg{sdkMsg}, nil - } -} - -func EncodeWasmMsg(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, error) { - switch { - case msg.Execute != nil: - coins, err := convertWasmCoinsToSdkCoins(msg.Execute.Send) - if err != nil { - return nil, err - } - - sdkMsg := types.MsgExecuteContract{ - Sender: sender.String(), - Contract: msg.Execute.ContractAddr, - Msg: msg.Execute.Msg, - Funds: coins, - } - return []sdk.Msg{&sdkMsg}, nil - case msg.Instantiate != nil: - coins, err := convertWasmCoinsToSdkCoins(msg.Instantiate.Send) - if err != nil { - return nil, err - } - - sdkMsg := types.MsgInstantiateContract{ - Sender: sender.String(), - CodeID: msg.Instantiate.CodeID, - Label: msg.Instantiate.Label, - InitMsg: msg.Instantiate.Msg, - Funds: coins, - } - return []sdk.Msg{&sdkMsg}, nil - case msg.Migrate != nil: - sdkMsg := types.MsgMigrateContract{ - Sender: sender.String(), - Contract: msg.Migrate.ContractAddr, - CodeID: msg.Migrate.NewCodeID, - MigrateMsg: msg.Migrate.Msg, - } - return []sdk.Msg{&sdkMsg}, nil - default: - return nil, sdkerrors.Wrap(types.ErrInvalidMsg, "Unknown variant of Wasm") - } -} - -func EncodeIBCMsg(channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper) IBCEncoder { - return func(ctx sdk.Context, sender sdk.AccAddress, contractIBCPortID string, msg *wasmvmtypes.IBCMsg) ([]sdk.Msg, error) { - switch { - case msg.SendPacket != nil: - if contractIBCPortID == "" { - return nil, sdkerrors.Wrapf(types.ErrUnsupportedForContract, "ibc not supported") - } - contractIBCChannelID := msg.SendPacket.ChannelID - if contractIBCChannelID == "" { - return nil, sdkerrors.Wrapf(types.ErrEmpty, "ibc channel") - } - - sequence, found := channelKeeper.GetNextSequenceSend(ctx, contractIBCPortID, contractIBCChannelID) - if !found { - return nil, sdkerrors.Wrapf( - channeltypes.ErrSequenceSendNotFound, - "source port: %s, source channel: %s", contractIBCPortID, contractIBCChannelID, - ) - } - - channelInfo, ok := channelKeeper.GetChannel(ctx, contractIBCPortID, contractIBCChannelID) - if !ok { - return nil, sdkerrors.Wrap(channeltypes.ErrInvalidChannel, "not found") - } - channelCap, ok := capabilityKeeper.GetCapability(ctx, host.ChannelCapabilityPath(contractIBCPortID, contractIBCChannelID)) - if !ok { - return nil, sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability") - } - packet := channeltypes.NewPacket( - msg.SendPacket.Data, - sequence, - contractIBCPortID, - contractIBCChannelID, - channelInfo.Counterparty.PortId, - channelInfo.Counterparty.ChannelId, - convertWasmIBCTimeoutHeightToCosmosHeight(msg.SendPacket.TimeoutBlock), - convertWasmIBCTimeoutTimestampToCosmosTimestamp(msg.SendPacket.TimeoutTimestamp), - ) - return nil, channelKeeper.SendPacket(ctx, channelCap, packet) - case msg.CloseChannel != nil: - return []sdk.Msg{&channeltypes.MsgChannelCloseInit{ - PortId: PortIDForContract(sender), - ChannelId: msg.CloseChannel.ChannelID, - Signer: sender.String(), - }}, nil - case msg.Transfer != nil: - amount, err := convertWasmCoinToSdkCoin(msg.Transfer.Amount) - if err != nil { - return nil, sdkerrors.Wrap(err, "amount") - } - portID := ibctransfertypes.ModuleName //todo: port can be customized in genesis. make this more flexible - msg := &ibctransfertypes.MsgTransfer{ - SourcePort: portID, - SourceChannel: msg.Transfer.ChannelID, - Token: amount, - Sender: sender.String(), - Receiver: msg.Transfer.ToAddress, - TimeoutHeight: convertWasmIBCTimeoutHeightToCosmosHeight(msg.Transfer.TimeoutBlock), - TimeoutTimestamp: convertWasmIBCTimeoutTimestampToCosmosTimestamp(msg.Transfer.TimeoutTimestamp), - } - return []sdk.Msg{msg}, nil - default: - return nil, sdkerrors.Wrap(types.ErrInvalidMsg, "Unknown variant of IBC") - } - } +// SDKMessageHandler can handles messages that can be encoded into sdk.Message types and routed. +type SDKMessageHandler struct { + router sdk.Router + encoders msgEncoder } -func convertWasmIBCTimeoutHeightToCosmosHeight(ibcTimeoutBlock *wasmvmtypes.IBCTimeoutBlock) ibcclienttypes.Height { - if ibcTimeoutBlock == nil { - return ibcclienttypes.NewHeight(0, 0) +func NewDefaultMessageHandler(router sdk.Router, channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper, unpacker codectypes.AnyUnpacker, customEncoders ...*MessageEncoders) messenger { + encoders := DefaultEncoders(unpacker) + for _, e := range customEncoders { + encoders = encoders.Merge(e) } - return ibcclienttypes.NewHeight(ibcTimeoutBlock.Revision, ibcTimeoutBlock.Height) + return NewMessageHandlerChain( + NewSDKMessageHandler(router, encoders), + NewIBCRawPacketHandler(channelKeeper, capabilityKeeper), + ) } -func convertWasmIBCTimeoutTimestampToCosmosTimestamp(timestamp *uint64) uint64 { - if timestamp == nil { - return 0 +func NewSDKMessageHandler(router sdk.Router, encoders msgEncoder) SDKMessageHandler { + return SDKMessageHandler{ + router: router, + encoders: encoders, } - return *timestamp } -func (h DefaultMessageHandler) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { +func (h SDKMessageHandler) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { sdkMsgs, err := h.encoders.Encode(ctx, contractAddr, contractIBCPortID, msg) if err != nil { return nil, nil, err @@ -342,7 +64,7 @@ func (h DefaultMessageHandler) DispatchMsg(ctx sdk.Context, contractAddr sdk.Acc return } -func (h DefaultMessageHandler) handleSdkMessage(ctx sdk.Context, contractAddr sdk.Address, msg sdk.Msg) (*sdk.Result, error) { +func (h SDKMessageHandler) handleSdkMessage(ctx sdk.Context, contractAddr sdk.Address, msg sdk.Msg) (*sdk.Result, error) { if err := msg.ValidateBasic(); err != nil { return nil, err } @@ -365,25 +87,84 @@ func (h DefaultMessageHandler) handleSdkMessage(ctx sdk.Context, contractAddr sd return res, nil } -func convertWasmCoinsToSdkCoins(coins []wasmvmtypes.Coin) (sdk.Coins, error) { - var toSend sdk.Coins - for _, coin := range coins { - c, err := convertWasmCoinToSdkCoin(coin) - if err != nil { - return nil, err +// MessageHandlerChain defines a chain of handlers that are called one by one until it can be handled. +type MessageHandlerChain struct { + handlers []messenger +} + +func NewMessageHandlerChain(first messenger, others ...messenger) *MessageHandlerChain { + r := &MessageHandlerChain{handlers: append([]messenger{first}, others...)} + for i := range r.handlers { + if r.handlers[i] == nil { + panic(fmt.Sprintf("handler must not be nil at position : %d", i)) + } + } + return r +} + +// DispatchMsg dispatch message to handlers. +func (m MessageHandlerChain) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) ([]sdk.Event, [][]byte, error) { + for _, h := range m.handlers { + events, data, err := h.DispatchMsg(ctx, contractAddr, contractIBCPortID, msg) + switch { + case err == nil: + return events, data, err + case errors.Is(err, types.ErrUnknownMsg): + continue + default: + return events, data, err } - toSend = append(toSend, c) } - return toSend, nil + return nil, nil, sdkerrors.Wrap(types.ErrUnknownMsg, "no handler found") +} + +// IBCRawPacketHandler handels IBC.SendPacket messages which are published to an IBC channel. +type IBCRawPacketHandler struct { + channelKeeper types.ChannelKeeper + capabilityKeeper types.CapabilityKeeper } -func convertWasmCoinToSdkCoin(coin wasmvmtypes.Coin) (sdk.Coin, error) { - amount, ok := sdk.NewIntFromString(coin.Amount) +func NewIBCRawPacketHandler(chk types.ChannelKeeper, cak types.CapabilityKeeper) *IBCRawPacketHandler { + return &IBCRawPacketHandler{channelKeeper: chk, capabilityKeeper: cak} +} + +// DispatchMsg publishes a raw IBC packet onto the channel. +func (h IBCRawPacketHandler) DispatchMsg(ctx sdk.Context, _ sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + if msg.IBC == nil || msg.IBC.SendPacket == nil { + return nil, nil, types.ErrUnknownMsg + } + if contractIBCPortID == "" { + return nil, nil, sdkerrors.Wrapf(types.ErrUnsupportedForContract, "ibc not supported") + } + contractIBCChannelID := msg.IBC.SendPacket.ChannelID + if contractIBCChannelID == "" { + return nil, nil, sdkerrors.Wrapf(types.ErrEmpty, "ibc channel") + } + + sequence, found := h.channelKeeper.GetNextSequenceSend(ctx, contractIBCPortID, contractIBCChannelID) + if !found { + return nil, nil, sdkerrors.Wrapf(channeltypes.ErrSequenceSendNotFound, + "source port: %s, source channel: %s", contractIBCPortID, contractIBCChannelID, + ) + } + + channelInfo, ok := h.channelKeeper.GetChannel(ctx, contractIBCPortID, contractIBCChannelID) if !ok { - return sdk.Coin{}, sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, coin.Amount+coin.Denom) + return nil, nil, sdkerrors.Wrap(channeltypes.ErrInvalidChannel, "not found") } - return sdk.Coin{ - Denom: coin.Denom, - Amount: amount, - }, nil + channelCap, ok := h.capabilityKeeper.GetCapability(ctx, host.ChannelCapabilityPath(contractIBCPortID, contractIBCChannelID)) + if !ok { + return nil, nil, sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability") + } + packet := channeltypes.NewPacket( + msg.IBC.SendPacket.Data, + sequence, + contractIBCPortID, + contractIBCChannelID, + channelInfo.Counterparty.PortId, + channelInfo.Counterparty.ChannelId, + convertWasmIBCTimeoutHeightToCosmosHeight(msg.IBC.SendPacket.TimeoutBlock), + convertWasmIBCTimeoutTimestampToCosmosTimestamp(msg.IBC.SendPacket.TimeoutTimestamp), + ) + return nil, nil, h.channelKeeper.SendPacket(ctx, channelCap, packet) } diff --git a/x/wasm/internal/keeper/handler_plugin_encoders.go b/x/wasm/internal/keeper/handler_plugin_encoders.go new file mode 100644 index 0000000000..20b19414da --- /dev/null +++ b/x/wasm/internal/keeper/handler_plugin_encoders.go @@ -0,0 +1,292 @@ +package keeper + +import ( + "encoding/json" + "fmt" + "github.com/CosmWasm/wasmd/x/wasm/internal/types" + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" + ibcclienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" + channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +type BankEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.BankMsg) ([]sdk.Msg, error) +type CustomEncoder func(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) +type StakingEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.StakingMsg) ([]sdk.Msg, error) +type StargateEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.StargateMsg) ([]sdk.Msg, error) +type WasmEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, error) +type IBCEncoder func(ctx sdk.Context, sender sdk.AccAddress, contractIBCPortID string, msg *wasmvmtypes.IBCMsg) ([]sdk.Msg, error) + +type MessageEncoders struct { + Bank func(sender sdk.AccAddress, msg *wasmvmtypes.BankMsg) ([]sdk.Msg, error) + Custom func(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) + IBC func(ctx sdk.Context, sender sdk.AccAddress, contractIBCPortID string, msg *wasmvmtypes.IBCMsg) ([]sdk.Msg, error) + Staking func(sender sdk.AccAddress, msg *wasmvmtypes.StakingMsg) ([]sdk.Msg, error) + Stargate func(sender sdk.AccAddress, msg *wasmvmtypes.StargateMsg) ([]sdk.Msg, error) + Wasm func(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, error) +} + +func DefaultEncoders(unpacker codectypes.AnyUnpacker) MessageEncoders { + return MessageEncoders{ + Bank: EncodeBankMsg, + Custom: NoCustomMsg, + IBC: EncodeIBCMsg, + Staking: EncodeStakingMsg, + Stargate: EncodeStargateMsg(unpacker), + Wasm: EncodeWasmMsg, + } +} + +func (e MessageEncoders) Merge(o *MessageEncoders) MessageEncoders { + if o == nil { + return e + } + if o.Bank != nil { + e.Bank = o.Bank + } + if o.Custom != nil { + e.Custom = o.Custom + } + if o.IBC != nil { + e.IBC = o.IBC + } + if o.Staking != nil { + e.Staking = o.Staking + } + if o.Stargate != nil { + e.Stargate = o.Stargate + } + if o.Wasm != nil { + e.Wasm = o.Wasm + } + return e +} + +func (e MessageEncoders) Encode(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) ([]sdk.Msg, error) { + switch { + case msg.Bank != nil: + return e.Bank(contractAddr, msg.Bank) + case msg.Custom != nil: + return e.Custom(contractAddr, msg.Custom) + case msg.IBC != nil: + return e.IBC(ctx, contractAddr, contractIBCPortID, msg.IBC) + case msg.Staking != nil: + return e.Staking(contractAddr, msg.Staking) + case msg.Stargate != nil: + return e.Stargate(contractAddr, msg.Stargate) + case msg.Wasm != nil: + return e.Wasm(contractAddr, msg.Wasm) + } + return nil, sdkerrors.Wrap(types.ErrUnknownMsg, "unknown variant of Wasm") +} + +func EncodeBankMsg(sender sdk.AccAddress, msg *wasmvmtypes.BankMsg) ([]sdk.Msg, error) { + if msg.Send == nil { + return nil, sdkerrors.Wrap(types.ErrUnknownMsg, "unknown variant of Bank") + } + if len(msg.Send.Amount) == 0 { + return nil, nil + } + toSend, err := convertWasmCoinsToSdkCoins(msg.Send.Amount) + if err != nil { + return nil, err + } + sdkMsg := banktypes.MsgSend{ + FromAddress: sender.String(), + ToAddress: msg.Send.ToAddress, + Amount: toSend, + } + return []sdk.Msg{&sdkMsg}, nil +} + +func NoCustomMsg(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) { + return nil, sdkerrors.Wrap(types.ErrUnknownMsg, "custom variant not supported") +} + +func EncodeStakingMsg(sender sdk.AccAddress, msg *wasmvmtypes.StakingMsg) ([]sdk.Msg, error) { + switch { + case msg.Delegate != nil: + coin, err := convertWasmCoinToSdkCoin(msg.Delegate.Amount) + if err != nil { + return nil, err + } + sdkMsg := stakingtypes.MsgDelegate{ + DelegatorAddress: sender.String(), + ValidatorAddress: msg.Delegate.Validator, + Amount: coin, + } + return []sdk.Msg{&sdkMsg}, nil + + case msg.Redelegate != nil: + coin, err := convertWasmCoinToSdkCoin(msg.Redelegate.Amount) + if err != nil { + return nil, err + } + sdkMsg := stakingtypes.MsgBeginRedelegate{ + DelegatorAddress: sender.String(), + ValidatorSrcAddress: msg.Redelegate.SrcValidator, + ValidatorDstAddress: msg.Redelegate.DstValidator, + Amount: coin, + } + return []sdk.Msg{&sdkMsg}, nil + case msg.Undelegate != nil: + coin, err := convertWasmCoinToSdkCoin(msg.Undelegate.Amount) + if err != nil { + return nil, err + } + sdkMsg := stakingtypes.MsgUndelegate{ + DelegatorAddress: sender.String(), + ValidatorAddress: msg.Undelegate.Validator, + Amount: coin, + } + return []sdk.Msg{&sdkMsg}, nil + case msg.Withdraw != nil: + senderAddr := sender.String() + rcpt := senderAddr + if len(msg.Withdraw.Recipient) != 0 { + rcpt = msg.Withdraw.Recipient + } + setMsg := distributiontypes.MsgSetWithdrawAddress{ + DelegatorAddress: senderAddr, + WithdrawAddress: rcpt, + } + withdrawMsg := distributiontypes.MsgWithdrawDelegatorReward{ + DelegatorAddress: senderAddr, + ValidatorAddress: msg.Withdraw.Validator, + } + return []sdk.Msg{&setMsg, &withdrawMsg}, nil + default: + return nil, sdkerrors.Wrap(types.ErrUnknownMsg, "unknown variant of Staking") + } +} + +func EncodeStargateMsg(unpacker codectypes.AnyUnpacker) StargateEncoder { + return func(sender sdk.AccAddress, msg *wasmvmtypes.StargateMsg) ([]sdk.Msg, error) { + any := codectypes.Any{ + TypeUrl: msg.TypeURL, + Value: msg.Value, + } + var sdkMsg sdk.Msg + if err := unpacker.UnpackAny(&any, &sdkMsg); err != nil { + return nil, sdkerrors.Wrap(types.ErrInvalidMsg, fmt.Sprintf("Cannot unpack proto message with type URL: %s", msg.TypeURL)) + } + if err := codectypes.UnpackInterfaces(sdkMsg, unpacker); err != nil { + return nil, sdkerrors.Wrap(types.ErrInvalidMsg, fmt.Sprintf("UnpackInterfaces inside msg: %s", err)) + } + return []sdk.Msg{sdkMsg}, nil + } +} + +func EncodeWasmMsg(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, error) { + switch { + case msg.Execute != nil: + coins, err := convertWasmCoinsToSdkCoins(msg.Execute.Send) + if err != nil { + return nil, err + } + + sdkMsg := types.MsgExecuteContract{ + Sender: sender.String(), + Contract: msg.Execute.ContractAddr, + Msg: msg.Execute.Msg, + Funds: coins, + } + return []sdk.Msg{&sdkMsg}, nil + case msg.Instantiate != nil: + coins, err := convertWasmCoinsToSdkCoins(msg.Instantiate.Send) + if err != nil { + return nil, err + } + + sdkMsg := types.MsgInstantiateContract{ + Sender: sender.String(), + CodeID: msg.Instantiate.CodeID, + Label: msg.Instantiate.Label, + InitMsg: msg.Instantiate.Msg, + Funds: coins, + } + return []sdk.Msg{&sdkMsg}, nil + case msg.Migrate != nil: + sdkMsg := types.MsgMigrateContract{ + Sender: sender.String(), + Contract: msg.Migrate.ContractAddr, + CodeID: msg.Migrate.NewCodeID, + MigrateMsg: msg.Migrate.Msg, + } + return []sdk.Msg{&sdkMsg}, nil + default: + return nil, sdkerrors.Wrap(types.ErrUnknownMsg, "unknown variant of Wasm") + } +} + +func EncodeIBCMsg(ctx sdk.Context, sender sdk.AccAddress, contractIBCPortID string, msg *wasmvmtypes.IBCMsg) ([]sdk.Msg, error) { + switch { + case msg.CloseChannel != nil: + return []sdk.Msg{&channeltypes.MsgChannelCloseInit{ + PortId: PortIDForContract(sender), + ChannelId: msg.CloseChannel.ChannelID, + Signer: sender.String(), + }}, nil + case msg.Transfer != nil: + amount, err := convertWasmCoinToSdkCoin(msg.Transfer.Amount) + if err != nil { + return nil, sdkerrors.Wrap(err, "amount") + } + portID := ibctransfertypes.ModuleName //todo: port can be customized in genesis. make this more flexible + msg := &ibctransfertypes.MsgTransfer{ + SourcePort: portID, + SourceChannel: msg.Transfer.ChannelID, + Token: amount, + Sender: sender.String(), + Receiver: msg.Transfer.ToAddress, + TimeoutHeight: convertWasmIBCTimeoutHeightToCosmosHeight(msg.Transfer.TimeoutBlock), + TimeoutTimestamp: convertWasmIBCTimeoutTimestampToCosmosTimestamp(msg.Transfer.TimeoutTimestamp), + } + return []sdk.Msg{msg}, nil + default: + return nil, sdkerrors.Wrap(types.ErrUnknownMsg, "Unknown variant of IBC") + } +} + +func convertWasmIBCTimeoutHeightToCosmosHeight(ibcTimeoutBlock *wasmvmtypes.IBCTimeoutBlock) ibcclienttypes.Height { + if ibcTimeoutBlock == nil { + return ibcclienttypes.NewHeight(0, 0) + } + return ibcclienttypes.NewHeight(ibcTimeoutBlock.Revision, ibcTimeoutBlock.Height) +} + +func convertWasmIBCTimeoutTimestampToCosmosTimestamp(timestamp *uint64) uint64 { + if timestamp == nil { + return 0 + } + return *timestamp +} + +func convertWasmCoinsToSdkCoins(coins []wasmvmtypes.Coin) (sdk.Coins, error) { + var toSend sdk.Coins + for _, coin := range coins { + c, err := convertWasmCoinToSdkCoin(coin) + if err != nil { + return nil, err + } + toSend = append(toSend, c) + } + return toSend, nil +} + +func convertWasmCoinToSdkCoin(coin wasmvmtypes.Coin) (sdk.Coin, error) { + amount, ok := sdk.NewIntFromString(coin.Amount) + if !ok { + return sdk.Coin{}, sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, coin.Amount+coin.Denom) + } + return sdk.Coin{ + Denom: coin.Denom, + Amount: amount, + }, nil +} diff --git a/x/wasm/internal/keeper/handler_plugin_encoders_test.go b/x/wasm/internal/keeper/handler_plugin_encoders_test.go new file mode 100644 index 0000000000..0151a4bf33 --- /dev/null +++ b/x/wasm/internal/keeper/handler_plugin_encoders_test.go @@ -0,0 +1,445 @@ +package keeper + +import ( + "encoding/json" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" + clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" + channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" + "github.com/golang/protobuf/proto" + "testing" + + "github.com/CosmWasm/wasmd/x/wasm/internal/types" + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestEncoding(t *testing.T) { + addr1 := RandomAccountAddress(t) + addr2 := RandomAccountAddress(t) + invalidAddr := "xrnd1d02kd90n38qvr3qb9qof83fn2d2" + valAddr := make(sdk.ValAddress, sdk.AddrLen) + valAddr[0] = 12 + valAddr2 := make(sdk.ValAddress, sdk.AddrLen) + valAddr2[1] = 123 + var timeoutVal uint64 = 100 + + jsonMsg := json.RawMessage(`{"foo": 123}`) + + bankMsg := &banktypes.MsgSend{ + FromAddress: addr2.String(), + ToAddress: addr1.String(), + Amount: sdk.Coins{ + sdk.NewInt64Coin("uatom", 12345), + sdk.NewInt64Coin("utgd", 54321), + }, + } + bankMsgBin, err := proto.Marshal(bankMsg) + require.NoError(t, err) + + content, err := codectypes.NewAnyWithValue(types.StoreCodeProposalFixture()) + require.NoError(t, err) + + proposalMsg := &govtypes.MsgSubmitProposal{ + Proposer: addr1.String(), + InitialDeposit: sdk.NewCoins(sdk.NewInt64Coin("uatom", 12345)), + Content: content, + } + proposalMsgBin, err := proto.Marshal(proposalMsg) + require.NoError(t, err) + + cases := map[string]struct { + sender sdk.AccAddress + srcMsg wasmvmtypes.CosmosMsg + srcIBCPort string + // set if valid + output []sdk.Msg + // set if invalid + isError bool + }{ + "simple send": { + sender: addr1, + srcMsg: wasmvmtypes.CosmosMsg{ + Bank: &wasmvmtypes.BankMsg{ + Send: &wasmvmtypes.SendMsg{ + ToAddress: addr2.String(), + Amount: []wasmvmtypes.Coin{ + { + Denom: "uatom", + Amount: "12345", + }, + { + Denom: "usdt", + Amount: "54321", + }, + }, + }, + }, + }, + output: []sdk.Msg{ + &banktypes.MsgSend{ + FromAddress: addr1.String(), + ToAddress: addr2.String(), + Amount: sdk.Coins{ + sdk.NewInt64Coin("uatom", 12345), + sdk.NewInt64Coin("usdt", 54321), + }, + }, + }, + }, + "invalid send amount": { + sender: addr1, + srcMsg: wasmvmtypes.CosmosMsg{ + Bank: &wasmvmtypes.BankMsg{ + Send: &wasmvmtypes.SendMsg{ + ToAddress: addr2.String(), + Amount: []wasmvmtypes.Coin{ + { + Denom: "uatom", + Amount: "123.456", + }, + }, + }, + }, + }, + isError: true, + }, + "invalid address": { + sender: addr1, + srcMsg: wasmvmtypes.CosmosMsg{ + Bank: &wasmvmtypes.BankMsg{ + Send: &wasmvmtypes.SendMsg{ + ToAddress: invalidAddr, + Amount: []wasmvmtypes.Coin{ + { + Denom: "uatom", + Amount: "7890", + }, + }, + }, + }, + }, + isError: false, // addresses are checked in the handler + output: []sdk.Msg{ + &banktypes.MsgSend{ + FromAddress: addr1.String(), + ToAddress: invalidAddr, + Amount: sdk.Coins{ + sdk.NewInt64Coin("uatom", 7890), + }, + }, + }, + }, + "wasm execute": { + sender: addr1, + srcMsg: wasmvmtypes.CosmosMsg{ + Wasm: &wasmvmtypes.WasmMsg{ + Execute: &wasmvmtypes.ExecuteMsg{ + ContractAddr: addr2.String(), + Msg: jsonMsg, + Send: []wasmvmtypes.Coin{ + wasmvmtypes.NewCoin(12, "eth"), + }, + }, + }, + }, + output: []sdk.Msg{ + &types.MsgExecuteContract{ + Sender: addr1.String(), + Contract: addr2.String(), + Msg: jsonMsg, + Funds: sdk.NewCoins(sdk.NewInt64Coin("eth", 12)), + }, + }, + }, + "wasm instantiate": { + sender: addr1, + srcMsg: wasmvmtypes.CosmosMsg{ + Wasm: &wasmvmtypes.WasmMsg{ + Instantiate: &wasmvmtypes.InstantiateMsg{ + CodeID: 7, + Msg: jsonMsg, + Send: []wasmvmtypes.Coin{ + wasmvmtypes.NewCoin(123, "eth"), + }, + Label: "myLabel", + }, + }, + }, + output: []sdk.Msg{ + &types.MsgInstantiateContract{ + Sender: addr1.String(), + CodeID: 7, + Label: "myLabel", + InitMsg: jsonMsg, + Funds: sdk.NewCoins(sdk.NewInt64Coin("eth", 123)), + }, + }, + }, + "wasm migrate": { + sender: addr2, + srcMsg: wasmvmtypes.CosmosMsg{ + Wasm: &wasmvmtypes.WasmMsg{ + Migrate: &wasmvmtypes.MigrateMsg{ + ContractAddr: addr1.String(), + NewCodeID: 12, + Msg: jsonMsg, + }, + }, + }, + output: []sdk.Msg{ + &types.MsgMigrateContract{ + Sender: addr2.String(), + Contract: addr1.String(), + CodeID: 12, + MigrateMsg: jsonMsg, + }, + }, + }, + "staking delegate": { + sender: addr1, + srcMsg: wasmvmtypes.CosmosMsg{ + Staking: &wasmvmtypes.StakingMsg{ + Delegate: &wasmvmtypes.DelegateMsg{ + Validator: valAddr.String(), + Amount: wasmvmtypes.NewCoin(777, "stake"), + }, + }, + }, + output: []sdk.Msg{ + &stakingtypes.MsgDelegate{ + DelegatorAddress: addr1.String(), + ValidatorAddress: valAddr.String(), + Amount: sdk.NewInt64Coin("stake", 777), + }, + }, + }, + "staking delegate to non-validator": { + sender: addr1, + srcMsg: wasmvmtypes.CosmosMsg{ + Staking: &wasmvmtypes.StakingMsg{ + Delegate: &wasmvmtypes.DelegateMsg{ + Validator: addr2.String(), + Amount: wasmvmtypes.NewCoin(777, "stake"), + }, + }, + }, + isError: false, // fails in the handler + output: []sdk.Msg{ + &stakingtypes.MsgDelegate{ + DelegatorAddress: addr1.String(), + ValidatorAddress: addr2.String(), + Amount: sdk.NewInt64Coin("stake", 777), + }, + }, + }, + "staking undelegate": { + sender: addr1, + srcMsg: wasmvmtypes.CosmosMsg{ + Staking: &wasmvmtypes.StakingMsg{ + Undelegate: &wasmvmtypes.UndelegateMsg{ + Validator: valAddr.String(), + Amount: wasmvmtypes.NewCoin(555, "stake"), + }, + }, + }, + output: []sdk.Msg{ + &stakingtypes.MsgUndelegate{ + DelegatorAddress: addr1.String(), + ValidatorAddress: valAddr.String(), + Amount: sdk.NewInt64Coin("stake", 555), + }, + }, + }, + "staking redelegate": { + sender: addr1, + srcMsg: wasmvmtypes.CosmosMsg{ + Staking: &wasmvmtypes.StakingMsg{ + Redelegate: &wasmvmtypes.RedelegateMsg{ + SrcValidator: valAddr.String(), + DstValidator: valAddr2.String(), + Amount: wasmvmtypes.NewCoin(222, "stake"), + }, + }, + }, + output: []sdk.Msg{ + &stakingtypes.MsgBeginRedelegate{ + DelegatorAddress: addr1.String(), + ValidatorSrcAddress: valAddr.String(), + ValidatorDstAddress: valAddr2.String(), + Amount: sdk.NewInt64Coin("stake", 222), + }, + }, + }, + "staking withdraw (implicit recipient)": { + sender: addr1, + srcMsg: wasmvmtypes.CosmosMsg{ + Staking: &wasmvmtypes.StakingMsg{ + Withdraw: &wasmvmtypes.WithdrawMsg{ + Validator: valAddr2.String(), + }, + }, + }, + output: []sdk.Msg{ + &distributiontypes.MsgSetWithdrawAddress{ + DelegatorAddress: addr1.String(), + WithdrawAddress: addr1.String(), + }, + &distributiontypes.MsgWithdrawDelegatorReward{ + DelegatorAddress: addr1.String(), + ValidatorAddress: valAddr2.String(), + }, + }, + }, + "staking withdraw (explicit recipient)": { + sender: addr1, + srcMsg: wasmvmtypes.CosmosMsg{ + Staking: &wasmvmtypes.StakingMsg{ + Withdraw: &wasmvmtypes.WithdrawMsg{ + Validator: valAddr2.String(), + Recipient: addr2.String(), + }, + }, + }, + output: []sdk.Msg{ + &distributiontypes.MsgSetWithdrawAddress{ + DelegatorAddress: addr1.String(), + WithdrawAddress: addr2.String(), + }, + &distributiontypes.MsgWithdrawDelegatorReward{ + DelegatorAddress: addr1.String(), + ValidatorAddress: valAddr2.String(), + }, + }, + }, + "stargate encoded bank msg": { + sender: addr2, + srcMsg: wasmvmtypes.CosmosMsg{ + Stargate: &wasmvmtypes.StargateMsg{ + TypeURL: "/cosmos.bank.v1beta1.MsgSend", + Value: bankMsgBin, + }, + }, + output: []sdk.Msg{bankMsg}, + }, + "stargate encoded msg with any type": { + sender: addr2, + srcMsg: wasmvmtypes.CosmosMsg{ + Stargate: &wasmvmtypes.StargateMsg{ + TypeURL: "/cosmos.gov.v1beta1.MsgSubmitProposal", + Value: proposalMsgBin, + }, + }, + output: []sdk.Msg{proposalMsg}, + }, + "stargate encoded invalid typeUrl": { + sender: addr2, + srcMsg: wasmvmtypes.CosmosMsg{ + Stargate: &wasmvmtypes.StargateMsg{ + TypeURL: "/cosmos.bank.v2.MsgSend", + Value: bankMsgBin, + }, + }, + isError: true, + }, + "IBC transfer with block timeout": { + sender: addr1, + srcIBCPort: "myIBCPort", + srcMsg: wasmvmtypes.CosmosMsg{ + IBC: &wasmvmtypes.IBCMsg{ + Transfer: &wasmvmtypes.TransferMsg{ + ChannelID: "myChanID", + ToAddress: addr2.String(), + Amount: wasmvmtypes.Coin{ + Denom: "ALX", + Amount: "1", + }, + TimeoutBlock: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, + }, + }, + }, + output: []sdk.Msg{ + &ibctransfertypes.MsgTransfer{ + SourcePort: "transfer", + SourceChannel: "myChanID", + Token: sdk.Coin{ + Denom: "ALX", + Amount: sdk.NewInt(1), + }, + Sender: addr1.String(), + Receiver: addr2.String(), + TimeoutHeight: clienttypes.Height{RevisionNumber: 1, RevisionHeight: 2}, + }, + }, + }, + "IBC transfer with time timeout": { + sender: addr1, + srcIBCPort: "myIBCPort", + srcMsg: wasmvmtypes.CosmosMsg{ + IBC: &wasmvmtypes.IBCMsg{ + Transfer: &wasmvmtypes.TransferMsg{ + ChannelID: "myChanID", + ToAddress: addr2.String(), + Amount: wasmvmtypes.Coin{ + Denom: "ALX", + Amount: "1", + }, + TimeoutTimestamp: &timeoutVal, + }, + }, + }, + output: []sdk.Msg{ + &ibctransfertypes.MsgTransfer{ + SourcePort: "transfer", + SourceChannel: "myChanID", + Token: sdk.Coin{ + Denom: "ALX", + Amount: sdk.NewInt(1), + }, + Sender: addr1.String(), + Receiver: addr2.String(), + TimeoutTimestamp: 100, + }, + }, + }, + "IBC close channel": { + sender: addr1, + srcIBCPort: "myIBCPort", + srcMsg: wasmvmtypes.CosmosMsg{ + IBC: &wasmvmtypes.IBCMsg{ + CloseChannel: &wasmvmtypes.CloseChannelMsg{ + ChannelID: "channel-1", + }, + }, + }, + output: []sdk.Msg{ + &channeltypes.MsgChannelCloseInit{ + PortId: "wasm." + addr1.String(), + ChannelId: "channel-1", + Signer: addr1.String(), + }, + }, + }, + } + encodingConfig := MakeEncodingConfig(t) + encoder := DefaultEncoders(encodingConfig.Marshaler) + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + var ctx sdk.Context + res, err := encoder.Encode(ctx, tc.sender, tc.srcIBCPort, tc.srcMsg) + if tc.isError { + require.Error(t, err) + } else { + require.NoError(t, err) + assert.Equal(t, tc.output, res) + } + }) + } +} diff --git a/x/wasm/internal/keeper/handler_plugin_test.go b/x/wasm/internal/keeper/handler_plugin_test.go index aed42ffcaa..f28be41ade 100644 --- a/x/wasm/internal/keeper/handler_plugin_test.go +++ b/x/wasm/internal/keeper/handler_plugin_test.go @@ -3,456 +3,247 @@ package keeper import ( "encoding/json" "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/CosmWasm/wasmd/x/wasm/internal/types" + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + "github.com/cosmos/cosmos-sdk/baseapp" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" ibcexported "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" - "github.com/golang/protobuf/proto" - "testing" - - "github.com/CosmWasm/wasmd/x/wasm/internal/types" - wasmvmtypes "github.com/CosmWasm/wasmvm/types" - sdk "github.com/cosmos/cosmos-sdk/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "testing" ) -func TestEncoding(t *testing.T) { - addr1 := RandomAccountAddress(t) - addr2 := RandomAccountAddress(t) - invalidAddr := "xrnd1d02kd90n38qvr3qb9qof83fn2d2" - valAddr := make(sdk.ValAddress, sdk.AddrLen) - valAddr[0] = 12 - valAddr2 := make(sdk.ValAddress, sdk.AddrLen) - valAddr2[1] = 123 - var timeoutVal uint64 = 100 - - jsonMsg := json.RawMessage(`{"foo": 123}`) - - bankMsg := &banktypes.MsgSend{ - FromAddress: addr2.String(), - ToAddress: addr1.String(), - Amount: sdk.Coins{ - sdk.NewInt64Coin("uatom", 12345), - sdk.NewInt64Coin("utgd", 54321), - }, - } - bankMsgBin, err := proto.Marshal(bankMsg) - require.NoError(t, err) +func TestMessageHandlerChainDispatch(t *testing.T) { + capturingHandler, gotMsgs := wasmtesting.NewCapturingMessageHandler() - content, err := codectypes.NewAnyWithValue(types.StoreCodeProposalFixture()) - require.NoError(t, err) + alwaysUnknownMsgHandler := &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + return nil, nil, types.ErrUnknownMsg + }} - proposalMsg := &govtypes.MsgSubmitProposal{ - Proposer: addr1.String(), - InitialDeposit: sdk.NewCoins(sdk.NewInt64Coin("uatom", 12345)), - Content: content, - } - proposalMsgBin, err := proto.Marshal(proposalMsg) - require.NoError(t, err) + assertNotCalledHandler := &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + t.Fatal("not expected to be called") + return + }} - cases := map[string]struct { - sender sdk.AccAddress - srcMsg wasmvmtypes.CosmosMsg - srcIBCPort string - // set if valid - output []sdk.Msg - // set if invalid - isError bool + myMsg := wasmvmtypes.CosmosMsg{Custom: []byte(`{}`)} + specs := map[string]struct { + handlers []messenger + expErr *sdkerrors.Error + expEvents []sdk.Event }{ - "simple send": { - sender: addr1, - srcMsg: wasmvmtypes.CosmosMsg{ - Bank: &wasmvmtypes.BankMsg{ - Send: &wasmvmtypes.SendMsg{ - ToAddress: addr2.String(), - Amount: []wasmvmtypes.Coin{ - { - Denom: "uatom", - Amount: "12345", - }, - { - Denom: "usdt", - Amount: "54321", - }, - }, - }, - }, - }, - output: []sdk.Msg{ - &banktypes.MsgSend{ - FromAddress: addr1.String(), - ToAddress: addr2.String(), - Amount: sdk.Coins{ - sdk.NewInt64Coin("uatom", 12345), - sdk.NewInt64Coin("usdt", 54321), - }, - }, - }, + "single handler": { + handlers: []messenger{capturingHandler}, }, - "invalid send amount": { - sender: addr1, - srcMsg: wasmvmtypes.CosmosMsg{ - Bank: &wasmvmtypes.BankMsg{ - Send: &wasmvmtypes.SendMsg{ - ToAddress: addr2.String(), - Amount: []wasmvmtypes.Coin{ - { - Denom: "uatom", - Amount: "123.456", - }, - }, - }, - }, - }, - isError: true, + "passed to next handler": { + handlers: []messenger{alwaysUnknownMsgHandler, capturingHandler}, }, - "invalid address": { - sender: addr1, - srcMsg: wasmvmtypes.CosmosMsg{ - Bank: &wasmvmtypes.BankMsg{ - Send: &wasmvmtypes.SendMsg{ - ToAddress: invalidAddr, - Amount: []wasmvmtypes.Coin{ - { - Denom: "uatom", - Amount: "7890", - }, - }, - }, - }, - }, - isError: false, // addresses are checked in the handler - output: []sdk.Msg{ - &banktypes.MsgSend{ - FromAddress: addr1.String(), - ToAddress: invalidAddr, - Amount: sdk.Coins{ - sdk.NewInt64Coin("uatom", 7890), - }, - }, - }, + "stops iteration when handled": { + handlers: []messenger{capturingHandler, assertNotCalledHandler}, }, - "wasm execute": { - sender: addr1, - srcMsg: wasmvmtypes.CosmosMsg{ - Wasm: &wasmvmtypes.WasmMsg{ - Execute: &wasmvmtypes.ExecuteMsg{ - ContractAddr: addr2.String(), - Msg: jsonMsg, - Send: []wasmvmtypes.Coin{ - wasmvmtypes.NewCoin(12, "eth"), - }, - }, - }, - }, - output: []sdk.Msg{ - &types.MsgExecuteContract{ - Sender: addr1.String(), - Contract: addr2.String(), - Msg: jsonMsg, - Funds: sdk.NewCoins(sdk.NewInt64Coin("eth", 12)), - }, - }, + "stops iteration on handler error": { + handlers: []messenger{&wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + return nil, nil, types.ErrInvalidMsg + }}, assertNotCalledHandler}, + expErr: types.ErrInvalidMsg, }, - "wasm instantiate": { - sender: addr1, - srcMsg: wasmvmtypes.CosmosMsg{ - Wasm: &wasmvmtypes.WasmMsg{ - Instantiate: &wasmvmtypes.InstantiateMsg{ - CodeID: 7, - Msg: jsonMsg, - Send: []wasmvmtypes.Coin{ - wasmvmtypes.NewCoin(123, "eth"), - }, - Label: "myLabel", - }, - }, - }, - output: []sdk.Msg{ - &types.MsgInstantiateContract{ - Sender: addr1.String(), - CodeID: 7, - Label: "myLabel", - InitMsg: jsonMsg, - Funds: sdk.NewCoins(sdk.NewInt64Coin("eth", 123)), - }, - }, + "return events when handle": { + handlers: []messenger{&wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + _, data, _ = capturingHandler.DispatchMsg(ctx, contractAddr, contractIBCPortID, msg) + return []sdk.Event{sdk.NewEvent("myEvent", sdk.NewAttribute("foo", "bar"))}, data, nil + }}, + }, + expEvents: []sdk.Event{sdk.NewEvent("myEvent", sdk.NewAttribute("foo", "bar"))}, }, - "wasm migrate": { - sender: addr2, - srcMsg: wasmvmtypes.CosmosMsg{ - Wasm: &wasmvmtypes.WasmMsg{ - Migrate: &wasmvmtypes.MigrateMsg{ - ContractAddr: addr1.String(), - NewCodeID: 12, - Msg: jsonMsg, - }, - }, - }, - output: []sdk.Msg{ - &types.MsgMigrateContract{ - Sender: addr2.String(), - Contract: addr1.String(), - CodeID: 12, - MigrateMsg: jsonMsg, - }, - }, + "return error when none can handle": { + handlers: []messenger{alwaysUnknownMsgHandler}, + expErr: types.ErrUnknownMsg, }, - "staking delegate": { - sender: addr1, - srcMsg: wasmvmtypes.CosmosMsg{ - Staking: &wasmvmtypes.StakingMsg{ - Delegate: &wasmvmtypes.DelegateMsg{ - Validator: valAddr.String(), - Amount: wasmvmtypes.NewCoin(777, "stake"), - }, - }, - }, - output: []sdk.Msg{ - &stakingtypes.MsgDelegate{ - DelegatorAddress: addr1.String(), - ValidatorAddress: valAddr.String(), - Amount: sdk.NewInt64Coin("stake", 777), - }, - }, - }, - "staking delegate to non-validator": { - sender: addr1, - srcMsg: wasmvmtypes.CosmosMsg{ - Staking: &wasmvmtypes.StakingMsg{ - Delegate: &wasmvmtypes.DelegateMsg{ - Validator: addr2.String(), - Amount: wasmvmtypes.NewCoin(777, "stake"), - }, - }, - }, - isError: false, // fails in the handler - output: []sdk.Msg{ - &stakingtypes.MsgDelegate{ - DelegatorAddress: addr1.String(), - ValidatorAddress: addr2.String(), - Amount: sdk.NewInt64Coin("stake", 777), - }, - }, - }, - "staking undelegate": { - sender: addr1, - srcMsg: wasmvmtypes.CosmosMsg{ - Staking: &wasmvmtypes.StakingMsg{ - Undelegate: &wasmvmtypes.UndelegateMsg{ - Validator: valAddr.String(), - Amount: wasmvmtypes.NewCoin(555, "stake"), - }, - }, - }, - output: []sdk.Msg{ - &stakingtypes.MsgUndelegate{ - DelegatorAddress: addr1.String(), - ValidatorAddress: valAddr.String(), - Amount: sdk.NewInt64Coin("stake", 555), - }, - }, - }, - "staking redelegate": { - sender: addr1, - srcMsg: wasmvmtypes.CosmosMsg{ - Staking: &wasmvmtypes.StakingMsg{ - Redelegate: &wasmvmtypes.RedelegateMsg{ - SrcValidator: valAddr.String(), - DstValidator: valAddr2.String(), - Amount: wasmvmtypes.NewCoin(222, "stake"), - }, - }, - }, - output: []sdk.Msg{ - &stakingtypes.MsgBeginRedelegate{ - DelegatorAddress: addr1.String(), - ValidatorSrcAddress: valAddr.String(), - ValidatorDstAddress: valAddr2.String(), - Amount: sdk.NewInt64Coin("stake", 222), - }, - }, - }, - "staking withdraw (implicit recipient)": { - sender: addr1, - srcMsg: wasmvmtypes.CosmosMsg{ - Staking: &wasmvmtypes.StakingMsg{ - Withdraw: &wasmvmtypes.WithdrawMsg{ - Validator: valAddr2.String(), - }, - }, - }, - output: []sdk.Msg{ - &distributiontypes.MsgSetWithdrawAddress{ - DelegatorAddress: addr1.String(), - WithdrawAddress: addr1.String(), - }, - &distributiontypes.MsgWithdrawDelegatorReward{ - DelegatorAddress: addr1.String(), - ValidatorAddress: valAddr2.String(), - }, - }, - }, - "staking withdraw (explicit recipient)": { - sender: addr1, - srcMsg: wasmvmtypes.CosmosMsg{ - Staking: &wasmvmtypes.StakingMsg{ - Withdraw: &wasmvmtypes.WithdrawMsg{ - Validator: valAddr2.String(), - Recipient: addr2.String(), - }, - }, - }, - output: []sdk.Msg{ - &distributiontypes.MsgSetWithdrawAddress{ - DelegatorAddress: addr1.String(), - WithdrawAddress: addr2.String(), - }, - &distributiontypes.MsgWithdrawDelegatorReward{ - DelegatorAddress: addr1.String(), - ValidatorAddress: valAddr2.String(), - }, - }, - }, - "stargate encoded bank msg": { - sender: addr2, - srcMsg: wasmvmtypes.CosmosMsg{ - Stargate: &wasmvmtypes.StargateMsg{ - TypeURL: "/cosmos.bank.v1beta1.MsgSend", - Value: bankMsgBin, - }, - }, - output: []sdk.Msg{bankMsg}, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + *gotMsgs = make([]wasmvmtypes.CosmosMsg, 0) + + // when + h := MessageHandlerChain{spec.handlers} + gotEvents, gotData, gotErr := h.DispatchMsg(sdk.Context{}, RandomAccountAddress(t), "anyPort", myMsg) + + // then + require.True(t, spec.expErr.Is(gotErr), "exp %v but got %#+v", spec.expErr, gotErr) + if spec.expErr != nil { + return + } + assert.Equal(t, []wasmvmtypes.CosmosMsg{myMsg}, *gotMsgs) + assert.Equal(t, [][]byte{{1}}, gotData) // {1} is default in capturing handler + assert.Equal(t, spec.expEvents, gotEvents) + }) + } +} + +func TestSDKMessageHandlerDispatch(t *testing.T) { + myEvent := sdk.NewEvent("myEvent", sdk.NewAttribute("foo", "bar")) + const myData = "myData" + myRouterResult := sdk.Result{ + Data: []byte(myData), + Events: sdk.Events{myEvent}.ToABCIEvents(), + } + + var gotMsg []sdk.Msg + capturingRouteFn := func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { + gotMsg = append(gotMsg, msg) + return &myRouterResult, nil + } + + myContractAddr := RandomAccountAddress(t) + myContractMessage := wasmvmtypes.CosmosMsg{Custom: []byte("{}")} + + specs := map[string]struct { + srcRoute sdk.Route + srcEncoder CustomEncoder + expErr *sdkerrors.Error + expMsgDispatched int + }{ + "all good": { + srcRoute: sdk.NewRoute(types.RouterKey, capturingRouteFn), + srcEncoder: func(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) { + myMsg := types.MsgExecuteContract{ + Sender: myContractAddr.String(), + Contract: RandomBech32AccountAddress(t), + Msg: []byte("{}"), + } + return []sdk.Msg{&myMsg}, nil + }, + expMsgDispatched: 1, }, - "stargate encoded msg with any type": { - sender: addr2, - srcMsg: wasmvmtypes.CosmosMsg{ - Stargate: &wasmvmtypes.StargateMsg{ - TypeURL: "/cosmos.gov.v1beta1.MsgSubmitProposal", - Value: proposalMsgBin, - }, - }, - output: []sdk.Msg{proposalMsg}, + "multiple output msgs": { + srcRoute: sdk.NewRoute(types.RouterKey, capturingRouteFn), + srcEncoder: func(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) { + first := &types.MsgExecuteContract{ + Sender: myContractAddr.String(), + Contract: RandomBech32AccountAddress(t), + Msg: []byte("{}"), + } + second := &types.MsgExecuteContract{ + Sender: myContractAddr.String(), + Contract: RandomBech32AccountAddress(t), + Msg: []byte("{}"), + } + return []sdk.Msg{first, second}, nil + }, + expMsgDispatched: 2, }, - "stargate encoded invalid typeUrl": { - sender: addr2, - srcMsg: wasmvmtypes.CosmosMsg{ - Stargate: &wasmvmtypes.StargateMsg{ - TypeURL: "/cosmos.bank.v2.MsgSend", - Value: bankMsgBin, - }, - }, - isError: true, + "invalid sdk message rejected": { + srcRoute: sdk.NewRoute(types.RouterKey, capturingRouteFn), + srcEncoder: func(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) { + invalidMsg := types.MsgExecuteContract{ + Sender: myContractAddr.String(), + Contract: RandomBech32AccountAddress(t), + Msg: []byte("INVALID_JSON"), + } + return []sdk.Msg{&invalidMsg}, nil + }, + expErr: types.ErrInvalid, }, - "IBC transfer with block timeout": { - sender: addr1, - srcIBCPort: "myIBCPort", - srcMsg: wasmvmtypes.CosmosMsg{ - IBC: &wasmvmtypes.IBCMsg{ - Transfer: &wasmvmtypes.TransferMsg{ - ChannelID: "myChanID", - ToAddress: addr2.String(), - Amount: wasmvmtypes.Coin{ - Denom: "ALX", - Amount: "1", - }, - TimeoutBlock: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, - }, - }, - }, - output: []sdk.Msg{ - &ibctransfertypes.MsgTransfer{ - SourcePort: "transfer", - SourceChannel: "myChanID", - Token: sdk.Coin{ - Denom: "ALX", - Amount: sdk.NewInt(1), - }, - Sender: addr1.String(), - Receiver: addr2.String(), - TimeoutHeight: clienttypes.Height{RevisionNumber: 1, RevisionHeight: 2}, - }, - }, + "invalid sender rejected": { + srcRoute: sdk.NewRoute(types.RouterKey, capturingRouteFn), + srcEncoder: func(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) { + invalidMsg := types.MsgExecuteContract{ + Sender: RandomBech32AccountAddress(t), + Contract: RandomBech32AccountAddress(t), + Msg: []byte("{}"), + } + return []sdk.Msg{&invalidMsg}, nil + }, + expErr: sdkerrors.ErrUnauthorized, }, - "IBC transfer with time timeout": { - sender: addr1, - srcIBCPort: "myIBCPort", - srcMsg: wasmvmtypes.CosmosMsg{ - IBC: &wasmvmtypes.IBCMsg{ - Transfer: &wasmvmtypes.TransferMsg{ - ChannelID: "myChanID", - ToAddress: addr2.String(), - Amount: wasmvmtypes.Coin{ - Denom: "ALX", - Amount: "1", - }, - TimeoutTimestamp: &timeoutVal, - }, - }, - }, - output: []sdk.Msg{ - &ibctransfertypes.MsgTransfer{ - SourcePort: "transfer", - SourceChannel: "myChanID", - Token: sdk.Coin{ - Denom: "ALX", - Amount: sdk.NewInt(1), - }, - Sender: addr1.String(), - Receiver: addr2.String(), - TimeoutTimestamp: 100, - }, - }, + "unroutable message rejected": { + srcRoute: sdk.NewRoute("nothing", capturingRouteFn), + srcEncoder: func(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) { + myMsg := types.MsgExecuteContract{ + Sender: myContractAddr.String(), + Contract: RandomBech32AccountAddress(t), + Msg: []byte("{}"), + } + return []sdk.Msg{&myMsg}, nil + }, + expErr: sdkerrors.ErrUnknownRequest, }, - "IBC close channel": { - sender: addr1, - srcIBCPort: "myIBCPort", - srcMsg: wasmvmtypes.CosmosMsg{ - IBC: &wasmvmtypes.IBCMsg{ - CloseChannel: &wasmvmtypes.CloseChannelMsg{ - ChannelID: "channel-1", - }, - }, - }, - output: []sdk.Msg{ - &channeltypes.MsgChannelCloseInit{ - PortId: "wasm." + addr1.String(), - ChannelId: "channel-1", - Signer: addr1.String(), - }, + "encoding error passed": { + srcRoute: sdk.NewRoute("nothing", capturingRouteFn), + srcEncoder: func(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) { + myErr := types.ErrUnpinContractFailed + return nil, myErr }, + expErr: types.ErrUnpinContractFailed, }, } - encodingConfig := MakeEncodingConfig(t) - encoder := DefaultEncoders(nil, nil, encodingConfig.Marshaler) - for name, tc := range cases { - tc := tc + for name, spec := range specs { t.Run(name, func(t *testing.T) { - var ctx sdk.Context - res, err := encoder.Encode(ctx, tc.sender, tc.srcIBCPort, tc.srcMsg) - if tc.isError { - require.Error(t, err) - } else { - require.NoError(t, err) - assert.Equal(t, tc.output, res) + gotMsg = make([]sdk.Msg, 0) + router := baseapp.NewRouter() + router.AddRoute(spec.srcRoute) + + // when + ctx := sdk.Context{} + h := NewSDKMessageHandler(router, MessageEncoders{Custom: spec.srcEncoder}) + gotEvents, gotData, gotErr := h.DispatchMsg(ctx, myContractAddr, "myPort", myContractMessage) + + // then + require.True(t, spec.expErr.Is(gotErr), "exp %v but got %#+v", spec.expErr, gotErr) + if spec.expErr != nil { + require.Len(t, gotMsg, 0) + return + } + assert.Len(t, gotMsg, spec.expMsgDispatched) + for i := 0; i < spec.expMsgDispatched; i++ { + assert.Equal(t, myEvent, gotEvents[i]) + assert.Equal(t, []byte(myData), gotData[i]) } }) } } -func TestEncodeIBCSendPacket(t *testing.T) { +func TestIBCRawPacketHandler(t *testing.T) { ibcPort := "contractsIBCPort" var ctx sdk.Context + + var capturedPacket ibcexported.PacketI + + chanKeeper := &wasmtesting.MockChannelKeeper{ + GetNextSequenceSendFn: func(ctx sdk.Context, portID, channelID string) (uint64, bool) { + return 1, true + }, + GetChannelFn: func(ctx sdk.Context, srcPort, srcChan string) (channeltypes.Channel, bool) { + return channeltypes.Channel{ + Counterparty: channeltypes.NewCounterparty( + "other-port", + "other-channel-1", + )}, true + }, + SendPacketFn: func(ctx sdk.Context, channelCap *capabilitytypes.Capability, packet ibcexported.PacketI) error { + capturedPacket = packet + return nil + }, + } + capKeeper := &wasmtesting.MockCapabilityKeeper{ + GetCapabilityFn: func(ctx sdk.Context, name string) (*capabilitytypes.Capability, bool) { + return &capabilitytypes.Capability{}, true + }, + } + specs := map[string]struct { srcMsg wasmvmtypes.SendPacketMsg + chanKeeper types.ChannelKeeper + capKeeper types.CapabilityKeeper expPacketSent channeltypes.Packet + expErr *sdkerrors.Error }{ "all good": { srcMsg: wasmvmtypes.SendPacketMsg{ @@ -460,6 +251,8 @@ func TestEncodeIBCSendPacket(t *testing.T) { Data: []byte("myData"), TimeoutBlock: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, }, + chanKeeper: chanKeeper, + capKeeper: capKeeper, expPacketSent: channeltypes.Packet{ Sequence: 1, SourcePort: ibcPort, @@ -470,38 +263,46 @@ func TestEncodeIBCSendPacket(t *testing.T) { TimeoutHeight: clienttypes.Height{RevisionNumber: 1, RevisionHeight: 2}, }, }, + "sequence not found returns error": { + srcMsg: wasmvmtypes.SendPacketMsg{ + ChannelID: "channel-1", + Data: []byte("myData"), + TimeoutBlock: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, + }, + chanKeeper: &wasmtesting.MockChannelKeeper{ + GetNextSequenceSendFn: func(ctx sdk.Context, portID, channelID string) (uint64, bool) { + return 0, false + }}, + expErr: channeltypes.ErrSequenceSendNotFound, + }, + "capability not found returns error": { + srcMsg: wasmvmtypes.SendPacketMsg{ + ChannelID: "channel-1", + Data: []byte("myData"), + TimeoutBlock: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, + }, + chanKeeper: chanKeeper, + capKeeper: wasmtesting.MockCapabilityKeeper{ + GetCapabilityFn: func(ctx sdk.Context, name string) (*capabilitytypes.Capability, bool) { + return nil, false + }}, + expErr: channeltypes.ErrChannelCapabilityNotFound, + }, } for name, spec := range specs { t.Run(name, func(t *testing.T) { - var gotPacket ibcexported.PacketI - - var chanKeeper types.ChannelKeeper = &wasmtesting.MockChannelKeeper{ - GetNextSequenceSendFn: func(ctx sdk.Context, portID, channelID string) (uint64, bool) { - return 1, true - }, - GetChannelFn: func(ctx sdk.Context, srcPort, srcChan string) (channeltypes.Channel, bool) { - return channeltypes.Channel{ - Counterparty: channeltypes.NewCounterparty( - "other-port", - "other-channel-1", - )}, true - }, - SendPacketFn: func(ctx sdk.Context, channelCap *capabilitytypes.Capability, packet ibcexported.PacketI) error { - gotPacket = packet - return nil - }, + capturedPacket = nil + // when + h := NewIBCRawPacketHandler(spec.chanKeeper, spec.capKeeper) + data, evts, gotErr := h.DispatchMsg(ctx, RandomAccountAddress(t), ibcPort, wasmvmtypes.CosmosMsg{IBC: &wasmvmtypes.IBCMsg{SendPacket: &spec.srcMsg}}) + // then + require.True(t, spec.expErr.Is(gotErr), "exp %v but got %#+v", spec.expErr, gotErr) + if spec.expErr != nil { + return } - var capKeeper types.CapabilityKeeper = &wasmtesting.MockCapabilityKeeper{ - GetCapabilityFn: func(ctx sdk.Context, name string) (*capabilitytypes.Capability, bool) { - return &capabilitytypes.Capability{}, true - }, - } - sender := RandomAccountAddress(t) - res, err := EncodeIBCMsg(chanKeeper, capKeeper)(ctx, sender, ibcPort, &wasmvmtypes.IBCMsg{SendPacket: &spec.srcMsg}) - - require.NoError(t, err) - assert.Nil(t, res) - assert.Equal(t, spec.expPacketSent, gotPacket) + assert.Nil(t, data) + assert.Nil(t, evts) + assert.Equal(t, spec.expPacketSent, capturedPacket) }) } } diff --git a/x/wasm/internal/keeper/ibc_test.go b/x/wasm/internal/keeper/ibc_test.go index 45519f6123..fc94f7ecac 100644 --- a/x/wasm/internal/keeper/ibc_test.go +++ b/x/wasm/internal/keeper/ibc_test.go @@ -10,14 +10,14 @@ import ( ) func TestDontBindPortNonIBCContract(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) example := InstantiateHackatomExampleContract(t, ctx, keepers) // ensure we bound the port _, _, err := keepers.IBCKeeper.PortKeeper.LookupModuleByPort(ctx, keepers.WasmKeeper.GetContractInfo(ctx, example.Contract).IBCPortID) require.Error(t, err) } func TestBindingPortForIBCContractOnInstantiate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) example := InstantiateIBCReflectContract(t, ctx, keepers) // ensure we bound the port owner, _, err := keepers.IBCKeeper.PortKeeper.LookupModuleByPort(ctx, keepers.WasmKeeper.GetContractInfo(ctx, example.Contract).IBCPortID) require.NoError(t, err) diff --git a/x/wasm/internal/keeper/keeper.go b/x/wasm/internal/keeper/keeper.go index 8b5b44611c..e8cfad3731 100644 --- a/x/wasm/internal/keeper/keeper.go +++ b/x/wasm/internal/keeper/keeper.go @@ -49,7 +49,15 @@ type Option interface { apply(*Keeper) } +// WasmVMQueryHandler is an extension point for custom query handler implementations +type wasmVMQueryHandler interface { + // HandleQuery executes the requested query + HandleQuery(ctx sdk.Context, caller sdk.AccAddress, request wasmvmtypes.QueryRequest) ([]byte, error) +} + +// messenger is an extension point for custom wasmVM message handling type messenger interface { + // DispatchMsg encodes the wasmVM message and dispatches it. DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) } @@ -60,17 +68,16 @@ type coinTransferrer interface { // Keeper will have a reference to Wasmer with it's own data directory. type Keeper struct { - storeKey sdk.StoreKey - cdc codec.Marshaler - accountKeeper types.AccountKeeper - bank coinTransferrer - ChannelKeeper types.ChannelKeeper - portKeeper types.PortKeeper - capabilityKeeper types.CapabilityKeeper - - wasmer types.WasmerEngine - queryPlugins QueryPlugins - messenger messenger + storeKey sdk.StoreKey + cdc codec.Marshaler + accountKeeper types.AccountKeeper + bank coinTransferrer + ChannelKeeper types.ChannelKeeper + portKeeper types.PortKeeper + capabilityKeeper types.CapabilityKeeper + wasmVM types.WasmerEngine + wasmVMQueryHandler wasmVMQueryHandler + messenger messenger // queryGasLimit is the max wasmvm gas that can be spent on executing a query with a contract queryGasLimit uint64 authZPolicy AuthorizationPolicy @@ -95,8 +102,6 @@ func NewKeeper( homeDir string, wasmConfig types.WasmConfig, supportedFeatures string, - customEncoders *MessageEncoders, - customPlugins *QueryPlugins, opts ...Option, ) Keeper { wasmer, err := wasmvm.NewVM(filepath.Join(homeDir, "wasm"), supportedFeatures, contractMemoryLimit, wasmConfig.ContractDebugMode, wasmConfig.MemoryCacheSize) @@ -111,18 +116,18 @@ func NewKeeper( keeper := Keeper{ storeKey: storeKey, cdc: cdc, - wasmer: wasmer, + wasmVM: wasmer, accountKeeper: accountKeeper, bank: NewBankCoinTransferrer(bankKeeper), ChannelKeeper: channelKeeper, portKeeper: portKeeper, capabilityKeeper: capabilityKeeper, - messenger: NewDefaultMessageHandler(router, channelKeeper, capabilityKeeper, cdc, customEncoders), + messenger: NewDefaultMessageHandler(router, channelKeeper, capabilityKeeper, cdc), queryGasLimit: wasmConfig.SmartQueryGasLimit, authZPolicy: DefaultAuthorizationPolicy{}, paramSpace: paramSpace, } - keeper.queryPlugins = DefaultQueryPlugins(bankKeeper, stakingKeeper, distKeeper, channelKeeper, queryRouter, &keeper).Merge(customPlugins) + keeper.wasmVMQueryHandler = DefaultQueryPlugins(bankKeeper, stakingKeeper, distKeeper, channelKeeper, queryRouter, &keeper) for _, o := range opts { o.apply(&keeper) } @@ -173,7 +178,7 @@ func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, } ctx.GasMeter().ConsumeGas(CompileCost*uint64(len(wasmCode)), "Compiling WASM Bytecode") - codeHash, err := k.wasmer.Create(wasmCode) + codeHash, err := k.wasmVM.Create(wasmCode) if err != nil { return 0, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) } @@ -198,7 +203,7 @@ func (k Keeper) importCode(ctx sdk.Context, codeID uint64, codeInfo types.CodeIn if err != nil { return sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) } - newCodeHash, err := k.wasmer.Create(wasmCode) + newCodeHash, err := k.wasmVM.Create(wasmCode) if err != nil { return sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) } @@ -269,11 +274,11 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey) // prepare querier - querier := NewQueryHandler(ctx, k.queryPlugins, contractAddress) + querier := NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddress) // instantiate wasm contract gas := gasForContract(ctx) - res, gasUsed, err := k.wasmer.Instantiate(codeInfo.CodeHash, env, info, initMsg, prefixStore, cosmwasmAPI, querier, gasMeter(ctx), gas) + res, gasUsed, err := k.wasmVM.Instantiate(codeInfo.CodeHash, env, info, initMsg, prefixStore, cosmwasmAPI, querier, gasMeter(ctx), gas) consumeGas(ctx, gasUsed) if err != nil { return contractAddress, nil, sdkerrors.Wrap(types.ErrInstantiateFailed, err.Error()) @@ -288,7 +293,7 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A contractInfo := types.NewContractInfo(codeID, creator, admin, label, createdAt) // check for IBC flag - report, err := k.wasmer.AnalyzeCode(codeInfo.CodeHash) + report, err := k.wasmVM.AnalyzeCode(codeInfo.CodeHash) if err != nil { return contractAddress, nil, sdkerrors.Wrap(types.ErrInstantiateFailed, err.Error()) } @@ -336,9 +341,9 @@ func (k Keeper) Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller info := types.NewInfo(caller, coins) // prepare querier - querier := NewQueryHandler(ctx, k.queryPlugins, contractAddress) + querier := NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddress) gas := gasForContract(ctx) - res, gasUsed, execErr := k.wasmer.Execute(codeInfo.CodeHash, env, info, msg, prefixStore, cosmwasmAPI, querier, gasMeter(ctx), gas) + res, gasUsed, execErr := k.wasmVM.Execute(codeInfo.CodeHash, env, info, msg, prefixStore, cosmwasmAPI, querier, gasMeter(ctx), gas) consumeGas(ctx, gasUsed) if execErr != nil { return nil, sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) @@ -383,7 +388,7 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller } // check for IBC flag - switch report, err := k.wasmer.AnalyzeCode(newCodeInfo.CodeHash); { + switch report, err := k.wasmVM.AnalyzeCode(newCodeInfo.CodeHash); { case err != nil: return nil, sdkerrors.Wrap(types.ErrMigrationFailed, err.Error()) case !report.HasIBCEntryPoints && contractInfo.IBCPortID != "": @@ -401,12 +406,12 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller env := types.NewEnv(ctx, contractAddress) // prepare querier - querier := NewQueryHandler(ctx, k.queryPlugins, contractAddress) + querier := NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddress) prefixStoreKey := types.GetContractStorePrefix(contractAddress) prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey) gas := gasForContract(ctx) - res, gasUsed, err := k.wasmer.Migrate(newCodeInfo.CodeHash, env, msg, &prefixStore, cosmwasmAPI, &querier, gasMeter(ctx), gas) + res, gasUsed, err := k.wasmVM.Migrate(newCodeInfo.CodeHash, env, msg, &prefixStore, cosmwasmAPI, &querier, gasMeter(ctx), gas) consumeGas(ctx, gasUsed) if err != nil { return nil, sdkerrors.Wrap(types.ErrMigrationFailed, err.Error()) @@ -450,9 +455,9 @@ func (k Keeper) Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte env := types.NewEnv(ctx, contractAddress) // prepare querier - querier := NewQueryHandler(ctx, k.queryPlugins, contractAddress) + querier := NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddress) gas := gasForContract(ctx) - res, gasUsed, execErr := k.wasmer.Sudo(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, gasMeter(ctx), gas) + res, gasUsed, execErr := k.wasmVM.Sudo(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, gasMeter(ctx), gas) consumeGas(ctx, gasUsed) if execErr != nil { return nil, sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) @@ -491,10 +496,10 @@ func (k Keeper) reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply was // prepare querier querier := QueryHandler{ Ctx: ctx, - Plugins: k.queryPlugins, + Plugins: k.wasmVMQueryHandler, } gas := gasForContract(ctx) - res, gasUsed, execErr := k.wasmer.Reply(codeInfo.CodeHash, env, reply, prefixStore, cosmwasmAPI, querier, gasMeter(ctx), gas) + res, gasUsed, execErr := k.wasmVM.Reply(codeInfo.CodeHash, env, reply, prefixStore, cosmwasmAPI, querier, gasMeter(ctx), gas) consumeGas(ctx, gasUsed) if execErr != nil { return nil, sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) @@ -581,10 +586,10 @@ func (k Keeper) QuerySmart(ctx sdk.Context, contractAddr sdk.AccAddress, req []b } // prepare querier - querier := NewQueryHandler(ctx, k.queryPlugins, contractAddr) + querier := NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddr) env := types.NewEnv(ctx, contractAddr) - queryResult, gasUsed, qErr := k.wasmer.Query(codeInfo.CodeHash, env, req, prefixStore, cosmwasmAPI, querier, gasMeter(ctx), gasForContract(ctx)) + queryResult, gasUsed, qErr := k.wasmVM.Query(codeInfo.CodeHash, env, req, prefixStore, cosmwasmAPI, querier, gasMeter(ctx), gasForContract(ctx)) consumeGas(ctx, gasUsed) if qErr != nil { return nil, sdkerrors.Wrap(types.ErrQueryFailed, qErr.Error()) @@ -716,7 +721,7 @@ func (k Keeper) GetByteCode(ctx sdk.Context, codeID uint64) ([]byte, error) { return nil, nil } k.cdc.MustUnmarshalBinaryBare(codeInfoBz, &codeInfo) - return k.wasmer.GetCode(codeInfo.CodeHash) + return k.wasmVM.GetCode(codeInfo.CodeHash) } // PinCode pins the wasm contract in wasmvm cache @@ -726,7 +731,7 @@ func (k Keeper) PinCode(ctx sdk.Context, codeID uint64) error { return sdkerrors.Wrap(types.ErrNotFound, "code info") } - if err := k.wasmer.Pin(codeInfo.CodeHash); err != nil { + if err := k.wasmVM.Pin(codeInfo.CodeHash); err != nil { return sdkerrors.Wrap(types.ErrPinContractFailed, err.Error()) } store := ctx.KVStore(k.storeKey) @@ -741,7 +746,7 @@ func (k Keeper) UnpinCode(ctx sdk.Context, codeID uint64) error { if codeInfo == nil { return sdkerrors.Wrap(types.ErrNotFound, "code info") } - if err := k.wasmer.Unpin(codeInfo.CodeHash); err != nil { + if err := k.wasmVM.Unpin(codeInfo.CodeHash); err != nil { return sdkerrors.Wrap(types.ErrUnpinContractFailed, err.Error()) } @@ -765,7 +770,7 @@ func (k Keeper) InitializePinnedCodes(ctx sdk.Context) error { if codeInfo == nil { return sdkerrors.Wrap(types.ErrNotFound, "code info") } - if err := k.wasmer.Pin(codeInfo.CodeHash); err != nil { + if err := k.wasmVM.Pin(codeInfo.CodeHash); err != nil { return sdkerrors.Wrap(types.ErrPinContractFailed, err.Error()) } } diff --git a/x/wasm/internal/keeper/keeper_test.go b/x/wasm/internal/keeper/keeper_test.go index 855ed4105a..11433229d7 100644 --- a/x/wasm/internal/keeper/keeper_test.go +++ b/x/wasm/internal/keeper/keeper_test.go @@ -25,12 +25,12 @@ import ( const SupportedFeatures = "staking,stargate" func TestNewKeeper(t *testing.T) { - _, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + _, keepers := CreateTestInput(t, false, SupportedFeatures) require.NotNil(t, keepers.WasmKeeper) } func TestCreate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -79,7 +79,7 @@ func TestCreateStoresInstantiatePermission(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper keeper.setParams(ctx, types.Params{ CodeUploadAccess: types.AllowEverybody, @@ -99,7 +99,7 @@ func TestCreateStoresInstantiatePermission(t *testing.T) { } func TestCreateWithParamPermissions(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -146,7 +146,7 @@ func TestCreateWithParamPermissions(t *testing.T) { } func TestCreateDuplicate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -175,7 +175,7 @@ func TestCreateDuplicate(t *testing.T) { } func TestCreateWithSimulation(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper ctx = ctx.WithBlockHeader(tmproto.Header{Height: 1}). @@ -193,7 +193,7 @@ func TestCreateWithSimulation(t *testing.T) { require.Equal(t, uint64(1), contractID) // then try to create it in non-simulation mode (should not fail) - ctx, keepers = CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers = CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper = keepers.AccountKeeper, keepers.WasmKeeper contractID, err = keeper.Create(ctx, creator, wasmCode, "https://github.com/CosmWasm/wasmd/blob/master/x/wasm/testdata/escrow.wasm", "any/builder:tag", nil) require.NoError(t, err) @@ -231,7 +231,7 @@ func TestIsSimulationMode(t *testing.T) { } func TestCreateWithGzippedPayload(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -252,7 +252,7 @@ func TestCreateWithGzippedPayload(t *testing.T) { } func TestInstantiate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -338,7 +338,7 @@ func TestInstantiateWithDeposit(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.WasmKeeper if spec.fundAddr { @@ -408,7 +408,7 @@ func TestInstantiateWithPermissions(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.WasmKeeper fundAccounts(t, ctx, accKeeper, bankKeeper, spec.srcActor, deposit) @@ -422,7 +422,7 @@ func TestInstantiateWithPermissions(t *testing.T) { } func TestInstantiateWithNonExistingCodeID(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -439,7 +439,7 @@ func TestInstantiateWithNonExistingCodeID(t *testing.T) { } func TestInstantiateWithContractDataResponse(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) wasmerMock := &wasmtesting.MockWasmer{ InstantiateFn: func(codeID wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64) (*wasmvmtypes.Response, uint64, error) { @@ -456,7 +456,7 @@ func TestInstantiateWithContractDataResponse(t *testing.T) { } func TestExecute(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -592,7 +592,7 @@ func TestExecuteWithDeposit(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.WasmKeeper if spec.newBankParams != nil { bankKeeper.SetParams(ctx, *spec.newBankParams) @@ -626,7 +626,7 @@ func TestExecuteWithDeposit(t *testing.T) { } func TestExecuteWithNonExistingAddress(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -639,7 +639,7 @@ func TestExecuteWithNonExistingAddress(t *testing.T) { } func TestExecuteWithPanic(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -673,7 +673,7 @@ func TestExecuteWithPanic(t *testing.T) { } func TestExecuteWithCpuLoop(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -718,7 +718,7 @@ func TestExecuteWithCpuLoop(t *testing.T) { } func TestExecuteWithStorageLoop(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -762,7 +762,7 @@ func TestExecuteWithStorageLoop(t *testing.T) { } func TestMigrate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -943,7 +943,7 @@ func TestMigrate(t *testing.T) { } func TestMigrateReplacesTheSecondIndex(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) example := InstantiateHackatomExampleContract(t, ctx, keepers) // then assert a second index exists @@ -968,7 +968,7 @@ func TestMigrateReplacesTheSecondIndex(t *testing.T) { } func TestMigrateWithDispatchedMessage(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1064,7 +1064,7 @@ type stealFundsMsg struct { } func TestSudo(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1143,7 +1143,7 @@ func mustMarshal(t *testing.T, r interface{}) []byte { } func TestUpdateContractAdmin(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1214,7 +1214,7 @@ func TestUpdateContractAdmin(t *testing.T) { } func TestClearContractAdmin(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) diff --git a/x/wasm/internal/keeper/legacy_querier_test.go b/x/wasm/internal/keeper/legacy_querier_test.go index 94276541eb..80379f1de5 100644 --- a/x/wasm/internal/keeper/legacy_querier_test.go +++ b/x/wasm/internal/keeper/legacy_querier_test.go @@ -16,7 +16,7 @@ import ( ) func TestLegacyQueryContractState(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -151,7 +151,7 @@ func TestLegacyQueryContractState(t *testing.T) { } func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000000)) @@ -216,7 +216,7 @@ func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { } func TestLegacyQueryContractHistory(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) keeper := keepers.WasmKeeper var ( @@ -327,7 +327,7 @@ func TestLegacyQueryCodeList(t *testing.T) { for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) keeper := keepers.WasmKeeper for _, codeID := range spec.codeIDs { diff --git a/x/wasm/internal/keeper/options.go b/x/wasm/internal/keeper/options.go index b26897ee02..cdb8590366 100644 --- a/x/wasm/internal/keeper/options.go +++ b/x/wasm/internal/keeper/options.go @@ -1,6 +1,9 @@ package keeper -import "github.com/CosmWasm/wasmd/x/wasm/internal/types" +import ( + "fmt" + "github.com/CosmWasm/wasmd/x/wasm/internal/types" +) type optsFn func(*Keeper) @@ -8,21 +11,63 @@ func (f optsFn) apply(keeper *Keeper) { f(keeper) } -// WithMessageHandler is an optional constructor parameter to replace the default wasm vm engine with the +// WithMessageHandler is an optional constructor parameter to replace the default wasmVM engine with the // given one. func WithWasmEngine(x types.WasmerEngine) Option { return optsFn(func(k *Keeper) { - k.wasmer = x + k.wasmVM = x }) } -// WithMessageHandler is an optional constructor parameter to set a custom message handler. +// WithMessageHandler is an optional constructor parameter to set a custom handler for wasmVM messages. +// This option should not be combined with Option `WithMessageEncoders`. func WithMessageHandler(x messenger) Option { return optsFn(func(k *Keeper) { k.messenger = x }) } +// WithQueryHandler is an optional constructor parameter to set custom query handler for wasmVM requests. +// This option should not be combined with Option `WithQueryPlugins`. +func WithQueryHandler(x wasmVMQueryHandler) Option { + return optsFn(func(k *Keeper) { + k.wasmVMQueryHandler = x + }) +} + +// WithQueryPlugins is an optional constructor parameter to pass custom query plugins for wasmVM requests. +// This option expects the default `QueryHandler` set an should not be combined with Option `WithQueryHandler`. +func WithQueryPlugins(x *QueryPlugins) Option { + return optsFn(func(k *Keeper) { + q, ok := k.wasmVMQueryHandler.(QueryPlugins) + if !ok { + panic(fmt.Sprintf("Unsupported query handler type: %T", k.wasmVMQueryHandler)) + } + k.wasmVMQueryHandler = q.Merge(x) + }) +} + +// WithMessageEncoders is an optional constructor parameter to pass custom message encoder to the default wasm message handler. +// This option expects the `DefaultMessageHandler` set an should not be combined with Option `WithMessageHandler`. +func WithMessageEncoders(x *MessageEncoders) Option { + return optsFn(func(k *Keeper) { + q, ok := k.messenger.(*MessageHandlerChain) + if !ok { + panic(fmt.Sprintf("Unsupported message handler type: %T", k.messenger)) + } + s, ok := q.handlers[0].(SDKMessageHandler) + if !ok { + panic(fmt.Sprintf("Unexpected message handler type: %T", q.handlers[0])) + } + e, ok := s.encoders.(MessageEncoders) + if !ok { + panic(fmt.Sprintf("Unsupported encoder type: %T", s.encoders)) + } + s.encoders = e.Merge(x) + q.handlers[0] = s + }) +} + // WithCoinTransferrer is an optional constructor parameter to set a custom coin transferrer func WithCoinTransferrer(x coinTransferrer) Option { return optsFn(func(k *Keeper) { diff --git a/x/wasm/internal/keeper/options_test.go b/x/wasm/internal/keeper/options_test.go index 74ee11373d..eac62378f0 100644 --- a/x/wasm/internal/keeper/options_test.go +++ b/x/wasm/internal/keeper/options_test.go @@ -19,7 +19,7 @@ func TestConstructorOptions(t *testing.T) { "wasm engine": { srcOpt: WithWasmEngine(&wasmtesting.MockWasmer{}), verify: func(k Keeper) { - assert.IsType(t, k.wasmer, &wasmtesting.MockWasmer{}) + assert.IsType(t, k.wasmVM, &wasmtesting.MockWasmer{}) }, }, "message handler": { @@ -28,6 +28,12 @@ func TestConstructorOptions(t *testing.T) { assert.IsType(t, k.messenger, &wasmtesting.MockMessageHandler{}) }, }, + "query plugins": { + srcOpt: WithQueryHandler(&wasmtesting.MockQueryHandler{}), + verify: func(k Keeper) { + assert.IsType(t, k.wasmVMQueryHandler, &wasmtesting.MockQueryHandler{}) + }, + }, "coin transferrer": { srcOpt: WithCoinTransferrer(&wasmtesting.MockCoinTransferrer{}), verify: func(k Keeper) { @@ -37,26 +43,7 @@ func TestConstructorOptions(t *testing.T) { } for name, spec := range specs { t.Run(name, func(t *testing.T) { - k := NewKeeper( - nil, - nil, - paramtypes.NewSubspace(nil, nil, nil, nil, ""), - authkeeper.AccountKeeper{}, - nil, - stakingkeeper.Keeper{}, - distributionkeeper.Keeper{}, - nil, - nil, - nil, - nil, - nil, - "tempDir", - types.DefaultWasmConfig(), - SupportedFeatures, - nil, - nil, - spec.srcOpt, - ) + k := NewKeeper(nil, nil, paramtypes.NewSubspace(nil, nil, nil, nil, ""), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, "tempDir", types.DefaultWasmConfig(), SupportedFeatures, spec.srcOpt) spec.verify(k) }) } diff --git a/x/wasm/internal/keeper/proposal_integration_test.go b/x/wasm/internal/keeper/proposal_integration_test.go index 0807feee41..bd7e3f508f 100644 --- a/x/wasm/internal/keeper/proposal_integration_test.go +++ b/x/wasm/internal/keeper/proposal_integration_test.go @@ -19,7 +19,7 @@ import ( ) func TestStoreCodeProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper wasmKeeper.setParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, @@ -60,7 +60,7 @@ func TestStoreCodeProposal(t *testing.T) { } func TestInstantiateProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper wasmKeeper.setParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, @@ -116,7 +116,7 @@ func TestInstantiateProposal(t *testing.T) { } func TestMigrateProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper wasmKeeper.setParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, @@ -249,7 +249,7 @@ func TestAdminProposals(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper wasmKeeper.setParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, @@ -279,7 +279,7 @@ func TestAdminProposals(t *testing.T) { } func TestUpdateParamsProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper var ( @@ -351,7 +351,7 @@ func TestUpdateParamsProposal(t *testing.T) { } func TestPinCodesProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper mock := wasmtesting.MockWasmer{ @@ -438,7 +438,7 @@ func TestPinCodesProposal(t *testing.T) { } } func TestUnpinCodesProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper mock := wasmtesting.MockWasmer{ diff --git a/x/wasm/internal/keeper/querier_test.go b/x/wasm/internal/keeper/querier_test.go index 5230c20803..42c8cd70a1 100644 --- a/x/wasm/internal/keeper/querier_test.go +++ b/x/wasm/internal/keeper/querier_test.go @@ -20,7 +20,7 @@ import ( ) func TestQueryAllContractState(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) keeper := keepers.WasmKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -107,7 +107,7 @@ func TestQueryAllContractState(t *testing.T) { } func TestQuerySmartContractState(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) keeper := keepers.WasmKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -150,7 +150,7 @@ func TestQuerySmartContractState(t *testing.T) { } func TestQuerySmartContractPanics(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) contractAddr := contractAddress(1, 1) keepers.WasmKeeper.storeCodeInfo(ctx, 1, types.CodeInfo{}) keepers.WasmKeeper.storeContractInfo(ctx, contractAddr, &types.ContractInfo{ @@ -178,7 +178,7 @@ func TestQuerySmartContractPanics(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - keepers.WasmKeeper.wasmer = &wasmtesting.MockWasmer{QueryFn: func(checksum cosmwasm.Checksum, env wasmvmtypes.Env, queryMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) ([]byte, uint64, error) { + keepers.WasmKeeper.wasmVM = &wasmtesting.MockWasmer{QueryFn: func(checksum cosmwasm.Checksum, env wasmvmtypes.Env, queryMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) ([]byte, uint64, error) { spec.doInContract() return nil, 0, nil }} @@ -194,7 +194,7 @@ func TestQuerySmartContractPanics(t *testing.T) { } func TestQueryRawContractState(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) keeper := keepers.WasmKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -249,7 +249,7 @@ func TestQueryRawContractState(t *testing.T) { } func TestQueryContractListByCodeOrdering(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000000)) @@ -308,7 +308,7 @@ func TestQueryContractListByCodeOrdering(t *testing.T) { } func TestQueryContractHistory(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) keeper := keepers.WasmKeeper var ( @@ -452,7 +452,7 @@ func TestQueryCodeList(t *testing.T) { wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) keeper := keepers.WasmKeeper specs := map[string]struct { diff --git a/x/wasm/internal/keeper/query_plugins.go b/x/wasm/internal/keeper/query_plugins.go index 6dddd5223d..c4f6a299b8 100644 --- a/x/wasm/internal/keeper/query_plugins.go +++ b/x/wasm/internal/keeper/query_plugins.go @@ -16,14 +16,14 @@ import ( type QueryHandler struct { Ctx sdk.Context - Plugins QueryPlugins + Plugins wasmVMQueryHandler Caller sdk.AccAddress } -func NewQueryHandler(ctx sdk.Context, plugins QueryPlugins, caller sdk.AccAddress) QueryHandler { +func NewQueryHandler(ctx sdk.Context, vmQueryHandler wasmVMQueryHandler, caller sdk.AccAddress) QueryHandler { return QueryHandler{ Ctx: ctx, - Plugins: plugins, + Plugins: vmQueryHandler, Caller: caller, } } @@ -51,27 +51,7 @@ func (q QueryHandler) Query(request wasmvmtypes.QueryRequest, gasLimit uint64) ( defer func() { q.Ctx.GasMeter().ConsumeGas(subctx.GasMeter().GasConsumed(), "contract sub-query") }() - - // do the query - if request.Bank != nil { - return q.Plugins.Bank(subctx, request.Bank) - } - if request.Custom != nil { - return q.Plugins.Custom(subctx, request.Custom) - } - if request.IBC != nil { - return q.Plugins.IBC(subctx, q.Caller, request.IBC) - } - if request.Staking != nil { - return q.Plugins.Staking(subctx, request.Staking) - } - if request.Stargate != nil { - return q.Plugins.Stargate(subctx, request.Stargate) - } - if request.Wasm != nil { - return q.Plugins.Wasm(subctx, request.Wasm) - } - return nil, wasmvmtypes.Unknown{} + return q.Plugins.HandleQuery(subctx, q.Caller, request) } func (q QueryHandler) GasConsumed() uint64 { @@ -89,7 +69,24 @@ type QueryPlugins struct { Wasm func(ctx sdk.Context, request *wasmvmtypes.WasmQuery) ([]byte, error) } -func DefaultQueryPlugins(bank types.BankViewKeeper, staking types.StakingKeeper, distKeeper types.DistributionKeeper, channelKeeper types.ChannelKeeper, queryRouter GRPCQueryRouter, wasm *Keeper) QueryPlugins { +type contractMetaDataSource interface { + GetContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) *types.ContractInfo +} + +type wasmQueryKeeper interface { + contractMetaDataSource + QueryRaw(ctx sdk.Context, contractAddress sdk.AccAddress, key []byte) []byte + QuerySmart(ctx sdk.Context, contractAddr sdk.AccAddress, req []byte) ([]byte, error) +} + +func DefaultQueryPlugins( + bank types.BankViewKeeper, + staking types.StakingKeeper, + distKeeper types.DistributionKeeper, + channelKeeper types.ChannelKeeper, + queryRouter GRPCQueryRouter, + wasm wasmQueryKeeper, +) QueryPlugins { return QueryPlugins{ Bank: BankQuerier(bank), Custom: NoCustomQuerier, @@ -126,6 +123,30 @@ func (e QueryPlugins) Merge(o *QueryPlugins) QueryPlugins { return e } +// HandleQuery executes the requested query +func (e QueryPlugins) HandleQuery(ctx sdk.Context, caller sdk.AccAddress, request wasmvmtypes.QueryRequest) ([]byte, error) { + // do the query + if request.Bank != nil { + return e.Bank(ctx, request.Bank) + } + if request.Custom != nil { + return e.Custom(ctx, request.Custom) + } + if request.IBC != nil { + return e.IBC(ctx, caller, request.IBC) + } + if request.Staking != nil { + return e.Staking(ctx, request.Staking) + } + if request.Stargate != nil { + return e.Stargate(ctx, request.Stargate) + } + if request.Wasm != nil { + return e.Wasm(ctx, request.Wasm) + } + return nil, wasmvmtypes.Unknown{} +} + func BankQuerier(bankKeeper types.BankViewKeeper) func(ctx sdk.Context, request *wasmvmtypes.BankQuery) ([]byte, error) { return func(ctx sdk.Context, request *wasmvmtypes.BankQuery) ([]byte, error) { if request.AllBalances != nil { @@ -162,7 +183,7 @@ func NoCustomQuerier(sdk.Context, json.RawMessage) ([]byte, error) { return nil, wasmvmtypes.UnsupportedRequest{Kind: "custom"} } -func IBCQuerier(wasm *Keeper, channelKeeper types.ChannelKeeper) func(ctx sdk.Context, caller sdk.AccAddress, request *wasmvmtypes.IBCQuery) ([]byte, error) { +func IBCQuerier(wasm contractMetaDataSource, channelKeeper types.ChannelKeeper) func(ctx sdk.Context, caller sdk.AccAddress, request *wasmvmtypes.IBCQuery) ([]byte, error) { return func(ctx sdk.Context, caller sdk.AccAddress, request *wasmvmtypes.IBCQuery) ([]byte, error) { if request.PortID != nil { contractInfo := wasm.GetContractInfo(ctx, caller) @@ -417,7 +438,7 @@ func getAccumulatedRewards(ctx sdk.Context, distKeeper types.DistributionKeeper, return rewards, nil } -func WasmQuerier(wasm *Keeper) func(ctx sdk.Context, request *wasmvmtypes.WasmQuery) ([]byte, error) { +func WasmQuerier(wasm wasmQueryKeeper) func(ctx sdk.Context, request *wasmvmtypes.WasmQuery) ([]byte, error) { return func(ctx sdk.Context, request *wasmvmtypes.WasmQuery) ([]byte, error) { if request.Smart != nil { addr, err := sdk.AccAddressFromBech32(request.Smart.ContractAddr) diff --git a/x/wasm/internal/keeper/query_plugins_test.go b/x/wasm/internal/keeper/query_plugins_test.go new file mode 100644 index 0000000000..98cc6bc24d --- /dev/null +++ b/x/wasm/internal/keeper/query_plugins_test.go @@ -0,0 +1,255 @@ +package keeper + +import ( + "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/internal/types" + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "testing" +) + +func TestIBCQuerier(t *testing.T) { + myExampleChannels := []channeltypes.IdentifiedChannel{ + { + State: channeltypes.OPEN, + Ordering: channeltypes.ORDERED, + Counterparty: channeltypes.Counterparty{ + PortId: "counterPartyPortID", + ChannelId: "counterPartyChannelID", + }, + ConnectionHops: []string{"one"}, + Version: "v1", + PortId: "myPortID", + ChannelId: "myChannelID", + }, + { + State: channeltypes.INIT, + Ordering: channeltypes.UNORDERED, + Counterparty: channeltypes.Counterparty{ + PortId: "otherCounterPartyPortID", + ChannelId: "otherCounterPartyChannelID", + }, + ConnectionHops: []string{"other", "second"}, + Version: "otherVersion", + PortId: "otherPortID", + ChannelId: "otherChannelID", + }, + } + specs := map[string]struct { + srcQuery *wasmvmtypes.IBCQuery + wasmKeeper *wasmKeeperMock + channelKeeper *wasmtesting.MockChannelKeeper + expJsonResult string + expErr *sdkerrors.Error + }{ + "query port id": { + srcQuery: &wasmvmtypes.IBCQuery{ + PortID: &wasmvmtypes.PortIDQuery{}, + }, + wasmKeeper: newWasmKeeperMock( + func(ctx sdk.Context, contractAddress sdk.AccAddress) *types.ContractInfo { + return &types.ContractInfo{IBCPortID: "myIBCPortID"} + }, + ), + channelKeeper: &wasmtesting.MockChannelKeeper{}, + expJsonResult: `{"port_id":"myIBCPortID"}`, + }, + "query list channels - all": { + srcQuery: &wasmvmtypes.IBCQuery{ + ListChannels: &wasmvmtypes.ListChannelsQuery{}, + }, + channelKeeper: &wasmtesting.MockChannelKeeper{ + IterateChannelsFn: wasmtesting.MockChannelKeeperIterator(myExampleChannels), + }, + expJsonResult: `{ + "channels": [ + { + "endpoint": { + "port_id": "myPortID", + "channel_id": "myChannelID" + }, + "counterparty_endpoint": { + "port_id": "counterPartyPortID", + "channel_id": "counterPartyChannelID" + }, + "order": "ORDER_ORDERED", + "version": "v1", + "connection_id": "one" + }, + { + "endpoint": { + "port_id": "otherPortID", + "channel_id": "otherChannelID" + }, + "counterparty_endpoint": { + "port_id": "otherCounterPartyPortID", + "channel_id": "otherCounterPartyChannelID" + }, + "order": "ORDER_UNORDERED", + "version": "otherVersion", + "connection_id": "other" + } + ] +}`, + }, + "query list channels - filtered": { + srcQuery: &wasmvmtypes.IBCQuery{ + ListChannels: &wasmvmtypes.ListChannelsQuery{ + PortID: "otherPortID", + }, + }, + channelKeeper: &wasmtesting.MockChannelKeeper{ + IterateChannelsFn: wasmtesting.MockChannelKeeperIterator(myExampleChannels), + }, + expJsonResult: `{ + "channels": [ + { + "endpoint": { + "port_id": "otherPortID", + "channel_id": "otherChannelID" + }, + "counterparty_endpoint": { + "port_id": "otherCounterPartyPortID", + "channel_id": "otherCounterPartyChannelID" + }, + "order": "ORDER_UNORDERED", + "version": "otherVersion", + "connection_id": "other" + } + ] +}`, + }, + "query list channels - filtered empty": { + srcQuery: &wasmvmtypes.IBCQuery{ + ListChannels: &wasmvmtypes.ListChannelsQuery{ + PortID: "none-existing", + }, + }, + channelKeeper: &wasmtesting.MockChannelKeeper{ + IterateChannelsFn: wasmtesting.MockChannelKeeperIterator(myExampleChannels), + }, + expJsonResult: `{"channels": []}`, + }, + "query channel": { + srcQuery: &wasmvmtypes.IBCQuery{ + Channel: &wasmvmtypes.ChannelQuery{ + PortID: "myQueryPortID", + ChannelID: "myQueryChannelID", + }, + }, + channelKeeper: &wasmtesting.MockChannelKeeper{ + GetChannelFn: func(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) { + return channeltypes.Channel{ + State: channeltypes.INIT, + Ordering: channeltypes.UNORDERED, + Counterparty: channeltypes.Counterparty{ + PortId: "counterPartyPortID", + ChannelId: "otherCounterPartyChannelID", + }, + ConnectionHops: []string{"one"}, + Version: "version", + }, true + }, + }, + expJsonResult: `{ + "channel": { + "endpoint": { + "port_id": "myQueryPortID", + "channel_id": "myQueryChannelID" + }, + "counterparty_endpoint": { + "port_id": "counterPartyPortID", + "channel_id": "otherCounterPartyChannelID" + }, + "order": "ORDER_UNORDERED", + "version": "version", + "connection_id": "one" + } +}`, + }, + "query channel - without port set": { + srcQuery: &wasmvmtypes.IBCQuery{ + Channel: &wasmvmtypes.ChannelQuery{ + ChannelID: "myQueryChannelID", + }, + }, + wasmKeeper: newWasmKeeperMock(func(ctx sdk.Context, contractAddress sdk.AccAddress) *types.ContractInfo { + return &types.ContractInfo{IBCPortID: "myLoadedPortID"} + }), + channelKeeper: &wasmtesting.MockChannelKeeper{ + GetChannelFn: func(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) { + return channeltypes.Channel{ + State: channeltypes.INIT, + Ordering: channeltypes.UNORDERED, + Counterparty: channeltypes.Counterparty{ + PortId: "counterPartyPortID", + ChannelId: "otherCounterPartyChannelID", + }, + ConnectionHops: []string{"one"}, + Version: "version", + }, true + }, + }, + expJsonResult: `{ + "channel": { + "endpoint": { + "port_id": "myLoadedPortID", + "channel_id": "myQueryChannelID" + }, + "counterparty_endpoint": { + "port_id": "counterPartyPortID", + "channel_id": "otherCounterPartyChannelID" + }, + "order": "ORDER_UNORDERED", + "version": "version", + "connection_id": "one" + } +}`, + }, + "query channel - empty result": { + srcQuery: &wasmvmtypes.IBCQuery{ + Channel: &wasmvmtypes.ChannelQuery{ + PortID: "myQueryPortID", + ChannelID: "myQueryChannelID", + }, + }, + channelKeeper: &wasmtesting.MockChannelKeeper{ + GetChannelFn: func(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) { + return channeltypes.Channel{}, false + }, + }, + expJsonResult: "{}", + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + h := IBCQuerier(spec.wasmKeeper, spec.channelKeeper) + gotResult, gotErr := h(sdk.Context{}, RandomAccountAddress(t), spec.srcQuery) + require.True(t, spec.expErr.Is(gotErr), "exp %v but got %#+v", spec.expErr, gotErr) + if spec.expErr != nil { + return + } + assert.JSONEq(t, spec.expJsonResult, string(gotResult), string(gotResult)) + }) + } + +} + +type wasmKeeperMock struct { + GetContractInfoFn func(ctx sdk.Context, contractAddress sdk.AccAddress) *types.ContractInfo +} + +func newWasmKeeperMock(f func(ctx sdk.Context, contractAddress sdk.AccAddress) *types.ContractInfo) *wasmKeeperMock { + return &wasmKeeperMock{GetContractInfoFn: f} +} + +func (m wasmKeeperMock) GetContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) *types.ContractInfo { + if m.GetContractInfoFn == nil { + panic("not expected to be called") + } + return m.GetContractInfoFn(ctx, contractAddress) +} diff --git a/x/wasm/internal/keeper/recurse_test.go b/x/wasm/internal/keeper/recurse_test.go index 01fd965568..bedb9aa0d1 100644 --- a/x/wasm/internal/keeper/recurse_test.go +++ b/x/wasm/internal/keeper/recurse_test.go @@ -2,6 +2,7 @@ package keeper import ( "encoding/json" + "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" "github.com/CosmWasm/wasmd/x/wasm/internal/types" "testing" @@ -40,14 +41,13 @@ var totalWasmQueryCounter int func initRecurseContract(t *testing.T) (contract sdk.AccAddress, creator sdk.AccAddress, ctx sdk.Context, keeper *Keeper) { // we do one basic setup before all test cases (which are read-only and don't change state) var realWasmQuerier func(ctx sdk.Context, request *wasmvmtypes.WasmQuery) ([]byte, error) - countingQuerier := &QueryPlugins{ - Wasm: func(ctx sdk.Context, request *wasmvmtypes.WasmQuery) ([]byte, error) { + countingQuerier := &wasmtesting.MockQueryHandler{ + HandleQueryFn: func(ctx sdk.Context, request wasmvmtypes.QueryRequest, caller sdk.AccAddress) ([]byte, error) { totalWasmQueryCounter++ - return realWasmQuerier(ctx, request) - }, - } + return realWasmQuerier(ctx, request.Wasm) + }} - ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, countingQuerier) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures, WithQueryHandler(countingQuerier)) keeper = keepers.WasmKeeper realWasmQuerier = WasmQuerier(keeper) diff --git a/x/wasm/internal/keeper/reflect_test.go b/x/wasm/internal/keeper/reflect_test.go index 1cf359d061..cd1272205b 100644 --- a/x/wasm/internal/keeper/reflect_test.go +++ b/x/wasm/internal/keeper/reflect_test.go @@ -83,8 +83,8 @@ func mustParse(t *testing.T, data []byte, res interface{}) { const ReflectFeatures = "staking,mask,stargate" func TestReflectContractSend(t *testing.T) { - cdc := MakeTestCodec(t) - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, reflectEncoders(cdc), nil) + cdc := MakeEncodingConfig(t).Marshaler + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc))) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -165,8 +165,8 @@ func TestReflectContractSend(t *testing.T) { } func TestReflectCustomMsg(t *testing.T) { - cdc := MakeTestCodec(t) - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, reflectEncoders(cdc), reflectPlugins()) + cdc := MakeEncodingConfig(t).Marshaler + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -258,8 +258,8 @@ func TestReflectCustomMsg(t *testing.T) { } func TestMaskReflectCustomQuery(t *testing.T) { - cdc := MakeTestCodec(t) - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, reflectEncoders(cdc), reflectPlugins()) + cdc := MakeEncodingConfig(t).Marshaler + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -308,8 +308,8 @@ func TestMaskReflectCustomQuery(t *testing.T) { } func TestReflectStargateQuery(t *testing.T) { - cdc := MakeTestCodec(t) - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, reflectEncoders(cdc), reflectPlugins()) + cdc := MakeEncodingConfig(t).Marshaler + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper funds := sdk.NewCoins(sdk.NewInt64Coin("denom", 320000)) @@ -385,7 +385,8 @@ type reflectState struct { } func TestMaskReflectWasmQueries(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, reflectEncoders(MakeTestCodec(t)), nil) + cdc := MakeEncodingConfig(t).Marshaler + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) accKeeper, keeper := keepers.AccountKeeper, keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -456,7 +457,8 @@ func TestMaskReflectWasmQueries(t *testing.T) { } func TestWasmRawQueryWithNil(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, reflectEncoders(MakeTestCodec(t)), nil) + cdc := MakeEncodingConfig(t).Marshaler + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) accKeeper, keeper := keepers.AccountKeeper, keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) diff --git a/x/wasm/internal/keeper/relay.go b/x/wasm/internal/keeper/relay.go index 1aaddc6da5..0bdcd0d8c3 100644 --- a/x/wasm/internal/keeper/relay.go +++ b/x/wasm/internal/keeper/relay.go @@ -23,10 +23,10 @@ func (k Keeper) OnOpenChannel( } env := types.NewEnv(ctx, contractAddr) - querier := NewQueryHandler(ctx, k.queryPlugins, contractAddr) + querier := NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddr) gas := gasForContract(ctx) - gasUsed, execErr := k.wasmer.IBCChannelOpen(codeInfo.CodeHash, env, channel, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) + gasUsed, execErr := k.wasmVM.IBCChannelOpen(codeInfo.CodeHash, env, channel, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) consumeGas(ctx, gasUsed) if execErr != nil { return sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) @@ -53,10 +53,10 @@ func (k Keeper) OnConnectChannel( } env := types.NewEnv(ctx, contractAddr) - querier := NewQueryHandler(ctx, k.queryPlugins, contractAddr) + querier := NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddr) gas := gasForContract(ctx) - res, gasUsed, execErr := k.wasmer.IBCChannelConnect(codeInfo.CodeHash, env, channel, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) + res, gasUsed, execErr := k.wasmVM.IBCChannelConnect(codeInfo.CodeHash, env, channel, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) consumeGas(ctx, gasUsed) if execErr != nil { return sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) @@ -89,10 +89,10 @@ func (k Keeper) OnCloseChannel( } params := types.NewEnv(ctx, contractAddr) - querier := NewQueryHandler(ctx, k.queryPlugins, contractAddr) + querier := NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddr) gas := gasForContract(ctx) - res, gasUsed, execErr := k.wasmer.IBCChannelClose(codeInfo.CodeHash, params, channel, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) + res, gasUsed, execErr := k.wasmVM.IBCChannelClose(codeInfo.CodeHash, params, channel, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) consumeGas(ctx, gasUsed) if execErr != nil { return sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) @@ -125,10 +125,10 @@ func (k Keeper) OnRecvPacket( } env := types.NewEnv(ctx, contractAddr) - querier := NewQueryHandler(ctx, k.queryPlugins, contractAddr) + querier := NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddr) gas := gasForContract(ctx) - res, gasUsed, execErr := k.wasmer.IBCPacketReceive(codeInfo.CodeHash, env, packet, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) + res, gasUsed, execErr := k.wasmVM.IBCPacketReceive(codeInfo.CodeHash, env, packet, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) consumeGas(ctx, gasUsed) if execErr != nil { return nil, sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) @@ -162,10 +162,10 @@ func (k Keeper) OnAckPacket( } env := types.NewEnv(ctx, contractAddr) - querier := NewQueryHandler(ctx, k.queryPlugins, contractAddr) + querier := NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddr) gas := gasForContract(ctx) - res, gasUsed, execErr := k.wasmer.IBCPacketAck(codeInfo.CodeHash, env, acknowledgement, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) + res, gasUsed, execErr := k.wasmVM.IBCPacketAck(codeInfo.CodeHash, env, acknowledgement, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) consumeGas(ctx, gasUsed) if execErr != nil { return sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) @@ -195,10 +195,10 @@ func (k Keeper) OnTimeoutPacket( } env := types.NewEnv(ctx, contractAddr) - querier := NewQueryHandler(ctx, k.queryPlugins, contractAddr) + querier := NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddr) gas := gasForContract(ctx) - res, gasUsed, execErr := k.wasmer.IBCPacketTimeout(codeInfo.CodeHash, env, packet, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) + res, gasUsed, execErr := k.wasmVM.IBCPacketTimeout(codeInfo.CodeHash, env, packet, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) consumeGas(ctx, gasUsed) if execErr != nil { return sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) diff --git a/x/wasm/internal/keeper/relay_test.go b/x/wasm/internal/keeper/relay_test.go index cb92eb680d..bcea274ccf 100644 --- a/x/wasm/internal/keeper/relay_test.go +++ b/x/wasm/internal/keeper/relay_test.go @@ -15,7 +15,7 @@ import ( func TestOnOpenChannel(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) example := SeedNewContractInstance(t, parentCtx, keepers, &m) specs := map[string]struct { @@ -74,7 +74,7 @@ func TestOnOpenChannel(t *testing.T) { func TestOnConnectChannel(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) example := SeedNewContractInstance(t, parentCtx, keepers, &m) specs := map[string]struct { @@ -184,7 +184,7 @@ func TestOnConnectChannel(t *testing.T) { func TestOnCloseChannel(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) example := SeedNewContractInstance(t, parentCtx, keepers, &m) specs := map[string]struct { @@ -294,7 +294,7 @@ func TestOnCloseChannel(t *testing.T) { func TestOnRecvPacket(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) example := SeedNewContractInstance(t, parentCtx, keepers, &m) specs := map[string]struct { @@ -419,7 +419,7 @@ func TestOnRecvPacket(t *testing.T) { func TestOnAckPacket(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) example := SeedNewContractInstance(t, parentCtx, keepers, &m) specs := map[string]struct { @@ -530,7 +530,7 @@ func TestOnAckPacket(t *testing.T) { func TestOnTimeoutPacket(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) example := SeedNewContractInstance(t, parentCtx, keepers, &m) specs := map[string]struct { diff --git a/x/wasm/internal/keeper/staking_test.go b/x/wasm/internal/keeper/staking_test.go index 8fc3b64b88..4cd2006310 100644 --- a/x/wasm/internal/keeper/staking_test.go +++ b/x/wasm/internal/keeper/staking_test.go @@ -90,7 +90,7 @@ type InvestmentResponse struct { } func TestInitializeStaking(t *testing.T) { - ctx, k := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, k := CreateTestInput(t, false, SupportedFeatures) accKeeper, stakingKeeper, keeper, bankKeeper := k.AccountKeeper, k.StakingKeeper, k.WasmKeeper, k.BankKeeper valAddr := addValidator(t, ctx, stakingKeeper, accKeeper, bankKeeper, sdk.NewInt64Coin("stake", 1234567)) @@ -163,7 +163,7 @@ type initInfo struct { } func initializeStaking(t *testing.T) initInfo { - ctx, k := CreateTestInput(t, false, SupportedFeatures, nil, nil) + ctx, k := CreateTestInput(t, false, SupportedFeatures) accKeeper, stakingKeeper, keeper, bankKeeper := k.AccountKeeper, k.StakingKeeper, k.WasmKeeper, k.BankKeeper valAddr := addValidator(t, ctx, stakingKeeper, accKeeper, bankKeeper, sdk.NewInt64Coin("stake", 1000000)) diff --git a/x/wasm/internal/keeper/submsg_test.go b/x/wasm/internal/keeper/submsg_test.go index c287e5cf62..086ff45353 100644 --- a/x/wasm/internal/keeper/submsg_test.go +++ b/x/wasm/internal/keeper/submsg_test.go @@ -17,7 +17,7 @@ import ( // Try a simple send, no gas limit to for a sanity check before trying table tests func TestDispatchSubMsgSuccessCase(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -125,7 +125,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { subGasLimit := uint64(300_000) // prep - create one chain and upload the code - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures) ctx = ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) ctx = ctx.WithBlockGasMeter(sdk.NewInfiniteGasMeter()) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper @@ -386,7 +386,7 @@ func TestDispatchSubMsgEncodeToNoSdkMsg(t *testing.T) { Bank: nilEncoder, } - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, customEncoders, nil) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageHandler(NewSDKMessageHandler(nil, customEncoders))) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) diff --git a/x/wasm/internal/keeper/test_common.go b/x/wasm/internal/keeper/test_common.go index c0f42747db..601c3837dc 100644 --- a/x/wasm/internal/keeper/test_common.go +++ b/x/wasm/internal/keeper/test_common.go @@ -4,7 +4,7 @@ import ( "encoding/binary" "encoding/json" "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + types "github.com/CosmWasm/wasmd/x/wasm/internal/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -133,19 +133,18 @@ type TestKeepers struct { GovKeeper govkeeper.Keeper WasmKeeper *Keeper IBCKeeper *ibckeeper.Keeper + Router *baseapp.Router } // CreateDefaultTestInput common settings for CreateTestInput func CreateDefaultTestInput(t TestingT) (sdk.Context, TestKeepers) { - return CreateTestInput(t, false, "staking", nil, nil) + return CreateTestInput(t, false, "staking") } // encoders can be nil to accept the defaults, or set it to override some of the message handlers (like default) -func CreateTestInput(t TestingT, isCheckTx bool, supportedFeatures string, encoders *MessageEncoders, queriers *QueryPlugins) (sdk.Context, TestKeepers) { +func CreateTestInput(t TestingT, isCheckTx bool, supportedFeatures string, opts ...Option) (sdk.Context, TestKeepers) { // Load default wasm config - wasmConfig := types.DefaultWasmConfig() - db := dbm.NewMemDB() - return createTestInput(t, isCheckTx, supportedFeatures, encoders, queriers, wasmConfig, db) + return createTestInput(t, isCheckTx, supportedFeatures, types.DefaultWasmConfig(), dbm.NewMemDB(), opts...) } // encoders can be nil to accept the defaults, or set it to override some of the message handlers (like default) @@ -153,10 +152,9 @@ func createTestInput( t TestingT, isCheckTx bool, supportedFeatures string, - encoders *MessageEncoders, - queriers *QueryPlugins, wasmConfig types.WasmConfig, db dbm.DB, + opts ...Option, ) (sdk.Context, TestKeepers) { tempDir := t.TempDir() @@ -299,8 +297,7 @@ func createTestInput( tempDir, wasmConfig, supportedFeatures, - encoders, - queriers, + opts..., ) keeper.setParams(ctx, types.DefaultParams()) // add wasm handler so we can loop-back (contracts calling contracts) @@ -329,6 +326,7 @@ func createTestInput( BankKeeper: bankKeeper, GovKeeper: govKeeper, IBCKeeper: ibcKeeper, + Router: router, } return ctx, keepers } @@ -484,7 +482,7 @@ func StoreRandomContract(t TestingT, ctx sdk.Context, keepers TestKeepers, mock anyAmount := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000)) creator, _, creatorAddr := keyPubAddr() fundAccounts(t, ctx, keepers.AccountKeeper, keepers.BankKeeper, creatorAddr, anyAmount) - keepers.WasmKeeper.wasmer = mock + keepers.WasmKeeper.wasmVM = mock wasmCode := append(wasmIdent, rand.Bytes(10)...) codeID, err := keepers.WasmKeeper.Create(ctx, creatorAddr, wasmCode, "", "", nil) require.NoError(t, err) diff --git a/x/wasm/internal/keeper/wasmtesting/mock_keepers.go b/x/wasm/internal/keeper/wasmtesting/mock_keepers.go index acee3a4082..7d216911bc 100644 --- a/x/wasm/internal/keeper/wasmtesting/mock_keepers.go +++ b/x/wasm/internal/keeper/wasmtesting/mock_keepers.go @@ -13,6 +13,7 @@ type MockChannelKeeper struct { SendPacketFn func(ctx sdk.Context, channelCap *capabilitytypes.Capability, packet ibcexported.PacketI) error ChanCloseInitFn func(ctx sdk.Context, portID, channelID string, chanCap *capabilitytypes.Capability) error GetAllChannelsFn func(ctx sdk.Context) []channeltypes.IdentifiedChannel + IterateChannelsFn func(ctx sdk.Context, cb func(channeltypes.IdentifiedChannel) bool) } func (m *MockChannelKeeper) GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) { @@ -29,17 +30,6 @@ func (m *MockChannelKeeper) GetAllChannels(ctx sdk.Context) []channeltypes.Ident return m.GetAllChannelsFn(ctx) } -// Auto-implemented from GetAllChannels data -func (m *MockChannelKeeper) IterateChannels(ctx sdk.Context, cb func(channeltypes.IdentifiedChannel) bool) { - channels := m.GetAllChannels(ctx) - for _, channel := range channels { - stop := cb(channel) - if stop { - break - } - } -} - func (m *MockChannelKeeper) GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) { if m.GetNextSequenceSendFn == nil { panic("not supposed to be called!") @@ -61,6 +51,24 @@ func (m *MockChannelKeeper) ChanCloseInit(ctx sdk.Context, portID, channelID str return m.ChanCloseInitFn(ctx, portID, channelID, chanCap) } +func (m *MockChannelKeeper) IterateChannels(ctx sdk.Context, cb func(channeltypes.IdentifiedChannel) bool) { + if m.IterateChannelsFn == nil { + panic("not expected to be called") + } + m.IterateChannelsFn(ctx, cb) +} + +func MockChannelKeeperIterator(s []channeltypes.IdentifiedChannel) func(ctx sdk.Context, cb func(channeltypes.IdentifiedChannel) bool) { + return func(ctx sdk.Context, cb func(channeltypes.IdentifiedChannel) bool) { + for _, channel := range s { + stop := cb(channel) + if stop { + break + } + } + } +} + type MockCapabilityKeeper struct { GetCapabilityFn func(ctx sdk.Context, name string) (*capabilitytypes.Capability, bool) ClaimCapabilityFn func(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error diff --git a/x/wasm/internal/keeper/wasmtesting/query_handler.go b/x/wasm/internal/keeper/wasmtesting/query_handler.go new file mode 100644 index 0000000000..52cf97d31f --- /dev/null +++ b/x/wasm/internal/keeper/wasmtesting/query_handler.go @@ -0,0 +1,17 @@ +package wasmtesting + +import ( + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +type MockQueryHandler struct { + HandleQueryFn func(ctx sdk.Context, request wasmvmtypes.QueryRequest, caller sdk.AccAddress) ([]byte, error) +} + +func (m *MockQueryHandler) HandleQuery(ctx sdk.Context, caller sdk.AccAddress, request wasmvmtypes.QueryRequest) ([]byte, error) { + if m.HandleQueryFn == nil { + panic("not expected to be called") + } + return m.HandleQueryFn(ctx, request, caller) +} diff --git a/x/wasm/internal/types/errors.go b/x/wasm/internal/types/errors.go index 5e8799913f..200d7934f0 100644 --- a/x/wasm/internal/types/errors.go +++ b/x/wasm/internal/types/errors.go @@ -63,4 +63,7 @@ var ( // ErrUnpinContractFailed error for unpinning contract failures ErrUnpinContractFailed = sdkErrors.Register(DefaultCodespace, 19, "unpinning contract failed") + + // ErrUnknownMsg error by a message handler to show that it is not responsible for this message type + ErrUnknownMsg = sdkErrors.Register(DefaultCodespace, 20, "unknown message from the contract") ) diff --git a/x/wasm/module_test.go b/x/wasm/module_test.go index 7f0b77b5e2..a239151842 100644 --- a/x/wasm/module_test.go +++ b/x/wasm/module_test.go @@ -33,7 +33,7 @@ type testData struct { // returns a cleanup function, which must be defered on func setupTest(t *testing.T) testData { - ctx, keepers := CreateTestInput(t, false, "staking,stargate", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking,stargate") cdc := keeper.MakeTestCodec(t) data := testData{ module: NewAppModule(cdc, keepers.WasmKeeper, keepers.StakingKeeper), From 6996f72b381b4bd24c4da2d7681f5d72888d8c5b Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Thu, 18 Mar 2021 15:27:18 +0100 Subject: [PATCH 06/56] Handle non default ibc tranfer port --- app/app.go | 2 + x/wasm/internal/keeper/genesis_test.go | 2 +- x/wasm/internal/keeper/handler_plugin.go | 4 +- .../keeper/handler_plugin_encoders.go | 55 ++++++++++--------- .../keeper/handler_plugin_encoders_test.go | 33 ++++++----- x/wasm/internal/keeper/keeper.go | 3 +- x/wasm/internal/keeper/options_test.go | 2 +- x/wasm/internal/keeper/test_common.go | 2 + .../keeper/wasmtesting/mock_keepers.go | 14 ++++- x/wasm/internal/types/expected_keepers.go | 5 ++ 10 files changed, 76 insertions(+), 46 deletions(-) diff --git a/app/app.go b/app/app.go index 3f4a3e2ad1..32d633330f 100644 --- a/app/app.go +++ b/app/app.go @@ -366,6 +366,7 @@ func NewWasmApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b app.ibcKeeper.ChannelKeeper, &app.ibcKeeper.PortKeeper, scopedWasmKeeper, + app.transferKeeper, app.Router(), app.GRPCQueryRouter(), wasmDir, @@ -442,6 +443,7 @@ func NewWasmApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b capabilitytypes.ModuleName, authtypes.ModuleName, banktypes.ModuleName, distrtypes.ModuleName, stakingtypes.ModuleName, slashingtypes.ModuleName, govtypes.ModuleName, minttypes.ModuleName, crisistypes.ModuleName, ibchost.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, ibctransfertypes.ModuleName, + // wasm after ibc transfer wasm.ModuleName, ) diff --git a/x/wasm/internal/keeper/genesis_test.go b/x/wasm/internal/keeper/genesis_test.go index f7ff5e2044..27fd6edaf7 100644 --- a/x/wasm/internal/keeper/genesis_test.go +++ b/x/wasm/internal/keeper/genesis_test.go @@ -643,7 +643,7 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { wasmConfig := wasmTypes.DefaultWasmConfig() pk := paramskeeper.NewKeeper(encodingConfig.Marshaler, encodingConfig.Amino, keyParams, tkeyParams) - srcKeeper := NewKeeper(encodingConfig.Marshaler, keyWasm, pk.Subspace(wasmTypes.DefaultParamspace), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, tempDir, wasmConfig, SupportedFeatures) + srcKeeper := NewKeeper(encodingConfig.Marshaler, keyWasm, pk.Subspace(wasmTypes.DefaultParamspace), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, tempDir, wasmConfig, SupportedFeatures) return &srcKeeper, ctx, []sdk.StoreKey{keyWasm, keyParams} } diff --git a/x/wasm/internal/keeper/handler_plugin.go b/x/wasm/internal/keeper/handler_plugin.go index 61c9436869..e5cb369375 100644 --- a/x/wasm/internal/keeper/handler_plugin.go +++ b/x/wasm/internal/keeper/handler_plugin.go @@ -24,8 +24,8 @@ type SDKMessageHandler struct { encoders msgEncoder } -func NewDefaultMessageHandler(router sdk.Router, channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper, unpacker codectypes.AnyUnpacker, customEncoders ...*MessageEncoders) messenger { - encoders := DefaultEncoders(unpacker) +func NewDefaultMessageHandler(router sdk.Router, channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper, unpacker codectypes.AnyUnpacker, portSource types.ICS20TransferPortSource, customEncoders ...*MessageEncoders) messenger { + encoders := DefaultEncoders(unpacker, portSource) for _, e := range customEncoders { encoders = encoders.Merge(e) } diff --git a/x/wasm/internal/keeper/handler_plugin_encoders.go b/x/wasm/internal/keeper/handler_plugin_encoders.go index 20b19414da..d2668f26d0 100644 --- a/x/wasm/internal/keeper/handler_plugin_encoders.go +++ b/x/wasm/internal/keeper/handler_plugin_encoders.go @@ -32,11 +32,11 @@ type MessageEncoders struct { Wasm func(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, error) } -func DefaultEncoders(unpacker codectypes.AnyUnpacker) MessageEncoders { +func DefaultEncoders(unpacker codectypes.AnyUnpacker, portSource types.ICS20TransferPortSource) MessageEncoders { return MessageEncoders{ Bank: EncodeBankMsg, Custom: NoCustomMsg, - IBC: EncodeIBCMsg, + IBC: EncodeIBCMsg(portSource), Staking: EncodeStakingMsg, Stargate: EncodeStargateMsg(unpacker), Wasm: EncodeWasmMsg, @@ -225,32 +225,33 @@ func EncodeWasmMsg(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, } } -func EncodeIBCMsg(ctx sdk.Context, sender sdk.AccAddress, contractIBCPortID string, msg *wasmvmtypes.IBCMsg) ([]sdk.Msg, error) { - switch { - case msg.CloseChannel != nil: - return []sdk.Msg{&channeltypes.MsgChannelCloseInit{ - PortId: PortIDForContract(sender), - ChannelId: msg.CloseChannel.ChannelID, - Signer: sender.String(), - }}, nil - case msg.Transfer != nil: - amount, err := convertWasmCoinToSdkCoin(msg.Transfer.Amount) - if err != nil { - return nil, sdkerrors.Wrap(err, "amount") +func EncodeIBCMsg(portSource types.ICS20TransferPortSource) func(ctx sdk.Context, sender sdk.AccAddress, contractIBCPortID string, msg *wasmvmtypes.IBCMsg) ([]sdk.Msg, error) { + return func(ctx sdk.Context, sender sdk.AccAddress, contractIBCPortID string, msg *wasmvmtypes.IBCMsg) ([]sdk.Msg, error) { + switch { + case msg.CloseChannel != nil: + return []sdk.Msg{&channeltypes.MsgChannelCloseInit{ + PortId: PortIDForContract(sender), + ChannelId: msg.CloseChannel.ChannelID, + Signer: sender.String(), + }}, nil + case msg.Transfer != nil: + amount, err := convertWasmCoinToSdkCoin(msg.Transfer.Amount) + if err != nil { + return nil, sdkerrors.Wrap(err, "amount") + } + msg := &ibctransfertypes.MsgTransfer{ + SourcePort: portSource.GetPort(ctx), + SourceChannel: msg.Transfer.ChannelID, + Token: amount, + Sender: sender.String(), + Receiver: msg.Transfer.ToAddress, + TimeoutHeight: convertWasmIBCTimeoutHeightToCosmosHeight(msg.Transfer.TimeoutBlock), + TimeoutTimestamp: convertWasmIBCTimeoutTimestampToCosmosTimestamp(msg.Transfer.TimeoutTimestamp), + } + return []sdk.Msg{msg}, nil + default: + return nil, sdkerrors.Wrap(types.ErrUnknownMsg, "Unknown variant of IBC") } - portID := ibctransfertypes.ModuleName //todo: port can be customized in genesis. make this more flexible - msg := &ibctransfertypes.MsgTransfer{ - SourcePort: portID, - SourceChannel: msg.Transfer.ChannelID, - Token: amount, - Sender: sender.String(), - Receiver: msg.Transfer.ToAddress, - TimeoutHeight: convertWasmIBCTimeoutHeightToCosmosHeight(msg.Transfer.TimeoutBlock), - TimeoutTimestamp: convertWasmIBCTimeoutTimestampToCosmosTimestamp(msg.Transfer.TimeoutTimestamp), - } - return []sdk.Msg{msg}, nil - default: - return nil, sdkerrors.Wrap(types.ErrUnknownMsg, "Unknown variant of IBC") } } diff --git a/x/wasm/internal/keeper/handler_plugin_encoders_test.go b/x/wasm/internal/keeper/handler_plugin_encoders_test.go index 0151a4bf33..bd70eeb6d1 100644 --- a/x/wasm/internal/keeper/handler_plugin_encoders_test.go +++ b/x/wasm/internal/keeper/handler_plugin_encoders_test.go @@ -2,6 +2,7 @@ package keeper import ( "encoding/json" + "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" codectypes "github.com/cosmos/cosmos-sdk/codec/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" @@ -55,9 +56,10 @@ func TestEncoding(t *testing.T) { require.NoError(t, err) cases := map[string]struct { - sender sdk.AccAddress - srcMsg wasmvmtypes.CosmosMsg - srcIBCPort string + sender sdk.AccAddress + srcMsg wasmvmtypes.CosmosMsg + srcContractIBCPort string + transferPortSource types.ICS20TransferPortSource // set if valid output []sdk.Msg // set if invalid @@ -349,8 +351,8 @@ func TestEncoding(t *testing.T) { isError: true, }, "IBC transfer with block timeout": { - sender: addr1, - srcIBCPort: "myIBCPort", + sender: addr1, + srcContractIBCPort: "myIBCPort", srcMsg: wasmvmtypes.CosmosMsg{ IBC: &wasmvmtypes.IBCMsg{ Transfer: &wasmvmtypes.TransferMsg{ @@ -364,9 +366,12 @@ func TestEncoding(t *testing.T) { }, }, }, + transferPortSource: wasmtesting.MockIBCTransferKeeper{GetPortFn: func(ctx sdk.Context) string { + return "myTransferPort" + }}, output: []sdk.Msg{ &ibctransfertypes.MsgTransfer{ - SourcePort: "transfer", + SourcePort: "myTransferPort", SourceChannel: "myChanID", Token: sdk.Coin{ Denom: "ALX", @@ -379,8 +384,8 @@ func TestEncoding(t *testing.T) { }, }, "IBC transfer with time timeout": { - sender: addr1, - srcIBCPort: "myIBCPort", + sender: addr1, + srcContractIBCPort: "myIBCPort", srcMsg: wasmvmtypes.CosmosMsg{ IBC: &wasmvmtypes.IBCMsg{ Transfer: &wasmvmtypes.TransferMsg{ @@ -394,6 +399,9 @@ func TestEncoding(t *testing.T) { }, }, }, + transferPortSource: wasmtesting.MockIBCTransferKeeper{GetPortFn: func(ctx sdk.Context) string { + return "transfer" + }}, output: []sdk.Msg{ &ibctransfertypes.MsgTransfer{ SourcePort: "transfer", @@ -409,8 +417,8 @@ func TestEncoding(t *testing.T) { }, }, "IBC close channel": { - sender: addr1, - srcIBCPort: "myIBCPort", + sender: addr1, + srcContractIBCPort: "myIBCPort", srcMsg: wasmvmtypes.CosmosMsg{ IBC: &wasmvmtypes.IBCMsg{ CloseChannel: &wasmvmtypes.CloseChannelMsg{ @@ -428,12 +436,11 @@ func TestEncoding(t *testing.T) { }, } encodingConfig := MakeEncodingConfig(t) - encoder := DefaultEncoders(encodingConfig.Marshaler) for name, tc := range cases { - tc := tc t.Run(name, func(t *testing.T) { var ctx sdk.Context - res, err := encoder.Encode(ctx, tc.sender, tc.srcIBCPort, tc.srcMsg) + encoder := DefaultEncoders(encodingConfig.Marshaler, tc.transferPortSource) + res, err := encoder.Encode(ctx, tc.sender, tc.srcContractIBCPort, tc.srcMsg) if tc.isError { require.Error(t, err) } else { diff --git a/x/wasm/internal/keeper/keeper.go b/x/wasm/internal/keeper/keeper.go index e8cfad3731..206ab65545 100644 --- a/x/wasm/internal/keeper/keeper.go +++ b/x/wasm/internal/keeper/keeper.go @@ -97,6 +97,7 @@ func NewKeeper( channelKeeper types.ChannelKeeper, portKeeper types.PortKeeper, capabilityKeeper types.CapabilityKeeper, + portSource types.ICS20TransferPortSource, router sdk.Router, queryRouter GRPCQueryRouter, homeDir string, @@ -122,7 +123,7 @@ func NewKeeper( ChannelKeeper: channelKeeper, portKeeper: portKeeper, capabilityKeeper: capabilityKeeper, - messenger: NewDefaultMessageHandler(router, channelKeeper, capabilityKeeper, cdc), + messenger: NewDefaultMessageHandler(router, channelKeeper, capabilityKeeper, cdc, portSource), queryGasLimit: wasmConfig.SmartQueryGasLimit, authZPolicy: DefaultAuthorizationPolicy{}, paramSpace: paramSpace, diff --git a/x/wasm/internal/keeper/options_test.go b/x/wasm/internal/keeper/options_test.go index eac62378f0..eb6860f7fd 100644 --- a/x/wasm/internal/keeper/options_test.go +++ b/x/wasm/internal/keeper/options_test.go @@ -43,7 +43,7 @@ func TestConstructorOptions(t *testing.T) { } for name, spec := range specs { t.Run(name, func(t *testing.T) { - k := NewKeeper(nil, nil, paramtypes.NewSubspace(nil, nil, nil, nil, ""), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, "tempDir", types.DefaultWasmConfig(), SupportedFeatures, spec.srcOpt) + k := NewKeeper(nil, nil, paramtypes.NewSubspace(nil, nil, nil, nil, ""), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, "tempDir", types.DefaultWasmConfig(), SupportedFeatures, spec.srcOpt) spec.verify(k) }) } diff --git a/x/wasm/internal/keeper/test_common.go b/x/wasm/internal/keeper/test_common.go index 601c3837dc..80f40d2286 100644 --- a/x/wasm/internal/keeper/test_common.go +++ b/x/wasm/internal/keeper/test_common.go @@ -4,6 +4,7 @@ import ( "encoding/binary" "encoding/json" "fmt" + "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" types "github.com/CosmWasm/wasmd/x/wasm/internal/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" @@ -292,6 +293,7 @@ func createTestInput( ibcKeeper.ChannelKeeper, &ibcKeeper.PortKeeper, scopedWasmKeeper, + wasmtesting.MockIBCTransferKeeper{}, router, querier, tempDir, diff --git a/x/wasm/internal/keeper/wasmtesting/mock_keepers.go b/x/wasm/internal/keeper/wasmtesting/mock_keepers.go index 7d216911bc..f6eba2b5a4 100644 --- a/x/wasm/internal/keeper/wasmtesting/mock_keepers.go +++ b/x/wasm/internal/keeper/wasmtesting/mock_keepers.go @@ -1,6 +1,7 @@ package wasmtesting import ( + "github.com/CosmWasm/wasmd/x/wasm/internal/types" sdk "github.com/cosmos/cosmos-sdk/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" @@ -87,7 +88,6 @@ func (m MockCapabilityKeeper) ClaimCapability(ctx sdk.Context, cap *capabilityty panic("not supposed to be called!") } return m.ClaimCapabilityFn(ctx, cap, name) - } func (m MockCapabilityKeeper) AuthenticateCapability(ctx sdk.Context, capability *capabilitytypes.Capability, name string) bool { @@ -95,5 +95,17 @@ func (m MockCapabilityKeeper) AuthenticateCapability(ctx sdk.Context, capability panic("not supposed to be called!") } return m.AuthenticateCapabilityFn(ctx, capability, name) +} +var _ types.ICS20TransferPortSource = &MockIBCTransferKeeper{} + +type MockIBCTransferKeeper struct { + GetPortFn func(ctx sdk.Context) string +} + +func (m MockIBCTransferKeeper) GetPort(ctx sdk.Context) string { + if m.GetPortFn == nil { + panic("not expected to be called") + } + return m.GetPortFn(ctx) } diff --git a/x/wasm/internal/types/expected_keepers.go b/x/wasm/internal/types/expected_keepers.go index 2638f74fcd..6baf00a29a 100644 --- a/x/wasm/internal/types/expected_keepers.go +++ b/x/wasm/internal/types/expected_keepers.go @@ -88,3 +88,8 @@ type CapabilityKeeper interface { ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error AuthenticateCapability(ctx sdk.Context, capability *capabilitytypes.Capability, name string) bool } + +// ICS20TransferPortSource is a subset of the ibc transfer keeper. +type ICS20TransferPortSource interface { + GetPort(ctx sdk.Context) string +} From 75d5fcb6b169c03fdd672f504c474f144241442b Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Thu, 18 Mar 2021 16:25:09 +0100 Subject: [PATCH 07/56] Add telemetry --- contrib/local/02-contracts.sh | 2 +- contrib/local/03-grpc-queries.sh | 8 +++-- contrib/prometheus/README.md | 47 ++++++++++++++++++++++++++++++ contrib/prometheus/prometheus.yaml | 11 +++++++ x/wasm/internal/keeper/keeper.go | 13 +++++++-- x/wasm/internal/keeper/relay.go | 11 +++++++ 6 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 contrib/prometheus/README.md create mode 100644 contrib/prometheus/prometheus.yaml diff --git a/contrib/local/02-contracts.sh b/contrib/local/02-contracts.sh index 8d33f8eeaf..4b4cc84d7f 100755 --- a/contrib/local/02-contracts.sh +++ b/contrib/local/02-contracts.sh @@ -6,7 +6,7 @@ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" echo "-----------------------" echo "## Add new CosmWasm contract" RESP=$(wasmd tx wasm store "$DIR/../../x/wasm/internal/keeper/testdata/hackatom.wasm" \ - --from validator --gas 1000000 -y --chain-id=testing --node=http://localhost:26657 -b block) + --from validator --gas 1500000 -y --chain-id=testing --node=http://localhost:26657 -b block) CODE_ID=$(echo "$RESP" | jq -r '.logs[0].events[0].attributes[-1].value') echo "* Code id: $CODE_ID" diff --git a/contrib/local/03-grpc-queries.sh b/contrib/local/03-grpc-queries.sh index 23e78e6f44..f4bdf8f97f 100755 --- a/contrib/local/03-grpc-queries.sh +++ b/contrib/local/03-grpc-queries.sh @@ -7,12 +7,14 @@ echo "-----------------------" COSMOS_SDK_DIR=${COSMOS_SDK_DIR:-$(go list -f "{{ .Dir }}" -m github.com/cosmos/cosmos-sdk)} echo "### List all codes" -grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/internal/types/query.proto \ - localhost:9090 cosmwasm.wasm.v1beta1.Query/Codes | jq +RESP=$(grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/internal/types/query.proto \ + localhost:9090 cosmwasm.wasm.v1beta1.Query/Codes) +echo "$RESP" | jq +CODE_ID=$(echo "$RESP" | jq -r '.codeInfos[-1].codeId') echo "### List contract by code" RESP=$(grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/internal/types/query.proto \ - -d '{"codeId":2}' localhost:9090 cosmwasm.wasm.v1beta1.Query/ContractsByCode ) + -d "{\"codeId\": $CODE_ID}" localhost:9090 cosmwasm.wasm.v1beta1.Query/ContractsByCode ) echo $RESP | jq echo "### Show history for contract" diff --git a/contrib/prometheus/README.md b/contrib/prometheus/README.md new file mode 100644 index 0000000000..7c8d36ea3a --- /dev/null +++ b/contrib/prometheus/README.md @@ -0,0 +1,47 @@ +# Setup +Enable prometheus metrics in wasmd: + +* Edit `$HOME/config/app.toml` +```toml +[telemetry] + +# Enabled enables the application telemetry functionality. When enabled, +# an in-memory sink is also enabled by default. Operators may also enabled +# other sinks such as Prometheus. +enabled =true +# ... + +# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink. +prometheus-retention-time = 15 +``` + +`retention-time` must be >0 (see prometheus scrape config) + + + +* Edit `$HOME/config/config.toml` +```toml +[instrumentation] + +# When true, Prometheus metrics are served under /metrics on +# PrometheusListenAddr. +# Check out the documentation for the list of available metrics. +prometheus = true +``` +# Local testing +## Run Prometheus +```sh +# port 9090 is used by wasmd already +docker run -it -v $(pwd)/contrib/prometheus:/prometheus -p9091:9090 prom/prometheus --config.file=/prometheus/prometheus.yaml +``` +* Open [console](http://localhost:9091) and find `wasm_`service metrics + +## Run Grafana + +```shell +docker run -it -p 3000:3000 grafana/grafana +``` +* Add Prometheus data source +`http://host.docker.internal:9091` +### Labels +* `wasm_contract_create` = nanosec \ No newline at end of file diff --git a/contrib/prometheus/prometheus.yaml b/contrib/prometheus/prometheus.yaml new file mode 100644 index 0000000000..0f6d245287 --- /dev/null +++ b/contrib/prometheus/prometheus.yaml @@ -0,0 +1,11 @@ +global: + scrape_interval: 15s # By default, scrape targets every 15 seconds. + evaluation_interval: 15s # By default, scrape targets every 15 seconds. +rule_files: + +scrape_configs: +- job_name: wasmd + + scrape_interval: 5s + static_configs: + - targets: ['host.docker.internal:26660'] \ No newline at end of file diff --git a/x/wasm/internal/keeper/keeper.go b/x/wasm/internal/keeper/keeper.go index e8cfad3731..5b8dc7f82f 100644 --- a/x/wasm/internal/keeper/keeper.go +++ b/x/wasm/internal/keeper/keeper.go @@ -4,20 +4,21 @@ import ( "bytes" "encoding/binary" "fmt" - abci "github.com/tendermint/tendermint/abci/types" - "path/filepath" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/store/prefix" + "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/libs/log" + "path/filepath" + "time" ) // GasMultiplier is how many cosmwasm gas points = 1 sdk gas point @@ -227,6 +228,7 @@ func (k Keeper) Instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A } func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins, authZ AuthorizationPolicy) (sdk.AccAddress, []byte, error) { + defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "instantiate") if !k.IsPinnedCode(ctx, codeID) { ctx.GasMeter().ConsumeGas(InstanceCost, "Loading CosmWasm module: instantiate") } @@ -321,6 +323,7 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A // Execute executes the contract instance func (k Keeper) Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) (*sdk.Result, error) { + defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "execute") contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddress) if err != nil { return nil, err @@ -370,6 +373,7 @@ func (k Keeper) Migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller } func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte, authZ AuthorizationPolicy) (*sdk.Result, error) { + defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "migrate") if !k.IsPinnedCode(ctx, newCodeID) { ctx.GasMeter().ConsumeGas(InstanceCost, "Loading CosmWasm module: migrate") } @@ -443,6 +447,7 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller // another native Go module directly. Thus, the keeper doesn't place any access controls on it, that is the // responsibility or the app developer (who passes the wasm.Keeper in app.go) func (k Keeper) Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte) (*sdk.Result, error) { + defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "sudo") contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddress) if err != nil { return nil, err @@ -577,6 +582,7 @@ func (k Keeper) GetContractHistory(ctx sdk.Context, contractAddr sdk.AccAddress) // QuerySmart queries the smart contract itself. func (k Keeper) QuerySmart(ctx sdk.Context, contractAddr sdk.AccAddress, req []byte) ([]byte, error) { + defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "query-smart") contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) if err != nil { return nil, err @@ -599,6 +605,7 @@ func (k Keeper) QuerySmart(ctx sdk.Context, contractAddr sdk.AccAddress, req []b // QueryRaw returns the contract's state for give key. Returns `nil` when key is `nil`. func (k Keeper) QueryRaw(ctx sdk.Context, contractAddress sdk.AccAddress, key []byte) []byte { + defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "query-raw") if key == nil { return nil } diff --git a/x/wasm/internal/keeper/relay.go b/x/wasm/internal/keeper/relay.go index 0bdcd0d8c3..862e8ce5cb 100644 --- a/x/wasm/internal/keeper/relay.go +++ b/x/wasm/internal/keeper/relay.go @@ -3,8 +3,10 @@ package keeper import ( "github.com/CosmWasm/wasmd/x/wasm/internal/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" + "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "time" ) // OnOpenChannel calls the contract to participate in the IBC channel handshake step. @@ -17,6 +19,8 @@ func (k Keeper) OnOpenChannel( contractAddr sdk.AccAddress, channel wasmvmtypes.IBCChannel, ) error { + defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-open-channel") + _, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) if err != nil { return err @@ -47,6 +51,7 @@ func (k Keeper) OnConnectChannel( contractAddr sdk.AccAddress, channel wasmvmtypes.IBCChannel, ) error { + defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-connect-channel") contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) if err != nil { return err @@ -83,6 +88,8 @@ func (k Keeper) OnCloseChannel( contractAddr sdk.AccAddress, channel wasmvmtypes.IBCChannel, ) error { + defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-close-channel") + contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) if err != nil { return err @@ -119,6 +126,7 @@ func (k Keeper) OnRecvPacket( contractAddr sdk.AccAddress, packet wasmvmtypes.IBCPacket, ) ([]byte, error) { + defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-recv-packet") contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) if err != nil { return nil, err @@ -156,6 +164,7 @@ func (k Keeper) OnAckPacket( contractAddr sdk.AccAddress, acknowledgement wasmvmtypes.IBCAcknowledgement, ) error { + defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-ack-packet") contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) if err != nil { return err @@ -189,6 +198,8 @@ func (k Keeper) OnTimeoutPacket( contractAddr sdk.AccAddress, packet wasmvmtypes.IBCPacket, ) error { + defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-timeout-packet") + contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) if err != nil { return err From d9142662c19a151f34ff4a66d69007124051bd28 Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Fri, 19 Mar 2021 09:52:01 +0100 Subject: [PATCH 08/56] Remove internal package (#464) * Move internal subfolders up * Fix broken imports and fmt --- CHANGELOG.md | 2 + contrib/local/00-genesis.sh | 2 +- contrib/local/02-contracts.sh | 4 +- contrib/local/03-grpc-queries.sh | 8 +- doc/proto.md | 36 ++-- scripts/protocgen.sh | 2 +- x/wasm/Governance.md | 18 +- x/wasm/alias.go | 8 +- x/wasm/client/cli/genesis_msg.go | 2 +- x/wasm/client/cli/genesis_msg_test.go | 4 +- x/wasm/client/cli/gov_tx.go | 2 +- x/wasm/client/cli/new_tx.go | 2 +- x/wasm/client/cli/query.go | 2 +- x/wasm/client/cli/tx.go | 2 +- x/wasm/client/proposal_handler_test.go | 2 +- x/wasm/client/rest/gov.go | 2 +- x/wasm/client/rest/new_tx.go | 2 +- x/wasm/client/rest/query.go | 4 +- x/wasm/client/rest/tx.go | 2 +- x/wasm/client/utils/utils_test.go | 2 +- x/wasm/handler.go | 4 +- x/wasm/ibc.go | 2 +- x/wasm/ibc_reflect_test.go | 8 +- x/wasm/ibctesting/chain.go | 2 +- x/wasm/ibctesting/coordinator.go | 2 +- x/wasm/ibctesting/wasm.go | 2 +- x/wasm/{internal => }/keeper/api.go | 0 x/wasm/{internal => }/keeper/authz_policy.go | 2 +- x/wasm/{internal => }/keeper/bench_test.go | 2 +- x/wasm/{internal => }/keeper/genesis.go | 2 +- x/wasm/{internal => }/keeper/genesis_test.go | 4 +- .../{internal => }/keeper/handler_plugin.go | 2 +- .../keeper/handler_plugin_encoders.go | 2 +- .../keeper/handler_plugin_encoders_test.go | 4 +- .../keeper/handler_plugin_test.go | 4 +- x/wasm/{internal => }/keeper/ibc.go | 2 +- x/wasm/{internal => }/keeper/ibc_test.go | 0 x/wasm/{internal => }/keeper/ioutil.go | 2 +- x/wasm/{internal => }/keeper/ioutil_test.go | 2 +- x/wasm/{internal => }/keeper/keeper.go | 2 +- x/wasm/{internal => }/keeper/keeper_test.go | 4 +- .../{internal => }/keeper/legacy_querier.go | 2 +- .../keeper/legacy_querier_test.go | 2 +- x/wasm/{internal => }/keeper/msg_server.go | 2 +- x/wasm/{internal => }/keeper/options.go | 2 +- x/wasm/{internal => }/keeper/options_test.go | 4 +- .../{internal => }/keeper/proposal_handler.go | 2 +- .../keeper/proposal_integration_test.go | 4 +- x/wasm/{internal => }/keeper/querier.go | 2 +- x/wasm/{internal => }/keeper/querier_test.go | 4 +- x/wasm/{internal => }/keeper/query_plugins.go | 2 +- .../keeper/query_plugins_test.go | 4 +- x/wasm/{internal => }/keeper/recurse_test.go | 4 +- x/wasm/{internal => }/keeper/reflect_test.go | 2 +- x/wasm/{internal => }/keeper/relay.go | 2 +- x/wasm/{internal => }/keeper/relay_test.go | 2 +- x/wasm/{internal => }/keeper/staking_test.go | 0 x/wasm/{internal => }/keeper/submsg_test.go | 0 x/wasm/{internal => }/keeper/test_common.go | 4 +- x/wasm/{internal => }/keeper/test_fuzz.go | 2 +- .../keeper/testdata/burner.wasm | Bin .../keeper/testdata/download_releases.sh | 0 .../keeper/testdata/genesis.json | 0 .../keeper/testdata/hackatom.wasm | Bin .../keeper/testdata/hackatom.wasm.gzip | Bin .../keeper/testdata/ibc_reflect.wasm | Bin .../keeper/testdata/ibc_reflect_send.wasm | Bin .../keeper/testdata/reflect.wasm | Bin .../keeper/testdata/staking.wasm | Bin .../keeper/wasmtesting/coin_transferrer.go | 0 .../keeper/wasmtesting/messenger.go | 0 .../keeper/wasmtesting/mock_engine.go | 2 +- .../keeper/wasmtesting/mock_keepers.go | 2 +- .../keeper/wasmtesting/query_handler.go | 0 x/wasm/module.go | 4 +- x/wasm/module_test.go | 8 +- x/wasm/relay_pingpong_test.go | 6 +- x/wasm/relay_test.go | 6 +- x/wasm/simulation/genesis.go | 2 +- x/wasm/simulation/params.go | 2 +- x/wasm/{internal => }/types/codec.go | 0 x/wasm/{internal => }/types/errors.go | 0 x/wasm/{internal => }/types/events.go | 0 .../{internal => }/types/expected_keepers.go | 0 x/wasm/{internal => }/types/feature_flag.go | 0 x/wasm/{internal => }/types/genesis.go | 0 x/wasm/{internal => }/types/genesis.pb.go | 104 +++++----- x/wasm/{internal => }/types/genesis.proto | 6 +- x/wasm/{internal => }/types/genesis_test.go | 0 .../{internal => }/types/iavl_range_test.go | 0 x/wasm/{internal => }/types/ibc.pb.go | 55 +++--- x/wasm/{internal => }/types/ibc.proto | 2 +- x/wasm/{internal => }/types/keys.go | 0 x/wasm/{internal => }/types/keys_test.go | 0 x/wasm/{internal => }/types/params.go | 0 x/wasm/{internal => }/types/params_test.go | 0 x/wasm/{internal => }/types/proposal.go | 0 x/wasm/{internal => }/types/proposal.pb.go | 119 ++++++----- x/wasm/{internal => }/types/proposal.proto | 4 +- x/wasm/{internal => }/types/proposal_test.go | 0 x/wasm/{internal => }/types/query.pb.go | 184 +++++++++--------- x/wasm/{internal => }/types/query.pb.gw.go | 2 +- x/wasm/{internal => }/types/query.proto | 4 +- x/wasm/{internal => }/types/test_fixtures.go | 0 x/wasm/{internal => }/types/tx.go | 0 x/wasm/{internal => }/types/tx.pb.go | 138 ++++++------- x/wasm/{internal => }/types/tx.proto | 4 +- x/wasm/{internal => }/types/tx_test.go | 0 x/wasm/{internal => }/types/types.go | 0 x/wasm/{internal => }/types/types.pb.go | 171 ++++++++-------- x/wasm/{internal => }/types/types.proto | 2 +- x/wasm/{internal => }/types/types_test.go | 0 x/wasm/{internal => }/types/validation.go | 0 x/wasm/{internal => }/types/wasmer_engine.go | 0 114 files changed, 515 insertions(+), 520 deletions(-) rename x/wasm/{internal => }/keeper/api.go (100%) rename x/wasm/{internal => }/keeper/authz_policy.go (95%) rename x/wasm/{internal => }/keeper/bench_test.go (96%) rename x/wasm/{internal => }/keeper/genesis.go (98%) rename x/wasm/{internal => }/keeper/genesis_test.go (99%) rename x/wasm/{internal => }/keeper/handler_plugin.go (99%) rename x/wasm/{internal => }/keeper/handler_plugin_encoders.go (99%) rename x/wasm/{internal => }/keeper/handler_plugin_encoders_test.go (99%) rename x/wasm/{internal => }/keeper/handler_plugin_test.go (98%) rename x/wasm/{internal => }/keeper/ibc.go (97%) rename x/wasm/{internal => }/keeper/ibc_test.go (100%) rename x/wasm/{internal => }/keeper/ioutil.go (95%) rename x/wasm/{internal => }/keeper/ioutil_test.go (97%) rename x/wasm/{internal => }/keeper/keeper.go (99%) rename x/wasm/{internal => }/keeper/keeper_test.go (99%) rename x/wasm/{internal => }/keeper/legacy_querier.go (99%) rename x/wasm/{internal => }/keeper/legacy_querier_test.go (99%) rename x/wasm/{internal => }/keeper/msg_server.go (99%) rename x/wasm/{internal => }/keeper/options.go (97%) rename x/wasm/{internal => }/keeper/options_test.go (93%) rename x/wasm/{internal => }/keeper/proposal_handler.go (99%) rename x/wasm/{internal => }/keeper/proposal_integration_test.go (99%) rename x/wasm/{internal => }/keeper/querier.go (99%) rename x/wasm/{internal => }/keeper/querier_test.go (99%) rename x/wasm/{internal => }/keeper/query_plugins.go (99%) rename x/wasm/{internal => }/keeper/query_plugins_test.go (98%) rename x/wasm/{internal => }/keeper/recurse_test.go (98%) rename x/wasm/{internal => }/keeper/reflect_test.go (99%) rename x/wasm/{internal => }/keeper/relay.go (99%) rename x/wasm/{internal => }/keeper/relay_test.go (99%) rename x/wasm/{internal => }/keeper/staking_test.go (100%) rename x/wasm/{internal => }/keeper/submsg_test.go (100%) rename x/wasm/{internal => }/keeper/test_common.go (99%) rename x/wasm/{internal => }/keeper/test_fuzz.go (97%) rename x/wasm/{internal => }/keeper/testdata/burner.wasm (100%) rename x/wasm/{internal => }/keeper/testdata/download_releases.sh (100%) rename x/wasm/{internal => }/keeper/testdata/genesis.json (100%) rename x/wasm/{internal => }/keeper/testdata/hackatom.wasm (100%) rename x/wasm/{internal => }/keeper/testdata/hackatom.wasm.gzip (100%) rename x/wasm/{internal => }/keeper/testdata/ibc_reflect.wasm (100%) rename x/wasm/{internal => }/keeper/testdata/ibc_reflect_send.wasm (100%) rename x/wasm/{internal => }/keeper/testdata/reflect.wasm (100%) rename x/wasm/{internal => }/keeper/testdata/staking.wasm (100%) rename x/wasm/{internal => }/keeper/wasmtesting/coin_transferrer.go (100%) rename x/wasm/{internal => }/keeper/wasmtesting/messenger.go (100%) rename x/wasm/{internal => }/keeper/wasmtesting/mock_engine.go (99%) rename x/wasm/{internal => }/keeper/wasmtesting/mock_keepers.go (98%) rename x/wasm/{internal => }/keeper/wasmtesting/query_handler.go (100%) rename x/wasm/{internal => }/types/codec.go (100%) rename x/wasm/{internal => }/types/errors.go (100%) rename x/wasm/{internal => }/types/events.go (100%) rename x/wasm/{internal => }/types/expected_keepers.go (100%) rename x/wasm/{internal => }/types/feature_flag.go (100%) rename x/wasm/{internal => }/types/genesis.go (100%) rename x/wasm/{internal => }/types/genesis.pb.go (90%) rename x/wasm/{internal => }/types/genesis.proto (91%) rename x/wasm/{internal => }/types/genesis_test.go (100%) rename x/wasm/{internal => }/types/iavl_range_test.go (100%) rename x/wasm/{internal => }/types/ibc.pb.go (85%) rename x/wasm/{internal => }/types/ibc.proto (93%) rename x/wasm/{internal => }/types/keys.go (100%) rename x/wasm/{internal => }/types/keys_test.go (100%) rename x/wasm/{internal => }/types/params.go (100%) rename x/wasm/{internal => }/types/params_test.go (100%) rename x/wasm/{internal => }/types/proposal.go (100%) rename x/wasm/{internal => }/types/proposal.pb.go (93%) rename x/wasm/{internal => }/types/proposal.proto (97%) rename x/wasm/{internal => }/types/proposal_test.go (100%) rename x/wasm/{internal => }/types/query.pb.go (93%) rename x/wasm/{internal => }/types/query.pb.gw.go (99%) rename x/wasm/{internal => }/types/query.proto (98%) rename x/wasm/{internal => }/types/test_fixtures.go (100%) rename x/wasm/{internal => }/types/tx.go (100%) rename x/wasm/{internal => }/types/tx.pb.go (93%) rename x/wasm/{internal => }/types/tx.proto (97%) rename x/wasm/{internal => }/types/tx_test.go (100%) rename x/wasm/{internal => }/types/types.go (100%) rename x/wasm/{internal => }/types/types.pb.go (88%) rename x/wasm/{internal => }/types/types.proto (98%) rename x/wasm/{internal => }/types/types_test.go (100%) rename x/wasm/{internal => }/types/validation.go (100%) rename x/wasm/{internal => }/types/wasmer_engine.go (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64daa3b4ad..7e515bf0ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## [Unreleased](https://github.com/CosmWasm/wasmd/tree/HEAD) +**Extendability:** +- Remove `internal` package for better integration [\464](https://github.com/CosmWasm/wasmd/pull/464) [Full Changelog](https://github.com/CosmWasm/wasmd/compare/v0.15.0...HEAD) diff --git a/contrib/local/00-genesis.sh b/contrib/local/00-genesis.sh index 3c23b8d00f..29ef14f255 100755 --- a/contrib/local/00-genesis.sh +++ b/contrib/local/00-genesis.sh @@ -6,7 +6,7 @@ BASE_ACCOUNT=$(wasmd keys show validator -a) echo "-----------------------" echo "## Genesis CosmWasm contract" -wasmd add-wasm-genesis-message store "$DIR/../../x/wasm/internal/keeper/testdata/hackatom.wasm" --instantiate-everybody true --builder=foo/bar:latest --run-as validator +wasmd add-wasm-genesis-message store "$DIR/../../x/wasm/keeper/testdata/hackatom.wasm" --instantiate-everybody true --builder=foo/bar:latest --run-as validator echo "-----------------------" echo "## Genesis CosmWasm instance" diff --git a/contrib/local/02-contracts.sh b/contrib/local/02-contracts.sh index 4b4cc84d7f..f95c41bf3b 100755 --- a/contrib/local/02-contracts.sh +++ b/contrib/local/02-contracts.sh @@ -5,7 +5,7 @@ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" echo "-----------------------" echo "## Add new CosmWasm contract" -RESP=$(wasmd tx wasm store "$DIR/../../x/wasm/internal/keeper/testdata/hackatom.wasm" \ +RESP=$(wasmd tx wasm store "$DIR/../../x/wasm/keeper/testdata/hackatom.wasm" \ --from validator --gas 1500000 -y --chain-id=testing --node=http://localhost:26657 -b block) CODE_ID=$(echo "$RESP" | jq -r '.logs[0].events[0].attributes[-1].value') @@ -57,7 +57,7 @@ echo "### Query new admin: $(wasmd q wasm contract $CONTRACT -o json | jq -r '.a echo "-----------------------" echo "## Migrate contract" echo "### Upload new code" -RESP=$(wasmd tx wasm store "$DIR/../../x/wasm/internal/keeper/testdata/burner.wasm" \ +RESP=$(wasmd tx wasm store "$DIR/../../x/wasm/keeper/testdata/burner.wasm" \ --from validator --gas 1000000 -y --chain-id=testing --node=http://localhost:26657 -b block) BURNER_CODE_ID=$(echo "$RESP" | jq -r '.logs[0].events[0].attributes[-1].value') diff --git a/contrib/local/03-grpc-queries.sh b/contrib/local/03-grpc-queries.sh index f4bdf8f97f..94ea59983f 100755 --- a/contrib/local/03-grpc-queries.sh +++ b/contrib/local/03-grpc-queries.sh @@ -7,23 +7,23 @@ echo "-----------------------" COSMOS_SDK_DIR=${COSMOS_SDK_DIR:-$(go list -f "{{ .Dir }}" -m github.com/cosmos/cosmos-sdk)} echo "### List all codes" -RESP=$(grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/internal/types/query.proto \ +RESP=$(grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/types/query.proto \ localhost:9090 cosmwasm.wasm.v1beta1.Query/Codes) echo "$RESP" | jq CODE_ID=$(echo "$RESP" | jq -r '.codeInfos[-1].codeId') echo "### List contract by code" -RESP=$(grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/internal/types/query.proto \ +RESP=$(grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/types/query.proto \ -d "{\"codeId\": $CODE_ID}" localhost:9090 cosmwasm.wasm.v1beta1.Query/ContractsByCode ) echo $RESP | jq echo "### Show history for contract" CONTRACT=$(echo $RESP | jq -r ".contractInfos[-1].address") -grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/internal/types/query.proto \ +grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/types/query.proto \ -d "{\"address\": \"$CONTRACT\"}" localhost:9090 cosmwasm.wasm.v1beta1.Query/ContractHistory | jq echo "### Show contract state" -grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/internal/types/query.proto \ +grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/types/query.proto \ -d "{\"address\": \"$CONTRACT\"}" localhost:9090 cosmwasm.wasm.v1beta1.Query/AllContractState | jq echo "Empty state due to 'burner' contract cleanup" diff --git a/doc/proto.md b/doc/proto.md index a1ae498748..6637b9a28f 100644 --- a/doc/proto.md +++ b/doc/proto.md @@ -3,18 +3,18 @@ ## Table of Contents -- [x/wasm/internal/types/genesis.proto](#x/wasm/internal/types/genesis.proto) +- [x/wasm/types/genesis.proto](#x/wasm/types/genesis.proto) - [Code](#cosmwasm.wasm.v1beta1.Code) - [Contract](#cosmwasm.wasm.v1beta1.Contract) - [GenesisState](#cosmwasm.wasm.v1beta1.GenesisState) - [GenesisState.GenMsgs](#cosmwasm.wasm.v1beta1.GenesisState.GenMsgs) - [Sequence](#cosmwasm.wasm.v1beta1.Sequence) -- [x/wasm/internal/types/ibc.proto](#x/wasm/internal/types/ibc.proto) +- [x/wasm/types/ibc.proto](#x/wasm/types/ibc.proto) - [MsgIBCCloseChannel](#cosmwasm.wasm.v1beta1.MsgIBCCloseChannel) - [MsgIBCSend](#cosmwasm.wasm.v1beta1.MsgIBCSend) -- [x/wasm/internal/types/proposal.proto](#x/wasm/internal/types/proposal.proto) +- [x/wasm/types/proposal.proto](#x/wasm/types/proposal.proto) - [ClearAdminProposal](#cosmwasm.wasm.v1beta1.ClearAdminProposal) - [InstantiateContractProposal](#cosmwasm.wasm.v1beta1.InstantiateContractProposal) - [MigrateContractProposal](#cosmwasm.wasm.v1beta1.MigrateContractProposal) @@ -23,7 +23,7 @@ - [UnpinCodesProposal](#cosmwasm.wasm.v1beta1.UnpinCodesProposal) - [UpdateAdminProposal](#cosmwasm.wasm.v1beta1.UpdateAdminProposal) -- [x/wasm/internal/types/query.proto](#x/wasm/internal/types/query.proto) +- [x/wasm/types/query.proto](#x/wasm/types/query.proto) - [CodeInfoResponse](#cosmwasm.wasm.v1beta1.CodeInfoResponse) - [ContractInfoWithAddress](#cosmwasm.wasm.v1beta1.ContractInfoWithAddress) - [QueryAllContractStateRequest](#cosmwasm.wasm.v1beta1.QueryAllContractStateRequest) @@ -45,7 +45,7 @@ - [Query](#cosmwasm.wasm.v1beta1.Query) -- [x/wasm/internal/types/tx.proto](#x/wasm/internal/types/tx.proto) +- [x/wasm/types/tx.proto](#x/wasm/types/tx.proto) - [MsgClearAdmin](#cosmwasm.wasm.v1beta1.MsgClearAdmin) - [MsgClearAdminResponse](#cosmwasm.wasm.v1beta1.MsgClearAdminResponse) - [MsgExecuteContract](#cosmwasm.wasm.v1beta1.MsgExecuteContract) @@ -61,7 +61,7 @@ - [Msg](#cosmwasm.wasm.v1beta1.Msg) -- [x/wasm/internal/types/types.proto](#x/wasm/internal/types/types.proto) +- [x/wasm/types/types.proto](#x/wasm/types/types.proto) - [AbsoluteTxPosition](#cosmwasm.wasm.v1beta1.AbsoluteTxPosition) - [AccessConfig](#cosmwasm.wasm.v1beta1.AccessConfig) - [AccessTypeParam](#cosmwasm.wasm.v1beta1.AccessTypeParam) @@ -78,10 +78,10 @@ - +

Top

-## x/wasm/internal/types/genesis.proto +## x/wasm/types/genesis.proto @@ -182,10 +182,10 @@ Sequence key and value of an id generation counter - +

Top

-## x/wasm/internal/types/ibc.proto +## x/wasm/types/ibc.proto @@ -231,10 +231,10 @@ MsgIBCSend - +

Top

-## x/wasm/internal/types/proposal.proto +## x/wasm/types/proposal.proto @@ -379,10 +379,10 @@ UpdateAdminProposal gov proposal content type to set an admin for a contract. - +

Top

-## x/wasm/internal/types/query.proto +## x/wasm/types/query.proto @@ -698,10 +698,10 @@ Query provides defines the gRPC querier service - +

Top

-## x/wasm/internal/types/tx.proto +## x/wasm/types/tx.proto @@ -918,10 +918,10 @@ Msg defines the wasm Msg service. - +

Top

-## x/wasm/internal/types/types.proto +## x/wasm/types/types.proto diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index 187e0ec113..d355ddda50 100755 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -2,7 +2,7 @@ set -eo pipefail -PROJECT_PROTO_DIR=x/wasm/internal/types/ +PROJECT_PROTO_DIR=x/wasm/types/ COSMOS_SDK_DIR=${COSMOS_SDK_DIR:-$(go list -f "{{ .Dir }}" -m github.com/cosmos/cosmos-sdk)} # Generate Go types from protobuf diff --git a/x/wasm/Governance.md b/x/wasm/Governance.md index 5be058497d..39295a0d7b 100644 --- a/x/wasm/Governance.md +++ b/x/wasm/Governance.md @@ -14,22 +14,22 @@ We have added 5 new wasm specific proposal types that cover the contract's live * `UpdateAdminProposal` - set a new admin for a contract * `ClearAdminProposal` - clear admin for a contract to prevent further migrations -For details see the proposal type [implementation](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/internal/types/proposal.go) +For details see the proposal type [implementation](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/types/proposal.go) A wasm message but no proposal type: * `ExecuteContract` - execute a command on a wasm contract ### Unit tests -[Proposal type validations](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/internal/types/proposal_test.go) +[Proposal type validations](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/types/proposal_test.go) ## Proposal Handler -The [wasmd proposal_handler](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/internal/keeper/proposal_handler.go) implements the `gov.Handler` function +The [wasmd proposal_handler](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/keeper/proposal_handler.go) implements the `gov.Handler` function and executes the wasmd proposal types after a successful tally. -The proposal handler uses a [`GovAuthorizationPolicy`](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/internal/keeper/authz_policy.go#L29) to bypass the existing contract's authorization policy. +The proposal handler uses a [`GovAuthorizationPolicy`](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/keeper/authz_policy.go#L29) to bypass the existing contract's authorization policy. ### Tests -* [Integration: Submit and execute proposal](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/internal/keeper/proposal_integration_test.go) +* [Integration: Submit and execute proposal](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/keeper/proposal_integration_test.go) ## Gov Integration The wasmd proposal handler can be added to the gov router in the [abci app](https://github.com/CosmWasm/wasmd/blob/master/app/app.go#L306) @@ -44,7 +44,7 @@ Settings via sdk `params` module: - `code_upload_access` - who can upload a wasm binary: `Nobody`, `Everybody`, `OnlyAddress` - `instantiate_default_permission` - platform default, who can instantiate a wasm binary when the code owner has not set it -See [params.go](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/internal/types/params.go) +See [params.go](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/types/params.go) ### Init Params Via Genesis @@ -69,9 +69,9 @@ As gov proposals bypass the existing authorzation policy they are diabled and re ``` ### Tests -* [params validation unit tests](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/internal/types/params_test.go) -* [genesis validation tests](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/internal/types/genesis_test.go) -* [policy integration tests](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/internal/keeper/keeper_test.go) +* [params validation unit tests](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/types/params_test.go) +* [genesis validation tests](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/types/genesis_test.go) +* [policy integration tests](https://github.com/CosmWasm/wasmd/blob/master/x/wasm/keeper/keeper_test.go) ## CLI diff --git a/x/wasm/alias.go b/x/wasm/alias.go index 608c1ec3fd..50129990a8 100644 --- a/x/wasm/alias.go +++ b/x/wasm/alias.go @@ -1,13 +1,13 @@ // nolint // autogenerated code using github.com/rigelrozanski/multitool // aliases generated for the following subdirectories: -// ALIASGEN: github.com/cosmwasm/wasmd/x/wasm/internal/types -// ALIASGEN: github.com/cosmwasm/wasmd/x/wasm/internal/keeper +// ALIASGEN: github.com/cosmwasm/wasmd/x/wasm/types +// ALIASGEN: github.com/cosmwasm/wasmd/x/wasm/keeper package wasm import ( - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/keeper" + "github.com/CosmWasm/wasmd/x/wasm/types" ) const ( diff --git a/x/wasm/client/cli/genesis_msg.go b/x/wasm/client/cli/genesis_msg.go index 2dbc5f1fb1..b881d90372 100644 --- a/x/wasm/client/cli/genesis_msg.go +++ b/x/wasm/client/cli/genesis_msg.go @@ -9,7 +9,7 @@ import ( "errors" "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/keyring" diff --git a/x/wasm/client/cli/genesis_msg_test.go b/x/wasm/client/cli/genesis_msg_test.go index d227d48921..5f88bf6575 100644 --- a/x/wasm/client/cli/genesis_msg_test.go +++ b/x/wasm/client/cli/genesis_msg_test.go @@ -8,8 +8,8 @@ import ( "path" "testing" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/keeper" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/hd" diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index 75358cf2af..d36b82a5a6 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -3,7 +3,7 @@ package cli import ( "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/wasm/client/cli/new_tx.go b/x/wasm/client/cli/new_tx.go index aac409f424..b88cb44b47 100644 --- a/x/wasm/client/cli/new_tx.go +++ b/x/wasm/client/cli/new_tx.go @@ -3,7 +3,7 @@ package cli import ( "strconv" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" diff --git a/x/wasm/client/cli/query.go b/x/wasm/client/cli/query.go index 4a1faed087..5cca7c1fea 100644 --- a/x/wasm/client/cli/query.go +++ b/x/wasm/client/cli/query.go @@ -10,7 +10,7 @@ import ( "io/ioutil" "strconv" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" codectypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/x/wasm/client/cli/tx.go b/x/wasm/client/cli/tx.go index e72d2c302c..a400fe9bc8 100644 --- a/x/wasm/client/cli/tx.go +++ b/x/wasm/client/cli/tx.go @@ -7,7 +7,7 @@ import ( "strconv" wasmUtils "github.com/CosmWasm/wasmd/x/wasm/client/utils" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" diff --git a/x/wasm/client/proposal_handler_test.go b/x/wasm/client/proposal_handler_test.go index 301f3018ab..6a289f42d7 100644 --- a/x/wasm/client/proposal_handler_test.go +++ b/x/wasm/client/proposal_handler_test.go @@ -9,7 +9,7 @@ import ( "os" "testing" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" + "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" diff --git a/x/wasm/client/rest/gov.go b/x/wasm/client/rest/gov.go index d45736051c..0812e7ee3f 100644 --- a/x/wasm/client/rest/gov.go +++ b/x/wasm/client/rest/gov.go @@ -4,7 +4,7 @@ import ( "encoding/json" "net/http" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/wasm/client/rest/new_tx.go b/x/wasm/client/rest/new_tx.go index 417380c0ba..4be0e0d337 100644 --- a/x/wasm/client/rest/new_tx.go +++ b/x/wasm/client/rest/new_tx.go @@ -3,7 +3,7 @@ package rest import ( "net/http" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/types/rest" diff --git a/x/wasm/client/rest/query.go b/x/wasm/client/rest/query.go index 7fc1741078..60e849ec98 100644 --- a/x/wasm/client/rest/query.go +++ b/x/wasm/client/rest/query.go @@ -8,8 +8,8 @@ import ( "net/http" "strconv" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/keeper" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/client" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/rest" diff --git a/x/wasm/client/rest/tx.go b/x/wasm/client/rest/tx.go index 667e1ac3bd..b1c49d7181 100644 --- a/x/wasm/client/rest/tx.go +++ b/x/wasm/client/rest/tx.go @@ -5,7 +5,7 @@ import ( "strconv" wasmUtils "github.com/CosmWasm/wasmd/x/wasm/client/utils" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/wasm/client/utils/utils_test.go b/x/wasm/client/utils/utils_test.go index b6075d1b27..87a859911e 100644 --- a/x/wasm/client/utils/utils_test.go +++ b/x/wasm/client/utils/utils_test.go @@ -7,7 +7,7 @@ import ( ) func GetTestData() ([]byte, []byte, []byte, error) { - wasmCode, err := ioutil.ReadFile("../../internal/keeper/testdata/hackatom.wasm") + wasmCode, err := ioutil.ReadFile("../../keeper/testdata/hackatom.wasm") if err != nil { return nil, nil, nil, err diff --git a/x/wasm/handler.go b/x/wasm/handler.go index 4ef66bcd3d..a3190cdd2f 100644 --- a/x/wasm/handler.go +++ b/x/wasm/handler.go @@ -2,8 +2,8 @@ package wasm import ( "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/keeper" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/gogo/protobuf/proto" abci "github.com/tendermint/tendermint/abci/types" diff --git a/x/wasm/ibc.go b/x/wasm/ibc.go index b887b772ce..6529aac67a 100644 --- a/x/wasm/ibc.go +++ b/x/wasm/ibc.go @@ -1,7 +1,7 @@ package wasm import ( - wasmTypes "github.com/CosmWasm/wasmd/x/wasm/internal/types" + wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" diff --git a/x/wasm/ibc_reflect_test.go b/x/wasm/ibc_reflect_test.go index 4ffde0ba3d..8abe168cb1 100644 --- a/x/wasm/ibc_reflect_test.go +++ b/x/wasm/ibc_reflect_test.go @@ -2,7 +2,7 @@ package wasm_test import ( "github.com/CosmWasm/wasmd/x/wasm/ibctesting" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmvmtypes "github.com/CosmWasm/wasmvm/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" ibcexported "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" @@ -20,14 +20,14 @@ func TestIBCReflectContract(t *testing.T) { coordinator.CommitBlock(chainA, chainB) initMsg := []byte(`{}`) - codeID := chainA.StoreCodeFile("./internal/keeper/testdata/ibc_reflect_send.wasm").CodeID + codeID := chainA.StoreCodeFile("./keeper/testdata/ibc_reflect_send.wasm").CodeID sendContractAddr := chainA.InstantiateContract(codeID, initMsg) - reflectID := chainB.StoreCodeFile("./internal/keeper/testdata/reflect.wasm").CodeID + reflectID := chainB.StoreCodeFile("./keeper/testdata/reflect.wasm").CodeID initMsg = wasmkeeper.IBCReflectInitMsg{ ReflectCodeID: reflectID, }.GetBytes(t) - codeID = chainB.StoreCodeFile("./internal/keeper/testdata/ibc_reflect.wasm").CodeID + codeID = chainB.StoreCodeFile("./keeper/testdata/ibc_reflect.wasm").CodeID reflectContractAddr := chainB.InstantiateContract(codeID, initMsg) var ( diff --git a/x/wasm/ibctesting/chain.go b/x/wasm/ibctesting/chain.go index 67216b3888..7c7729f340 100644 --- a/x/wasm/ibctesting/chain.go +++ b/x/wasm/ibctesting/chain.go @@ -4,7 +4,7 @@ import ( "bytes" "fmt" wasmd "github.com/CosmWasm/wasmd/app" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" + "github.com/CosmWasm/wasmd/x/wasm/keeper" ibctesting "github.com/cosmos/cosmos-sdk/x/ibc/testing" "io/ioutil" "os" diff --git a/x/wasm/ibctesting/coordinator.go b/x/wasm/ibctesting/coordinator.go index 1f4b83b25b..ab0c22b257 100644 --- a/x/wasm/ibctesting/coordinator.go +++ b/x/wasm/ibctesting/coordinator.go @@ -2,7 +2,7 @@ package ibctesting import ( "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" + "github.com/CosmWasm/wasmd/x/wasm/keeper" ibctesting "github.com/cosmos/cosmos-sdk/x/ibc/testing" "strconv" "testing" diff --git a/x/wasm/ibctesting/wasm.go b/x/wasm/ibctesting/wasm.go index 5ffd298a72..36bd6d5c27 100644 --- a/x/wasm/ibctesting/wasm.go +++ b/x/wasm/ibctesting/wasm.go @@ -6,7 +6,7 @@ import ( "encoding/json" "fmt" wasmd "github.com/CosmWasm/wasmd/app" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/golang/protobuf/proto" "github.com/stretchr/testify/require" diff --git a/x/wasm/internal/keeper/api.go b/x/wasm/keeper/api.go similarity index 100% rename from x/wasm/internal/keeper/api.go rename to x/wasm/keeper/api.go diff --git a/x/wasm/internal/keeper/authz_policy.go b/x/wasm/keeper/authz_policy.go similarity index 95% rename from x/wasm/internal/keeper/authz_policy.go rename to x/wasm/keeper/authz_policy.go index 9193cd9cec..6a8c34676d 100644 --- a/x/wasm/internal/keeper/authz_policy.go +++ b/x/wasm/keeper/authz_policy.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/wasm/internal/keeper/bench_test.go b/x/wasm/keeper/bench_test.go similarity index 96% rename from x/wasm/internal/keeper/bench_test.go rename to x/wasm/keeper/bench_test.go index 44e17930f1..341236887a 100644 --- a/x/wasm/internal/keeper/bench_test.go +++ b/x/wasm/keeper/bench_test.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/stretchr/testify/require" "github.com/syndtr/goleveldb/leveldb/opt" dbm "github.com/tendermint/tm-db" diff --git a/x/wasm/internal/keeper/genesis.go b/x/wasm/keeper/genesis.go similarity index 98% rename from x/wasm/internal/keeper/genesis.go rename to x/wasm/keeper/genesis.go index 391b45f936..49d71ae8c1 100644 --- a/x/wasm/internal/keeper/genesis.go +++ b/x/wasm/keeper/genesis.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" abci "github.com/tendermint/tendermint/abci/types" diff --git a/x/wasm/internal/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go similarity index 99% rename from x/wasm/internal/keeper/genesis_test.go rename to x/wasm/keeper/genesis_test.go index 27fd6edaf7..2dc2fa6821 100644 --- a/x/wasm/internal/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -13,8 +13,8 @@ import ( "testing" "time" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" - wasmTypes "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" + wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" diff --git a/x/wasm/internal/keeper/handler_plugin.go b/x/wasm/keeper/handler_plugin.go similarity index 99% rename from x/wasm/internal/keeper/handler_plugin.go rename to x/wasm/keeper/handler_plugin.go index e5cb369375..cc8c5b3ccd 100644 --- a/x/wasm/internal/keeper/handler_plugin.go +++ b/x/wasm/keeper/handler_plugin.go @@ -3,7 +3,7 @@ package keeper import ( "errors" "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/wasm/internal/keeper/handler_plugin_encoders.go b/x/wasm/keeper/handler_plugin_encoders.go similarity index 99% rename from x/wasm/internal/keeper/handler_plugin_encoders.go rename to x/wasm/keeper/handler_plugin_encoders.go index d2668f26d0..1381026518 100644 --- a/x/wasm/internal/keeper/handler_plugin_encoders.go +++ b/x/wasm/keeper/handler_plugin_encoders.go @@ -3,7 +3,7 @@ package keeper import ( "encoding/json" "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/wasm/internal/keeper/handler_plugin_encoders_test.go b/x/wasm/keeper/handler_plugin_encoders_test.go similarity index 99% rename from x/wasm/internal/keeper/handler_plugin_encoders_test.go rename to x/wasm/keeper/handler_plugin_encoders_test.go index bd70eeb6d1..78af04d47f 100644 --- a/x/wasm/internal/keeper/handler_plugin_encoders_test.go +++ b/x/wasm/keeper/handler_plugin_encoders_test.go @@ -2,7 +2,7 @@ package keeper import ( "encoding/json" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" codectypes "github.com/cosmos/cosmos-sdk/codec/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" @@ -11,7 +11,7 @@ import ( "github.com/golang/protobuf/proto" "testing" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" diff --git a/x/wasm/internal/keeper/handler_plugin_test.go b/x/wasm/keeper/handler_plugin_test.go similarity index 98% rename from x/wasm/internal/keeper/handler_plugin_test.go rename to x/wasm/keeper/handler_plugin_test.go index f28be41ade..f8cbe9c8b5 100644 --- a/x/wasm/internal/keeper/handler_plugin_test.go +++ b/x/wasm/keeper/handler_plugin_test.go @@ -2,8 +2,8 @@ package keeper import ( "encoding/json" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/wasm/internal/keeper/ibc.go b/x/wasm/keeper/ibc.go similarity index 97% rename from x/wasm/internal/keeper/ibc.go rename to x/wasm/keeper/ibc.go index 5939be7a99..6e9cac7b0f 100644 --- a/x/wasm/internal/keeper/ibc.go +++ b/x/wasm/keeper/ibc.go @@ -3,7 +3,7 @@ package keeper import ( "strings" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" diff --git a/x/wasm/internal/keeper/ibc_test.go b/x/wasm/keeper/ibc_test.go similarity index 100% rename from x/wasm/internal/keeper/ibc_test.go rename to x/wasm/keeper/ibc_test.go diff --git a/x/wasm/internal/keeper/ioutil.go b/x/wasm/keeper/ioutil.go similarity index 95% rename from x/wasm/internal/keeper/ioutil.go rename to x/wasm/keeper/ioutil.go index dd3bc31ce3..5bb7bbbf92 100644 --- a/x/wasm/internal/keeper/ioutil.go +++ b/x/wasm/keeper/ioutil.go @@ -6,7 +6,7 @@ import ( "io" "io/ioutil" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" ) // magic bytes to identify gzip. diff --git a/x/wasm/internal/keeper/ioutil_test.go b/x/wasm/keeper/ioutil_test.go similarity index 97% rename from x/wasm/internal/keeper/ioutil_test.go rename to x/wasm/keeper/ioutil_test.go index 972a3ed495..b126e87fde 100644 --- a/x/wasm/internal/keeper/ioutil_test.go +++ b/x/wasm/keeper/ioutil_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/x/wasm/internal/keeper/keeper.go b/x/wasm/keeper/keeper.go similarity index 99% rename from x/wasm/internal/keeper/keeper.go rename to x/wasm/keeper/keeper.go index 9c46232317..ef487004bb 100644 --- a/x/wasm/internal/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -4,7 +4,7 @@ import ( "bytes" "encoding/binary" "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/codec" diff --git a/x/wasm/internal/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go similarity index 99% rename from x/wasm/internal/keeper/keeper_test.go rename to x/wasm/keeper/keeper_test.go index 11433229d7..85de5c861d 100644 --- a/x/wasm/internal/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -4,7 +4,7 @@ import ( "bytes" "encoding/json" "errors" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -12,7 +12,7 @@ import ( "testing" "time" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" stypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" diff --git a/x/wasm/internal/keeper/legacy_querier.go b/x/wasm/keeper/legacy_querier.go similarity index 99% rename from x/wasm/internal/keeper/legacy_querier.go rename to x/wasm/keeper/legacy_querier.go index 12eb987eaf..ac66f2236f 100644 --- a/x/wasm/internal/keeper/legacy_querier.go +++ b/x/wasm/keeper/legacy_querier.go @@ -7,7 +7,7 @@ import ( "strconv" "strings" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" abci "github.com/tendermint/tendermint/abci/types" diff --git a/x/wasm/internal/keeper/legacy_querier_test.go b/x/wasm/keeper/legacy_querier_test.go similarity index 99% rename from x/wasm/internal/keeper/legacy_querier_test.go rename to x/wasm/keeper/legacy_querier_test.go index 80379f1de5..f056189981 100644 --- a/x/wasm/internal/keeper/legacy_querier_test.go +++ b/x/wasm/keeper/legacy_querier_test.go @@ -7,7 +7,7 @@ import ( "io/ioutil" "testing" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "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" diff --git a/x/wasm/internal/keeper/msg_server.go b/x/wasm/keeper/msg_server.go similarity index 99% rename from x/wasm/internal/keeper/msg_server.go rename to x/wasm/keeper/msg_server.go index 58e96aaeea..47ac36a344 100644 --- a/x/wasm/internal/keeper/msg_server.go +++ b/x/wasm/keeper/msg_server.go @@ -3,7 +3,7 @@ package keeper import ( "context" "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) diff --git a/x/wasm/internal/keeper/options.go b/x/wasm/keeper/options.go similarity index 97% rename from x/wasm/internal/keeper/options.go rename to x/wasm/keeper/options.go index cdb8590366..3e399efad3 100644 --- a/x/wasm/internal/keeper/options.go +++ b/x/wasm/keeper/options.go @@ -2,7 +2,7 @@ package keeper import ( "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" ) type optsFn func(*Keeper) diff --git a/x/wasm/internal/keeper/options_test.go b/x/wasm/keeper/options_test.go similarity index 93% rename from x/wasm/internal/keeper/options_test.go rename to x/wasm/keeper/options_test.go index eb6860f7fd..4b3454edb3 100644 --- a/x/wasm/internal/keeper/options_test.go +++ b/x/wasm/keeper/options_test.go @@ -1,8 +1,8 @@ package keeper import ( - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/types" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" distributionkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" diff --git a/x/wasm/internal/keeper/proposal_handler.go b/x/wasm/keeper/proposal_handler.go similarity index 99% rename from x/wasm/internal/keeper/proposal_handler.go rename to x/wasm/keeper/proposal_handler.go index 878c6a9fc9..adc584a3d5 100644 --- a/x/wasm/internal/keeper/proposal_handler.go +++ b/x/wasm/keeper/proposal_handler.go @@ -5,7 +5,7 @@ import ( "strconv" "strings" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" diff --git a/x/wasm/internal/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go similarity index 99% rename from x/wasm/internal/keeper/proposal_integration_test.go rename to x/wasm/keeper/proposal_integration_test.go index bd7e3f508f..869bb3f7d2 100644 --- a/x/wasm/internal/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -5,12 +5,12 @@ import ( "encoding/hex" "encoding/json" "errors" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" wasmvm "github.com/CosmWasm/wasmvm" "io/ioutil" "testing" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/cosmos/cosmos-sdk/x/params/types/proposal" diff --git a/x/wasm/internal/keeper/querier.go b/x/wasm/keeper/querier.go similarity index 99% rename from x/wasm/internal/keeper/querier.go rename to x/wasm/keeper/querier.go index 4e7fb08fae..1ac865b5b1 100644 --- a/x/wasm/internal/keeper/querier.go +++ b/x/wasm/keeper/querier.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/status" "runtime/debug" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" diff --git a/x/wasm/internal/keeper/querier_test.go b/x/wasm/keeper/querier_test.go similarity index 99% rename from x/wasm/internal/keeper/querier_test.go rename to x/wasm/keeper/querier_test.go index 42c8cd70a1..1c9c5e2064 100644 --- a/x/wasm/internal/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -4,11 +4,11 @@ import ( "encoding/base64" "encoding/json" "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" "io/ioutil" "testing" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/wasm/internal/keeper/query_plugins.go b/x/wasm/keeper/query_plugins.go similarity index 99% rename from x/wasm/internal/keeper/query_plugins.go rename to x/wasm/keeper/query_plugins.go index c4f6a299b8..b1f038359e 100644 --- a/x/wasm/internal/keeper/query_plugins.go +++ b/x/wasm/keeper/query_plugins.go @@ -3,7 +3,7 @@ package keeper import ( "encoding/json" "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" diff --git a/x/wasm/internal/keeper/query_plugins_test.go b/x/wasm/keeper/query_plugins_test.go similarity index 98% rename from x/wasm/internal/keeper/query_plugins_test.go rename to x/wasm/keeper/query_plugins_test.go index 98cc6bc24d..9baa9aa428 100644 --- a/x/wasm/internal/keeper/query_plugins_test.go +++ b/x/wasm/keeper/query_plugins_test.go @@ -1,8 +1,8 @@ package keeper import ( - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" diff --git a/x/wasm/internal/keeper/recurse_test.go b/x/wasm/keeper/recurse_test.go similarity index 98% rename from x/wasm/internal/keeper/recurse_test.go rename to x/wasm/keeper/recurse_test.go index bedb9aa0d1..92788ae436 100644 --- a/x/wasm/internal/keeper/recurse_test.go +++ b/x/wasm/keeper/recurse_test.go @@ -2,8 +2,8 @@ package keeper import ( "encoding/json" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/types" "testing" wasmvmtypes "github.com/CosmWasm/wasmvm/types" diff --git a/x/wasm/internal/keeper/reflect_test.go b/x/wasm/keeper/reflect_test.go similarity index 99% rename from x/wasm/internal/keeper/reflect_test.go rename to x/wasm/keeper/reflect_test.go index cd1272205b..3bacea8352 100644 --- a/x/wasm/internal/keeper/reflect_test.go +++ b/x/wasm/keeper/reflect_test.go @@ -7,7 +7,7 @@ import ( "strings" "testing" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/x/wasm/internal/keeper/relay.go b/x/wasm/keeper/relay.go similarity index 99% rename from x/wasm/internal/keeper/relay.go rename to x/wasm/keeper/relay.go index 862e8ce5cb..992b91480c 100644 --- a/x/wasm/internal/keeper/relay.go +++ b/x/wasm/keeper/relay.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/wasm/internal/keeper/relay_test.go b/x/wasm/keeper/relay_test.go similarity index 99% rename from x/wasm/internal/keeper/relay_test.go rename to x/wasm/keeper/relay_test.go index bcea274ccf..330e948112 100644 --- a/x/wasm/internal/keeper/relay_test.go +++ b/x/wasm/keeper/relay_test.go @@ -3,7 +3,7 @@ package keeper import ( "encoding/json" "errors" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/wasm/internal/keeper/staking_test.go b/x/wasm/keeper/staking_test.go similarity index 100% rename from x/wasm/internal/keeper/staking_test.go rename to x/wasm/keeper/staking_test.go diff --git a/x/wasm/internal/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go similarity index 100% rename from x/wasm/internal/keeper/submsg_test.go rename to x/wasm/keeper/submsg_test.go diff --git a/x/wasm/internal/keeper/test_common.go b/x/wasm/keeper/test_common.go similarity index 99% rename from x/wasm/internal/keeper/test_common.go rename to x/wasm/keeper/test_common.go index 80f40d2286..a1cc7cd93c 100644 --- a/x/wasm/internal/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -4,8 +4,8 @@ import ( "encoding/binary" "encoding/json" "fmt" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" - types "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/x/wasm/internal/keeper/test_fuzz.go b/x/wasm/keeper/test_fuzz.go similarity index 97% rename from x/wasm/internal/keeper/test_fuzz.go rename to x/wasm/keeper/test_fuzz.go index b693e28848..74d6032ce9 100644 --- a/x/wasm/internal/keeper/test_fuzz.go +++ b/x/wasm/keeper/test_fuzz.go @@ -3,7 +3,7 @@ package keeper import ( "encoding/json" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" fuzz "github.com/google/gofuzz" tmBytes "github.com/tendermint/tendermint/libs/bytes" diff --git a/x/wasm/internal/keeper/testdata/burner.wasm b/x/wasm/keeper/testdata/burner.wasm similarity index 100% rename from x/wasm/internal/keeper/testdata/burner.wasm rename to x/wasm/keeper/testdata/burner.wasm diff --git a/x/wasm/internal/keeper/testdata/download_releases.sh b/x/wasm/keeper/testdata/download_releases.sh similarity index 100% rename from x/wasm/internal/keeper/testdata/download_releases.sh rename to x/wasm/keeper/testdata/download_releases.sh diff --git a/x/wasm/internal/keeper/testdata/genesis.json b/x/wasm/keeper/testdata/genesis.json similarity index 100% rename from x/wasm/internal/keeper/testdata/genesis.json rename to x/wasm/keeper/testdata/genesis.json diff --git a/x/wasm/internal/keeper/testdata/hackatom.wasm b/x/wasm/keeper/testdata/hackatom.wasm similarity index 100% rename from x/wasm/internal/keeper/testdata/hackatom.wasm rename to x/wasm/keeper/testdata/hackatom.wasm diff --git a/x/wasm/internal/keeper/testdata/hackatom.wasm.gzip b/x/wasm/keeper/testdata/hackatom.wasm.gzip similarity index 100% rename from x/wasm/internal/keeper/testdata/hackatom.wasm.gzip rename to x/wasm/keeper/testdata/hackatom.wasm.gzip diff --git a/x/wasm/internal/keeper/testdata/ibc_reflect.wasm b/x/wasm/keeper/testdata/ibc_reflect.wasm similarity index 100% rename from x/wasm/internal/keeper/testdata/ibc_reflect.wasm rename to x/wasm/keeper/testdata/ibc_reflect.wasm diff --git a/x/wasm/internal/keeper/testdata/ibc_reflect_send.wasm b/x/wasm/keeper/testdata/ibc_reflect_send.wasm similarity index 100% rename from x/wasm/internal/keeper/testdata/ibc_reflect_send.wasm rename to x/wasm/keeper/testdata/ibc_reflect_send.wasm diff --git a/x/wasm/internal/keeper/testdata/reflect.wasm b/x/wasm/keeper/testdata/reflect.wasm similarity index 100% rename from x/wasm/internal/keeper/testdata/reflect.wasm rename to x/wasm/keeper/testdata/reflect.wasm diff --git a/x/wasm/internal/keeper/testdata/staking.wasm b/x/wasm/keeper/testdata/staking.wasm similarity index 100% rename from x/wasm/internal/keeper/testdata/staking.wasm rename to x/wasm/keeper/testdata/staking.wasm diff --git a/x/wasm/internal/keeper/wasmtesting/coin_transferrer.go b/x/wasm/keeper/wasmtesting/coin_transferrer.go similarity index 100% rename from x/wasm/internal/keeper/wasmtesting/coin_transferrer.go rename to x/wasm/keeper/wasmtesting/coin_transferrer.go diff --git a/x/wasm/internal/keeper/wasmtesting/messenger.go b/x/wasm/keeper/wasmtesting/messenger.go similarity index 100% rename from x/wasm/internal/keeper/wasmtesting/messenger.go rename to x/wasm/keeper/wasmtesting/messenger.go diff --git a/x/wasm/internal/keeper/wasmtesting/mock_engine.go b/x/wasm/keeper/wasmtesting/mock_engine.go similarity index 99% rename from x/wasm/internal/keeper/wasmtesting/mock_engine.go rename to x/wasm/keeper/wasmtesting/mock_engine.go index 5a8ae940d2..d0dc0d695e 100644 --- a/x/wasm/internal/keeper/wasmtesting/mock_engine.go +++ b/x/wasm/keeper/wasmtesting/mock_engine.go @@ -3,7 +3,7 @@ package wasmtesting import ( "bytes" "crypto/sha256" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" diff --git a/x/wasm/internal/keeper/wasmtesting/mock_keepers.go b/x/wasm/keeper/wasmtesting/mock_keepers.go similarity index 98% rename from x/wasm/internal/keeper/wasmtesting/mock_keepers.go rename to x/wasm/keeper/wasmtesting/mock_keepers.go index f6eba2b5a4..5d9f16cd84 100644 --- a/x/wasm/internal/keeper/wasmtesting/mock_keepers.go +++ b/x/wasm/keeper/wasmtesting/mock_keepers.go @@ -1,7 +1,7 @@ package wasmtesting import ( - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" diff --git a/x/wasm/internal/keeper/wasmtesting/query_handler.go b/x/wasm/keeper/wasmtesting/query_handler.go similarity index 100% rename from x/wasm/internal/keeper/wasmtesting/query_handler.go rename to x/wasm/keeper/wasmtesting/query_handler.go diff --git a/x/wasm/module.go b/x/wasm/module.go index b74a8bb78e..4a36fb23be 100644 --- a/x/wasm/module.go +++ b/x/wasm/module.go @@ -7,9 +7,9 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/client/cli" "github.com/CosmWasm/wasmd/x/wasm/client/rest" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/simulation" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/x/wasm/module_test.go b/x/wasm/module_test.go index a239151842..35fdc0b782 100644 --- a/x/wasm/module_test.go +++ b/x/wasm/module_test.go @@ -6,8 +6,8 @@ import ( "io/ioutil" "testing" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/keeper" + "github.com/CosmWasm/wasmd/x/wasm/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" @@ -64,8 +64,8 @@ func mustLoad(path string) []byte { var ( _, _, addrAcc1 = keyPubAddr() addr1 = addrAcc1.String() - testContract = mustLoad("./internal/keeper/testdata/hackatom.wasm") - maskContract = mustLoad("./internal/keeper/testdata/reflect.wasm") + testContract = mustLoad("./keeper/testdata/hackatom.wasm") + maskContract = mustLoad("./keeper/testdata/reflect.wasm") oldContract = mustLoad("./testdata/escrow_0.7.wasm") ) diff --git a/x/wasm/relay_pingpong_test.go b/x/wasm/relay_pingpong_test.go index f3b809c070..1bed53d752 100644 --- a/x/wasm/relay_pingpong_test.go +++ b/x/wasm/relay_pingpong_test.go @@ -5,9 +5,9 @@ import ( "fmt" wasmd "github.com/CosmWasm/wasmd/app" wasmibctesting "github.com/CosmWasm/wasmd/x/wasm/ibctesting" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" - "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/internal/types" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/store/prefix" diff --git a/x/wasm/relay_test.go b/x/wasm/relay_test.go index 1d764465bf..d08a385119 100644 --- a/x/wasm/relay_test.go +++ b/x/wasm/relay_test.go @@ -4,9 +4,9 @@ import ( "encoding/json" wasmd "github.com/CosmWasm/wasmd/app" "github.com/CosmWasm/wasmd/x/wasm/ibctesting" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" - wasmtesting "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + wasmtesting "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" + "github.com/CosmWasm/wasmd/x/wasm/types" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/wasm/simulation/genesis.go b/x/wasm/simulation/genesis.go index fb61889f8a..a5eb597fe4 100644 --- a/x/wasm/simulation/genesis.go +++ b/x/wasm/simulation/genesis.go @@ -1,7 +1,7 @@ package simulation import ( - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/types/module" ) diff --git a/x/wasm/simulation/params.go b/x/wasm/simulation/params.go index 516e6c48ea..aac662f572 100644 --- a/x/wasm/simulation/params.go +++ b/x/wasm/simulation/params.go @@ -4,7 +4,7 @@ import ( "fmt" "math/rand" - "github.com/CosmWasm/wasmd/x/wasm/internal/types" + "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/codec" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" diff --git a/x/wasm/internal/types/codec.go b/x/wasm/types/codec.go similarity index 100% rename from x/wasm/internal/types/codec.go rename to x/wasm/types/codec.go diff --git a/x/wasm/internal/types/errors.go b/x/wasm/types/errors.go similarity index 100% rename from x/wasm/internal/types/errors.go rename to x/wasm/types/errors.go diff --git a/x/wasm/internal/types/events.go b/x/wasm/types/events.go similarity index 100% rename from x/wasm/internal/types/events.go rename to x/wasm/types/events.go diff --git a/x/wasm/internal/types/expected_keepers.go b/x/wasm/types/expected_keepers.go similarity index 100% rename from x/wasm/internal/types/expected_keepers.go rename to x/wasm/types/expected_keepers.go diff --git a/x/wasm/internal/types/feature_flag.go b/x/wasm/types/feature_flag.go similarity index 100% rename from x/wasm/internal/types/feature_flag.go rename to x/wasm/types/feature_flag.go diff --git a/x/wasm/internal/types/genesis.go b/x/wasm/types/genesis.go similarity index 100% rename from x/wasm/internal/types/genesis.go rename to x/wasm/types/genesis.go diff --git a/x/wasm/internal/types/genesis.pb.go b/x/wasm/types/genesis.pb.go similarity index 90% rename from x/wasm/internal/types/genesis.pb.go rename to x/wasm/types/genesis.pb.go index 25cd5d06d2..fcb3e6ba19 100644 --- a/x/wasm/internal/types/genesis.pb.go +++ b/x/wasm/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: x/wasm/internal/types/genesis.proto +// source: x/wasm/types/genesis.proto package types @@ -36,7 +36,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_52f9f2715025dba8, []int{0} + return fileDescriptor_8590831cc863f337, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -116,7 +116,7 @@ func (m *GenesisState_GenMsgs) Reset() { *m = GenesisState_GenMsgs{} } func (m *GenesisState_GenMsgs) String() string { return proto.CompactTextString(m) } func (*GenesisState_GenMsgs) ProtoMessage() {} func (*GenesisState_GenMsgs) Descriptor() ([]byte, []int) { - return fileDescriptor_52f9f2715025dba8, []int{0, 0} + return fileDescriptor_8590831cc863f337, []int{0, 0} } func (m *GenesisState_GenMsgs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -215,7 +215,7 @@ func (m *Code) Reset() { *m = Code{} } func (m *Code) String() string { return proto.CompactTextString(m) } func (*Code) ProtoMessage() {} func (*Code) Descriptor() ([]byte, []int) { - return fileDescriptor_52f9f2715025dba8, []int{1} + return fileDescriptor_8590831cc863f337, []int{1} } func (m *Code) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -283,7 +283,7 @@ func (m *Contract) Reset() { *m = Contract{} } func (m *Contract) String() string { return proto.CompactTextString(m) } func (*Contract) ProtoMessage() {} func (*Contract) Descriptor() ([]byte, []int) { - return fileDescriptor_52f9f2715025dba8, []int{2} + return fileDescriptor_8590831cc863f337, []int{2} } func (m *Contract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -343,7 +343,7 @@ func (m *Sequence) Reset() { *m = Sequence{} } func (m *Sequence) String() string { return proto.CompactTextString(m) } func (*Sequence) ProtoMessage() {} func (*Sequence) Descriptor() ([]byte, []int) { - return fileDescriptor_52f9f2715025dba8, []int{3} + return fileDescriptor_8590831cc863f337, []int{3} } func (m *Sequence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -394,53 +394,51 @@ func init() { proto.RegisterType((*Sequence)(nil), "cosmwasm.wasm.v1beta1.Sequence") } -func init() { - proto.RegisterFile("x/wasm/internal/types/genesis.proto", fileDescriptor_52f9f2715025dba8) -} - -var fileDescriptor_52f9f2715025dba8 = []byte{ - // 656 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0xc1, 0x6e, 0xd3, 0x4c, - 0x10, 0xc7, 0xe3, 0x26, 0x4e, 0x93, 0x69, 0xbe, 0xaf, 0xd5, 0xb6, 0x80, 0x95, 0x52, 0x27, 0x24, - 0x97, 0x56, 0x40, 0x4c, 0xcb, 0x91, 0x13, 0x6e, 0x11, 0x4d, 0xab, 0x22, 0xe4, 0x4a, 0x20, 0xf5, - 0x12, 0x39, 0xf6, 0xd4, 0x58, 0xd4, 0xde, 0x90, 0xdd, 0x94, 0xe4, 0x2d, 0x10, 0x0f, 0xc1, 0xb3, - 0xf4, 0xd8, 0x23, 0xa7, 0x08, 0xa5, 0x37, 0x9e, 0x02, 0xed, 0x7a, 0xe3, 0xb8, 0xa2, 0x2e, 0x17, - 0x27, 0x33, 0xfb, 0x9f, 0xdf, 0xce, 0xcc, 0xce, 0x2e, 0xb4, 0xc7, 0xd6, 0x57, 0x97, 0x45, 0x56, - 0x18, 0x73, 0x1c, 0xc6, 0xee, 0x85, 0xc5, 0x27, 0x03, 0x64, 0x56, 0x80, 0x31, 0xb2, 0x90, 0x75, - 0x06, 0x43, 0xca, 0x29, 0x79, 0xe0, 0x51, 0x16, 0x09, 0x59, 0x47, 0x7e, 0x2e, 0x77, 0xfb, 0xc8, - 0xdd, 0xdd, 0xfa, 0x46, 0x40, 0x03, 0x2a, 0x15, 0x96, 0xf8, 0x97, 0x88, 0xeb, 0x4f, 0xee, 0x26, - 0xca, 0xaf, 0x92, 0x98, 0x39, 0x92, 0x71, 0xb2, 0xde, 0xba, 0xd2, 0xa1, 0xf6, 0x36, 0xc9, 0xe0, - 0x94, 0xbb, 0x1c, 0xc9, 0x2b, 0x28, 0x0f, 0xdc, 0xa1, 0x1b, 0x31, 0x43, 0x6b, 0x6a, 0xdb, 0x2b, - 0x7b, 0x5b, 0x9d, 0x3b, 0x33, 0xea, 0xbc, 0x97, 0x22, 0xbb, 0x74, 0x35, 0x6d, 0x14, 0x1c, 0x15, - 0x42, 0x8e, 0x40, 0xf7, 0xa8, 0x8f, 0xcc, 0x58, 0x6a, 0x16, 0xb7, 0x57, 0xf6, 0x36, 0x73, 0x62, - 0xf7, 0xa9, 0x8f, 0xf6, 0x23, 0x11, 0xf9, 0x7b, 0xda, 0x58, 0x95, 0x11, 0xcf, 0x68, 0x14, 0x72, - 0x8c, 0x06, 0x7c, 0xe2, 0x24, 0x08, 0x72, 0x06, 0x55, 0x8f, 0xc6, 0x7c, 0xe8, 0x7a, 0x9c, 0x19, - 0x45, 0xc9, 0x6b, 0xe4, 0xf2, 0x12, 0x9d, 0xbd, 0xa9, 0x98, 0xeb, 0x69, 0x64, 0x86, 0xbb, 0xc0, - 0x09, 0x36, 0xc3, 0x2f, 0x23, 0x8c, 0x3d, 0x64, 0x46, 0xe9, 0x5e, 0xf6, 0xa9, 0xd2, 0x2d, 0xd8, - 0x69, 0x64, 0x96, 0x9d, 0x3a, 0x49, 0x1f, 0x2a, 0x01, 0xc6, 0xbd, 0x88, 0x05, 0xcc, 0xd0, 0x25, - 0xfa, 0x69, 0x0e, 0x3a, 0xdb, 0x77, 0x61, 0x9c, 0xb0, 0x80, 0xd9, 0x75, 0xb5, 0x0d, 0x99, 0x43, - 0x32, 0xbb, 0x2c, 0x07, 0x89, 0xa8, 0xfe, 0x7d, 0x09, 0x96, 0x55, 0x00, 0x39, 0x00, 0x60, 0x9c, - 0x0e, 0xb1, 0x27, 0xda, 0xa6, 0x0e, 0xad, 0x9d, 0xb3, 0xe3, 0x09, 0x0b, 0x4e, 0x85, 0x56, 0x1c, - 0xc0, 0x61, 0xc1, 0xa9, 0xb2, 0xb9, 0x41, 0xfa, 0xb0, 0x11, 0xc6, 0x8c, 0xbb, 0x31, 0x0f, 0x5d, - 0x2e, 0x58, 0x49, 0xab, 0x8c, 0x25, 0xc9, 0x7b, 0x9e, 0xcf, 0xeb, 0x2e, 0xa2, 0xe6, 0xc7, 0x70, - 0x58, 0x70, 0xd6, 0xc3, 0xbf, 0xdd, 0xe4, 0x03, 0xac, 0xe1, 0x18, 0xbd, 0x51, 0x96, 0x5f, 0x94, - 0xfc, 0x9d, 0x7c, 0xfe, 0x9b, 0x24, 0x22, 0xc3, 0x5e, 0xc5, 0xdb, 0x2e, 0x5b, 0x87, 0x22, 0x1b, - 0x45, 0xad, 0x1f, 0x1a, 0x94, 0x64, 0x2d, 0x6d, 0x58, 0x16, 0xbd, 0xe8, 0x85, 0xbe, 0x6c, 0x47, - 0xc9, 0x86, 0xd9, 0xb4, 0x51, 0x16, 0x4b, 0xdd, 0x03, 0xa7, 0x2c, 0x96, 0xba, 0x3e, 0xb1, 0xc5, - 0x78, 0x09, 0x51, 0x7c, 0x4e, 0x55, 0x95, 0x8d, 0x7b, 0xc6, 0xb5, 0x1b, 0x9f, 0x53, 0x35, 0xec, - 0x15, 0x4f, 0xd9, 0x64, 0x0b, 0x40, 0x32, 0xfa, 0x13, 0x8e, 0x4c, 0x96, 0x52, 0x73, 0x24, 0xd5, - 0x16, 0x0e, 0xf2, 0x10, 0xca, 0x83, 0x30, 0x8e, 0xd1, 0x37, 0x4a, 0x4d, 0x6d, 0xbb, 0xe2, 0x28, - 0xab, 0x75, 0xad, 0x41, 0x25, 0x6d, 0xca, 0x0e, 0xac, 0xcd, 0x9b, 0xd1, 0x73, 0x7d, 0x7f, 0x88, - 0x2c, 0xb9, 0x79, 0x55, 0x67, 0x75, 0xee, 0x7f, 0x9d, 0xb8, 0xc9, 0x3b, 0xf8, 0x2f, 0x95, 0x66, - 0xd2, 0x6e, 0xff, 0xe3, 0x56, 0x64, 0x52, 0xaf, 0x79, 0x19, 0x1f, 0xe9, 0xc2, 0xff, 0x29, 0x8f, - 0x89, 0x21, 0x54, 0xd7, 0xec, 0x71, 0xde, 0x69, 0x50, 0x1f, 0x2f, 0x14, 0x29, 0xcd, 0x44, 0x4e, - 0x6f, 0xcb, 0x86, 0xca, 0xfc, 0xa2, 0x90, 0x26, 0x94, 0x43, 0xbf, 0xf7, 0x19, 0x27, 0xb2, 0x8e, - 0x9a, 0x5d, 0x9d, 0x4d, 0x1b, 0x7a, 0xf7, 0xe0, 0x18, 0x27, 0x8e, 0x1e, 0xfa, 0xc7, 0x38, 0x21, - 0x1b, 0xa0, 0x5f, 0xba, 0x17, 0x23, 0x94, 0x05, 0x94, 0x9c, 0xc4, 0xb0, 0x8f, 0xae, 0x66, 0xa6, - 0x76, 0x3d, 0x33, 0xb5, 0x5f, 0x33, 0x53, 0xfb, 0x76, 0x63, 0x16, 0xae, 0x6f, 0xcc, 0xc2, 0xcf, - 0x1b, 0xb3, 0x70, 0xf6, 0x22, 0x08, 0xf9, 0xa7, 0x51, 0xbf, 0xe3, 0xd1, 0xc8, 0xda, 0xa7, 0x2c, - 0xfa, 0x28, 0x5e, 0x34, 0x91, 0x9a, 0x6f, 0x8d, 0xd5, 0xef, 0xed, 0xf7, 0xad, 0x5f, 0x96, 0xaf, - 0xdb, 0xcb, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa3, 0xad, 0xe9, 0xdd, 0x74, 0x05, 0x00, 0x00, +func init() { proto.RegisterFile("x/wasm/types/genesis.proto", fileDescriptor_8590831cc863f337) } + +var fileDescriptor_8590831cc863f337 = []byte{ + // 646 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0xc7, 0xe3, 0x26, 0x4e, 0x93, 0x69, 0xa0, 0xd5, 0xb6, 0x05, 0x2b, 0xa5, 0x49, 0x94, 0x4a, + 0xa8, 0x15, 0x90, 0xa8, 0xe5, 0xc8, 0x05, 0xdc, 0x22, 0x1a, 0xaa, 0x22, 0xe4, 0x4a, 0x20, 0xf5, + 0x12, 0xf9, 0x63, 0x6a, 0x2c, 0x6a, 0x6f, 0xc8, 0x6e, 0x4a, 0xfd, 0x16, 0x88, 0x87, 0xe0, 0x59, + 0x7a, 0xec, 0x91, 0x53, 0x84, 0xd2, 0x1b, 0x4f, 0x81, 0x76, 0xbd, 0x76, 0x1d, 0x81, 0xcb, 0xc5, + 0xf2, 0xce, 0xcc, 0xff, 0x37, 0x3b, 0xb3, 0xb3, 0x0b, 0xcd, 0xcb, 0xfe, 0x57, 0x9b, 0x85, 0x7d, + 0x1e, 0x8f, 0x90, 0xf5, 0x7d, 0x8c, 0x90, 0x05, 0xac, 0x37, 0x1a, 0x53, 0x4e, 0xc9, 0xba, 0x4b, + 0x59, 0x28, 0xbc, 0x3d, 0xf9, 0xb9, 0xd8, 0x75, 0x90, 0xdb, 0xbb, 0xcd, 0x35, 0x9f, 0xfa, 0x54, + 0x46, 0xf4, 0xc5, 0x5f, 0x12, 0xdc, 0x34, 0xe6, 0x40, 0xf2, 0xab, 0x3c, 0xeb, 0xf3, 0x9e, 0xcb, + 0xc4, 0xdc, 0xbd, 0xd2, 0xa1, 0xf1, 0x26, 0xc9, 0x77, 0xc2, 0x6d, 0x8e, 0xe4, 0x05, 0x54, 0x47, + 0xf6, 0xd8, 0x0e, 0x99, 0xa1, 0x75, 0xb4, 0xed, 0xa5, 0xbd, 0xcd, 0xde, 0x3f, 0xf3, 0xf7, 0xde, + 0xcb, 0x20, 0xb3, 0x72, 0x35, 0x6d, 0x97, 0x2c, 0x25, 0x21, 0x6f, 0x41, 0x77, 0xa9, 0x87, 0xcc, + 0x58, 0xe8, 0x94, 0xb7, 0x97, 0xf6, 0x36, 0x0a, 0xb4, 0xfb, 0xd4, 0x43, 0xf3, 0xa1, 0x50, 0xfe, + 0x9e, 0xb6, 0x97, 0xa5, 0xe2, 0x29, 0x0d, 0x03, 0x8e, 0xe1, 0x88, 0xc7, 0x56, 0x82, 0x20, 0xa7, + 0x50, 0x77, 0x69, 0xc4, 0xc7, 0xb6, 0xcb, 0x99, 0x51, 0x96, 0xbc, 0x76, 0x21, 0x2f, 0x89, 0x33, + 0x37, 0x14, 0x73, 0x35, 0x53, 0xe6, 0xb8, 0xb7, 0x38, 0xc1, 0x66, 0xf8, 0x65, 0x82, 0x91, 0x8b, + 0xcc, 0xa8, 0xdc, 0xc9, 0x3e, 0x51, 0x71, 0xb7, 0xec, 0x4c, 0x99, 0x67, 0x67, 0x46, 0xe2, 0x40, + 0xcd, 0xc7, 0x68, 0x18, 0x32, 0x9f, 0x19, 0xba, 0x44, 0x3f, 0x29, 0x40, 0xe7, 0xfb, 0x2e, 0x16, + 0xc7, 0xcc, 0x67, 0x66, 0x53, 0xa5, 0x21, 0x29, 0x24, 0x97, 0x65, 0xd1, 0x4f, 0x82, 0x9a, 0xdf, + 0x17, 0x60, 0x51, 0x09, 0xc8, 0x01, 0x00, 0xe3, 0x74, 0x8c, 0x43, 0xd1, 0x36, 0x75, 0x68, 0x5b, + 0x05, 0x19, 0x8f, 0x99, 0x7f, 0x22, 0x62, 0xc5, 0x01, 0x1c, 0x96, 0xac, 0x3a, 0x4b, 0x17, 0xc4, + 0x81, 0xb5, 0x20, 0x62, 0xdc, 0x8e, 0x78, 0x60, 0x73, 0xc1, 0x4a, 0x5a, 0x65, 0x2c, 0x48, 0xde, + 0xb3, 0x62, 0xde, 0xe0, 0x56, 0x95, 0x1e, 0xc3, 0x61, 0xc9, 0x5a, 0x0d, 0xfe, 0x36, 0x93, 0x0f, + 0xb0, 0x82, 0x97, 0xe8, 0x4e, 0xf2, 0xfc, 0xb2, 0xe4, 0xef, 0x14, 0xf3, 0x5f, 0x27, 0x8a, 0x1c, + 0x7b, 0x19, 0xe7, 0x4d, 0xa6, 0x0e, 0x65, 0x36, 0x09, 0xbb, 0x3f, 0x34, 0xa8, 0xc8, 0x5a, 0xb6, + 0x60, 0x51, 0xf4, 0x62, 0x18, 0x78, 0xb2, 0x1d, 0x15, 0x13, 0x66, 0xd3, 0x76, 0x55, 0xb8, 0x06, + 0x07, 0x56, 0x55, 0xb8, 0x06, 0x1e, 0x31, 0xc5, 0x78, 0x89, 0xa0, 0xe8, 0x8c, 0xaa, 0x2a, 0xdb, + 0x77, 0x8c, 0xeb, 0x20, 0x3a, 0xa3, 0x6a, 0xd8, 0x6b, 0xae, 0x5a, 0x93, 0x4d, 0x00, 0xc9, 0x70, + 0x62, 0x8e, 0x4c, 0x96, 0xd2, 0xb0, 0x24, 0xd5, 0x14, 0x06, 0xf2, 0x00, 0xaa, 0xa3, 0x20, 0x8a, + 0xd0, 0x33, 0x2a, 0x1d, 0x6d, 0xbb, 0x66, 0xa9, 0x55, 0xf7, 0x5a, 0x83, 0x5a, 0xd6, 0x94, 0x1d, + 0x58, 0x49, 0x9b, 0x31, 0xb4, 0x3d, 0x6f, 0x8c, 0x2c, 0xb9, 0x79, 0x75, 0x6b, 0x39, 0xb5, 0xbf, + 0x4a, 0xcc, 0xe4, 0x1d, 0xdc, 0xcb, 0x42, 0x73, 0xdb, 0xde, 0xfa, 0xcf, 0xad, 0xc8, 0x6d, 0xbd, + 0xe1, 0xe6, 0x6c, 0x64, 0x00, 0xf7, 0x33, 0x1e, 0x13, 0x43, 0xa8, 0xae, 0xd9, 0xa3, 0xa2, 0xd3, + 0xa0, 0x1e, 0x9e, 0x2b, 0x52, 0xb6, 0x13, 0x39, 0xbd, 0x5d, 0x13, 0x6a, 0xe9, 0x45, 0x21, 0x1d, + 0xa8, 0x06, 0xde, 0xf0, 0x33, 0xc6, 0xb2, 0x8e, 0x86, 0x59, 0x9f, 0x4d, 0xdb, 0xfa, 0xe0, 0xe0, + 0x08, 0x63, 0x4b, 0x0f, 0xbc, 0x23, 0x8c, 0xc9, 0x1a, 0xe8, 0x17, 0xf6, 0xf9, 0x04, 0x65, 0x01, + 0x15, 0x2b, 0x59, 0x98, 0x2f, 0xaf, 0x66, 0x2d, 0xed, 0x7a, 0xd6, 0xd2, 0x7e, 0xcd, 0x5a, 0xda, + 0xb7, 0x9b, 0x56, 0xe9, 0xfa, 0xa6, 0x55, 0xfa, 0x79, 0xd3, 0x2a, 0x9d, 0x3e, 0xf6, 0x03, 0xfe, + 0x69, 0xe2, 0xf4, 0x5c, 0x1a, 0xf6, 0xf7, 0x29, 0x0b, 0x3f, 0x8a, 0x87, 0x4c, 0x6c, 0xcd, 0xeb, + 0xe7, 0x5f, 0x35, 0xa7, 0x2a, 0xdf, 0xb4, 0xe7, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xa1, + 0x56, 0xd4, 0x4f, 0x05, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/wasm/internal/types/genesis.proto b/x/wasm/types/genesis.proto similarity index 91% rename from x/wasm/internal/types/genesis.proto rename to x/wasm/types/genesis.proto index b7c2df4b45..4c0f3163f1 100644 --- a/x/wasm/internal/types/genesis.proto +++ b/x/wasm/types/genesis.proto @@ -2,10 +2,10 @@ syntax = "proto3"; package cosmwasm.wasm.v1beta1; import "gogoproto/gogo.proto"; -import "x/wasm/internal/types/types.proto"; -import "x/wasm/internal/types/tx.proto"; +import "x/wasm/types/types.proto"; +import "x/wasm/types/tx.proto"; -option go_package = "github.com/CosmWasm/wasmd/x/wasmd/internal/types"; +option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; // GenesisState - genesis state of x/wasm message GenesisState { diff --git a/x/wasm/internal/types/genesis_test.go b/x/wasm/types/genesis_test.go similarity index 100% rename from x/wasm/internal/types/genesis_test.go rename to x/wasm/types/genesis_test.go diff --git a/x/wasm/internal/types/iavl_range_test.go b/x/wasm/types/iavl_range_test.go similarity index 100% rename from x/wasm/internal/types/iavl_range_test.go rename to x/wasm/types/iavl_range_test.go diff --git a/x/wasm/internal/types/ibc.pb.go b/x/wasm/types/ibc.pb.go similarity index 85% rename from x/wasm/internal/types/ibc.pb.go rename to x/wasm/types/ibc.pb.go index 6aec2b1bbb..e651ffde14 100644 --- a/x/wasm/internal/types/ibc.pb.go +++ b/x/wasm/types/ibc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: x/wasm/internal/types/ibc.proto +// source: x/wasm/types/ibc.proto package types @@ -42,7 +42,7 @@ func (m *MsgIBCSend) Reset() { *m = MsgIBCSend{} } func (m *MsgIBCSend) String() string { return proto.CompactTextString(m) } func (*MsgIBCSend) ProtoMessage() {} func (*MsgIBCSend) Descriptor() ([]byte, []int) { - return fileDescriptor_9e387a38c39d89d0, []int{0} + return fileDescriptor_d9bb1c22229d9ba9, []int{0} } func (m *MsgIBCSend) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -80,7 +80,7 @@ func (m *MsgIBCCloseChannel) Reset() { *m = MsgIBCCloseChannel{} } func (m *MsgIBCCloseChannel) String() string { return proto.CompactTextString(m) } func (*MsgIBCCloseChannel) ProtoMessage() {} func (*MsgIBCCloseChannel) Descriptor() ([]byte, []int) { - return fileDescriptor_9e387a38c39d89d0, []int{1} + return fileDescriptor_d9bb1c22229d9ba9, []int{1} } func (m *MsgIBCCloseChannel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -114,32 +114,31 @@ func init() { proto.RegisterType((*MsgIBCCloseChannel)(nil), "cosmwasm.wasm.v1beta1.MsgIBCCloseChannel") } -func init() { proto.RegisterFile("x/wasm/internal/types/ibc.proto", fileDescriptor_9e387a38c39d89d0) } +func init() { proto.RegisterFile("x/wasm/types/ibc.proto", fileDescriptor_d9bb1c22229d9ba9) } -var fileDescriptor_9e387a38c39d89d0 = []byte{ - // 342 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x91, 0xb1, 0x4e, 0xf3, 0x30, - 0x14, 0x85, 0x93, 0xaa, 0x7f, 0x7f, 0x61, 0x01, 0x82, 0x88, 0x4a, 0x01, 0x55, 0x4e, 0x95, 0xa9, - 0x53, 0xdc, 0xaa, 0x1b, 0x13, 0x4a, 0x16, 0x3a, 0x94, 0x21, 0x20, 0x21, 0xb1, 0x54, 0x4e, 0x62, - 0x39, 0x41, 0xb1, 0x5d, 0xd5, 0x2e, 0x6d, 0x37, 0x1e, 0x81, 0xc7, 0xea, 0xd8, 0x91, 0xa9, 0x82, - 0xf6, 0x0d, 0x3a, 0x32, 0xa1, 0xb8, 0x29, 0x22, 0x2b, 0x8b, 0xaf, 0x7d, 0xee, 0xe7, 0x2b, 0xdd, - 0x73, 0x80, 0x33, 0x47, 0x33, 0x2c, 0x19, 0xca, 0xb8, 0x22, 0x13, 0x8e, 0x73, 0xa4, 0x16, 0x63, - 0x22, 0x51, 0x16, 0xc5, 0xde, 0x78, 0x22, 0x94, 0xb0, 0x9a, 0xb1, 0x90, 0xac, 0x40, 0x3c, 0x7d, - 0xbc, 0xf4, 0x22, 0xa2, 0x70, 0xef, 0xea, 0x82, 0x0a, 0x2a, 0x34, 0x81, 0x8a, 0xdb, 0x1e, 0x76, - 0x5f, 0x6b, 0x00, 0x0c, 0x25, 0x1d, 0xf8, 0xc1, 0x3d, 0xe1, 0x89, 0xd5, 0x07, 0xff, 0xe3, 0x14, - 0x73, 0x4e, 0x72, 0xbb, 0xd6, 0x36, 0x3b, 0x47, 0xfe, 0xe5, 0x6e, 0xed, 0x34, 0x17, 0x98, 0xe5, - 0xd7, 0xae, 0x14, 0xd3, 0x49, 0x4c, 0x46, 0x65, 0xdf, 0x0d, 0x0f, 0xa4, 0x75, 0x03, 0x4e, 0x55, - 0xc6, 0x88, 0x98, 0xaa, 0x51, 0x4a, 0x32, 0x9a, 0x2a, 0xbb, 0xde, 0x36, 0x3b, 0xf5, 0xdf, 0x7f, - 0xab, 0x7d, 0x37, 0x3c, 0x29, 0x85, 0x5b, 0xfd, 0xb6, 0x06, 0xe0, 0xfc, 0x40, 0x14, 0x55, 0x2a, - 0xcc, 0xc6, 0xf6, 0x3f, 0x3d, 0xa4, 0xb5, 0x5b, 0x3b, 0x76, 0x75, 0xc8, 0x0f, 0xe2, 0x86, 0x67, - 0xa5, 0xf6, 0x70, 0x90, 0xac, 0x2e, 0xa8, 0x27, 0x58, 0x61, 0xbb, 0xd1, 0x36, 0x3b, 0xc7, 0x7e, - 0xeb, 0x6b, 0xed, 0xd8, 0x84, 0xc7, 0x22, 0xc9, 0x38, 0x45, 0xcf, 0x52, 0x70, 0x2f, 0xc4, 0xb3, - 0x21, 0x91, 0x12, 0x53, 0x12, 0x6a, 0xd2, 0x1d, 0x00, 0x6b, 0xef, 0x40, 0x90, 0x0b, 0x49, 0x82, - 0x72, 0xa9, 0xbf, 0x38, 0xe1, 0xdf, 0x2d, 0x3f, 0xa1, 0xb1, 0xdc, 0x40, 0x73, 0xb5, 0x81, 0xe6, - 0xc7, 0x06, 0x9a, 0x6f, 0x5b, 0x68, 0xac, 0xb6, 0xd0, 0x78, 0xdf, 0x42, 0xe3, 0xa9, 0x4b, 0x33, - 0x95, 0x4e, 0x23, 0x2f, 0x16, 0x0c, 0x05, 0x42, 0xb2, 0xc7, 0x22, 0xc6, 0x22, 0xa3, 0x04, 0xcd, - 0xcb, 0x5a, 0x0d, 0x35, 0x6a, 0xe8, 0x90, 0xfa, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xdb, - 0x36, 0x0f, 0xf4, 0x01, 0x00, 0x00, +var fileDescriptor_d9bb1c22229d9ba9 = []byte{ + // 332 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x91, 0x3f, 0x4f, 0xc2, 0x40, + 0x18, 0xc6, 0x5b, 0x82, 0x18, 0x2f, 0x6a, 0xb4, 0x11, 0x53, 0x0d, 0x39, 0x48, 0x07, 0xc3, 0xd4, + 0x93, 0xb0, 0x39, 0x99, 0xd6, 0x41, 0x06, 0x96, 0x6a, 0x62, 0xe2, 0x42, 0xae, 0xed, 0xe5, 0x5a, + 0xc3, 0xf5, 0x25, 0xdc, 0x21, 0xb2, 0xf9, 0x11, 0xfc, 0x58, 0x8c, 0x8c, 0x4e, 0x44, 0xe1, 0x1b, + 0x30, 0x3a, 0x99, 0x1e, 0xc5, 0xc0, 0xea, 0x72, 0x7f, 0x9e, 0xe7, 0x77, 0x6f, 0x72, 0xcf, 0x83, + 0xce, 0xdf, 0xc8, 0x98, 0x4a, 0x41, 0xd4, 0x64, 0xc0, 0x24, 0x49, 0xc3, 0xc8, 0x1d, 0x0c, 0x41, + 0x81, 0x55, 0x8d, 0x40, 0x8a, 0xdc, 0x71, 0xf5, 0xf2, 0xda, 0x0a, 0x99, 0xa2, 0xad, 0xcb, 0x33, + 0x0e, 0x1c, 0x34, 0x41, 0xf2, 0xd3, 0x1a, 0x76, 0xde, 0x4b, 0x08, 0x75, 0x25, 0xef, 0x78, 0xfe, + 0x03, 0xcb, 0x62, 0xab, 0x8d, 0xf6, 0xa3, 0x84, 0x66, 0x19, 0xeb, 0xdb, 0xa5, 0x86, 0xd9, 0x3c, + 0xf0, 0x2e, 0x56, 0xf3, 0x7a, 0x75, 0x42, 0x45, 0xff, 0xc6, 0x91, 0x30, 0x1a, 0x46, 0xac, 0x57, + 0xf8, 0x4e, 0xb0, 0x21, 0xad, 0x5b, 0x74, 0xac, 0x52, 0xc1, 0x60, 0xa4, 0x7a, 0x09, 0x4b, 0x79, + 0xa2, 0xec, 0x72, 0xc3, 0x6c, 0x96, 0xb7, 0xdf, 0xee, 0xfa, 0x4e, 0x70, 0x54, 0x08, 0xf7, 0xfa, + 0x6e, 0x75, 0xd0, 0xe9, 0x86, 0xc8, 0x77, 0xa9, 0xa8, 0x18, 0xd8, 0x7b, 0x7a, 0x48, 0x6d, 0x35, + 0xaf, 0xdb, 0xbb, 0x43, 0xfe, 0x10, 0x27, 0x38, 0x29, 0xb4, 0xc7, 0x8d, 0x64, 0x5d, 0xa3, 0x72, + 0x4c, 0x15, 0xb5, 0x2b, 0x0d, 0xb3, 0x79, 0xe8, 0xd5, 0x7e, 0xe6, 0x75, 0x9b, 0x65, 0x11, 0xc4, + 0x69, 0xc6, 0xc9, 0x8b, 0x84, 0xcc, 0x0d, 0xe8, 0xb8, 0xcb, 0xa4, 0xa4, 0x9c, 0x05, 0x9a, 0x74, + 0x3a, 0xc8, 0x5a, 0x27, 0xe0, 0xf7, 0x41, 0x32, 0xbf, 0xf8, 0xd4, 0x7f, 0x92, 0xf0, 0xee, 0xa6, + 0xdf, 0xd8, 0x98, 0x2e, 0xb0, 0x39, 0x5b, 0x60, 0xf3, 0x6b, 0x81, 0xcd, 0x8f, 0x25, 0x36, 0x66, + 0x4b, 0x6c, 0x7c, 0x2e, 0xb1, 0xf1, 0x7c, 0xc5, 0x53, 0x95, 0x8c, 0x42, 0x37, 0x02, 0x41, 0x7c, + 0x90, 0xe2, 0x29, 0x6f, 0x2f, 0xef, 0x28, 0x26, 0xdb, 0x55, 0x86, 0x15, 0x5d, 0x4d, 0xfb, 0x37, + 0x00, 0x00, 0xff, 0xff, 0x2d, 0xfe, 0x78, 0xdd, 0xe1, 0x01, 0x00, 0x00, } func (m *MsgIBCSend) Marshal() (dAtA []byte, err error) { diff --git a/x/wasm/internal/types/ibc.proto b/x/wasm/types/ibc.proto similarity index 93% rename from x/wasm/internal/types/ibc.proto rename to x/wasm/types/ibc.proto index 672bcb386e..30aa45a92e 100644 --- a/x/wasm/internal/types/ibc.proto +++ b/x/wasm/types/ibc.proto @@ -3,7 +3,7 @@ package cosmwasm.wasm.v1beta1; import "gogoproto/gogo.proto"; -option go_package = "github.com/CosmWasm/wasmd/x/wasmd/internal/types"; +option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; option (gogoproto.goproto_getters_all) = false; // MsgIBCSend diff --git a/x/wasm/internal/types/keys.go b/x/wasm/types/keys.go similarity index 100% rename from x/wasm/internal/types/keys.go rename to x/wasm/types/keys.go diff --git a/x/wasm/internal/types/keys_test.go b/x/wasm/types/keys_test.go similarity index 100% rename from x/wasm/internal/types/keys_test.go rename to x/wasm/types/keys_test.go diff --git a/x/wasm/internal/types/params.go b/x/wasm/types/params.go similarity index 100% rename from x/wasm/internal/types/params.go rename to x/wasm/types/params.go diff --git a/x/wasm/internal/types/params_test.go b/x/wasm/types/params_test.go similarity index 100% rename from x/wasm/internal/types/params_test.go rename to x/wasm/types/params_test.go diff --git a/x/wasm/internal/types/proposal.go b/x/wasm/types/proposal.go similarity index 100% rename from x/wasm/internal/types/proposal.go rename to x/wasm/types/proposal.go diff --git a/x/wasm/internal/types/proposal.pb.go b/x/wasm/types/proposal.pb.go similarity index 93% rename from x/wasm/internal/types/proposal.pb.go rename to x/wasm/types/proposal.pb.go index 825380daf0..1de60876a5 100644 --- a/x/wasm/internal/types/proposal.pb.go +++ b/x/wasm/types/proposal.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: x/wasm/internal/types/proposal.proto +// source: x/wasm/types/proposal.proto package types @@ -48,7 +48,7 @@ type StoreCodeProposal struct { func (m *StoreCodeProposal) Reset() { *m = StoreCodeProposal{} } func (*StoreCodeProposal) ProtoMessage() {} func (*StoreCodeProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_00b43267813130fb, []int{0} + return fileDescriptor_0a371ed62f288510, []int{0} } func (m *StoreCodeProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -100,7 +100,7 @@ type InstantiateContractProposal struct { func (m *InstantiateContractProposal) Reset() { *m = InstantiateContractProposal{} } func (*InstantiateContractProposal) ProtoMessage() {} func (*InstantiateContractProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_00b43267813130fb, []int{1} + return fileDescriptor_0a371ed62f288510, []int{1} } func (m *InstantiateContractProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -148,7 +148,7 @@ type MigrateContractProposal struct { func (m *MigrateContractProposal) Reset() { *m = MigrateContractProposal{} } func (*MigrateContractProposal) ProtoMessage() {} func (*MigrateContractProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_00b43267813130fb, []int{2} + return fileDescriptor_0a371ed62f288510, []int{2} } func (m *MigrateContractProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -192,7 +192,7 @@ type UpdateAdminProposal struct { func (m *UpdateAdminProposal) Reset() { *m = UpdateAdminProposal{} } func (*UpdateAdminProposal) ProtoMessage() {} func (*UpdateAdminProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_00b43267813130fb, []int{3} + return fileDescriptor_0a371ed62f288510, []int{3} } func (m *UpdateAdminProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -234,7 +234,7 @@ type ClearAdminProposal struct { func (m *ClearAdminProposal) Reset() { *m = ClearAdminProposal{} } func (*ClearAdminProposal) ProtoMessage() {} func (*ClearAdminProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_00b43267813130fb, []int{4} + return fileDescriptor_0a371ed62f288510, []int{4} } func (m *ClearAdminProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -276,7 +276,7 @@ type PinCodesProposal struct { func (m *PinCodesProposal) Reset() { *m = PinCodesProposal{} } func (*PinCodesProposal) ProtoMessage() {} func (*PinCodesProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_00b43267813130fb, []int{5} + return fileDescriptor_0a371ed62f288510, []int{5} } func (m *PinCodesProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -318,7 +318,7 @@ type UnpinCodesProposal struct { func (m *UnpinCodesProposal) Reset() { *m = UnpinCodesProposal{} } func (*UnpinCodesProposal) ProtoMessage() {} func (*UnpinCodesProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_00b43267813130fb, []int{6} + return fileDescriptor_0a371ed62f288510, []int{6} } func (m *UnpinCodesProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -357,59 +357,56 @@ func init() { proto.RegisterType((*UnpinCodesProposal)(nil), "cosmwasm.wasm.v1beta1.UnpinCodesProposal") } -func init() { - proto.RegisterFile("x/wasm/internal/types/proposal.proto", fileDescriptor_00b43267813130fb) -} - -var fileDescriptor_00b43267813130fb = []byte{ - // 742 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x55, 0xcb, 0x6e, 0xe3, 0x36, - 0x14, 0xb5, 0xe2, 0xf8, 0x11, 0xda, 0x68, 0x5d, 0xd5, 0x49, 0xd5, 0xb4, 0x90, 0x5c, 0xa5, 0x28, - 0xbc, 0xa9, 0x94, 0xa4, 0x40, 0x5f, 0x40, 0x17, 0x96, 0xbb, 0xc9, 0xc2, 0x40, 0xa0, 0x20, 0x0d, - 0x90, 0x8d, 0x41, 0x4b, 0x8c, 0xc2, 0x56, 0x22, 0x05, 0x91, 0xae, 0xe3, 0xbf, 0xe8, 0x07, 0xf4, - 0x03, 0x82, 0x6e, 0x8a, 0xfe, 0x45, 0x96, 0x59, 0xa6, 0x1b, 0xcd, 0xc4, 0xd9, 0xcc, 0xda, 0xcb, - 0x59, 0x0d, 0x48, 0xca, 0x1e, 0x67, 0x10, 0x0c, 0x02, 0xcc, 0x03, 0x98, 0x8d, 0xe4, 0xcb, 0x7b, - 0x78, 0xcf, 0xe1, 0xb9, 0xd7, 0x22, 0xf8, 0xfa, 0xc2, 0x9d, 0x40, 0x96, 0xb8, 0x98, 0x70, 0x94, - 0x11, 0x18, 0xbb, 0x7c, 0x9a, 0x22, 0xe6, 0xa6, 0x19, 0x4d, 0x29, 0x83, 0xb1, 0x93, 0x66, 0x94, - 0x53, 0x7d, 0x33, 0xa0, 0x2c, 0x11, 0x38, 0x47, 0x3e, 0xfe, 0xdc, 0x1b, 0x21, 0x0e, 0xf7, 0xb6, - 0xdb, 0x11, 0x8d, 0xa8, 0x44, 0xb8, 0xe2, 0x97, 0x02, 0x6f, 0x9b, 0x02, 0x4c, 0x99, 0x3b, 0x82, - 0x0c, 0xb9, 0x05, 0xd4, 0x0d, 0x28, 0x26, 0x45, 0xfe, 0xab, 0x87, 0x29, 0xe5, 0x53, 0x41, 0xec, - 0xcb, 0x35, 0xf0, 0xc9, 0x11, 0xa7, 0x19, 0xea, 0xd3, 0x10, 0x1d, 0x16, 0x5a, 0xf4, 0x36, 0xa8, - 0x70, 0xcc, 0x63, 0x64, 0x68, 0x1d, 0xad, 0xbb, 0xe1, 0xab, 0x40, 0xef, 0x80, 0x46, 0x88, 0x58, - 0x90, 0xe1, 0x94, 0x63, 0x4a, 0x8c, 0x35, 0x99, 0x5b, 0x5d, 0xd2, 0x37, 0x41, 0x35, 0x1b, 0x93, - 0x21, 0x64, 0x46, 0x59, 0x6d, 0xcc, 0xc6, 0xa4, 0xc7, 0xf4, 0xef, 0xc1, 0x47, 0x42, 0xc7, 0x70, - 0x34, 0xe5, 0x68, 0x18, 0xd0, 0x10, 0x19, 0xeb, 0x1d, 0xad, 0xdb, 0xf4, 0x5a, 0xb3, 0xdc, 0x6a, - 0x9e, 0xf4, 0x8e, 0x06, 0xde, 0x94, 0x4b, 0x01, 0x7e, 0x53, 0xe0, 0x16, 0x91, 0xbe, 0x05, 0xaa, - 0x8c, 0x8e, 0xb3, 0x00, 0x19, 0x15, 0x59, 0xae, 0x88, 0x74, 0x03, 0xd4, 0x46, 0x63, 0x1c, 0x87, - 0x28, 0x33, 0xaa, 0x32, 0xb1, 0x08, 0xf5, 0x53, 0xb0, 0x85, 0x09, 0xe3, 0x90, 0x70, 0x0c, 0x39, - 0x1a, 0xa6, 0x28, 0x4b, 0x30, 0x63, 0x42, 0x6d, 0xad, 0xa3, 0x75, 0x1b, 0xfb, 0x3b, 0xce, 0x83, - 0xfe, 0x3a, 0xbd, 0x20, 0x40, 0x8c, 0xf5, 0x29, 0x39, 0xc3, 0x91, 0xbf, 0xb9, 0x52, 0xe2, 0x70, - 0x59, 0xc1, 0xfe, 0x7f, 0x0d, 0x7c, 0x71, 0xf0, 0x32, 0xd3, 0xa7, 0x84, 0x67, 0x30, 0xe0, 0xef, - 0xca, 0xb4, 0x36, 0xa8, 0xc0, 0x30, 0xc1, 0x44, 0x7a, 0xb5, 0xe1, 0xab, 0x40, 0xdf, 0x01, 0x35, - 0x61, 0xe0, 0x10, 0x87, 0xd2, 0x93, 0x75, 0x0f, 0xcc, 0x72, 0xab, 0x2a, 0xdc, 0x3a, 0xf8, 0xd5, - 0xaf, 0x8a, 0xd4, 0x41, 0x28, 0xb6, 0xc6, 0x70, 0x84, 0xe2, 0xc2, 0x1d, 0x15, 0xe8, 0x3f, 0x80, - 0x3a, 0x26, 0x98, 0x0f, 0x13, 0x16, 0x49, 0x37, 0x9a, 0xde, 0x97, 0xcf, 0x73, 0xcb, 0x40, 0x24, - 0xa0, 0x21, 0x26, 0x91, 0xfb, 0x3b, 0xa3, 0xc4, 0xf1, 0xe1, 0x64, 0x80, 0x18, 0x83, 0x11, 0xf2, - 0x6b, 0x02, 0x3d, 0x60, 0x91, 0x0e, 0x41, 0xe5, 0x6c, 0x4c, 0x42, 0x66, 0xd4, 0x3b, 0xe5, 0x6e, - 0x63, 0xff, 0x73, 0x47, 0x8d, 0x9d, 0x23, 0xc6, 0x6e, 0xe9, 0x60, 0x9f, 0x62, 0xe2, 0xed, 0x5e, - 0xe5, 0x56, 0xe9, 0x9f, 0x27, 0x56, 0x37, 0xc2, 0xfc, 0x7c, 0x3c, 0x72, 0x02, 0x9a, 0xb8, 0xc5, - 0x8c, 0xaa, 0xd7, 0xb7, 0x2c, 0xfc, 0xa3, 0x98, 0x3f, 0xb1, 0x81, 0xf9, 0xaa, 0xb2, 0xfd, 0x4c, - 0x03, 0x9f, 0x0d, 0x70, 0x94, 0xbd, 0x07, 0x5f, 0xb7, 0x41, 0x3d, 0x28, 0x28, 0x0a, 0x6b, 0x97, - 0xf1, 0xe3, 0xdc, 0xfd, 0x05, 0x34, 0x12, 0x25, 0x55, 0x5a, 0x59, 0x7d, 0x84, 0x95, 0xa0, 0xd8, - 0x30, 0x60, 0x91, 0xfd, 0xb7, 0x06, 0x3e, 0x3d, 0x4e, 0x43, 0xc8, 0x51, 0x4f, 0x74, 0xf4, 0x8d, - 0x8f, 0xb9, 0x07, 0x36, 0x08, 0x9a, 0x0c, 0xd5, 0xac, 0xc8, 0x93, 0x7a, 0xed, 0x79, 0x6e, 0xb5, - 0xa6, 0x30, 0x89, 0x7f, 0xb6, 0x97, 0x29, 0xdb, 0xaf, 0x13, 0x34, 0x91, 0x94, 0xaf, 0xb3, 0xc0, - 0x3e, 0x07, 0x7a, 0x3f, 0x46, 0x30, 0x7b, 0x3b, 0xe2, 0x56, 0x99, 0xca, 0xaf, 0x30, 0xfd, 0xab, - 0x81, 0xd6, 0x21, 0x26, 0xc2, 0x5d, 0xb6, 0x24, 0xfa, 0xe6, 0x1e, 0x91, 0xd7, 0x9a, 0xe7, 0x56, - 0x53, 0x9d, 0x44, 0x2e, 0xdb, 0x0b, 0xea, 0x1f, 0x1f, 0xa0, 0xf6, 0xb6, 0xe6, 0xb9, 0xa5, 0x2b, - 0xf4, 0x4a, 0xd2, 0xbe, 0x2f, 0xe9, 0x27, 0x21, 0x49, 0xf6, 0x58, 0x0c, 0x46, 0xb9, 0xbb, 0xee, - 0x99, 0xb3, 0xdc, 0xaa, 0xa9, 0x26, 0xb3, 0x79, 0x6e, 0x7d, 0xac, 0x2a, 0x2c, 0x40, 0xb6, 0x5f, - 0x53, 0x8d, 0x67, 0xf6, 0x7f, 0x1a, 0xd0, 0x8f, 0x49, 0xfa, 0x21, 0x69, 0xf6, 0x7e, 0xbb, 0xba, - 0x35, 0x4b, 0x37, 0xb7, 0x66, 0xe9, 0x72, 0x66, 0x6a, 0x57, 0x33, 0x53, 0xbb, 0x9e, 0x99, 0xda, - 0xd3, 0x99, 0xa9, 0xfd, 0x75, 0x67, 0x96, 0xae, 0xef, 0xcc, 0xd2, 0xcd, 0x9d, 0x59, 0x3a, 0xdd, - 0x5d, 0xf9, 0xc3, 0xf6, 0x29, 0x4b, 0x4e, 0xc4, 0xb5, 0x21, 0xbe, 0x90, 0xa1, 0x7b, 0x51, 0xbc, - 0xef, 0x5f, 0x22, 0xa3, 0xaa, 0xbc, 0x3f, 0xbe, 0x7b, 0x11, 0x00, 0x00, 0xff, 0xff, 0x98, 0x84, - 0x18, 0xe8, 0xd7, 0x06, 0x00, 0x00, +func init() { proto.RegisterFile("x/wasm/types/proposal.proto", fileDescriptor_0a371ed62f288510) } + +var fileDescriptor_0a371ed62f288510 = []byte{ + // 734 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x95, 0x4d, 0x6b, 0xdb, 0x48, + 0x18, 0xc7, 0xad, 0x38, 0x7e, 0xc9, 0xd8, 0xec, 0x7a, 0xb5, 0x4e, 0x56, 0x9b, 0x2c, 0x92, 0x51, + 0x20, 0xf8, 0xb2, 0xd2, 0x26, 0x0b, 0xfb, 0x06, 0x7b, 0xb0, 0xbc, 0x97, 0xc0, 0x1a, 0x82, 0x42, + 0x08, 0xe4, 0x62, 0xc6, 0xd2, 0x44, 0x99, 0xd6, 0x9a, 0x11, 0x9a, 0x71, 0x5d, 0x7f, 0x8b, 0x7e, + 0x80, 0x7e, 0x80, 0xd0, 0x4b, 0xe9, 0xb7, 0xc8, 0x31, 0xc7, 0xf4, 0xa2, 0x36, 0xce, 0xa5, 0x67, + 0x1f, 0x7b, 0x2a, 0x33, 0x23, 0xbb, 0x4e, 0x09, 0x25, 0xd0, 0x17, 0xe8, 0x45, 0xf6, 0xa3, 0xff, + 0x33, 0xcf, 0xff, 0x99, 0xdf, 0x3c, 0xf6, 0x80, 0xad, 0xc7, 0xee, 0x18, 0xb2, 0xd8, 0xe5, 0x93, + 0x04, 0x31, 0x37, 0x49, 0x69, 0x42, 0x19, 0x1c, 0x3a, 0x49, 0x4a, 0x39, 0xd5, 0xd7, 0x03, 0xca, + 0x62, 0x21, 0x3b, 0xf2, 0xf1, 0x68, 0x77, 0x80, 0x38, 0xdc, 0xdd, 0x6c, 0x46, 0x34, 0xa2, 0x32, + 0xc3, 0x15, 0xdf, 0x54, 0xf2, 0xa6, 0x29, 0x92, 0x29, 0x73, 0x07, 0x90, 0x21, 0x37, 0x4f, 0x75, + 0x03, 0x8a, 0x49, 0xae, 0x1b, 0xb7, 0x9c, 0xe4, 0x53, 0x29, 0xf6, 0xf9, 0x0a, 0xf8, 0xe1, 0x90, + 0xd3, 0x14, 0x75, 0x69, 0x88, 0x0e, 0xf2, 0x16, 0xf4, 0x26, 0x28, 0x71, 0xcc, 0x87, 0xc8, 0xd0, + 0x5a, 0x5a, 0x7b, 0xcd, 0x57, 0x81, 0xde, 0x02, 0xb5, 0x10, 0xb1, 0x20, 0xc5, 0x09, 0xc7, 0x94, + 0x18, 0x2b, 0x52, 0x5b, 0x7e, 0xa5, 0xaf, 0x83, 0x72, 0x3a, 0x22, 0x7d, 0xc8, 0x8c, 0xa2, 0x5a, + 0x98, 0x8e, 0x48, 0x87, 0xe9, 0x7f, 0x80, 0xef, 0x84, 0x7d, 0x7f, 0x30, 0xe1, 0xa8, 0x1f, 0xd0, + 0x10, 0x19, 0xab, 0x2d, 0xad, 0x5d, 0xf7, 0x1a, 0xd3, 0xcc, 0xaa, 0x1f, 0x77, 0x0e, 0x7b, 0xde, + 0x84, 0xcb, 0x06, 0xfc, 0xba, 0xc8, 0x9b, 0x47, 0xfa, 0x06, 0x28, 0x33, 0x3a, 0x4a, 0x03, 0x64, + 0x94, 0x64, 0xb9, 0x3c, 0xd2, 0x0d, 0x50, 0x19, 0x8c, 0xf0, 0x30, 0x44, 0xa9, 0x51, 0x96, 0xc2, + 0x3c, 0xd4, 0x4f, 0xc0, 0x06, 0x26, 0x8c, 0x43, 0xc2, 0x31, 0xe4, 0xa8, 0x9f, 0xa0, 0x34, 0xc6, + 0x8c, 0x89, 0x6e, 0x2b, 0x2d, 0xad, 0x5d, 0xdb, 0xdb, 0x76, 0xee, 0xc4, 0xea, 0x74, 0x82, 0x00, + 0x31, 0xd6, 0xa5, 0xe4, 0x14, 0x47, 0xfe, 0xfa, 0x52, 0x89, 0x83, 0x45, 0x05, 0xfb, 0xe5, 0x0a, + 0xd8, 0xda, 0x7f, 0xaf, 0x74, 0x29, 0xe1, 0x29, 0x0c, 0xf8, 0x97, 0x82, 0xd6, 0x04, 0x25, 0x18, + 0xc6, 0x98, 0x48, 0x56, 0x6b, 0xbe, 0x0a, 0xf4, 0x6d, 0x50, 0x11, 0x00, 0xfb, 0x38, 0x94, 0x4c, + 0x56, 0x3d, 0x30, 0xcd, 0xac, 0xb2, 0xa0, 0xb5, 0xff, 0x9f, 0x5f, 0x16, 0xd2, 0x7e, 0x28, 0x96, + 0x0e, 0xe1, 0x00, 0x0d, 0x73, 0x3a, 0x2a, 0xd0, 0xff, 0x04, 0x55, 0x4c, 0x30, 0xef, 0xc7, 0x2c, + 0x92, 0x34, 0xea, 0xde, 0x2f, 0x6f, 0x33, 0xcb, 0x40, 0x24, 0xa0, 0x21, 0x26, 0x91, 0xfb, 0x80, + 0x51, 0xe2, 0xf8, 0x70, 0xdc, 0x43, 0x8c, 0xc1, 0x08, 0xf9, 0x15, 0x91, 0xdd, 0x63, 0x91, 0x0e, + 0x41, 0xe9, 0x74, 0x44, 0x42, 0x66, 0x54, 0x5b, 0xc5, 0x76, 0x6d, 0xef, 0x67, 0x47, 0x4d, 0x9b, + 0x23, 0xa6, 0x6d, 0x41, 0xb0, 0x4b, 0x31, 0xf1, 0x7e, 0xbb, 0xc8, 0xac, 0xc2, 0xb3, 0x57, 0x56, + 0x3b, 0xc2, 0xfc, 0x6c, 0x34, 0x70, 0x02, 0x1a, 0xbb, 0xf9, 0x68, 0xaa, 0x8f, 0x5f, 0x59, 0xf8, + 0x30, 0x9f, 0x3f, 0xb1, 0x80, 0xf9, 0xaa, 0xb2, 0xfd, 0x46, 0x03, 0x3f, 0xf5, 0x70, 0x94, 0x7e, + 0x05, 0xae, 0x9b, 0xa0, 0x1a, 0xe4, 0x16, 0x39, 0xda, 0x45, 0x7c, 0x3f, 0xba, 0xff, 0x82, 0x5a, + 0xac, 0x5a, 0x95, 0x28, 0xcb, 0xf7, 0x40, 0x09, 0xf2, 0x05, 0x3d, 0x16, 0xd9, 0x4f, 0x35, 0xf0, + 0xe3, 0x51, 0x12, 0x42, 0x8e, 0x3a, 0xe2, 0x44, 0x3f, 0x79, 0x9b, 0xbb, 0x60, 0x8d, 0xa0, 0x71, + 0x5f, 0xcd, 0x8a, 0xdc, 0xa9, 0xd7, 0x9c, 0x65, 0x56, 0x63, 0x02, 0xe3, 0xe1, 0x3f, 0xf6, 0x42, + 0xb2, 0xfd, 0x2a, 0x41, 0x63, 0x69, 0xf9, 0x31, 0x04, 0xf6, 0x19, 0xd0, 0xbb, 0x43, 0x04, 0xd3, + 0xcf, 0xd3, 0xdc, 0xb2, 0x53, 0xf1, 0x03, 0xa7, 0xe7, 0x1a, 0x68, 0x1c, 0x60, 0x22, 0xe8, 0xb2, + 0x85, 0xd1, 0xce, 0x2d, 0x23, 0xaf, 0x31, 0xcb, 0xac, 0xba, 0xda, 0x89, 0x7c, 0x6d, 0xcf, 0xad, + 0xff, 0xba, 0xc3, 0xda, 0xdb, 0x98, 0x65, 0x96, 0xae, 0xb2, 0x97, 0x44, 0xfb, 0x76, 0x4b, 0x7f, + 0x8b, 0x96, 0xe4, 0x19, 0x8b, 0xc1, 0x28, 0xb6, 0x57, 0x3d, 0x73, 0x9a, 0x59, 0x15, 0x75, 0xc8, + 0x6c, 0x96, 0x59, 0xdf, 0xab, 0x0a, 0xf3, 0x24, 0xdb, 0xaf, 0xa8, 0x83, 0x67, 0xf6, 0x0b, 0x0d, + 0xe8, 0x47, 0x24, 0xf9, 0x96, 0x7a, 0xf6, 0xfe, 0xbf, 0xb8, 0x36, 0x0b, 0x57, 0xd7, 0x66, 0xe1, + 0x7c, 0x6a, 0x6a, 0x17, 0x53, 0x53, 0xbb, 0x9c, 0x9a, 0xda, 0xeb, 0xa9, 0xa9, 0x3d, 0xb9, 0x31, + 0x0b, 0x97, 0x37, 0x66, 0xe1, 0xea, 0xc6, 0x2c, 0x9c, 0xec, 0x2c, 0xfd, 0x60, 0xbb, 0x94, 0xc5, + 0xc7, 0xe2, 0xb6, 0x10, 0xff, 0x90, 0xa1, 0xbb, 0x7c, 0x75, 0x0c, 0xca, 0xf2, 0xd6, 0xf8, 0xfd, + 0x5d, 0x00, 0x00, 0x00, 0xff, 0xff, 0x11, 0xcc, 0xe0, 0x60, 0xbb, 0x06, 0x00, 0x00, } func (this *StoreCodeProposal) Equal(that interface{}) bool { diff --git a/x/wasm/internal/types/proposal.proto b/x/wasm/types/proposal.proto similarity index 97% rename from x/wasm/internal/types/proposal.proto rename to x/wasm/types/proposal.proto index e87aafbf40..876b1e41e9 100644 --- a/x/wasm/internal/types/proposal.proto +++ b/x/wasm/types/proposal.proto @@ -3,9 +3,9 @@ package cosmwasm.wasm.v1beta1; import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; -import "x/wasm/internal/types/types.proto"; +import "x/wasm/types/types.proto"; -option go_package = "github.com/CosmWasm/wasmd/x/wasmd/internal/types"; +option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; option (gogoproto.goproto_stringer_all) = false; option (gogoproto.goproto_getters_all) = false; option (gogoproto.equal_all) = true; diff --git a/x/wasm/internal/types/proposal_test.go b/x/wasm/types/proposal_test.go similarity index 100% rename from x/wasm/internal/types/proposal_test.go rename to x/wasm/types/proposal_test.go diff --git a/x/wasm/internal/types/query.pb.go b/x/wasm/types/query.pb.go similarity index 93% rename from x/wasm/internal/types/query.pb.go rename to x/wasm/types/query.pb.go index b6837e739f..04e5a8584f 100644 --- a/x/wasm/internal/types/query.pb.go +++ b/x/wasm/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: x/wasm/internal/types/query.proto +// source: x/wasm/types/query.proto package types @@ -43,7 +43,7 @@ func (m *QueryContractInfoRequest) Reset() { *m = QueryContractInfoReque func (m *QueryContractInfoRequest) String() string { return proto.CompactTextString(m) } func (*QueryContractInfoRequest) ProtoMessage() {} func (*QueryContractInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{0} + return fileDescriptor_05d4eea78dee184d, []int{0} } func (m *QueryContractInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -83,7 +83,7 @@ func (m *QueryContractInfoResponse) Reset() { *m = QueryContractInfoResp func (m *QueryContractInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryContractInfoResponse) ProtoMessage() {} func (*QueryContractInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{1} + return fileDescriptor_05d4eea78dee184d, []int{1} } func (m *QueryContractInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -124,7 +124,7 @@ func (m *QueryContractHistoryRequest) Reset() { *m = QueryContractHistor func (m *QueryContractHistoryRequest) String() string { return proto.CompactTextString(m) } func (*QueryContractHistoryRequest) ProtoMessage() {} func (*QueryContractHistoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{2} + return fileDescriptor_05d4eea78dee184d, []int{2} } func (m *QueryContractHistoryRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -164,7 +164,7 @@ func (m *QueryContractHistoryResponse) Reset() { *m = QueryContractHisto func (m *QueryContractHistoryResponse) String() string { return proto.CompactTextString(m) } func (*QueryContractHistoryResponse) ProtoMessage() {} func (*QueryContractHistoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{3} + return fileDescriptor_05d4eea78dee184d, []int{3} } func (m *QueryContractHistoryResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -204,7 +204,7 @@ func (m *QueryContractsByCodeRequest) Reset() { *m = QueryContractsByCod func (m *QueryContractsByCodeRequest) String() string { return proto.CompactTextString(m) } func (*QueryContractsByCodeRequest) ProtoMessage() {} func (*QueryContractsByCodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{4} + return fileDescriptor_05d4eea78dee184d, []int{4} } func (m *QueryContractsByCodeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -243,7 +243,7 @@ func (m *ContractInfoWithAddress) Reset() { *m = ContractInfoWithAddress func (m *ContractInfoWithAddress) String() string { return proto.CompactTextString(m) } func (*ContractInfoWithAddress) ProtoMessage() {} func (*ContractInfoWithAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{5} + return fileDescriptor_05d4eea78dee184d, []int{5} } func (m *ContractInfoWithAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -283,7 +283,7 @@ func (m *QueryContractsByCodeResponse) Reset() { *m = QueryContractsByCo func (m *QueryContractsByCodeResponse) String() string { return proto.CompactTextString(m) } func (*QueryContractsByCodeResponse) ProtoMessage() {} func (*QueryContractsByCodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{6} + return fileDescriptor_05d4eea78dee184d, []int{6} } func (m *QueryContractsByCodeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -324,7 +324,7 @@ func (m *QueryAllContractStateRequest) Reset() { *m = QueryAllContractSt func (m *QueryAllContractStateRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllContractStateRequest) ProtoMessage() {} func (*QueryAllContractStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{7} + return fileDescriptor_05d4eea78dee184d, []int{7} } func (m *QueryAllContractStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -364,7 +364,7 @@ func (m *QueryAllContractStateResponse) Reset() { *m = QueryAllContractS func (m *QueryAllContractStateResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllContractStateResponse) ProtoMessage() {} func (*QueryAllContractStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{8} + return fileDescriptor_05d4eea78dee184d, []int{8} } func (m *QueryAllContractStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -404,7 +404,7 @@ func (m *QueryRawContractStateRequest) Reset() { *m = QueryRawContractSt func (m *QueryRawContractStateRequest) String() string { return proto.CompactTextString(m) } func (*QueryRawContractStateRequest) ProtoMessage() {} func (*QueryRawContractStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{9} + return fileDescriptor_05d4eea78dee184d, []int{9} } func (m *QueryRawContractStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -443,7 +443,7 @@ func (m *QueryRawContractStateResponse) Reset() { *m = QueryRawContractS func (m *QueryRawContractStateResponse) String() string { return proto.CompactTextString(m) } func (*QueryRawContractStateResponse) ProtoMessage() {} func (*QueryRawContractStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{10} + return fileDescriptor_05d4eea78dee184d, []int{10} } func (m *QueryRawContractStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -484,7 +484,7 @@ func (m *QuerySmartContractStateRequest) Reset() { *m = QuerySmartContra func (m *QuerySmartContractStateRequest) String() string { return proto.CompactTextString(m) } func (*QuerySmartContractStateRequest) ProtoMessage() {} func (*QuerySmartContractStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{11} + return fileDescriptor_05d4eea78dee184d, []int{11} } func (m *QuerySmartContractStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -523,7 +523,7 @@ func (m *QuerySmartContractStateResponse) Reset() { *m = QuerySmartContr func (m *QuerySmartContractStateResponse) String() string { return proto.CompactTextString(m) } func (*QuerySmartContractStateResponse) ProtoMessage() {} func (*QuerySmartContractStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{12} + return fileDescriptor_05d4eea78dee184d, []int{12} } func (m *QuerySmartContractStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -561,7 +561,7 @@ func (m *QueryCodeRequest) Reset() { *m = QueryCodeRequest{} } func (m *QueryCodeRequest) String() string { return proto.CompactTextString(m) } func (*QueryCodeRequest) ProtoMessage() {} func (*QueryCodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{13} + return fileDescriptor_05d4eea78dee184d, []int{13} } func (m *QueryCodeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -603,7 +603,7 @@ func (m *CodeInfoResponse) Reset() { *m = CodeInfoResponse{} } func (m *CodeInfoResponse) String() string { return proto.CompactTextString(m) } func (*CodeInfoResponse) ProtoMessage() {} func (*CodeInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{14} + return fileDescriptor_05d4eea78dee184d, []int{14} } func (m *CodeInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -642,7 +642,7 @@ func (m *QueryCodeResponse) Reset() { *m = QueryCodeResponse{} } func (m *QueryCodeResponse) String() string { return proto.CompactTextString(m) } func (*QueryCodeResponse) ProtoMessage() {} func (*QueryCodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{15} + return fileDescriptor_05d4eea78dee184d, []int{15} } func (m *QueryCodeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -681,7 +681,7 @@ func (m *QueryCodesRequest) Reset() { *m = QueryCodesRequest{} } func (m *QueryCodesRequest) String() string { return proto.CompactTextString(m) } func (*QueryCodesRequest) ProtoMessage() {} func (*QueryCodesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{16} + return fileDescriptor_05d4eea78dee184d, []int{16} } func (m *QueryCodesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -721,7 +721,7 @@ func (m *QueryCodesResponse) Reset() { *m = QueryCodesResponse{} } func (m *QueryCodesResponse) String() string { return proto.CompactTextString(m) } func (*QueryCodesResponse) ProtoMessage() {} func (*QueryCodesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_845473e9a3330642, []int{17} + return fileDescriptor_05d4eea78dee184d, []int{17} } func (m *QueryCodesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -771,80 +771,80 @@ func init() { proto.RegisterType((*QueryCodesResponse)(nil), "cosmwasm.wasm.v1beta1.QueryCodesResponse") } -func init() { proto.RegisterFile("x/wasm/internal/types/query.proto", fileDescriptor_845473e9a3330642) } +func init() { proto.RegisterFile("x/wasm/types/query.proto", fileDescriptor_05d4eea78dee184d) } -var fileDescriptor_845473e9a3330642 = []byte{ - // 1116 bytes of a gzipped FileDescriptorProto +var fileDescriptor_05d4eea78dee184d = []byte{ + // 1107 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x97, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xc7, 0x3d, 0xad, 0xf3, 0xc3, 0xd3, 0x14, 0xc2, 0xa8, 0x50, 0x63, 0xdc, 0x75, 0x58, 0x50, - 0xeb, 0x16, 0x69, 0x37, 0x89, 0x53, 0x04, 0xe5, 0x54, 0xa7, 0x40, 0x2a, 0x51, 0x7e, 0x6c, 0x84, - 0x22, 0xe8, 0x21, 0x1a, 0xef, 0x4e, 0xed, 0x45, 0xf6, 0x8e, 0xbb, 0x33, 0x26, 0xb1, 0xa2, 0x50, - 0xc4, 0x85, 0x13, 0x02, 0x89, 0x23, 0x17, 0x0e, 0x1c, 0x50, 0x81, 0x7b, 0x8f, 0x1c, 0x38, 0xe4, - 0x18, 0x89, 0x0b, 0x27, 0x0b, 0x1c, 0x84, 0x50, 0xfe, 0x84, 0x9e, 0xd0, 0xcc, 0xce, 0x26, 0xbb, - 0x8e, 0xd7, 0xeb, 0x20, 0x0b, 0x2e, 0xc9, 0xae, 0xfd, 0xde, 0x9b, 0xcf, 0xfb, 0xbe, 0x99, 0xf7, - 0xc6, 0xf0, 0xf9, 0x6d, 0x73, 0x0b, 0xb3, 0x96, 0xe9, 0x7a, 0x9c, 0xf8, 0x1e, 0x6e, 0x9a, 0xbc, - 0xdb, 0x26, 0xcc, 0xbc, 0xdf, 0x21, 0x7e, 0xd7, 0x68, 0xfb, 0x94, 0x53, 0xf4, 0xb4, 0x4d, 0x59, - 0x4b, 0x18, 0x19, 0xf2, 0xcf, 0xc7, 0x4b, 0x35, 0xc2, 0xf1, 0x52, 0xe1, 0x42, 0x9d, 0xd6, 0xa9, - 0xb4, 0x30, 0xc5, 0x53, 0x60, 0x5c, 0x48, 0x88, 0x27, 0xff, 0x2a, 0x93, 0x62, 0x9d, 0xd2, 0x7a, - 0x93, 0x98, 0xb8, 0xed, 0x9a, 0xd8, 0xf3, 0x28, 0xc7, 0xdc, 0xa5, 0x5e, 0xf8, 0xed, 0x35, 0xb1, - 0x1a, 0x65, 0x66, 0x0d, 0x33, 0x12, 0x60, 0x98, 0x6a, 0x45, 0xb3, 0x8d, 0xeb, 0xae, 0x27, 0x8d, - 0x03, 0x5b, 0x7d, 0x05, 0xe6, 0xdf, 0x13, 0x16, 0xab, 0xd4, 0xe3, 0x3e, 0xb6, 0xf9, 0x6d, 0xef, - 0x1e, 0xb5, 0xc8, 0xfd, 0x0e, 0x61, 0x1c, 0xe5, 0xe1, 0x0c, 0x76, 0x1c, 0x9f, 0x30, 0x96, 0x07, - 0x0b, 0xa0, 0x9c, 0xb3, 0xc2, 0x57, 0xfd, 0x4b, 0x00, 0x9f, 0x1d, 0xe2, 0xc6, 0xda, 0xd4, 0x63, - 0x24, 0xd9, 0x0f, 0x59, 0xf0, 0xbc, 0xad, 0x3c, 0x36, 0x5d, 0xef, 0x1e, 0xcd, 0x9f, 0x59, 0x00, - 0xe5, 0x73, 0xcb, 0x2f, 0x18, 0x43, 0xf5, 0x31, 0xa2, 0xd1, 0xab, 0xb3, 0xfb, 0xbd, 0x12, 0x38, - 0xec, 0x95, 0x32, 0xd6, 0x9c, 0x1d, 0xf9, 0xfc, 0x46, 0xf6, 0xef, 0x6f, 0x4b, 0x40, 0x7f, 0x00, - 0x9f, 0x8b, 0x01, 0xad, 0xb9, 0x8c, 0x53, 0xbf, 0x9b, 0x9a, 0x0a, 0x7a, 0x03, 0xc2, 0x63, 0x51, - 0x14, 0xcf, 0x65, 0x23, 0x50, 0xd0, 0x10, 0x0a, 0x1a, 0x41, 0x21, 0x43, 0xa6, 0x77, 0x71, 0x9d, - 0xa8, 0xa8, 0x56, 0xc4, 0x53, 0x7f, 0x04, 0x60, 0x71, 0x38, 0x81, 0x52, 0xe5, 0x1d, 0x38, 0x43, - 0x3c, 0xee, 0xbb, 0x44, 0x20, 0x9c, 0x2d, 0x9f, 0x5b, 0x36, 0x53, 0xb2, 0x5e, 0xa5, 0x0e, 0x51, - 0x41, 0x5e, 0xf7, 0xb8, 0xdf, 0xad, 0x66, 0xf7, 0x44, 0xf6, 0x61, 0x14, 0xf4, 0xe6, 0x10, 0xf2, - 0x2b, 0xa9, 0xe4, 0x01, 0x4d, 0x0c, 0xfd, 0x93, 0x01, 0xed, 0x58, 0xb5, 0x2b, 0xd6, 0x0e, 0xb5, - 0xbb, 0x08, 0x67, 0x6c, 0xea, 0x90, 0x4d, 0xd7, 0x91, 0xda, 0x65, 0xad, 0x69, 0xf1, 0x7a, 0xdb, - 0x99, 0x98, 0x74, 0x5f, 0x00, 0x78, 0x31, 0x5a, 0xea, 0x0d, 0x97, 0x37, 0x6e, 0xaa, 0xf2, 0xfc, - 0x1f, 0x7b, 0xe9, 0x97, 0xc1, 0x52, 0x1e, 0x09, 0xa2, 0x4a, 0x79, 0x17, 0x3e, 0x11, 0x5b, 0x3a, - 0xac, 0xa8, 0x31, 0xc6, 0xda, 0x91, 0xe4, 0x54, 0x41, 0xcf, 0x47, 0x11, 0x26, 0x58, 0xd6, 0x4f, - 0xc3, 0x34, 0x6e, 0x36, 0x9b, 0x21, 0xc1, 0x3a, 0xc7, 0x9c, 0xfc, 0x77, 0x87, 0xe2, 0x3b, 0x00, - 0x2f, 0x25, 0x20, 0x28, 0x29, 0x6f, 0xc0, 0xe9, 0x16, 0x75, 0x48, 0x33, 0x94, 0xb0, 0x98, 0x20, - 0xe1, 0x1d, 0x61, 0xa4, 0x04, 0x53, 0x1e, 0x93, 0x53, 0x6a, 0x43, 0x09, 0x65, 0xe1, 0xad, 0x53, - 0x0a, 0x75, 0x09, 0x42, 0xb9, 0xc6, 0xa6, 0x83, 0x39, 0x96, 0x08, 0x73, 0x56, 0x4e, 0x7e, 0x72, - 0x0b, 0x73, 0xac, 0x57, 0x54, 0xfa, 0x27, 0x03, 0xab, 0xf4, 0x11, 0xcc, 0x4a, 0x4f, 0x20, 0x3d, - 0xe5, 0xb3, 0xfe, 0x01, 0xd4, 0xa4, 0xd3, 0x7a, 0x0b, 0xfb, 0x7c, 0xb2, 0x3c, 0xeb, 0xb0, 0x94, - 0x18, 0x5a, 0x11, 0x2d, 0x46, 0x89, 0xaa, 0xc5, 0xc7, 0xbd, 0x52, 0x9e, 0x78, 0x36, 0x75, 0x5c, - 0xaf, 0x6e, 0x7e, 0xc4, 0xa8, 0x67, 0x58, 0x78, 0xeb, 0x0e, 0x61, 0x4c, 0x68, 0x19, 0xf0, 0xbe, - 0x04, 0xe7, 0xd5, 0x69, 0x49, 0xef, 0x19, 0xfa, 0x5f, 0x00, 0xce, 0x0b, 0xc3, 0xd8, 0xc0, 0xb8, - 0x3a, 0x60, 0x5d, 0x9d, 0xef, 0xf7, 0x4a, 0xd3, 0xd2, 0xec, 0xd6, 0x61, 0xaf, 0x74, 0xc6, 0x75, - 0x8e, 0x7a, 0x4e, 0x1e, 0xce, 0xd8, 0x3e, 0xc1, 0x9c, 0xfa, 0x32, 0xbb, 0x9c, 0x15, 0xbe, 0xa2, - 0xf7, 0x61, 0x4e, 0xe0, 0x6c, 0x36, 0x30, 0x6b, 0xe4, 0xcf, 0x4a, 0xfa, 0x57, 0x1e, 0xf7, 0x4a, - 0x2b, 0x75, 0x97, 0x37, 0x3a, 0x35, 0xc3, 0xa6, 0x2d, 0x93, 0x13, 0xcf, 0x21, 0x7e, 0xcb, 0xf5, - 0x78, 0xf4, 0xb1, 0xe9, 0xd6, 0x98, 0x59, 0xeb, 0x72, 0xc2, 0x8c, 0x35, 0xb2, 0x5d, 0x15, 0x0f, - 0xd6, 0xac, 0x08, 0xb5, 0x86, 0x59, 0x03, 0x3d, 0x03, 0xa7, 0x19, 0xed, 0xf8, 0x36, 0xc9, 0x67, - 0xe5, 0x7a, 0xea, 0x4d, 0x80, 0xd4, 0x3a, 0x6e, 0xd3, 0x21, 0x7e, 0x7e, 0x2a, 0x00, 0x51, 0xaf, - 0xaa, 0x89, 0x7c, 0x0e, 0xe0, 0x53, 0x11, 0x59, 0x54, 0xa6, 0x6f, 0xc3, 0x5c, 0x90, 0xa9, 0x68, - 0x58, 0x20, 0xb2, 0x63, 0x87, 0x35, 0x8d, 0xb8, 0x4a, 0x91, 0xa6, 0x35, 0x6b, 0xab, 0xef, 0x50, - 0x51, 0x55, 0x4b, 0x56, 0xba, 0x3a, 0x7b, 0xd8, 0x2b, 0xc9, 0xf7, 0xa0, 0x32, 0x8a, 0xe4, 0x6e, - 0x04, 0x84, 0x85, 0x05, 0x8a, 0x9f, 0x70, 0xf0, 0xaf, 0x4f, 0xf8, 0x0f, 0x00, 0xa2, 0x68, 0x74, - 0x95, 0xe7, 0x5b, 0x10, 0x1e, 0xe5, 0x19, 0x1e, 0xed, 0xb1, 0x13, 0x0d, 0x4e, 0x79, 0x2e, 0x4c, - 0x72, 0x72, 0x07, 0x7d, 0xf9, 0x21, 0x84, 0x53, 0x92, 0x16, 0x7d, 0x03, 0xe0, 0x5c, 0xb4, 0x2d, - 0xa3, 0xa4, 0x69, 0x9c, 0x74, 0x3b, 0x2a, 0x2c, 0x8e, 0xef, 0x10, 0x90, 0xe8, 0xe5, 0xcf, 0x7e, - 0xfd, 0xf3, 0xeb, 0x33, 0x3a, 0x5a, 0x08, 0xee, 0x77, 0xe1, 0x9d, 0x2c, 0x6c, 0xff, 0xe6, 0x8e, - 0x3a, 0xc5, 0xbb, 0xe8, 0x47, 0x00, 0x9f, 0x1c, 0xb8, 0x47, 0xa0, 0xe5, 0x71, 0xd6, 0x8b, 0x5f, - 0x7b, 0x0a, 0x95, 0x53, 0xf9, 0x28, 0xcc, 0x45, 0x89, 0x79, 0x0d, 0x95, 0xd3, 0x30, 0xcd, 0x86, - 0x42, 0x7b, 0x18, 0xc1, 0x55, 0xb3, 0x72, 0x3c, 0xdc, 0xf8, 0x4d, 0x63, 0x3c, 0xdc, 0x81, 0x61, - 0xac, 0x1b, 0x12, 0xb7, 0x8c, 0x2e, 0x0f, 0xe2, 0x3a, 0xc4, 0xdc, 0x51, 0x6d, 0x65, 0xf7, 0x88, - 0x9e, 0xa1, 0x9f, 0x00, 0x9c, 0x1f, 0x1c, 0x47, 0x68, 0xe4, 0xca, 0x09, 0xf3, 0xb3, 0xb0, 0x72, - 0x3a, 0xa7, 0x34, 0xde, 0x13, 0xf2, 0x32, 0x89, 0xf6, 0x08, 0xc0, 0xf9, 0xc1, 0xf9, 0x31, 0x9a, - 0x37, 0x61, 0x8c, 0x8d, 0xe6, 0x4d, 0x1a, 0x51, 0xfa, 0xab, 0x92, 0xb7, 0x82, 0x96, 0x52, 0x79, - 0x7d, 0xbc, 0x65, 0xee, 0x1c, 0x8f, 0x9f, 0x5d, 0xf4, 0x33, 0x80, 0xe8, 0xe4, 0xa8, 0x41, 0xd7, - 0x47, 0x71, 0x24, 0x4e, 0xbd, 0xc2, 0xcb, 0xa7, 0x75, 0x53, 0x09, 0xbc, 0x26, 0x13, 0xb8, 0x8e, - 0x2a, 0xe9, 0x82, 0x8b, 0x20, 0xf1, 0x14, 0x1e, 0xc0, 0xac, 0xdc, 0xce, 0x57, 0x46, 0x6f, 0xcd, - 0xe3, 0x3d, 0x5c, 0x4e, 0x37, 0x54, 0x5c, 0x2f, 0x4a, 0x2e, 0x0d, 0x15, 0x47, 0x6d, 0x5c, 0xb4, - 0x0d, 0xa7, 0x64, 0x6b, 0x45, 0xa9, 0x81, 0xc3, 0xde, 0x5e, 0xb8, 0x3a, 0x86, 0xa5, 0x62, 0x28, - 0x48, 0x86, 0x0b, 0x08, 0x9d, 0x64, 0xa8, 0x5a, 0x7b, 0x7f, 0x68, 0x99, 0xef, 0xfb, 0x5a, 0x66, - 0xaf, 0xaf, 0x81, 0xfd, 0xbe, 0x06, 0x7e, 0xef, 0x6b, 0xe0, 0xab, 0x03, 0x2d, 0xb3, 0x7f, 0xa0, - 0x65, 0x7e, 0x3b, 0xd0, 0x32, 0x1f, 0x2e, 0x46, 0x66, 0xeb, 0x2a, 0x65, 0xad, 0x0d, 0x11, 0x43, - 0x04, 0x72, 0xcc, 0x6d, 0xf5, 0x3f, 0xfe, 0x23, 0xb6, 0x36, 0x2d, 0x7f, 0x75, 0x56, 0xfe, 0x09, - 0x00, 0x00, 0xff, 0xff, 0x55, 0xaf, 0xd8, 0x8c, 0x34, 0x0f, 0x00, 0x00, + 0x14, 0xc7, 0x3d, 0xa9, 0xf3, 0xc3, 0xd3, 0x14, 0xc2, 0xa8, 0xd0, 0xc5, 0xb8, 0xeb, 0x68, 0x41, + 0xa9, 0x5b, 0xa4, 0xdd, 0xfc, 0x2a, 0x82, 0x72, 0xaa, 0x53, 0x20, 0x95, 0x28, 0x3f, 0x36, 0x42, + 0x11, 0xf4, 0x10, 0x8d, 0x77, 0xa7, 0xf6, 0x22, 0x7b, 0x27, 0xdd, 0x99, 0x90, 0x58, 0x51, 0x28, + 0xe2, 0xc2, 0x09, 0x81, 0xc4, 0x91, 0x0b, 0x07, 0x0e, 0xa8, 0xc0, 0xbd, 0x47, 0x0e, 0x1c, 0x72, + 0x8c, 0xc4, 0x85, 0x93, 0x05, 0x0e, 0x42, 0x28, 0x7f, 0x42, 0x4f, 0x68, 0x66, 0x67, 0x93, 0x5d, + 0xc7, 0xeb, 0x75, 0x90, 0x45, 0x2f, 0xd6, 0x8e, 0x77, 0xde, 0x9b, 0xcf, 0xfb, 0xbe, 0x99, 0xf7, + 0x66, 0xa1, 0xb6, 0x63, 0x6d, 0x63, 0xd6, 0xb2, 0x78, 0x7b, 0x93, 0x30, 0xeb, 0xfe, 0x16, 0x09, + 0xda, 0xe6, 0x66, 0x40, 0x39, 0x45, 0xcf, 0x3a, 0x94, 0xb5, 0xc4, 0x3b, 0x53, 0xfe, 0x7c, 0xb2, + 0x50, 0x23, 0x1c, 0x2f, 0x14, 0x2f, 0xd6, 0x69, 0x9d, 0xca, 0x19, 0x96, 0x78, 0x0a, 0x27, 0x17, + 0x93, 0x6e, 0xe4, 0xaf, 0x7a, 0x53, 0xaa, 0x53, 0x5a, 0x6f, 0x12, 0x0b, 0x6f, 0x7a, 0x16, 0xf6, + 0x7d, 0xca, 0x31, 0xf7, 0xa8, 0x1f, 0xbd, 0xbd, 0x26, 0x16, 0xa1, 0xcc, 0xaa, 0x61, 0x46, 0xc2, + 0xd5, 0x2d, 0xb5, 0x90, 0xb5, 0x89, 0xeb, 0x9e, 0x2f, 0x27, 0x87, 0x73, 0x8d, 0x65, 0xa8, 0xbd, + 0x2f, 0x66, 0xac, 0x50, 0x9f, 0x07, 0xd8, 0xe1, 0xb7, 0xfd, 0x7b, 0xd4, 0x26, 0xf7, 0xb7, 0x08, + 0xe3, 0x48, 0x83, 0x93, 0xd8, 0x75, 0x03, 0xc2, 0x98, 0x06, 0x66, 0x41, 0xa5, 0x60, 0x47, 0x43, + 0xe3, 0x2b, 0x00, 0x9f, 0xef, 0x63, 0xc6, 0x36, 0xa9, 0xcf, 0x48, 0xba, 0x1d, 0xb2, 0xe1, 0x05, + 0x47, 0x59, 0x6c, 0x78, 0xfe, 0x3d, 0xaa, 0x8d, 0xcd, 0x82, 0xca, 0xf9, 0xc5, 0x17, 0xcd, 0xbe, + 0xb2, 0x98, 0x71, 0xef, 0xd5, 0xa9, 0x83, 0x4e, 0x19, 0x1c, 0x75, 0xca, 0x39, 0x7b, 0xda, 0x89, + 0xfd, 0x7f, 0x23, 0xff, 0xcf, 0x77, 0x65, 0x60, 0x3c, 0x80, 0x2f, 0x24, 0x80, 0x56, 0x3d, 0xc6, + 0x69, 0xd0, 0xce, 0x0c, 0x05, 0xbd, 0x09, 0xe1, 0x89, 0x28, 0x8a, 0x67, 0xce, 0x0c, 0x15, 0x34, + 0x85, 0x82, 0x66, 0x98, 0xbf, 0x88, 0xe9, 0x3d, 0x5c, 0x27, 0xca, 0xab, 0x1d, 0xb3, 0x34, 0x1e, + 0x01, 0x58, 0xea, 0x4f, 0xa0, 0x54, 0x79, 0x17, 0x4e, 0x12, 0x9f, 0x07, 0x1e, 0x11, 0x08, 0xe7, + 0x2a, 0xe7, 0x17, 0xad, 0x8c, 0xa8, 0x57, 0xa8, 0x4b, 0x94, 0x93, 0x37, 0x7c, 0x1e, 0xb4, 0xab, + 0xf9, 0x7d, 0x11, 0x7d, 0xe4, 0x05, 0xbd, 0xd5, 0x87, 0xfc, 0x4a, 0x26, 0x79, 0x48, 0x93, 0x40, + 0xff, 0xb4, 0x47, 0x3b, 0x56, 0x6d, 0x8b, 0xb5, 0x23, 0xed, 0x2e, 0xc1, 0x49, 0x87, 0xba, 0x64, + 0xc3, 0x73, 0xa5, 0x76, 0x79, 0x7b, 0x42, 0x0c, 0x6f, 0xbb, 0x23, 0x93, 0xee, 0x4b, 0x00, 0x2f, + 0xc5, 0x53, 0xbd, 0xee, 0xf1, 0xc6, 0x4d, 0x95, 0x9e, 0x27, 0xb1, 0x97, 0x7e, 0xed, 0x4d, 0xe5, + 0xb1, 0x20, 0x2a, 0x95, 0x77, 0xe1, 0x53, 0x89, 0xa5, 0xa3, 0x8c, 0x9a, 0x43, 0xac, 0x1d, 0x0b, + 0x4e, 0x25, 0xf4, 0x42, 0x1c, 0x61, 0x84, 0x69, 0xfd, 0x2c, 0x0a, 0xe3, 0x66, 0xb3, 0x19, 0x11, + 0xac, 0x71, 0xcc, 0xc9, 0xff, 0x77, 0x28, 0xbe, 0x07, 0xf0, 0x72, 0x0a, 0x82, 0x92, 0xf2, 0x06, + 0x9c, 0x68, 0x51, 0x97, 0x34, 0x23, 0x09, 0x4b, 0x29, 0x12, 0xde, 0x11, 0x93, 0x94, 0x60, 0xca, + 0x62, 0x74, 0x4a, 0xad, 0x2b, 0xa1, 0x6c, 0xbc, 0x7d, 0x46, 0xa1, 0x2e, 0x43, 0x28, 0xd7, 0xd8, + 0x70, 0x31, 0xc7, 0x12, 0x61, 0xda, 0x2e, 0xc8, 0x7f, 0x6e, 0x61, 0x8e, 0x8d, 0x25, 0x15, 0xfe, + 0x69, 0xc7, 0x2a, 0x7c, 0x04, 0xf3, 0xd2, 0x12, 0x48, 0x4b, 0xf9, 0x6c, 0x7c, 0x08, 0x75, 0x69, + 0xb4, 0xd6, 0xc2, 0x01, 0x1f, 0x2d, 0xcf, 0x1a, 0x2c, 0xa7, 0xba, 0x56, 0x44, 0xf3, 0x71, 0xa2, + 0x6a, 0xe9, 0x71, 0xa7, 0xac, 0x11, 0xdf, 0xa1, 0xae, 0xe7, 0xd7, 0xad, 0x8f, 0x19, 0xf5, 0x4d, + 0x1b, 0x6f, 0xdf, 0x21, 0x8c, 0x09, 0x2d, 0x43, 0xde, 0x97, 0xe1, 0x8c, 0x3a, 0x2d, 0xd9, 0x35, + 0xc3, 0xf8, 0x1b, 0xc0, 0x19, 0x31, 0x31, 0xd1, 0x30, 0xae, 0xf6, 0xcc, 0xae, 0xce, 0x74, 0x3b, + 0xe5, 0x09, 0x39, 0xed, 0xd6, 0x51, 0xa7, 0x3c, 0xe6, 0xb9, 0xc7, 0x35, 0x47, 0x83, 0x93, 0x4e, + 0x40, 0x30, 0xa7, 0x81, 0x8c, 0xae, 0x60, 0x47, 0x43, 0xf4, 0x01, 0x2c, 0x08, 0x9c, 0x8d, 0x06, + 0x66, 0x0d, 0xed, 0x9c, 0xa4, 0x7f, 0xf5, 0x71, 0xa7, 0xbc, 0x5c, 0xf7, 0x78, 0x63, 0xab, 0x66, + 0x3a, 0xb4, 0x65, 0x71, 0xe2, 0xbb, 0x24, 0x68, 0x79, 0x3e, 0x8f, 0x3f, 0x36, 0xbd, 0x1a, 0xb3, + 0x6a, 0x6d, 0x4e, 0x98, 0xb9, 0x4a, 0x76, 0xaa, 0xe2, 0xc1, 0x9e, 0x12, 0xae, 0x56, 0x31, 0x6b, + 0xa0, 0xe7, 0xe0, 0x04, 0xa3, 0x5b, 0x81, 0x43, 0xb4, 0xbc, 0x5c, 0x4f, 0x8d, 0x04, 0x48, 0x6d, + 0xcb, 0x6b, 0xba, 0x24, 0xd0, 0xc6, 0x43, 0x10, 0x35, 0x54, 0x45, 0xe4, 0x0b, 0x00, 0x9f, 0x89, + 0xc9, 0xa2, 0x22, 0x7d, 0x07, 0x16, 0xc2, 0x48, 0x45, 0xc1, 0x02, 0xb1, 0x1d, 0xdb, 0xaf, 0x68, + 0x24, 0x55, 0x8a, 0x15, 0xad, 0x29, 0x47, 0xbd, 0x43, 0x25, 0x95, 0x2d, 0x99, 0xe9, 0xea, 0xd4, + 0x51, 0xa7, 0x2c, 0xc7, 0x61, 0x66, 0x14, 0xc9, 0xdd, 0x18, 0x08, 0x8b, 0x12, 0x94, 0x3c, 0xe1, + 0xe0, 0x3f, 0x9f, 0xf0, 0x1f, 0x01, 0x44, 0x71, 0xef, 0x2a, 0xce, 0xb7, 0x21, 0x3c, 0x8e, 0x33, + 0x3a, 0xda, 0x43, 0x07, 0x1a, 0x9e, 0xf2, 0x42, 0x14, 0xe4, 0xe8, 0x0e, 0xfa, 0xe2, 0x43, 0x08, + 0xc7, 0x25, 0x2d, 0xfa, 0x16, 0xc0, 0xe9, 0x78, 0x59, 0x46, 0x69, 0xdd, 0x38, 0xed, 0x76, 0x54, + 0x9c, 0x1f, 0xde, 0x20, 0x24, 0x31, 0x2a, 0x9f, 0xff, 0xf6, 0xd7, 0x37, 0x63, 0x06, 0x9a, 0x0d, + 0xaf, 0x75, 0xd1, 0x9d, 0x2c, 0x2a, 0xff, 0xd6, 0xae, 0x3a, 0xc5, 0x7b, 0xe8, 0x27, 0x00, 0x9f, + 0xee, 0xb9, 0x47, 0xa0, 0xc5, 0x61, 0xd6, 0x4b, 0x5e, 0x7b, 0x8a, 0x4b, 0x67, 0xb2, 0x51, 0x98, + 0xf3, 0x12, 0xf3, 0x1a, 0xaa, 0x64, 0x61, 0x5a, 0x0d, 0x85, 0xf6, 0x30, 0x86, 0xab, 0x7a, 0xe5, + 0x70, 0xb8, 0xc9, 0x9b, 0xc6, 0x70, 0xb8, 0x3d, 0xcd, 0xd8, 0x30, 0x25, 0x6e, 0x05, 0xcd, 0xf5, + 0xe2, 0xba, 0xc4, 0xda, 0x55, 0x65, 0x65, 0xef, 0x98, 0x9e, 0xa1, 0x9f, 0x01, 0x9c, 0xe9, 0x6d, + 0x47, 0x68, 0xe0, 0xca, 0x29, 0xfd, 0xb3, 0xb8, 0x7c, 0x36, 0xa3, 0x2c, 0xde, 0x53, 0xf2, 0x32, + 0x89, 0xf6, 0x08, 0xc0, 0x99, 0xde, 0xfe, 0x31, 0x98, 0x37, 0xa5, 0x8d, 0x0d, 0xe6, 0x4d, 0x6b, + 0x51, 0xc6, 0x6b, 0x92, 0x77, 0x09, 0x2d, 0x64, 0xf2, 0x06, 0x78, 0xdb, 0xda, 0x3d, 0x69, 0x3f, + 0x7b, 0xe8, 0x17, 0x00, 0xd1, 0xe9, 0x56, 0x83, 0xae, 0x0f, 0xe2, 0x48, 0xed, 0x7a, 0xc5, 0x57, + 0xce, 0x6a, 0xa6, 0x02, 0x78, 0x5d, 0x06, 0x70, 0x1d, 0x2d, 0x65, 0x0b, 0x2e, 0x9c, 0x24, 0x43, + 0x78, 0x00, 0xf3, 0x72, 0x3b, 0x5f, 0x19, 0xbc, 0x35, 0x4f, 0xf6, 0x70, 0x25, 0x7b, 0xa2, 0xe2, + 0x7a, 0x49, 0x72, 0xe9, 0xa8, 0x34, 0x68, 0xe3, 0xa2, 0x1d, 0x38, 0x2e, 0x4b, 0x2b, 0xca, 0x74, + 0x1c, 0xd5, 0xf6, 0xe2, 0xd5, 0x21, 0x66, 0x2a, 0x86, 0xa2, 0x64, 0xb8, 0x88, 0xd0, 0x69, 0x86, + 0xea, 0xea, 0xfe, 0x9f, 0x7a, 0xee, 0x87, 0xae, 0x9e, 0xdb, 0xef, 0xea, 0xe0, 0xa0, 0xab, 0x83, + 0x3f, 0xba, 0x3a, 0xf8, 0xfa, 0x50, 0xcf, 0x1d, 0x1c, 0xea, 0xb9, 0xdf, 0x0f, 0xf5, 0xdc, 0x47, + 0x73, 0xb1, 0xde, 0xba, 0x42, 0x59, 0x6b, 0x5d, 0xf8, 0x10, 0x8e, 0x5c, 0x2b, 0xfe, 0xe9, 0x5a, + 0x9b, 0x90, 0xdf, 0x9a, 0x4b, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x47, 0x8e, 0x3f, 0x56, 0x18, + 0x0f, 0x00, 0x00, } func (this *QueryContractInfoResponse) Equal(that interface{}) bool { @@ -1310,7 +1310,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "x/wasm/internal/types/query.proto", + Metadata: "x/wasm/types/query.proto", } func (m *QueryContractInfoRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/wasm/internal/types/query.pb.gw.go b/x/wasm/types/query.pb.gw.go similarity index 99% rename from x/wasm/internal/types/query.pb.gw.go rename to x/wasm/types/query.pb.gw.go index 01f89e1506..8630e48008 100644 --- a/x/wasm/internal/types/query.pb.gw.go +++ b/x/wasm/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: x/wasm/internal/types/query.proto +// source: x/wasm/types/query.proto /* Package types is a reverse proxy. diff --git a/x/wasm/internal/types/query.proto b/x/wasm/types/query.proto similarity index 98% rename from x/wasm/internal/types/query.proto rename to x/wasm/types/query.proto index 2b33b42556..d907d92fb3 100644 --- a/x/wasm/internal/types/query.proto +++ b/x/wasm/types/query.proto @@ -2,11 +2,11 @@ syntax = "proto3"; package cosmwasm.wasm.v1beta1; import "gogoproto/gogo.proto"; -import "x/wasm/internal/types/types.proto"; +import "x/wasm/types/types.proto"; import "google/api/annotations.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; -option go_package = "github.com/CosmWasm/wasmd/x/wasmd/internal/types"; +option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; option (gogoproto.goproto_getters_all) = false; option (gogoproto.equal_all) = false; diff --git a/x/wasm/internal/types/test_fixtures.go b/x/wasm/types/test_fixtures.go similarity index 100% rename from x/wasm/internal/types/test_fixtures.go rename to x/wasm/types/test_fixtures.go diff --git a/x/wasm/internal/types/tx.go b/x/wasm/types/tx.go similarity index 100% rename from x/wasm/internal/types/tx.go rename to x/wasm/types/tx.go diff --git a/x/wasm/internal/types/tx.pb.go b/x/wasm/types/tx.pb.go similarity index 93% rename from x/wasm/internal/types/tx.pb.go rename to x/wasm/types/tx.pb.go index 41766b2590..9fb9592410 100644 --- a/x/wasm/internal/types/tx.pb.go +++ b/x/wasm/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: x/wasm/internal/types/tx.proto +// source: x/wasm/types/tx.proto package types @@ -49,7 +49,7 @@ func (m *MsgStoreCode) Reset() { *m = MsgStoreCode{} } func (m *MsgStoreCode) String() string { return proto.CompactTextString(m) } func (*MsgStoreCode) ProtoMessage() {} func (*MsgStoreCode) Descriptor() ([]byte, []int) { - return fileDescriptor_5129e02f2349864e, []int{0} + return fileDescriptor_fdaa78bc8a72122f, []int{0} } func (m *MsgStoreCode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -88,7 +88,7 @@ func (m *MsgStoreCodeResponse) Reset() { *m = MsgStoreCodeResponse{} } func (m *MsgStoreCodeResponse) String() string { return proto.CompactTextString(m) } func (*MsgStoreCodeResponse) ProtoMessage() {} func (*MsgStoreCodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5129e02f2349864e, []int{1} + return fileDescriptor_fdaa78bc8a72122f, []int{1} } func (m *MsgStoreCodeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -137,7 +137,7 @@ func (m *MsgInstantiateContract) Reset() { *m = MsgInstantiateContract{} func (m *MsgInstantiateContract) String() string { return proto.CompactTextString(m) } func (*MsgInstantiateContract) ProtoMessage() {} func (*MsgInstantiateContract) Descriptor() ([]byte, []int) { - return fileDescriptor_5129e02f2349864e, []int{2} + return fileDescriptor_fdaa78bc8a72122f, []int{2} } func (m *MsgInstantiateContract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -178,7 +178,7 @@ func (m *MsgInstantiateContractResponse) Reset() { *m = MsgInstantiateCo func (m *MsgInstantiateContractResponse) String() string { return proto.CompactTextString(m) } func (*MsgInstantiateContractResponse) ProtoMessage() {} func (*MsgInstantiateContractResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5129e02f2349864e, []int{3} + return fileDescriptor_fdaa78bc8a72122f, []int{3} } func (m *MsgInstantiateContractResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -223,7 +223,7 @@ func (m *MsgExecuteContract) Reset() { *m = MsgExecuteContract{} } func (m *MsgExecuteContract) String() string { return proto.CompactTextString(m) } func (*MsgExecuteContract) ProtoMessage() {} func (*MsgExecuteContract) Descriptor() ([]byte, []int) { - return fileDescriptor_5129e02f2349864e, []int{4} + return fileDescriptor_fdaa78bc8a72122f, []int{4} } func (m *MsgExecuteContract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -262,7 +262,7 @@ func (m *MsgExecuteContractResponse) Reset() { *m = MsgExecuteContractRe func (m *MsgExecuteContractResponse) String() string { return proto.CompactTextString(m) } func (*MsgExecuteContractResponse) ProtoMessage() {} func (*MsgExecuteContractResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5129e02f2349864e, []int{5} + return fileDescriptor_fdaa78bc8a72122f, []int{5} } func (m *MsgExecuteContractResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -307,7 +307,7 @@ func (m *MsgMigrateContract) Reset() { *m = MsgMigrateContract{} } func (m *MsgMigrateContract) String() string { return proto.CompactTextString(m) } func (*MsgMigrateContract) ProtoMessage() {} func (*MsgMigrateContract) Descriptor() ([]byte, []int) { - return fileDescriptor_5129e02f2349864e, []int{6} + return fileDescriptor_fdaa78bc8a72122f, []int{6} } func (m *MsgMigrateContract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -347,7 +347,7 @@ func (m *MsgMigrateContractResponse) Reset() { *m = MsgMigrateContractRe func (m *MsgMigrateContractResponse) String() string { return proto.CompactTextString(m) } func (*MsgMigrateContractResponse) ProtoMessage() {} func (*MsgMigrateContractResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5129e02f2349864e, []int{7} + return fileDescriptor_fdaa78bc8a72122f, []int{7} } func (m *MsgMigrateContractResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -390,7 +390,7 @@ func (m *MsgUpdateAdmin) Reset() { *m = MsgUpdateAdmin{} } func (m *MsgUpdateAdmin) String() string { return proto.CompactTextString(m) } func (*MsgUpdateAdmin) ProtoMessage() {} func (*MsgUpdateAdmin) Descriptor() ([]byte, []int) { - return fileDescriptor_5129e02f2349864e, []int{8} + return fileDescriptor_fdaa78bc8a72122f, []int{8} } func (m *MsgUpdateAdmin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -427,7 +427,7 @@ func (m *MsgUpdateAdminResponse) Reset() { *m = MsgUpdateAdminResponse{} func (m *MsgUpdateAdminResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateAdminResponse) ProtoMessage() {} func (*MsgUpdateAdminResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5129e02f2349864e, []int{9} + return fileDescriptor_fdaa78bc8a72122f, []int{9} } func (m *MsgUpdateAdminResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -468,7 +468,7 @@ func (m *MsgClearAdmin) Reset() { *m = MsgClearAdmin{} } func (m *MsgClearAdmin) String() string { return proto.CompactTextString(m) } func (*MsgClearAdmin) ProtoMessage() {} func (*MsgClearAdmin) Descriptor() ([]byte, []int) { - return fileDescriptor_5129e02f2349864e, []int{10} + return fileDescriptor_fdaa78bc8a72122f, []int{10} } func (m *MsgClearAdmin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -505,7 +505,7 @@ func (m *MsgClearAdminResponse) Reset() { *m = MsgClearAdminResponse{} } func (m *MsgClearAdminResponse) String() string { return proto.CompactTextString(m) } func (*MsgClearAdminResponse) ProtoMessage() {} func (*MsgClearAdminResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5129e02f2349864e, []int{11} + return fileDescriptor_fdaa78bc8a72122f, []int{11} } func (m *MsgClearAdminResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -549,61 +549,61 @@ func init() { proto.RegisterType((*MsgClearAdminResponse)(nil), "cosmwasm.wasm.v1beta1.MsgClearAdminResponse") } -func init() { proto.RegisterFile("x/wasm/internal/types/tx.proto", fileDescriptor_5129e02f2349864e) } - -var fileDescriptor_5129e02f2349864e = []byte{ - // 808 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcd, 0x6e, 0xf3, 0x44, - 0x14, 0x8d, 0xbf, 0xfc, 0x35, 0x37, 0xe1, 0x03, 0x99, 0xb6, 0x18, 0x83, 0x9c, 0x90, 0x82, 0x14, - 0x04, 0xb5, 0xdb, 0x22, 0x60, 0x81, 0x58, 0x34, 0x81, 0x45, 0x17, 0xae, 0x90, 0x2b, 0x54, 0xa9, - 0x12, 0x0a, 0x13, 0x7b, 0x6a, 0x06, 0xe2, 0x99, 0xc8, 0x33, 0x21, 0xa9, 0x78, 0x03, 0x56, 0xbc, - 0x00, 0x2f, 0x80, 0x78, 0x90, 0x2e, 0xbb, 0x44, 0x42, 0x0a, 0x90, 0x6e, 0x79, 0x02, 0x56, 0x68, - 0x6c, 0xc7, 0x71, 0x43, 0x1c, 0x19, 0x21, 0x36, 0xf6, 0xdc, 0xf1, 0xb9, 0xe7, 0xf8, 0x1e, 0xdd, - 0x3b, 0x1a, 0x30, 0xe6, 0xd6, 0x0c, 0xf1, 0xc0, 0x22, 0x54, 0xe0, 0x90, 0xa2, 0xb1, 0x25, 0xee, - 0x26, 0x98, 0x5b, 0x62, 0x6e, 0x4e, 0x42, 0x26, 0x98, 0x7a, 0xe0, 0x32, 0x1e, 0x48, 0x84, 0x19, - 0x3d, 0xbe, 0x3d, 0x1d, 0x61, 0x81, 0x4e, 0x75, 0x43, 0x6e, 0x33, 0x6e, 0x8d, 0x10, 0xc7, 0x56, - 0xb2, 0x69, 0xb9, 0x8c, 0xd0, 0x38, 0x4d, 0xdf, 0xf7, 0x99, 0xcf, 0xa2, 0xa5, 0x25, 0x57, 0xc9, - 0xee, 0x1b, 0x39, 0x62, 0xf2, 0x19, 0x43, 0xba, 0x7f, 0x2a, 0xd0, 0xb2, 0xb9, 0x7f, 0x25, 0x58, - 0x88, 0x07, 0xcc, 0xc3, 0xea, 0x21, 0xd4, 0x38, 0xa6, 0x1e, 0x0e, 0x35, 0xa5, 0xa3, 0xf4, 0x1a, - 0x4e, 0x12, 0xa9, 0x1f, 0xc0, 0x73, 0xc9, 0x35, 0x1c, 0xdd, 0x09, 0x3c, 0x74, 0x99, 0x87, 0xb5, - 0x67, 0x1d, 0xa5, 0xd7, 0xea, 0xbf, 0xb4, 0x5c, 0xb4, 0x5b, 0xd7, 0xe7, 0x57, 0x76, 0xff, 0x4e, - 0x44, 0x0c, 0x4e, 0x4b, 0xe2, 0x56, 0x51, 0xc4, 0xc7, 0xa6, 0xa1, 0x8b, 0xb5, 0x72, 0xc2, 0x17, - 0x45, 0xaa, 0x06, 0xf5, 0xd1, 0x94, 0x8c, 0xa5, 0x50, 0x25, 0xfa, 0xb0, 0x0a, 0xd5, 0x1b, 0x38, - 0x24, 0x94, 0x0b, 0x44, 0x05, 0x41, 0x02, 0x0f, 0x27, 0x38, 0x0c, 0x08, 0xe7, 0x84, 0x51, 0xad, - 0xda, 0x51, 0x7a, 0xcd, 0xb3, 0x23, 0x73, 0xab, 0x47, 0xe6, 0xb9, 0xeb, 0x62, 0xce, 0x07, 0x8c, - 0xde, 0x12, 0xdf, 0x39, 0xc8, 0x50, 0x7c, 0x96, 0x32, 0x74, 0x3f, 0x82, 0xfd, 0x6c, 0xb5, 0x0e, - 0xe6, 0x13, 0x46, 0x39, 0x56, 0x8f, 0xa0, 0x2e, 0x6b, 0x1a, 0x12, 0x2f, 0x2a, 0xbb, 0xd2, 0x87, - 0xe5, 0xa2, 0x5d, 0x93, 0x90, 0x8b, 0x4f, 0x9c, 0x9a, 0xfc, 0x74, 0xe1, 0x75, 0x7f, 0x7c, 0x06, - 0x87, 0x36, 0xf7, 0x2f, 0xd6, 0xcc, 0x03, 0x46, 0x45, 0x88, 0x5c, 0x91, 0xeb, 0xda, 0x3e, 0x54, - 0x91, 0x17, 0x10, 0x1a, 0x99, 0xd5, 0x70, 0xe2, 0x20, 0xab, 0x56, 0xce, 0x53, 0x93, 0xa9, 0x63, - 0x34, 0xc2, 0xe3, 0xc4, 0x9e, 0x38, 0x50, 0x3f, 0x84, 0x3d, 0x42, 0x89, 0x18, 0x06, 0xdc, 0x8f, - 0xec, 0x68, 0xf5, 0x5f, 0xff, 0x6b, 0xd1, 0xd6, 0x30, 0x75, 0x99, 0x47, 0xa8, 0x6f, 0x7d, 0xcd, - 0x19, 0x35, 0x1d, 0x34, 0xb3, 0x31, 0xe7, 0xc8, 0xc7, 0x4e, 0x5d, 0xa2, 0x6d, 0xee, 0xab, 0x08, - 0xaa, 0xb7, 0x53, 0xea, 0x71, 0xad, 0xd6, 0x29, 0xf7, 0x9a, 0x67, 0xaf, 0x9a, 0x71, 0x47, 0x99, - 0xb2, 0xa3, 0x52, 0x0b, 0x07, 0x8c, 0xd0, 0xfe, 0xc9, 0xfd, 0xa2, 0x5d, 0xfa, 0xe9, 0xb7, 0x76, - 0xcf, 0x27, 0xe2, 0xab, 0xe9, 0xc8, 0x74, 0x59, 0x60, 0x25, 0xed, 0x17, 0xbf, 0x8e, 0xb9, 0xf7, - 0x4d, 0xd2, 0x44, 0x32, 0x81, 0x3b, 0x31, 0x73, 0xf7, 0x12, 0x8c, 0xed, 0xf6, 0xa4, 0x36, 0x6b, - 0x50, 0x47, 0x9e, 0x17, 0x62, 0xce, 0x13, 0x9f, 0x56, 0xa1, 0xaa, 0x42, 0xc5, 0x43, 0x02, 0xc5, - 0x4d, 0xe5, 0x44, 0xeb, 0xee, 0xaf, 0x0a, 0xa8, 0x36, 0xf7, 0x3f, 0x9d, 0x63, 0x77, 0x5a, 0xc0, - 0x6b, 0x1d, 0xf6, 0xdc, 0x04, 0x93, 0xd8, 0x9d, 0xc6, 0xaa, 0x09, 0x65, 0xe9, 0x58, 0xb9, 0x80, - 0x63, 0x12, 0xb8, 0x76, 0xab, 0xfa, 0xbf, 0xb9, 0x75, 0x02, 0xfa, 0x3f, 0x8b, 0x4b, 0x9d, 0x5a, - 0xf9, 0xa1, 0x64, 0xfc, 0xf8, 0x39, 0xf6, 0xc3, 0x26, 0x7e, 0x88, 0xfe, 0xa3, 0x1f, 0x85, 0x3a, - 0xf0, 0x63, 0x68, 0x06, 0xb1, 0x56, 0xd4, 0x6e, 0x95, 0x02, 0xe6, 0x41, 0x92, 0x60, 0x73, 0x3f, - 0x29, 0x70, 0xe3, 0x6f, 0x77, 0x16, 0x88, 0xe0, 0xb9, 0xcd, 0xfd, 0xcf, 0x27, 0x1e, 0x12, 0xf8, - 0x3c, 0x9a, 0x94, 0xbc, 0xda, 0x5e, 0x83, 0x06, 0xc5, 0xb3, 0x61, 0x76, 0xb6, 0xf6, 0x28, 0x9e, - 0xc5, 0x49, 0xd9, 0xc2, 0xcb, 0x4f, 0x0b, 0xef, 0x6a, 0xd1, 0x08, 0x67, 0x24, 0x56, 0x3f, 0xd4, - 0x1d, 0xc0, 0x0b, 0x36, 0xf7, 0x07, 0x63, 0x8c, 0xc2, 0xdd, 0xda, 0xbb, 0xe8, 0x5f, 0x81, 0x83, - 0x27, 0x24, 0x2b, 0xf6, 0xb3, 0xef, 0xab, 0x50, 0x96, 0x63, 0xf8, 0x05, 0x34, 0xd6, 0x67, 0x6d, - 0xde, 0x49, 0x96, 0x3d, 0xa2, 0xf4, 0x77, 0x0a, 0x80, 0x52, 0x57, 0xbf, 0x83, 0x97, 0xb7, 0x1d, - 0x4f, 0xc7, 0xf9, 0x1c, 0x5b, 0xe0, 0xfa, 0xfb, 0xff, 0x0a, 0x9e, 0x8a, 0x33, 0x78, 0x71, 0x73, - 0x56, 0xdf, 0xce, 0x67, 0xda, 0x80, 0xea, 0xa7, 0x85, 0xa1, 0x59, 0xc1, 0xcd, 0x61, 0xd8, 0x21, - 0xb8, 0x01, 0xdd, 0x25, 0x98, 0xd7, 0xb4, 0x2e, 0x34, 0xb3, 0xdd, 0xf9, 0x56, 0x3e, 0x43, 0x06, - 0xa6, 0x1f, 0x17, 0x82, 0xa5, 0x22, 0x5f, 0x02, 0x64, 0xba, 0xf0, 0xcd, 0xfc, 0xe4, 0x35, 0x4a, - 0x7f, 0xb7, 0x08, 0x6a, 0xa5, 0xd0, 0xbf, 0xbc, 0xff, 0xc3, 0x28, 0xdd, 0x2f, 0x0d, 0xe5, 0x61, - 0x69, 0x28, 0xbf, 0x2f, 0x0d, 0xe5, 0x87, 0x47, 0xa3, 0xf4, 0xf0, 0x68, 0x94, 0x7e, 0x79, 0x34, - 0x4a, 0x37, 0x27, 0x99, 0x93, 0x6c, 0xc0, 0x78, 0x70, 0x2d, 0xaf, 0x10, 0x92, 0xd5, 0xb3, 0xe6, - 0xc9, 0xfb, 0xe9, 0x85, 0x62, 0x54, 0x8b, 0xee, 0x12, 0xef, 0xfd, 0x1d, 0x00, 0x00, 0xff, 0xff, - 0x96, 0x93, 0x22, 0x47, 0xdd, 0x08, 0x00, 0x00, +func init() { proto.RegisterFile("x/wasm/types/tx.proto", fileDescriptor_fdaa78bc8a72122f) } + +var fileDescriptor_fdaa78bc8a72122f = []byte{ + // 804 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x4f, 0x6f, 0xe3, 0x44, + 0x14, 0x8f, 0x9b, 0x7f, 0xcd, 0x4b, 0x28, 0xc8, 0x34, 0xc5, 0x18, 0xe4, 0x44, 0x29, 0xa0, 0x20, + 0xa8, 0xdd, 0x16, 0x01, 0x07, 0xc4, 0xa1, 0x49, 0x39, 0xf4, 0x60, 0x84, 0x5c, 0xa1, 0x4a, 0x95, + 0x50, 0x98, 0xd8, 0x53, 0x63, 0x88, 0x67, 0x22, 0xcf, 0x84, 0xb4, 0xe2, 0x1b, 0x70, 0xe2, 0x0b, + 0xf0, 0x05, 0x10, 0x1f, 0xa4, 0xc7, 0x1e, 0x57, 0x5a, 0x29, 0xbb, 0x9b, 0x5e, 0xf7, 0x13, 0xec, + 0x69, 0x35, 0xb6, 0xe3, 0xb8, 0xd9, 0x38, 0xf2, 0x6a, 0xb5, 0x97, 0x64, 0xde, 0xcc, 0xef, 0xfd, + 0x7e, 0x7e, 0x3f, 0xbd, 0x37, 0x1a, 0x68, 0x5e, 0x1b, 0x53, 0xc4, 0x7c, 0x83, 0xdf, 0x8c, 0x31, + 0x33, 0xf8, 0xb5, 0x3e, 0x0e, 0x28, 0xa7, 0x72, 0xd3, 0xa6, 0xcc, 0x17, 0x07, 0x7a, 0xf8, 0xf3, + 0xe7, 0xd1, 0x10, 0x73, 0x74, 0xa4, 0x6a, 0x62, 0x9b, 0x32, 0x63, 0x88, 0x18, 0x36, 0xe2, 0x4d, + 0xc3, 0xa6, 0x1e, 0x89, 0xd2, 0xd4, 0x5d, 0x97, 0xba, 0x34, 0x5c, 0x1a, 0x62, 0x15, 0xef, 0x2a, + 0x0f, 0x35, 0xc4, 0x6f, 0x74, 0xd2, 0x79, 0x2e, 0x41, 0xc3, 0x64, 0xee, 0x39, 0xa7, 0x01, 0xee, + 0x53, 0x07, 0xcb, 0x7b, 0x50, 0x61, 0x98, 0x38, 0x38, 0x50, 0xa4, 0xb6, 0xd4, 0xad, 0x59, 0x71, + 0x24, 0x7f, 0x03, 0x3b, 0x82, 0x62, 0x30, 0xbc, 0xe1, 0x78, 0x60, 0x53, 0x07, 0x2b, 0x5b, 0x6d, + 0xa9, 0xdb, 0xe8, 0xbd, 0x37, 0x9f, 0xb5, 0x1a, 0x17, 0x27, 0xe7, 0x66, 0xef, 0x86, 0x87, 0x0c, + 0x56, 0x43, 0xe0, 0x16, 0x51, 0xc8, 0x47, 0x27, 0x81, 0x8d, 0x95, 0x62, 0xcc, 0x17, 0x46, 0xb2, + 0x02, 0xd5, 0xe1, 0xc4, 0x1b, 0x09, 0xa1, 0x52, 0x78, 0xb0, 0x08, 0xe5, 0x4b, 0xd8, 0xf3, 0x08, + 0xe3, 0x88, 0x70, 0x0f, 0x71, 0x3c, 0x18, 0xe3, 0xc0, 0xf7, 0x18, 0xf3, 0x28, 0x51, 0xca, 0x6d, + 0xa9, 0x5b, 0x3f, 0xde, 0xd7, 0xd7, 0x5a, 0xa3, 0x9f, 0xd8, 0x36, 0x66, 0xac, 0x4f, 0xc9, 0x95, + 0xe7, 0x5a, 0xcd, 0x14, 0xc5, 0x4f, 0x09, 0x43, 0xe7, 0x3b, 0xd8, 0x4d, 0x57, 0x6b, 0x61, 0x36, + 0xa6, 0x84, 0x61, 0x79, 0x1f, 0xaa, 0xa2, 0xa6, 0x81, 0xe7, 0x84, 0x65, 0x97, 0x7a, 0x30, 0x9f, + 0xb5, 0x2a, 0x02, 0x72, 0x76, 0x6a, 0x55, 0xc4, 0xd1, 0x99, 0xd3, 0xf9, 0x77, 0x0b, 0xf6, 0x4c, + 0xe6, 0x9e, 0x2d, 0x99, 0xfb, 0x94, 0xf0, 0x00, 0xd9, 0x3c, 0xd3, 0xb5, 0x5d, 0x28, 0x23, 0xc7, + 0xf7, 0x48, 0x68, 0x56, 0xcd, 0x8a, 0x82, 0xb4, 0x5a, 0x31, 0x4b, 0x4d, 0xa4, 0x8e, 0xd0, 0x10, + 0x8f, 0x62, 0x7b, 0xa2, 0x40, 0xfe, 0x16, 0xb6, 0x3d, 0xe2, 0xf1, 0x81, 0xcf, 0xdc, 0xd0, 0x8e, + 0x46, 0xef, 0xe3, 0x17, 0xb3, 0x96, 0x82, 0x89, 0x4d, 0x1d, 0x8f, 0xb8, 0xc6, 0xef, 0x8c, 0x12, + 0xdd, 0x42, 0x53, 0x13, 0x33, 0x86, 0x5c, 0x6c, 0x55, 0x05, 0xda, 0x64, 0xae, 0x8c, 0xa0, 0x7c, + 0x35, 0x21, 0x0e, 0x53, 0x2a, 0xed, 0x62, 0xb7, 0x7e, 0xfc, 0xa1, 0x1e, 0x35, 0x92, 0x2e, 0x1a, + 0x29, 0xb1, 0xb0, 0x4f, 0x3d, 0xd2, 0x3b, 0xbc, 0x9d, 0xb5, 0x0a, 0xff, 0x3d, 0x69, 0x75, 0x5d, + 0x8f, 0xff, 0x36, 0x19, 0xea, 0x36, 0xf5, 0x8d, 0xb8, 0xeb, 0xa2, 0xbf, 0x03, 0xe6, 0xfc, 0x11, + 0x37, 0x91, 0x48, 0x60, 0x56, 0xc4, 0xdc, 0xf9, 0x11, 0xb4, 0xf5, 0xf6, 0x24, 0x36, 0x2b, 0x50, + 0x45, 0x8e, 0x13, 0x60, 0xc6, 0x62, 0x9f, 0x16, 0xa1, 0x2c, 0x43, 0xc9, 0x41, 0x1c, 0x45, 0x4d, + 0x65, 0x85, 0xeb, 0xce, 0x63, 0x09, 0x64, 0x93, 0xb9, 0x3f, 0x5c, 0x63, 0x7b, 0x92, 0xc3, 0x6b, + 0x15, 0xb6, 0xed, 0x18, 0x13, 0xdb, 0x9d, 0xc4, 0xb2, 0x0e, 0x45, 0xe1, 0x58, 0x31, 0x87, 0x63, + 0x02, 0xb8, 0x74, 0xab, 0xfc, 0xd6, 0xdc, 0x3a, 0x04, 0xf5, 0xd5, 0xe2, 0x12, 0xa7, 0x16, 0x7e, + 0x48, 0x29, 0x3f, 0xfe, 0x8f, 0xfc, 0x30, 0x3d, 0x37, 0x40, 0x6f, 0xe8, 0x47, 0xae, 0x0e, 0xfc, + 0x1e, 0xea, 0x7e, 0xa4, 0x15, 0xb6, 0x5b, 0x29, 0x87, 0x79, 0x10, 0x27, 0x98, 0xcc, 0x8d, 0x0b, + 0x5c, 0xf9, 0xda, 0x8d, 0x05, 0x22, 0xd8, 0x31, 0x99, 0xfb, 0xf3, 0xd8, 0x41, 0x1c, 0x9f, 0x84, + 0x93, 0x92, 0x55, 0xdb, 0x47, 0x50, 0x23, 0x78, 0x3a, 0x48, 0xcf, 0xd6, 0x36, 0xc1, 0xd3, 0x28, + 0x29, 0x5d, 0x78, 0xf1, 0x61, 0xe1, 0x1d, 0x25, 0x1c, 0xe1, 0x94, 0xc4, 0xe2, 0x83, 0x3a, 0x7d, + 0x78, 0xc7, 0x64, 0x6e, 0x7f, 0x84, 0x51, 0xb0, 0x59, 0x7b, 0x13, 0xfd, 0x07, 0xd0, 0x7c, 0x40, + 0xb2, 0x60, 0x3f, 0xfe, 0xbb, 0x0c, 0x45, 0x31, 0x86, 0xbf, 0x40, 0x6d, 0x79, 0xd7, 0x66, 0xdd, + 0x64, 0xe9, 0x2b, 0x4a, 0xfd, 0x22, 0x07, 0x28, 0x71, 0xf5, 0x2f, 0x78, 0x7f, 0xdd, 0xf5, 0x74, + 0x90, 0xcd, 0xb1, 0x06, 0xae, 0x7e, 0xfd, 0x5a, 0xf0, 0x44, 0x9c, 0xc2, 0xbb, 0xab, 0xb3, 0xfa, + 0x79, 0x36, 0xd3, 0x0a, 0x54, 0x3d, 0xca, 0x0d, 0x4d, 0x0b, 0xae, 0x0e, 0xc3, 0x06, 0xc1, 0x15, + 0xe8, 0x26, 0xc1, 0xac, 0xa6, 0xb5, 0xa1, 0x9e, 0xee, 0xce, 0x4f, 0xb3, 0x19, 0x52, 0x30, 0xf5, + 0x20, 0x17, 0x2c, 0x11, 0xf9, 0x15, 0x20, 0xd5, 0x85, 0x9f, 0x64, 0x27, 0x2f, 0x51, 0xea, 0x97, + 0x79, 0x50, 0x0b, 0x85, 0xde, 0xe9, 0xed, 0x33, 0xad, 0x70, 0x3b, 0xd7, 0xa4, 0xbb, 0xb9, 0x26, + 0x3d, 0x9d, 0x6b, 0xd2, 0x3f, 0xf7, 0x5a, 0xe1, 0xee, 0x5e, 0x2b, 0x3c, 0xba, 0xd7, 0x0a, 0x97, + 0x9f, 0xa5, 0x6e, 0xb2, 0x3e, 0x65, 0xfe, 0x85, 0x78, 0x39, 0x08, 0x56, 0xc7, 0x48, 0x3f, 0x23, + 0x86, 0x95, 0xf0, 0x05, 0xf1, 0xd5, 0xcb, 0x00, 0x00, 0x00, 0xff, 0xff, 0x23, 0x6f, 0xe6, 0xee, + 0xc1, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -875,7 +875,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "x/wasm/internal/types/tx.proto", + Metadata: "x/wasm/types/tx.proto", } func (m *MsgStoreCode) Marshal() (dAtA []byte, err error) { diff --git a/x/wasm/internal/types/tx.proto b/x/wasm/types/tx.proto similarity index 97% rename from x/wasm/internal/types/tx.proto rename to x/wasm/types/tx.proto index 370c0d4982..07932c4f4b 100644 --- a/x/wasm/internal/types/tx.proto +++ b/x/wasm/types/tx.proto @@ -4,9 +4,9 @@ package cosmwasm.wasm.v1beta1; import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; -import "x/wasm/internal/types/types.proto"; +import "x/wasm/types/types.proto"; -option go_package = "github.com/CosmWasm/wasmd/x/wasmd/internal/types"; +option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; option (gogoproto.goproto_getters_all) = false; // Msg defines the wasm Msg service. diff --git a/x/wasm/internal/types/tx_test.go b/x/wasm/types/tx_test.go similarity index 100% rename from x/wasm/internal/types/tx_test.go rename to x/wasm/types/tx_test.go diff --git a/x/wasm/internal/types/types.go b/x/wasm/types/types.go similarity index 100% rename from x/wasm/internal/types/types.go rename to x/wasm/types/types.go diff --git a/x/wasm/internal/types/types.pb.go b/x/wasm/types/types.pb.go similarity index 88% rename from x/wasm/internal/types/types.pb.go rename to x/wasm/types/types.pb.go index 35cba507cd..eed0b27771 100644 --- a/x/wasm/internal/types/types.pb.go +++ b/x/wasm/types/types.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: x/wasm/internal/types/types.proto +// source: x/wasm/types/types.proto package types @@ -55,7 +55,7 @@ var AccessType_value = map[string]int32{ } func (AccessType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_45de2b3fc8aff6aa, []int{0} + return fileDescriptor_8b85390a762df19f, []int{0} } // ContractCodeHistoryOperationType actions that caused a code change @@ -91,7 +91,7 @@ func (x ContractCodeHistoryOperationType) String() string { } func (ContractCodeHistoryOperationType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_45de2b3fc8aff6aa, []int{1} + return fileDescriptor_8b85390a762df19f, []int{1} } // AccessTypeParam @@ -103,7 +103,7 @@ func (m *AccessTypeParam) Reset() { *m = AccessTypeParam{} } func (m *AccessTypeParam) String() string { return proto.CompactTextString(m) } func (*AccessTypeParam) ProtoMessage() {} func (*AccessTypeParam) Descriptor() ([]byte, []int) { - return fileDescriptor_45de2b3fc8aff6aa, []int{0} + return fileDescriptor_8b85390a762df19f, []int{0} } func (m *AccessTypeParam) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -142,7 +142,7 @@ func (m *AccessConfig) Reset() { *m = AccessConfig{} } func (m *AccessConfig) String() string { return proto.CompactTextString(m) } func (*AccessConfig) ProtoMessage() {} func (*AccessConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_45de2b3fc8aff6aa, []int{1} + return fileDescriptor_8b85390a762df19f, []int{1} } func (m *AccessConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -181,7 +181,7 @@ type Params struct { func (m *Params) Reset() { *m = Params{} } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_45de2b3fc8aff6aa, []int{2} + return fileDescriptor_8b85390a762df19f, []int{2} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -228,7 +228,7 @@ func (m *CodeInfo) Reset() { *m = CodeInfo{} } func (m *CodeInfo) String() string { return proto.CompactTextString(m) } func (*CodeInfo) ProtoMessage() {} func (*CodeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_45de2b3fc8aff6aa, []int{3} + return fileDescriptor_8b85390a762df19f, []int{3} } func (m *CodeInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -277,7 +277,7 @@ func (m *ContractInfo) Reset() { *m = ContractInfo{} } func (m *ContractInfo) String() string { return proto.CompactTextString(m) } func (*ContractInfo) ProtoMessage() {} func (*ContractInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_45de2b3fc8aff6aa, []int{4} + return fileDescriptor_8b85390a762df19f, []int{4} } func (m *ContractInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -320,7 +320,7 @@ func (m *ContractCodeHistoryEntry) Reset() { *m = ContractCodeHistoryEnt func (m *ContractCodeHistoryEntry) String() string { return proto.CompactTextString(m) } func (*ContractCodeHistoryEntry) ProtoMessage() {} func (*ContractCodeHistoryEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_45de2b3fc8aff6aa, []int{5} + return fileDescriptor_8b85390a762df19f, []int{5} } func (m *ContractCodeHistoryEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -361,7 +361,7 @@ func (m *AbsoluteTxPosition) Reset() { *m = AbsoluteTxPosition{} } func (m *AbsoluteTxPosition) String() string { return proto.CompactTextString(m) } func (*AbsoluteTxPosition) ProtoMessage() {} func (*AbsoluteTxPosition) Descriptor() ([]byte, []int) { - return fileDescriptor_45de2b3fc8aff6aa, []int{6} + return fileDescriptor_8b85390a762df19f, []int{6} } func (m *AbsoluteTxPosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -402,7 +402,7 @@ func (m *Model) Reset() { *m = Model{} } func (m *Model) String() string { return proto.CompactTextString(m) } func (*Model) ProtoMessage() {} func (*Model) Descriptor() ([]byte, []int) { - return fileDescriptor_45de2b3fc8aff6aa, []int{7} + return fileDescriptor_8b85390a762df19f, []int{7} } func (m *Model) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -444,81 +444,80 @@ func init() { proto.RegisterType((*Model)(nil), "cosmwasm.wasm.v1beta1.Model") } -func init() { proto.RegisterFile("x/wasm/internal/types/types.proto", fileDescriptor_45de2b3fc8aff6aa) } - -var fileDescriptor_45de2b3fc8aff6aa = []byte{ - // 1130 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xcf, 0x8f, 0xdb, 0xc4, - 0x17, 0x8f, 0x93, 0xec, 0xaf, 0xe9, 0x7e, 0xdb, 0x74, 0xbe, 0x5d, 0x9a, 0x86, 0x92, 0x64, 0x5d, - 0x10, 0xdb, 0x1f, 0x24, 0x6d, 0x41, 0x14, 0xf5, 0x96, 0x38, 0xa6, 0xeb, 0x8a, 0x4d, 0xa2, 0x49, - 0x96, 0x76, 0x91, 0x90, 0x35, 0xb6, 0x67, 0xb3, 0x43, 0x6d, 0x4f, 0xe4, 0x99, 0xb4, 0x49, 0xff, - 0x02, 0xb4, 0x5c, 0x10, 0x27, 0x0e, 0xac, 0x84, 0x04, 0x42, 0xfd, 0x53, 0x7a, 0x41, 0xea, 0x91, - 0x53, 0x04, 0xa9, 0x90, 0xe0, 0xba, 0xdc, 0x7a, 0x42, 0x9e, 0xc9, 0x2a, 0x86, 0xb6, 0xbb, 0xe1, - 0xe2, 0xcc, 0x7b, 0xf3, 0x3e, 0x9f, 0xf7, 0x3e, 0x6f, 0xe6, 0x39, 0x06, 0xeb, 0xc3, 0xea, 0x23, - 0xcc, 0x83, 0x2a, 0x0d, 0x05, 0x89, 0x42, 0xec, 0x57, 0xc5, 0xa8, 0x4f, 0xb8, 0x7a, 0x56, 0xfa, - 0x11, 0x13, 0x0c, 0xae, 0xb9, 0x8c, 0x07, 0x71, 0x50, 0x45, 0x3e, 0x1e, 0xde, 0x70, 0x88, 0xc0, - 0x37, 0x0a, 0xe7, 0x7a, 0xac, 0xc7, 0x64, 0x44, 0x35, 0x5e, 0xa9, 0x60, 0xdd, 0x01, 0x67, 0x6a, - 0xae, 0x4b, 0x38, 0xef, 0x8e, 0xfa, 0xa4, 0x8d, 0x23, 0x1c, 0x40, 0x0b, 0x2c, 0x3c, 0xc4, 0xfe, - 0x80, 0xe4, 0xb5, 0xb2, 0xb6, 0x71, 0xfa, 0xe6, 0x7a, 0xe5, 0x95, 0x7c, 0x95, 0x19, 0xac, 0x9e, - 0x3b, 0x1c, 0x97, 0x56, 0x47, 0x38, 0xf0, 0x6f, 0xeb, 0x12, 0xa9, 0x23, 0xc5, 0x70, 0x3b, 0xfb, - 0xed, 0xf7, 0x25, 0x4d, 0xff, 0x4e, 0x03, 0xab, 0x2a, 0xda, 0x60, 0xe1, 0x2e, 0xed, 0xc1, 0xfb, - 0x00, 0xf4, 0x49, 0x14, 0x50, 0xce, 0x29, 0x0b, 0xe7, 0x4f, 0xb3, 0x76, 0x38, 0x2e, 0x9d, 0x55, - 0x69, 0x66, 0x70, 0x1d, 0x25, 0xb8, 0xe0, 0x35, 0xb0, 0x84, 0x3d, 0x2f, 0x22, 0x9c, 0xe7, 0xd3, - 0x65, 0x6d, 0x63, 0xa5, 0x0e, 0x0f, 0xc7, 0xa5, 0xd3, 0x0a, 0x33, 0xdd, 0xd0, 0xd1, 0x51, 0xc8, - 0xb4, 0xbc, 0xdf, 0xd3, 0x60, 0x51, 0x2a, 0xe7, 0x50, 0x00, 0xe8, 0x32, 0x8f, 0xd8, 0x83, 0xbe, - 0xcf, 0xb0, 0x67, 0x63, 0x99, 0x5b, 0x16, 0x78, 0xea, 0xe6, 0xa5, 0x63, 0x0b, 0x54, 0xca, 0xea, - 0xeb, 0x4f, 0xc7, 0xa5, 0xd4, 0xe1, 0xb8, 0x74, 0x41, 0xa5, 0x7c, 0x99, 0x4c, 0x47, 0xb9, 0xd8, - 0xb9, 0x2d, 0x7d, 0x0a, 0x0a, 0xbf, 0xd1, 0x40, 0x91, 0x86, 0x5c, 0xe0, 0x50, 0x50, 0x2c, 0x88, - 0xed, 0x91, 0x5d, 0x3c, 0xf0, 0x85, 0x9d, 0xe8, 0x51, 0x7a, 0xde, 0x1e, 0x5d, 0x3e, 0x1c, 0x97, - 0xde, 0x51, 0xc9, 0x8f, 0xa7, 0xd4, 0xd1, 0xc5, 0x44, 0x40, 0x43, 0xed, 0xb7, 0x67, 0x9d, 0xbc, - 0x0b, 0x60, 0x80, 0x87, 0x76, 0x9c, 0xc7, 0x96, 0x32, 0x38, 0x7d, 0x4c, 0xf2, 0x99, 0xb2, 0xb6, - 0x91, 0xad, 0xbf, 0x35, 0x53, 0xf8, 0x72, 0x8c, 0x8e, 0xce, 0x04, 0x78, 0x78, 0x0f, 0xf3, 0xc0, - 0x60, 0x1e, 0xe9, 0xd0, 0xc7, 0xea, 0x1a, 0xa4, 0xf4, 0x9f, 0x35, 0xb0, 0x1c, 0xbb, 0xac, 0x70, - 0x97, 0xc1, 0x37, 0xc1, 0x8a, 0x44, 0xec, 0x61, 0xbe, 0x27, 0x1b, 0xbc, 0x8a, 0x96, 0x63, 0xc7, - 0x26, 0xe6, 0x7b, 0x30, 0x0f, 0x96, 0xdc, 0x88, 0x60, 0xc1, 0x22, 0x75, 0x8a, 0xe8, 0xc8, 0x84, - 0x6f, 0x80, 0x45, 0xce, 0x06, 0x91, 0xab, 0x2a, 0x59, 0x41, 0x53, 0x2b, 0x46, 0x38, 0x03, 0xea, - 0x7b, 0x24, 0xca, 0x67, 0x15, 0x62, 0x6a, 0xc2, 0xfb, 0x00, 0x26, 0x1b, 0xe1, 0xca, 0x73, 0xca, - 0x2f, 0xcc, 0x7f, 0xa4, 0xd9, 0xf8, 0x48, 0xd1, 0xd9, 0x04, 0x89, 0xda, 0xd0, 0xff, 0xd2, 0xc0, - 0xaa, 0xc1, 0x42, 0x11, 0x61, 0x57, 0x48, 0x4d, 0x97, 0xc0, 0x92, 0xd4, 0x44, 0x3d, 0xa9, 0x28, - 0x5b, 0x07, 0x93, 0x71, 0x69, 0x51, 0x4a, 0x6e, 0xa0, 0xc5, 0x78, 0xcb, 0xf2, 0x8e, 0xd1, 0x76, - 0x0e, 0x2c, 0x60, 0x2f, 0xa0, 0xe1, 0x54, 0x9a, 0x32, 0x62, 0xaf, 0x8f, 0x1d, 0xe2, 0x4f, 0x75, - 0x29, 0x03, 0x1a, 0x53, 0x16, 0xe2, 0x4d, 0xa5, 0x5c, 0x7e, 0x9d, 0x14, 0x87, 0x33, 0x7f, 0x20, - 0x48, 0x77, 0xd8, 0x66, 0x9c, 0x0a, 0xca, 0x42, 0x74, 0x84, 0x84, 0xef, 0x81, 0x53, 0xd4, 0x71, - 0xed, 0x3e, 0x8b, 0x44, 0x5c, 0xf3, 0xa2, 0x1c, 0x98, 0xff, 0x4d, 0xc6, 0xa5, 0x15, 0xab, 0x6e, - 0xb4, 0x59, 0x24, 0xac, 0x06, 0x5a, 0xa1, 0x8e, 0x2b, 0x97, 0xde, 0xed, 0xec, 0x1f, 0xf1, 0xb4, - 0x7c, 0x95, 0x06, 0xf9, 0x23, 0xd5, 0xb1, 0xb4, 0x4d, 0xca, 0x05, 0x8b, 0x46, 0x66, 0x28, 0xa2, - 0x11, 0xdc, 0x06, 0x2b, 0xac, 0x4f, 0x22, 0x2c, 0x66, 0x73, 0x7d, 0xeb, 0x35, 0x85, 0xbd, 0x82, - 0xa3, 0x75, 0x04, 0x8d, 0x6f, 0x32, 0x9a, 0x31, 0x25, 0x1b, 0x9b, 0x7e, 0x6d, 0x63, 0x0d, 0xb0, - 0x34, 0xe8, 0x7b, 0xb2, 0x25, 0x99, 0xff, 0xdc, 0x92, 0x29, 0x12, 0x56, 0x40, 0x26, 0xe0, 0x3d, - 0xd9, 0xeb, 0xd5, 0xfa, 0xc5, 0x17, 0xe3, 0x52, 0x9e, 0x84, 0x2e, 0xf3, 0x68, 0xd8, 0xab, 0x7e, - 0xc1, 0x59, 0x58, 0x41, 0xf8, 0xd1, 0x16, 0xe1, 0x1c, 0xf7, 0x08, 0x8a, 0x03, 0x75, 0x04, 0xe0, - 0xcb, 0x74, 0x70, 0x1d, 0xac, 0x3a, 0x3e, 0x73, 0x1f, 0xd8, 0x7b, 0x84, 0xf6, 0xf6, 0x84, 0xba, - 0x0d, 0xe8, 0x94, 0xf4, 0x6d, 0x4a, 0x17, 0xbc, 0x00, 0x96, 0xc5, 0xd0, 0xa6, 0xa1, 0x47, 0x86, - 0x4a, 0x13, 0x5a, 0x12, 0x43, 0x2b, 0x36, 0x75, 0x0a, 0x16, 0xb6, 0x98, 0x47, 0x7c, 0x78, 0x17, - 0x64, 0x1e, 0x90, 0x91, 0x9a, 0x8e, 0xfa, 0x47, 0x2f, 0xc6, 0xa5, 0x0f, 0x7a, 0x54, 0xec, 0x0d, - 0x9c, 0x8a, 0xcb, 0x82, 0xaa, 0x20, 0xa1, 0x17, 0x4f, 0x6b, 0x28, 0x92, 0x4b, 0x9f, 0x3a, 0xbc, - 0xea, 0x8c, 0x04, 0xe1, 0x95, 0x4d, 0x32, 0xac, 0xc7, 0x0b, 0x14, 0x93, 0xc4, 0xd7, 0x48, 0xbd, - 0xd4, 0xd3, 0x72, 0xd6, 0x94, 0x71, 0xe5, 0x4f, 0x0d, 0x80, 0xd9, 0xcb, 0x03, 0x7e, 0x08, 0xce, - 0xd7, 0x0c, 0xc3, 0xec, 0x74, 0xec, 0xee, 0x4e, 0xdb, 0xb4, 0xb7, 0x9b, 0x9d, 0xb6, 0x69, 0x58, - 0x1f, 0x5b, 0x66, 0x23, 0x97, 0x2a, 0x5c, 0xd8, 0x3f, 0x28, 0xaf, 0xcd, 0x82, 0xb7, 0x43, 0xde, - 0x27, 0x2e, 0xdd, 0xa5, 0xc4, 0x83, 0xd7, 0x00, 0x4c, 0xe2, 0x9a, 0xad, 0x7a, 0xab, 0xb1, 0x93, - 0xd3, 0x0a, 0xe7, 0xf6, 0x0f, 0xca, 0xb9, 0x19, 0xa4, 0xc9, 0x1c, 0xe6, 0x8d, 0xe0, 0x2d, 0x90, - 0x4f, 0x46, 0xb7, 0x9a, 0x9f, 0xec, 0xd8, 0xb5, 0x46, 0x03, 0x99, 0x9d, 0x4e, 0x2e, 0xfd, 0xef, - 0x34, 0xad, 0xd0, 0x1f, 0xd5, 0xd4, 0xeb, 0x1a, 0xde, 0x04, 0x6b, 0x49, 0xa0, 0xf9, 0xa9, 0x89, - 0x76, 0x64, 0xa6, 0x4c, 0xe1, 0xfc, 0xfe, 0x41, 0xf9, 0xff, 0x33, 0x94, 0xf9, 0x90, 0x44, 0xa3, - 0x38, 0x59, 0x61, 0xf9, 0xcb, 0x1f, 0x8a, 0xa9, 0x27, 0x3f, 0x16, 0x53, 0x57, 0x7e, 0xca, 0x80, - 0xf2, 0x49, 0x97, 0x0e, 0x12, 0x70, 0xdd, 0x68, 0x35, 0xbb, 0xa8, 0x66, 0x74, 0x6d, 0xa3, 0xd5, - 0x30, 0xed, 0x4d, 0xab, 0xd3, 0x6d, 0xa1, 0x1d, 0xbb, 0xd5, 0x36, 0x51, 0xad, 0x6b, 0xb5, 0x9a, - 0xaf, 0x6a, 0x4d, 0x75, 0xff, 0xa0, 0x7c, 0xf5, 0x24, 0xee, 0x64, 0xc3, 0xee, 0x81, 0xcb, 0x73, - 0xa5, 0xb1, 0x9a, 0x56, 0x37, 0xa7, 0x15, 0x36, 0xf6, 0x0f, 0xca, 0x6f, 0x9f, 0xc4, 0x6f, 0x85, - 0x54, 0xc0, 0xcf, 0xc1, 0xb5, 0xb9, 0x88, 0xb7, 0xac, 0x3b, 0xa8, 0xd6, 0x35, 0x73, 0xe9, 0xc2, - 0xd5, 0xfd, 0x83, 0xf2, 0xbb, 0x27, 0x71, 0x6f, 0xd1, 0x5e, 0x84, 0x05, 0x99, 0x9b, 0xfe, 0x8e, - 0xd9, 0x34, 0x3b, 0x56, 0x27, 0x97, 0x99, 0x8f, 0xfe, 0x0e, 0x09, 0x09, 0xa7, 0xbc, 0x90, 0x8d, - 0x0f, 0xab, 0x8e, 0x9e, 0xfe, 0x56, 0x4c, 0x3d, 0x99, 0x14, 0xb5, 0xa7, 0x93, 0xa2, 0xf6, 0x6c, - 0x52, 0xd4, 0x7e, 0x9d, 0x14, 0xb5, 0xaf, 0x9f, 0x17, 0x53, 0xcf, 0x9e, 0x17, 0x53, 0xbf, 0x3c, - 0x2f, 0xa6, 0x3e, 0xbb, 0x9e, 0x98, 0x03, 0x83, 0xf1, 0x20, 0xfe, 0xb3, 0x91, 0x9f, 0x45, 0x5e, - 0x75, 0x38, 0xfd, 0xfd, 0xe7, 0xf7, 0x91, 0xb3, 0x28, 0xbf, 0x76, 0xde, 0xff, 0x3b, 0x00, 0x00, - 0xff, 0xff, 0xa8, 0x92, 0x2b, 0x20, 0x3f, 0x09, 0x00, 0x00, +func init() { proto.RegisterFile("x/wasm/types/types.proto", fileDescriptor_8b85390a762df19f) } + +var fileDescriptor_8b85390a762df19f = []byte{ + // 1119 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xcd, 0x8f, 0xdb, 0x44, + 0x14, 0x8f, 0x93, 0xec, 0xd7, 0x74, 0x69, 0xd3, 0xa1, 0x4b, 0xd3, 0x50, 0x92, 0xd4, 0xe5, 0x63, + 0xfb, 0x41, 0x42, 0x0b, 0xa2, 0xa8, 0xb7, 0xc4, 0x31, 0x5d, 0x57, 0x6c, 0x12, 0x4d, 0xb2, 0xb4, + 0x8b, 0x84, 0xac, 0xb1, 0x3d, 0x9b, 0x1d, 0x6a, 0x7b, 0x22, 0xcf, 0xa4, 0x4d, 0xfa, 0x17, 0xa0, + 0xe5, 0x82, 0x38, 0x71, 0x20, 0x12, 0x12, 0x08, 0xf5, 0x4f, 0xe9, 0x05, 0xa9, 0x47, 0x4e, 0x11, + 0xa4, 0x42, 0x82, 0xeb, 0x72, 0xeb, 0x09, 0x79, 0x26, 0xab, 0x58, 0xf4, 0x63, 0xc3, 0x25, 0x9a, + 0xf7, 0xe6, 0xfd, 0x7e, 0xef, 0xfd, 0xde, 0xcc, 0x73, 0x06, 0xe4, 0x87, 0xd5, 0x07, 0x98, 0x07, + 0x55, 0x31, 0xea, 0x13, 0xae, 0x7e, 0x2b, 0xfd, 0x88, 0x09, 0x06, 0x37, 0x5c, 0xc6, 0x83, 0x78, + 0xaf, 0x22, 0x7f, 0xee, 0x5f, 0x73, 0x88, 0xc0, 0xd7, 0x0a, 0x67, 0x7a, 0xac, 0xc7, 0x64, 0x44, + 0x35, 0x5e, 0xa9, 0x60, 0xdd, 0x01, 0xa7, 0x6a, 0xae, 0x4b, 0x38, 0xef, 0x8e, 0xfa, 0xa4, 0x8d, + 0x23, 0x1c, 0x40, 0x0b, 0x2c, 0xdd, 0xc7, 0xfe, 0x80, 0xe4, 0xb5, 0xb2, 0xb6, 0x79, 0xf2, 0xfa, + 0x85, 0xca, 0x0b, 0xf9, 0x2a, 0x73, 0x58, 0x3d, 0x77, 0x38, 0x29, 0xad, 0x8f, 0x70, 0xe0, 0xdf, + 0xd4, 0x25, 0x52, 0x47, 0x8a, 0xe1, 0x66, 0xf6, 0xfb, 0x1f, 0x4b, 0x9a, 0xfe, 0x83, 0x06, 0xd6, + 0x55, 0xb4, 0xc1, 0xc2, 0x3d, 0xda, 0x83, 0x77, 0x01, 0xe8, 0x93, 0x28, 0xa0, 0x9c, 0x53, 0x16, + 0x2e, 0x9e, 0x66, 0xe3, 0x70, 0x52, 0x3a, 0xad, 0xd2, 0xcc, 0xe1, 0x3a, 0x4a, 0x70, 0xc1, 0xab, + 0x60, 0x05, 0x7b, 0x5e, 0x44, 0x38, 0xcf, 0xa7, 0xcb, 0xda, 0xe6, 0x5a, 0x1d, 0x1e, 0x4e, 0x4a, + 0x27, 0x15, 0x66, 0xb6, 0xa1, 0xa3, 0xa3, 0x90, 0x59, 0x79, 0x7f, 0xa6, 0xc1, 0xb2, 0x54, 0xce, + 0xa1, 0x00, 0xd0, 0x65, 0x1e, 0xb1, 0x07, 0x7d, 0x9f, 0x61, 0xcf, 0xc6, 0x32, 0xb7, 0x2c, 0xf0, + 0xc4, 0xf5, 0x8b, 0xaf, 0x2c, 0x50, 0x29, 0xab, 0x5f, 0x78, 0x3c, 0x29, 0xa5, 0x0e, 0x27, 0xa5, + 0x73, 0x2a, 0xe5, 0xf3, 0x64, 0x3a, 0xca, 0xc5, 0xce, 0x1d, 0xe9, 0x53, 0x50, 0xf8, 0x9d, 0x06, + 0x8a, 0x34, 0xe4, 0x02, 0x87, 0x82, 0x62, 0x41, 0x6c, 0x8f, 0xec, 0xe1, 0x81, 0x2f, 0xec, 0x44, + 0x8f, 0xd2, 0x8b, 0xf6, 0xe8, 0xd2, 0xe1, 0xa4, 0xf4, 0x8e, 0x4a, 0xfe, 0x6a, 0x4a, 0x1d, 0x9d, + 0x4f, 0x04, 0x34, 0xd4, 0x7e, 0x7b, 0xde, 0xc9, 0xdb, 0x00, 0x06, 0x78, 0x68, 0xc7, 0x79, 0x6c, + 0x29, 0x83, 0xd3, 0x87, 0x24, 0x9f, 0x29, 0x6b, 0x9b, 0xd9, 0xfa, 0x5b, 0x73, 0x85, 0xcf, 0xc7, + 0xe8, 0xe8, 0x54, 0x80, 0x87, 0x77, 0x30, 0x0f, 0x0c, 0xe6, 0x91, 0x0e, 0x7d, 0xa8, 0xae, 0x41, + 0x4a, 0xff, 0x55, 0x03, 0xab, 0xb1, 0xcb, 0x0a, 0xf7, 0x18, 0x7c, 0x13, 0xac, 0x49, 0xc4, 0x3e, + 0xe6, 0xfb, 0xb2, 0xc1, 0xeb, 0x68, 0x35, 0x76, 0x6c, 0x61, 0xbe, 0x0f, 0xf3, 0x60, 0xc5, 0x8d, + 0x08, 0x16, 0x2c, 0x52, 0xa7, 0x88, 0x8e, 0x4c, 0xf8, 0x06, 0x58, 0xe6, 0x6c, 0x10, 0xb9, 0xaa, + 0x92, 0x35, 0x34, 0xb3, 0x62, 0x84, 0x33, 0xa0, 0xbe, 0x47, 0xa2, 0x7c, 0x56, 0x21, 0x66, 0x26, + 0xbc, 0x0b, 0x60, 0xb2, 0x11, 0xae, 0x3c, 0xa7, 0xfc, 0xd2, 0xe2, 0x47, 0x9a, 0x8d, 0x8f, 0x14, + 0x9d, 0x4e, 0x90, 0xa8, 0x0d, 0xfd, 0x1f, 0x0d, 0xac, 0x1b, 0x2c, 0x14, 0x11, 0x76, 0x85, 0xd4, + 0x74, 0x11, 0xac, 0x48, 0x4d, 0xd4, 0x93, 0x8a, 0xb2, 0x75, 0x30, 0x9d, 0x94, 0x96, 0xa5, 0xe4, + 0x06, 0x5a, 0x8e, 0xb7, 0x2c, 0xef, 0x15, 0xda, 0xce, 0x80, 0x25, 0xec, 0x05, 0x34, 0x9c, 0x49, + 0x53, 0x46, 0xec, 0xf5, 0xb1, 0x43, 0xfc, 0x99, 0x2e, 0x65, 0x40, 0x63, 0xc6, 0x42, 0xbc, 0x99, + 0x94, 0x4b, 0x2f, 0x93, 0xe2, 0x70, 0xe6, 0x0f, 0x04, 0xe9, 0x0e, 0xdb, 0x8c, 0x53, 0x41, 0x59, + 0x88, 0x8e, 0x90, 0xf0, 0x7d, 0x70, 0x82, 0x3a, 0xae, 0xdd, 0x67, 0x91, 0x88, 0x6b, 0x5e, 0x96, + 0x03, 0xf3, 0xda, 0x74, 0x52, 0x5a, 0xb3, 0xea, 0x46, 0x9b, 0x45, 0xc2, 0x6a, 0xa0, 0x35, 0xea, + 0xb8, 0x72, 0xe9, 0xdd, 0xcc, 0xfe, 0x15, 0x4f, 0xcb, 0x37, 0x69, 0x90, 0x3f, 0x52, 0x1d, 0x4b, + 0xdb, 0xa2, 0x5c, 0xb0, 0x68, 0x64, 0x86, 0x22, 0x1a, 0xc1, 0x1d, 0xb0, 0xc6, 0xfa, 0x24, 0xc2, + 0x62, 0x3e, 0xd7, 0x37, 0x5e, 0x52, 0xd8, 0x0b, 0x38, 0x5a, 0x47, 0xd0, 0xf8, 0x26, 0xa3, 0x39, + 0x53, 0xb2, 0xb1, 0xe9, 0x97, 0x36, 0xd6, 0x00, 0x2b, 0x83, 0xbe, 0x27, 0x5b, 0x92, 0xf9, 0xdf, + 0x2d, 0x99, 0x21, 0x61, 0x05, 0x64, 0x02, 0xde, 0x93, 0xbd, 0x5e, 0xaf, 0x9f, 0x7f, 0x36, 0x29, + 0xe5, 0x49, 0xe8, 0x32, 0x8f, 0x86, 0xbd, 0xea, 0x57, 0x9c, 0x85, 0x15, 0x84, 0x1f, 0x6c, 0x13, + 0xce, 0x71, 0x8f, 0xa0, 0x38, 0x50, 0x47, 0x00, 0x3e, 0x4f, 0x07, 0x2f, 0x80, 0x75, 0xc7, 0x67, + 0xee, 0x3d, 0x7b, 0x9f, 0xd0, 0xde, 0xbe, 0x50, 0xb7, 0x01, 0x9d, 0x90, 0xbe, 0x2d, 0xe9, 0x82, + 0xe7, 0xc0, 0xaa, 0x18, 0xda, 0x34, 0xf4, 0xc8, 0x50, 0x69, 0x42, 0x2b, 0x62, 0x68, 0xc5, 0xa6, + 0x4e, 0xc1, 0xd2, 0x36, 0xf3, 0x88, 0x0f, 0x6f, 0x83, 0xcc, 0x3d, 0x32, 0x52, 0xd3, 0x51, 0xff, + 0xe4, 0xd9, 0xa4, 0xf4, 0x51, 0x8f, 0x8a, 0xfd, 0x81, 0x53, 0x71, 0x59, 0x50, 0x15, 0x24, 0xf4, + 0xe2, 0x69, 0x0d, 0x45, 0x72, 0xe9, 0x53, 0x87, 0x57, 0x9d, 0x91, 0x20, 0xbc, 0xb2, 0x45, 0x86, + 0xf5, 0x78, 0x81, 0x62, 0x92, 0xf8, 0x1a, 0xa9, 0x8f, 0x7a, 0x5a, 0xce, 0x9a, 0x32, 0x2e, 0xff, + 0xad, 0x01, 0x30, 0xff, 0x78, 0xc0, 0x8f, 0xc1, 0xd9, 0x9a, 0x61, 0x98, 0x9d, 0x8e, 0xdd, 0xdd, + 0x6d, 0x9b, 0xf6, 0x4e, 0xb3, 0xd3, 0x36, 0x0d, 0xeb, 0x53, 0xcb, 0x6c, 0xe4, 0x52, 0x85, 0x73, + 0x07, 0xe3, 0xf2, 0xc6, 0x3c, 0x78, 0x27, 0xe4, 0x7d, 0xe2, 0xd2, 0x3d, 0x4a, 0x3c, 0x78, 0x15, + 0xc0, 0x24, 0xae, 0xd9, 0xaa, 0xb7, 0x1a, 0xbb, 0x39, 0xad, 0x70, 0xe6, 0x60, 0x5c, 0xce, 0xcd, + 0x21, 0x4d, 0xe6, 0x30, 0x6f, 0x04, 0x6f, 0x80, 0x7c, 0x32, 0xba, 0xd5, 0xfc, 0x6c, 0xd7, 0xae, + 0x35, 0x1a, 0xc8, 0xec, 0x74, 0x72, 0xe9, 0xff, 0xa6, 0x69, 0x85, 0xfe, 0xa8, 0xa6, 0x3e, 0xd7, + 0xf0, 0x3a, 0xd8, 0x48, 0x02, 0xcd, 0xcf, 0x4d, 0xb4, 0x2b, 0x33, 0x65, 0x0a, 0x67, 0x0f, 0xc6, + 0xe5, 0xd7, 0xe7, 0x28, 0xf3, 0x3e, 0x89, 0x46, 0x71, 0xb2, 0xc2, 0xea, 0xd7, 0x3f, 0x15, 0x53, + 0x8f, 0x7e, 0x2e, 0xa6, 0x2e, 0xff, 0x92, 0x01, 0xe5, 0xe3, 0x2e, 0x1d, 0x24, 0xe0, 0x03, 0xa3, + 0xd5, 0xec, 0xa2, 0x9a, 0xd1, 0xb5, 0x8d, 0x56, 0xc3, 0xb4, 0xb7, 0xac, 0x4e, 0xb7, 0x85, 0x76, + 0xed, 0x56, 0xdb, 0x44, 0xb5, 0xae, 0xd5, 0x6a, 0xbe, 0xa8, 0x35, 0xd5, 0x83, 0x71, 0xf9, 0xca, + 0x71, 0xdc, 0xc9, 0x86, 0xdd, 0x01, 0x97, 0x16, 0x4a, 0x63, 0x35, 0xad, 0x6e, 0x4e, 0x2b, 0x6c, + 0x1e, 0x8c, 0xcb, 0x6f, 0x1f, 0xc7, 0x6f, 0x85, 0x54, 0xc0, 0x2f, 0xc1, 0xd5, 0x85, 0x88, 0xb7, + 0xad, 0x5b, 0xa8, 0xd6, 0x35, 0x73, 0xe9, 0xc2, 0x95, 0x83, 0x71, 0xf9, 0xbd, 0xe3, 0xb8, 0xb7, + 0x69, 0x2f, 0xc2, 0x82, 0x2c, 0x4c, 0x7f, 0xcb, 0x6c, 0x9a, 0x1d, 0xab, 0x93, 0xcb, 0x2c, 0x46, + 0x7f, 0x8b, 0x84, 0x84, 0x53, 0x5e, 0xc8, 0xc6, 0x87, 0x55, 0xdf, 0x7a, 0xfc, 0x47, 0x31, 0xf5, + 0x68, 0x5a, 0xd4, 0x1e, 0x4f, 0x8b, 0xda, 0x93, 0x69, 0x51, 0xfb, 0x7d, 0x5a, 0xd4, 0xbe, 0x7d, + 0x5a, 0x4c, 0x3d, 0x79, 0x5a, 0x4c, 0xfd, 0xf6, 0xb4, 0x98, 0xfa, 0xe2, 0xdd, 0xc4, 0x1c, 0x18, + 0x8c, 0x07, 0xf1, 0x9f, 0x8d, 0x7c, 0x0d, 0x79, 0xd5, 0xe4, 0xab, 0xc8, 0x59, 0x96, 0x6f, 0x9c, + 0x0f, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xbc, 0x7e, 0xd9, 0x2c, 0x09, 0x00, 0x00, } func (this *AccessTypeParam) Equal(that interface{}) bool { diff --git a/x/wasm/internal/types/types.proto b/x/wasm/types/types.proto similarity index 98% rename from x/wasm/internal/types/types.proto rename to x/wasm/types/types.proto index 0ea99dc245..64c538db1f 100644 --- a/x/wasm/internal/types/types.proto +++ b/x/wasm/types/types.proto @@ -3,7 +3,7 @@ package cosmwasm.wasm.v1beta1; import "gogoproto/gogo.proto"; -option go_package = "github.com/CosmWasm/wasmd/x/wasmd/internal/types"; +option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; option (gogoproto.goproto_getters_all) = false; option (gogoproto.equal_all) = true; diff --git a/x/wasm/internal/types/types_test.go b/x/wasm/types/types_test.go similarity index 100% rename from x/wasm/internal/types/types_test.go rename to x/wasm/types/types_test.go diff --git a/x/wasm/internal/types/validation.go b/x/wasm/types/validation.go similarity index 100% rename from x/wasm/internal/types/validation.go rename to x/wasm/types/validation.go diff --git a/x/wasm/internal/types/wasmer_engine.go b/x/wasm/types/wasmer_engine.go similarity index 100% rename from x/wasm/internal/types/wasmer_engine.go rename to x/wasm/types/wasmer_engine.go From 28f731601ea6f3899cc38507225efb9768ee6171 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Fri, 19 Mar 2021 11:52:38 +0100 Subject: [PATCH 09/56] Remove deprecated build targets --- Makefile | 44 -------------------------------------------- README.md | 4 +--- 2 files changed, 1 insertion(+), 47 deletions(-) diff --git a/Makefile b/Makefile index d4bcc97005..e191d573fb 100644 --- a/Makefile +++ b/Makefile @@ -67,34 +67,7 @@ endif ldflags += $(LDFLAGS) ldflags := $(strip $(ldflags)) -coral_ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=coral \ - -X github.com/cosmos/cosmos-sdk/version.AppName=corald \ - -X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \ - -X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \ - -X github.com/CosmWasm/wasmd/app.NodeDir=.corald \ - -X github.com/CosmWasm/wasmd/app.Bech32Prefix=coral \ - -X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)" -# we could consider enabling governance override? -# -X github.com/CosmWasm/wasmd/app.EnableSpecificProposals=MigrateContract,UpdateAdmin,ClearAdmin \ - -coral_ldflags += $(LDFLAGS) -coral_ldflags := $(strip $(coral_ldflags)) - -flex_ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=gaiaflex \ - -X github.com/cosmos/cosmos-sdk/version.AppName=gaiaflexd \ - -X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \ - -X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \ - -X github.com/CosmWasm/wasmd/app.ProposalsEnabled=true \ - -X github.com/CosmWasm/wasmd/app.NodeDir=.gaiaflexd \ - -X github.com/CosmWasm/wasmd/app.Bech32Prefix=cosmos \ - -X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)" - -flex_ldflags += $(LDFLAGS) -flex_ldflags := $(strip $(flex_ldflags)) - BUILD_FLAGS := -tags "$(build_tags_comma_sep)" -ldflags '$(ldflags)' -trimpath -CORAL_BUILD_FLAGS := -tags "$(build_tags_comma_sep)" -ldflags '$(coral_ldflags)' -trimpath -FLEX_BUILD_FLAGS := -tags "$(build_tags_comma_sep)" -ldflags '$(flex_ldflags)' -trimpath # The below include contains the tools and runsim targets. include contrib/devtools/Makefile @@ -108,23 +81,6 @@ else go build -mod=readonly $(BUILD_FLAGS) -o build/wasmd ./cmd/wasmd endif -build-coral: go.sum -ifeq ($(OS),Windows_NT) - exit 1 -else - go build -mod=readonly $(CORAL_BUILD_FLAGS) -o build/corald ./cmd/wasmd -endif - -build-gaiaflex: go.sum -ifeq ($(OS),Windows_NT) - exit 1 -else - go build -mod=readonly $(FLEX_BUILD_FLAGS) -o build/gaiaflexd ./cmd/wasmd -endif - -build-linux: go.sum - LEDGER_ENABLED=false GOOS=linux GOARCH=amd64 $(MAKE) build - build-contract-tests-hooks: ifeq ($(OS),Windows_NT) go build -mod=readonly $(BUILD_FLAGS) -o build/contract_tests.exe ./cmd/contract_tests diff --git a/README.md b/README.md index f2627e914a..826a654233 100644 --- a/README.md +++ b/README.md @@ -167,7 +167,7 @@ Available flags: * `-X github.com/CosmWasm/wasmd/app.NodeDir=.corald` - set the config/data directory for the node (default `~/.wasmd`) -* `-X github.com/CosmWasm/wasmd/app.Bech32Prefix=coral` - set the bech32 prefix for all accounts (default `cosmos`) +* `-X github.com/CosmWasm/wasmd/app.Bech32Prefix=coral` - set the bech32 prefix for all accounts (default `wasm`) * `-X github.com/CosmWasm/wasmd/app.ProposalsEnabled=true` - enable all x/wasm governance proposals (default `false`) * `-X github.com/CosmWasm/wasmd/app.EnableSpecificProposals=MigrateContract,UpdateAdmin,ClearAdmin` - enable a subset of the x/wasm governance proposal types (overrides `ProposalsEnabled`) @@ -175,8 +175,6 @@ Available flags: Examples: * [`wasmd`](./Makefile#L50-L55) is a generic, permissionless version using the `cosmos` bech32 prefix -* [`gaiaflex`](./Makefile#L78-L87) is a generic, *permissioned* version using the `cosmos` bech32 prefix -* [`coral`](./Makefile#L63-L71) is a permissionless version designed for a specific testnet, with a `coral` bech32 prefix ## Genesis Configuration From cfcfa64ecc83cc2e378f302f19285358a1eafd76 Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Mon, 22 Mar 2021 15:50:23 +0100 Subject: [PATCH 10/56] Restructure protobuf files (#466) * Restructure protobuf dir and generation * Format protobuf definitions --- Makefile | 31 +- buf.yaml | 13 +- {doc => docs}/README.md | 2 +- docs/proto/proto-docs.md | 1141 +++++++++++++++++ {doc => docs/proto}/proto.md | 0 docs/proto/protodoc-markdown.tmpl | 105 ++ proto/cosmwasm/wasm/v1beta1/genesis.proto | 60 + proto/cosmwasm/wasm/v1beta1/ibc.proto | 30 + proto/cosmwasm/wasm/v1beta1/proposal.proto | 121 ++ proto/cosmwasm/wasm/v1beta1/query.proto | 206 +++ .../cosmwasm/wasm/v1beta1}/tx.proto | 45 +- proto/cosmwasm/wasm/v1beta1/types.proto | 136 ++ scripts/README.md | 7 + scripts/protoc-swagger-gen.sh | 19 + scripts/protocgen.sh | 49 +- third_party/README.md | 8 + third_party/proto/confio/proofs.proto | 234 ++++ .../proto/cosmos/auth/v1beta1/auth.proto | 50 + .../proto/cosmos/auth/v1beta1/genesis.proto | 17 + .../proto/cosmos/auth/v1beta1/query.proto | 47 + .../proto/cosmos/bank/v1beta1/bank.proto | 85 ++ .../proto/cosmos/bank/v1beta1/genesis.proto | 38 + .../proto/cosmos/bank/v1beta1/query.proto | 150 +++ .../proto/cosmos/bank/v1beta1/tx.proto | 42 + .../proto/cosmos/base/abci/v1beta1/abci.proto | 137 ++ .../proto/cosmos/base/kv/v1beta1/kv.proto | 17 + .../base/query/v1beta1/pagination.proto | 50 + .../base/reflection/v1beta1/reflection.proto | 44 + .../base/snapshots/v1beta1/snapshot.proto | 20 + .../base/store/v1beta1/commit_info.proto | 29 + .../cosmos/base/store/v1beta1/snapshot.proto | 28 + .../base/tendermint/v1beta1/query.proto | 136 ++ .../proto/cosmos/base/v1beta1/coin.proto | 40 + .../capability/v1beta1/capability.proto | 30 + .../cosmos/capability/v1beta1/genesis.proto | 26 + .../proto/cosmos/crisis/v1beta1/genesis.proto | 15 + .../proto/cosmos/crisis/v1beta1/tx.proto | 25 + .../proto/cosmos/crypto/ed25519/keys.proto | 22 + .../proto/cosmos/crypto/multisig/keys.proto | 18 + .../crypto/multisig/v1beta1/multisig.proto | 25 + .../proto/cosmos/crypto/secp256k1/keys.proto | 22 + .../distribution/v1beta1/distribution.proto | 157 +++ .../cosmos/distribution/v1beta1/genesis.proto | 155 +++ .../cosmos/distribution/v1beta1/query.proto | 218 ++++ .../cosmos/distribution/v1beta1/tx.proto | 79 ++ .../cosmos/evidence/v1beta1/evidence.proto | 21 + .../cosmos/evidence/v1beta1/genesis.proto | 12 + .../proto/cosmos/evidence/v1beta1/query.proto | 51 + .../proto/cosmos/evidence/v1beta1/tx.proto | 32 + .../cosmos/genutil/v1beta1/genesis.proto | 16 + .../proto/cosmos/gov/v1beta1/genesis.proto | 26 + .../proto/cosmos/gov/v1beta1/gov.proto | 183 +++ .../proto/cosmos/gov/v1beta1/query.proto | 190 +++ third_party/proto/cosmos/gov/v1beta1/tx.proto | 75 ++ .../proto/cosmos/mint/v1beta1/genesis.proto | 16 + .../proto/cosmos/mint/v1beta1/mint.proto | 53 + .../proto/cosmos/mint/v1beta1/query.proto | 57 + .../proto/cosmos/params/v1beta1/params.proto | 27 + .../proto/cosmos/params/v1beta1/query.proto | 32 + .../cosmos/slashing/v1beta1/genesis.proto | 50 + .../proto/cosmos/slashing/v1beta1/query.proto | 63 + .../cosmos/slashing/v1beta1/slashing.proto | 55 + .../proto/cosmos/slashing/v1beta1/tx.proto | 26 + .../cosmos/staking/v1beta1/genesis.proto | 53 + .../proto/cosmos/staking/v1beta1/query.proto | 348 +++++ .../cosmos/staking/v1beta1/staking.proto | 334 +++++ .../proto/cosmos/staking/v1beta1/tx.proto | 126 ++ .../cosmos/tx/signing/v1beta1/signing.proto | 79 ++ .../proto/cosmos/tx/v1beta1/service.proto | 117 ++ third_party/proto/cosmos/tx/v1beta1/tx.proto | 181 +++ .../proto/cosmos/upgrade/v1beta1/query.proto | 68 + .../cosmos/upgrade/v1beta1/upgrade.proto | 62 + .../proto/cosmos/vesting/v1beta1/tx.proto | 31 + .../cosmos/vesting/v1beta1/vesting.proto | 73 ++ third_party/proto/cosmos_proto/cosmos.proto | 16 + third_party/proto/gogoproto/gogo.proto | 145 +++ .../proto/google/api/annotations.proto | 31 + third_party/proto/google/api/http.proto | 318 +++++ third_party/proto/google/api/httpbody.proto | 78 ++ third_party/proto/google/protobuf/any.proto | 161 +++ .../applications/transfer/v1/genesis.proto | 18 + .../ibc/applications/transfer/v1/query.proto | 66 + .../applications/transfer/v1/transfer.proto | 43 + .../ibc/applications/transfer/v1/tx.proto | 43 + .../proto/ibc/core/channel/v1/channel.proto | 147 +++ .../proto/ibc/core/channel/v1/genesis.proto | 31 + .../proto/ibc/core/channel/v1/query.proto | 367 ++++++ .../proto/ibc/core/channel/v1/tx.proto | 207 +++ .../proto/ibc/core/client/v1/client.proto | 74 ++ .../proto/ibc/core/client/v1/genesis.proto | 46 + .../proto/ibc/core/client/v1/query.proto | 130 ++ third_party/proto/ibc/core/client/v1/tx.proto | 96 ++ .../ibc/core/commitment/v1/commitment.proto | 40 + .../ibc/core/connection/v1/connection.proto | 104 ++ .../ibc/core/connection/v1/genesis.proto | 16 + .../proto/ibc/core/connection/v1/query.proto | 137 ++ .../proto/ibc/core/connection/v1/tx.proto | 115 ++ .../proto/ibc/core/types/v1/genesis.proto | 22 + .../lightclients/localhost/v1/localhost.proto | 17 + .../solomachine/v1/solomachine.proto | 186 +++ .../tendermint/v1/tendermint.proto | 111 ++ third_party/proto/tendermint/abci/types.proto | 407 ++++++ .../proto/tendermint/crypto/keys.proto | 17 + .../proto/tendermint/crypto/proof.proto | 41 + .../proto/tendermint/libs/bits/types.proto | 9 + third_party/proto/tendermint/p2p/types.proto | 34 + .../proto/tendermint/types/block.proto | 15 + .../proto/tendermint/types/evidence.proto | 38 + .../proto/tendermint/types/params.proto | 80 ++ .../proto/tendermint/types/types.proto | 157 +++ .../proto/tendermint/types/validator.proto | 25 + .../proto/tendermint/version/types.proto | 24 + x/wasm/types/genesis.pb.go | 133 +- x/wasm/types/genesis.proto | 50 - x/wasm/types/ibc.pb.go | 64 +- x/wasm/types/ibc.proto | 28 - x/wasm/types/proposal.pb.go | 168 ++- x/wasm/types/proposal.proto | 113 -- x/wasm/types/query.pb.go | 313 ++--- x/wasm/types/query.pb.gw.go | 30 +- x/wasm/types/query.proto | 175 --- x/wasm/types/tx.pb.go | 207 ++- x/wasm/types/types.pb.go | 223 ++-- x/wasm/types/types.proto | 115 -- 124 files changed, 10441 insertions(+), 1176 deletions(-) rename {doc => docs}/README.md (76%) create mode 100644 docs/proto/proto-docs.md rename {doc => docs/proto}/proto.md (100%) create mode 100644 docs/proto/protodoc-markdown.tmpl create mode 100644 proto/cosmwasm/wasm/v1beta1/genesis.proto create mode 100644 proto/cosmwasm/wasm/v1beta1/ibc.proto create mode 100644 proto/cosmwasm/wasm/v1beta1/proposal.proto create mode 100644 proto/cosmwasm/wasm/v1beta1/query.proto rename {x/wasm/types => proto/cosmwasm/wasm/v1beta1}/tx.proto (79%) create mode 100644 proto/cosmwasm/wasm/v1beta1/types.proto create mode 100644 scripts/README.md create mode 100755 scripts/protoc-swagger-gen.sh create mode 100644 third_party/README.md create mode 100644 third_party/proto/confio/proofs.proto create mode 100644 third_party/proto/cosmos/auth/v1beta1/auth.proto create mode 100644 third_party/proto/cosmos/auth/v1beta1/genesis.proto create mode 100644 third_party/proto/cosmos/auth/v1beta1/query.proto create mode 100644 third_party/proto/cosmos/bank/v1beta1/bank.proto create mode 100644 third_party/proto/cosmos/bank/v1beta1/genesis.proto create mode 100644 third_party/proto/cosmos/bank/v1beta1/query.proto create mode 100644 third_party/proto/cosmos/bank/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/base/abci/v1beta1/abci.proto create mode 100644 third_party/proto/cosmos/base/kv/v1beta1/kv.proto create mode 100644 third_party/proto/cosmos/base/query/v1beta1/pagination.proto create mode 100644 third_party/proto/cosmos/base/reflection/v1beta1/reflection.proto create mode 100644 third_party/proto/cosmos/base/snapshots/v1beta1/snapshot.proto create mode 100644 third_party/proto/cosmos/base/store/v1beta1/commit_info.proto create mode 100644 third_party/proto/cosmos/base/store/v1beta1/snapshot.proto create mode 100644 third_party/proto/cosmos/base/tendermint/v1beta1/query.proto create mode 100644 third_party/proto/cosmos/base/v1beta1/coin.proto create mode 100644 third_party/proto/cosmos/capability/v1beta1/capability.proto create mode 100644 third_party/proto/cosmos/capability/v1beta1/genesis.proto create mode 100644 third_party/proto/cosmos/crisis/v1beta1/genesis.proto create mode 100644 third_party/proto/cosmos/crisis/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/crypto/ed25519/keys.proto create mode 100644 third_party/proto/cosmos/crypto/multisig/keys.proto create mode 100644 third_party/proto/cosmos/crypto/multisig/v1beta1/multisig.proto create mode 100644 third_party/proto/cosmos/crypto/secp256k1/keys.proto create mode 100644 third_party/proto/cosmos/distribution/v1beta1/distribution.proto create mode 100644 third_party/proto/cosmos/distribution/v1beta1/genesis.proto create mode 100644 third_party/proto/cosmos/distribution/v1beta1/query.proto create mode 100644 third_party/proto/cosmos/distribution/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/evidence/v1beta1/evidence.proto create mode 100644 third_party/proto/cosmos/evidence/v1beta1/genesis.proto create mode 100644 third_party/proto/cosmos/evidence/v1beta1/query.proto create mode 100644 third_party/proto/cosmos/evidence/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/genutil/v1beta1/genesis.proto create mode 100644 third_party/proto/cosmos/gov/v1beta1/genesis.proto create mode 100644 third_party/proto/cosmos/gov/v1beta1/gov.proto create mode 100644 third_party/proto/cosmos/gov/v1beta1/query.proto create mode 100644 third_party/proto/cosmos/gov/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/mint/v1beta1/genesis.proto create mode 100644 third_party/proto/cosmos/mint/v1beta1/mint.proto create mode 100644 third_party/proto/cosmos/mint/v1beta1/query.proto create mode 100644 third_party/proto/cosmos/params/v1beta1/params.proto create mode 100644 third_party/proto/cosmos/params/v1beta1/query.proto create mode 100644 third_party/proto/cosmos/slashing/v1beta1/genesis.proto create mode 100644 third_party/proto/cosmos/slashing/v1beta1/query.proto create mode 100644 third_party/proto/cosmos/slashing/v1beta1/slashing.proto create mode 100644 third_party/proto/cosmos/slashing/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/staking/v1beta1/genesis.proto create mode 100644 third_party/proto/cosmos/staking/v1beta1/query.proto create mode 100644 third_party/proto/cosmos/staking/v1beta1/staking.proto create mode 100644 third_party/proto/cosmos/staking/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/tx/signing/v1beta1/signing.proto create mode 100644 third_party/proto/cosmos/tx/v1beta1/service.proto create mode 100644 third_party/proto/cosmos/tx/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/upgrade/v1beta1/query.proto create mode 100644 third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto create mode 100644 third_party/proto/cosmos/vesting/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/vesting/v1beta1/vesting.proto create mode 100644 third_party/proto/cosmos_proto/cosmos.proto create mode 100644 third_party/proto/gogoproto/gogo.proto create mode 100644 third_party/proto/google/api/annotations.proto create mode 100644 third_party/proto/google/api/http.proto create mode 100644 third_party/proto/google/api/httpbody.proto create mode 100644 third_party/proto/google/protobuf/any.proto create mode 100644 third_party/proto/ibc/applications/transfer/v1/genesis.proto create mode 100644 third_party/proto/ibc/applications/transfer/v1/query.proto create mode 100644 third_party/proto/ibc/applications/transfer/v1/transfer.proto create mode 100644 third_party/proto/ibc/applications/transfer/v1/tx.proto create mode 100644 third_party/proto/ibc/core/channel/v1/channel.proto create mode 100644 third_party/proto/ibc/core/channel/v1/genesis.proto create mode 100644 third_party/proto/ibc/core/channel/v1/query.proto create mode 100644 third_party/proto/ibc/core/channel/v1/tx.proto create mode 100644 third_party/proto/ibc/core/client/v1/client.proto create mode 100644 third_party/proto/ibc/core/client/v1/genesis.proto create mode 100644 third_party/proto/ibc/core/client/v1/query.proto create mode 100644 third_party/proto/ibc/core/client/v1/tx.proto create mode 100644 third_party/proto/ibc/core/commitment/v1/commitment.proto create mode 100644 third_party/proto/ibc/core/connection/v1/connection.proto create mode 100644 third_party/proto/ibc/core/connection/v1/genesis.proto create mode 100644 third_party/proto/ibc/core/connection/v1/query.proto create mode 100644 third_party/proto/ibc/core/connection/v1/tx.proto create mode 100644 third_party/proto/ibc/core/types/v1/genesis.proto create mode 100644 third_party/proto/ibc/lightclients/localhost/v1/localhost.proto create mode 100644 third_party/proto/ibc/lightclients/solomachine/v1/solomachine.proto create mode 100644 third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto create mode 100644 third_party/proto/tendermint/abci/types.proto create mode 100644 third_party/proto/tendermint/crypto/keys.proto create mode 100644 third_party/proto/tendermint/crypto/proof.proto create mode 100644 third_party/proto/tendermint/libs/bits/types.proto create mode 100644 third_party/proto/tendermint/p2p/types.proto create mode 100644 third_party/proto/tendermint/types/block.proto create mode 100644 third_party/proto/tendermint/types/evidence.proto create mode 100644 third_party/proto/tendermint/types/params.proto create mode 100644 third_party/proto/tendermint/types/types.proto create mode 100644 third_party/proto/tendermint/types/validator.proto create mode 100644 third_party/proto/tendermint/version/types.proto delete mode 100644 x/wasm/types/genesis.proto delete mode 100644 x/wasm/types/ibc.proto delete mode 100644 x/wasm/types/proposal.proto delete mode 100644 x/wasm/types/query.proto delete mode 100644 x/wasm/types/types.proto diff --git a/Makefile b/Makefile index e191d573fb..d27595426b 100644 --- a/Makefile +++ b/Makefile @@ -9,8 +9,9 @@ BINDIR ?= $(GOPATH)/bin SIMAPP = ./app # for dockerized protobuf tools -PROTO_CONTAINER := cosmwasm/prototools-docker:v0.1.0 -DOCKER_BUF := docker run --rm -v $(shell pwd)/buf.yaml:/workspace/buf.yaml -v $(shell go list -f "{{ .Dir }}" -m github.com/cosmos/cosmos-sdk):/workspace/cosmos_sdk_dir -v $(shell pwd):/workspace/wasmd --workdir /workspace $(PROTO_CONTAINER) +DOCKER := $(shell which docker) +BUF_IMAGE=bufbuild/buf@sha256:9dc5d6645f8f8a2d5aaafc8957fbbb5ea64eada98a84cb09654e8f49d6f73b3e +DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(BUF_IMAGE) HTTPS_GIT := https://github.com/CosmWasm/wasmd.git export GO111MODULE = on @@ -157,21 +158,29 @@ format: ############################################################################### ### Protobuf ### ############################################################################### +PROTO_BUILDER_IMAGE=tendermintdev/sdk-proto-gen@sha256:372dce7be2f465123e26459973ca798fc489ff2c75aeecd814c0ca8ced24faca +PROTO_FORMATTER_IMAGE=tendermintdev/docker-build-proto@sha256:aabcfe2fc19c31c0f198d4cd26393f5e5ca9502d7ea3feafbfe972448fee7cae -proto-all: proto-gen proto-lint proto-check-breaking -.PHONY: proto-all +proto-all: proto-format proto-lint proto-gen -proto-gen: proto-lint - @docker run --rm -v $(shell go list -f "{{ .Dir }}" -m github.com/cosmos/cosmos-sdk):/workspace/cosmos_sdk_dir -v $(shell pwd):/workspace --workdir /workspace --env COSMOS_SDK_DIR=/workspace/cosmos_sdk_dir $(PROTO_CONTAINER) ./scripts/protocgen.sh -.PHONY: proto-gen +proto-gen: + @echo "Generating Protobuf files" + $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(PROTO_BUILDER_IMAGE) sh ./scripts/protocgen.sh + +proto-format: + @echo "Formatting Protobuf files" + $(DOCKER) run --rm -v $(CURDIR):/workspace \ + --workdir /workspace $(PROTO_FORMATTER_IMAGE) \ + find ./ -not -path "./third_party/*" -name *.proto -exec clang-format -i {} \; + +proto-swagger-gen: + @./scripts/protoc-swagger-gen.sh proto-lint: - @$(DOCKER_BUF) buf check lint --error-format=json -.PHONY: proto-lint + @$(DOCKER_BUF) check lint --error-format=json proto-check-breaking: - @$(DOCKER_BUF) buf check breaking --against-input $(HTTPS_GIT)#branch=master -.PHONY: proto-check-breaking + @$(DOCKER_BUF) check breaking --against-input $(HTTPS_GIT)#branch=master .PHONY: all build-linux install install-debug \ go-mod-cache draw-deps clean build format \ diff --git a/buf.yaml b/buf.yaml index 94866e9ab6..e567e23493 100644 --- a/buf.yaml +++ b/buf.yaml @@ -1,12 +1,11 @@ version: v1beta1 + build: roots: - # Note: these are not local path. These roots are mounted into the docker container - - wasmd/ - - cosmos_sdk_dir/third_party/proto/ - - cosmos_sdk_dir/proto/ + - proto + - third_party/proto excludes: -# - cosmos_sdk_dir + - third_party/proto/google/protobuf lint: use: - DEFAULT @@ -20,6 +19,8 @@ lint: - RPC_REQUEST_STANDARD_NAME - PACKAGE_DIRECTORY_MATCH ignore: + - cosmos + - ibc - tendermint - gogoproto - cosmos_proto @@ -29,6 +30,8 @@ breaking: use: - FILE ignore: + - cosmos + - ibc - tendermint - gogoproto - cosmos_proto diff --git a/doc/README.md b/docs/README.md similarity index 76% rename from doc/README.md rename to docs/README.md index 9f3e98c8b0..8beace183c 100644 --- a/doc/README.md +++ b/docs/README.md @@ -1,3 +1,3 @@ -# Generated doc +# Generated doc only Tutorials and project doc is available on https://docs.cosmwasm.com/ diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md new file mode 100644 index 0000000000..94df097d7f --- /dev/null +++ b/docs/proto/proto-docs.md @@ -0,0 +1,1141 @@ + +# Protobuf Documentation + + +## Table of Contents + +- [cosmwasm/wasm/v1beta1/types.proto](#cosmwasm/wasm/v1beta1/types.proto) + - [AbsoluteTxPosition](#cosmwasm.wasm.v1beta1.AbsoluteTxPosition) + - [AccessConfig](#cosmwasm.wasm.v1beta1.AccessConfig) + - [AccessTypeParam](#cosmwasm.wasm.v1beta1.AccessTypeParam) + - [CodeInfo](#cosmwasm.wasm.v1beta1.CodeInfo) + - [ContractCodeHistoryEntry](#cosmwasm.wasm.v1beta1.ContractCodeHistoryEntry) + - [ContractInfo](#cosmwasm.wasm.v1beta1.ContractInfo) + - [Model](#cosmwasm.wasm.v1beta1.Model) + - [Params](#cosmwasm.wasm.v1beta1.Params) + + - [AccessType](#cosmwasm.wasm.v1beta1.AccessType) + - [ContractCodeHistoryOperationType](#cosmwasm.wasm.v1beta1.ContractCodeHistoryOperationType) + +- [cosmwasm/wasm/v1beta1/tx.proto](#cosmwasm/wasm/v1beta1/tx.proto) + - [MsgClearAdmin](#cosmwasm.wasm.v1beta1.MsgClearAdmin) + - [MsgClearAdminResponse](#cosmwasm.wasm.v1beta1.MsgClearAdminResponse) + - [MsgExecuteContract](#cosmwasm.wasm.v1beta1.MsgExecuteContract) + - [MsgExecuteContractResponse](#cosmwasm.wasm.v1beta1.MsgExecuteContractResponse) + - [MsgInstantiateContract](#cosmwasm.wasm.v1beta1.MsgInstantiateContract) + - [MsgInstantiateContractResponse](#cosmwasm.wasm.v1beta1.MsgInstantiateContractResponse) + - [MsgMigrateContract](#cosmwasm.wasm.v1beta1.MsgMigrateContract) + - [MsgMigrateContractResponse](#cosmwasm.wasm.v1beta1.MsgMigrateContractResponse) + - [MsgStoreCode](#cosmwasm.wasm.v1beta1.MsgStoreCode) + - [MsgStoreCodeResponse](#cosmwasm.wasm.v1beta1.MsgStoreCodeResponse) + - [MsgUpdateAdmin](#cosmwasm.wasm.v1beta1.MsgUpdateAdmin) + - [MsgUpdateAdminResponse](#cosmwasm.wasm.v1beta1.MsgUpdateAdminResponse) + + - [Msg](#cosmwasm.wasm.v1beta1.Msg) + +- [cosmwasm/wasm/v1beta1/genesis.proto](#cosmwasm/wasm/v1beta1/genesis.proto) + - [Code](#cosmwasm.wasm.v1beta1.Code) + - [Contract](#cosmwasm.wasm.v1beta1.Contract) + - [GenesisState](#cosmwasm.wasm.v1beta1.GenesisState) + - [GenesisState.GenMsgs](#cosmwasm.wasm.v1beta1.GenesisState.GenMsgs) + - [Sequence](#cosmwasm.wasm.v1beta1.Sequence) + +- [cosmwasm/wasm/v1beta1/ibc.proto](#cosmwasm/wasm/v1beta1/ibc.proto) + - [MsgIBCCloseChannel](#cosmwasm.wasm.v1beta1.MsgIBCCloseChannel) + - [MsgIBCSend](#cosmwasm.wasm.v1beta1.MsgIBCSend) + +- [cosmwasm/wasm/v1beta1/proposal.proto](#cosmwasm/wasm/v1beta1/proposal.proto) + - [ClearAdminProposal](#cosmwasm.wasm.v1beta1.ClearAdminProposal) + - [InstantiateContractProposal](#cosmwasm.wasm.v1beta1.InstantiateContractProposal) + - [MigrateContractProposal](#cosmwasm.wasm.v1beta1.MigrateContractProposal) + - [PinCodesProposal](#cosmwasm.wasm.v1beta1.PinCodesProposal) + - [StoreCodeProposal](#cosmwasm.wasm.v1beta1.StoreCodeProposal) + - [UnpinCodesProposal](#cosmwasm.wasm.v1beta1.UnpinCodesProposal) + - [UpdateAdminProposal](#cosmwasm.wasm.v1beta1.UpdateAdminProposal) + +- [cosmwasm/wasm/v1beta1/query.proto](#cosmwasm/wasm/v1beta1/query.proto) + - [CodeInfoResponse](#cosmwasm.wasm.v1beta1.CodeInfoResponse) + - [ContractInfoWithAddress](#cosmwasm.wasm.v1beta1.ContractInfoWithAddress) + - [QueryAllContractStateRequest](#cosmwasm.wasm.v1beta1.QueryAllContractStateRequest) + - [QueryAllContractStateResponse](#cosmwasm.wasm.v1beta1.QueryAllContractStateResponse) + - [QueryCodeRequest](#cosmwasm.wasm.v1beta1.QueryCodeRequest) + - [QueryCodeResponse](#cosmwasm.wasm.v1beta1.QueryCodeResponse) + - [QueryCodesRequest](#cosmwasm.wasm.v1beta1.QueryCodesRequest) + - [QueryCodesResponse](#cosmwasm.wasm.v1beta1.QueryCodesResponse) + - [QueryContractHistoryRequest](#cosmwasm.wasm.v1beta1.QueryContractHistoryRequest) + - [QueryContractHistoryResponse](#cosmwasm.wasm.v1beta1.QueryContractHistoryResponse) + - [QueryContractInfoRequest](#cosmwasm.wasm.v1beta1.QueryContractInfoRequest) + - [QueryContractInfoResponse](#cosmwasm.wasm.v1beta1.QueryContractInfoResponse) + - [QueryContractsByCodeRequest](#cosmwasm.wasm.v1beta1.QueryContractsByCodeRequest) + - [QueryContractsByCodeResponse](#cosmwasm.wasm.v1beta1.QueryContractsByCodeResponse) + - [QueryRawContractStateRequest](#cosmwasm.wasm.v1beta1.QueryRawContractStateRequest) + - [QueryRawContractStateResponse](#cosmwasm.wasm.v1beta1.QueryRawContractStateResponse) + - [QuerySmartContractStateRequest](#cosmwasm.wasm.v1beta1.QuerySmartContractStateRequest) + - [QuerySmartContractStateResponse](#cosmwasm.wasm.v1beta1.QuerySmartContractStateResponse) + + - [Query](#cosmwasm.wasm.v1beta1.Query) + +- [Scalar Value Types](#scalar-value-types) + + + + +

Top

+ +## cosmwasm/wasm/v1beta1/types.proto + + + + + +### AbsoluteTxPosition +AbsoluteTxPosition is a unique transaction position that allows for global +ordering of transactions. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `block_height` | [uint64](#uint64) | | BlockHeight is the block the contract was created at | +| `tx_index` | [uint64](#uint64) | | TxIndex is a monotonic counter within the block (actual transaction index, or gas consumed) | + + + + + + + + +### AccessConfig +AccessConfig access control type. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `permission` | [AccessType](#cosmwasm.wasm.v1beta1.AccessType) | | | +| `address` | [string](#string) | | | + + + + + + + + +### AccessTypeParam +AccessTypeParam + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `value` | [AccessType](#cosmwasm.wasm.v1beta1.AccessType) | | | + + + + + + + + +### CodeInfo +CodeInfo is data for the uploaded contract WASM code + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `code_hash` | [bytes](#bytes) | | CodeHash is the unique identifier created by wasmvm | +| `creator` | [string](#string) | | Creator address who initially stored the code | +| `source` | [string](#string) | | Source is a valid absolute HTTPS URI to the contract's source code, optional | +| `builder` | [string](#string) | | Builder is a valid docker image name with tag, optional | +| `instantiate_config` | [AccessConfig](#cosmwasm.wasm.v1beta1.AccessConfig) | | InstantiateConfig access control to apply on contract creation, optional | + + + + + + + + +### ContractCodeHistoryEntry +ContractCodeHistoryEntry metadata to a contract. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `operation` | [ContractCodeHistoryOperationType](#cosmwasm.wasm.v1beta1.ContractCodeHistoryOperationType) | | | +| `code_id` | [uint64](#uint64) | | CodeID is the reference to the stored WASM code | +| `updated` | [AbsoluteTxPosition](#cosmwasm.wasm.v1beta1.AbsoluteTxPosition) | | Updated Tx position when the operation was executed. | +| `msg` | [bytes](#bytes) | | | + + + + + + + + +### ContractInfo +ContractInfo stores a WASM contract instance + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `code_id` | [uint64](#uint64) | | CodeID is the reference to the stored Wasm code | +| `creator` | [string](#string) | | Creator address who initially instantiated the contract | +| `admin` | [string](#string) | | Admin is an optional address that can execute migrations | +| `label` | [string](#string) | | Label is optional metadata to be stored with a contract instance. | +| `created` | [AbsoluteTxPosition](#cosmwasm.wasm.v1beta1.AbsoluteTxPosition) | | Created Tx position when the contract was instantiated. This data should kept internal and not be exposed via query results. Just use for sorting | +| `ibc_port_id` | [string](#string) | | | + + + + + + + + +### Model +Model is a struct that holds a KV pair + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `key` | [bytes](#bytes) | | hex-encode key to read it better (this is often ascii) | +| `value` | [bytes](#bytes) | | base64-encode raw value | + + + + + + + + +### Params +Params defines the set of wasm parameters. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `code_upload_access` | [AccessConfig](#cosmwasm.wasm.v1beta1.AccessConfig) | | | +| `instantiate_default_permission` | [AccessType](#cosmwasm.wasm.v1beta1.AccessType) | | | +| `max_wasm_code_size` | [uint64](#uint64) | | | + + + + + + + + + + +### AccessType +AccessType permission types + +| Name | Number | Description | +| ---- | ------ | ----------- | +| ACCESS_TYPE_UNSPECIFIED | 0 | AccessTypeUnspecified placeholder for empty value | +| ACCESS_TYPE_NOBODY | 1 | AccessTypeNobody forbidden | +| ACCESS_TYPE_ONLY_ADDRESS | 2 | AccessTypeOnlyAddress restricted to an address | +| ACCESS_TYPE_EVERYBODY | 3 | AccessTypeEverybody unrestricted | + + + + + +### ContractCodeHistoryOperationType +ContractCodeHistoryOperationType actions that caused a code change + +| Name | Number | Description | +| ---- | ------ | ----------- | +| CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED | 0 | ContractCodeHistoryOperationTypeUnspecified placeholder for empty value | +| CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT | 1 | ContractCodeHistoryOperationTypeInit on chain contract instantiation | +| CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE | 2 | ContractCodeHistoryOperationTypeMigrate code migration | +| CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS | 3 | ContractCodeHistoryOperationTypeGenesis based on genesis data | + + + + + + + + + + + +

Top

+ +## cosmwasm/wasm/v1beta1/tx.proto + + + + + +### MsgClearAdmin +MsgClearAdmin removes any admin stored for a smart contract + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `sender` | [string](#string) | | Sender is the that actor that signed the messages | +| `contract` | [string](#string) | | Contract is the address of the smart contract | + + + + + + + + +### MsgClearAdminResponse +MsgClearAdminResponse returns empty data + + + + + + + + +### MsgExecuteContract +MsgExecuteContract submits the given message data to a smart contract + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `sender` | [string](#string) | | Sender is the that actor that signed the messages | +| `contract` | [string](#string) | | Contract is the address of the smart contract | +| `msg` | [bytes](#bytes) | | Msg json encoded message to be passed to the contract | +| `funds` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | Funds coins that are transferred to the contract on execution | + + + + + + + + +### MsgExecuteContractResponse +MsgExecuteContractResponse returns execution result data. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `data` | [bytes](#bytes) | | Data contains base64-encoded bytes to returned from the contract | + + + + + + + + +### MsgInstantiateContract +MsgInstantiateContract create a new smart contract instance for the given +code id. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `sender` | [string](#string) | | Sender is the that actor that signed the messages | +| `admin` | [string](#string) | | Admin is an optional address that can execute migrations | +| `code_id` | [uint64](#uint64) | | CodeID is the reference to the stored WASM code | +| `label` | [string](#string) | | Label is optional metadata to be stored with a contract instance. | +| `init_msg` | [bytes](#bytes) | | InitMsg json encoded message to be passed to the contract on instantiation | +| `funds` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | Funds coins that are transferred to the contract on instantiation | + + + + + + + + +### MsgInstantiateContractResponse +MsgInstantiateContractResponse return instantiation result data + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [string](#string) | | Address is the bech32 address of the new contract instance. | +| `data` | [bytes](#bytes) | | Data contains base64-encoded bytes to returned from the contract | + + + + + + + + +### MsgMigrateContract +MsgMigrateContract runs a code upgrade/ downgrade for a smart contract + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `sender` | [string](#string) | | Sender is the that actor that signed the messages | +| `contract` | [string](#string) | | Contract is the address of the smart contract | +| `code_id` | [uint64](#uint64) | | CodeID references the new WASM code | +| `migrate_msg` | [bytes](#bytes) | | MigrateMsg json encoded message to be passed to the contract on migration | + + + + + + + + +### MsgMigrateContractResponse +MsgMigrateContractResponse returns contract migration result data. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `data` | [bytes](#bytes) | | Data contains same raw bytes returned as data from the wasm contract. (May be empty) | + + + + + + + + +### MsgStoreCode +MsgStoreCode submit Wasm code to the system + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `sender` | [string](#string) | | Sender is the that actor that signed the messages | +| `wasm_byte_code` | [bytes](#bytes) | | WASMByteCode can be raw or gzip compressed | +| `source` | [string](#string) | | Source is a valid absolute HTTPS URI to the contract's source code, optional | +| `builder` | [string](#string) | | Builder is a valid docker image name with tag, optional | +| `instantiate_permission` | [AccessConfig](#cosmwasm.wasm.v1beta1.AccessConfig) | | InstantiatePermission access control to apply on contract creation, optional | + + + + + + + + +### MsgStoreCodeResponse +MsgStoreCodeResponse returns store result data. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `code_id` | [uint64](#uint64) | | CodeID is the reference to the stored WASM code | + + + + + + + + +### MsgUpdateAdmin +MsgUpdateAdmin sets a new admin for a smart contract + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `sender` | [string](#string) | | Sender is the that actor that signed the messages | +| `new_admin` | [string](#string) | | NewAdmin address to be set | +| `contract` | [string](#string) | | Contract is the address of the smart contract | + + + + + + + + +### MsgUpdateAdminResponse +MsgUpdateAdminResponse returns empty data + + + + + + + + + + + + + + +### Msg +Msg defines the wasm Msg service. + +| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | +| ----------- | ------------ | ------------- | ------------| ------- | -------- | +| `StoreCode` | [MsgStoreCode](#cosmwasm.wasm.v1beta1.MsgStoreCode) | [MsgStoreCodeResponse](#cosmwasm.wasm.v1beta1.MsgStoreCodeResponse) | StoreCode to submit Wasm code to the system | | +| `InstantiateContract` | [MsgInstantiateContract](#cosmwasm.wasm.v1beta1.MsgInstantiateContract) | [MsgInstantiateContractResponse](#cosmwasm.wasm.v1beta1.MsgInstantiateContractResponse) | Instantiate creates a new smart contract instance for the given code id. | | +| `ExecuteContract` | [MsgExecuteContract](#cosmwasm.wasm.v1beta1.MsgExecuteContract) | [MsgExecuteContractResponse](#cosmwasm.wasm.v1beta1.MsgExecuteContractResponse) | Execute submits the given message data to a smart contract | | +| `MigrateContract` | [MsgMigrateContract](#cosmwasm.wasm.v1beta1.MsgMigrateContract) | [MsgMigrateContractResponse](#cosmwasm.wasm.v1beta1.MsgMigrateContractResponse) | Migrate runs a code upgrade/ downgrade for a smart contract | | +| `UpdateAdmin` | [MsgUpdateAdmin](#cosmwasm.wasm.v1beta1.MsgUpdateAdmin) | [MsgUpdateAdminResponse](#cosmwasm.wasm.v1beta1.MsgUpdateAdminResponse) | UpdateAdmin sets a new admin for a smart contract | | +| `ClearAdmin` | [MsgClearAdmin](#cosmwasm.wasm.v1beta1.MsgClearAdmin) | [MsgClearAdminResponse](#cosmwasm.wasm.v1beta1.MsgClearAdminResponse) | ClearAdmin removes any admin stored for a smart contract | | + + + + + + +

Top

+ +## cosmwasm/wasm/v1beta1/genesis.proto + + + + + +### Code +Code struct encompasses CodeInfo and CodeBytes + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `code_id` | [uint64](#uint64) | | | +| `code_info` | [CodeInfo](#cosmwasm.wasm.v1beta1.CodeInfo) | | | +| `code_bytes` | [bytes](#bytes) | | | +| `pinned` | [bool](#bool) | | Pinned to wasmvm cache | + + + + + + + + +### Contract +Contract struct encompasses ContractAddress, ContractInfo, and ContractState + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `contract_address` | [string](#string) | | | +| `contract_info` | [ContractInfo](#cosmwasm.wasm.v1beta1.ContractInfo) | | | +| `contract_state` | [Model](#cosmwasm.wasm.v1beta1.Model) | repeated | | + + + + + + + + +### GenesisState +GenesisState - genesis state of x/wasm + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `params` | [Params](#cosmwasm.wasm.v1beta1.Params) | | | +| `codes` | [Code](#cosmwasm.wasm.v1beta1.Code) | repeated | | +| `contracts` | [Contract](#cosmwasm.wasm.v1beta1.Contract) | repeated | | +| `sequences` | [Sequence](#cosmwasm.wasm.v1beta1.Sequence) | repeated | | +| `gen_msgs` | [GenesisState.GenMsgs](#cosmwasm.wasm.v1beta1.GenesisState.GenMsgs) | repeated | | + + + + + + + + +### GenesisState.GenMsgs +GenMsgs define the messages that can be executed during genesis phase in +order. The intention is to have more human readable data that is auditable. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `store_code` | [MsgStoreCode](#cosmwasm.wasm.v1beta1.MsgStoreCode) | | | +| `instantiate_contract` | [MsgInstantiateContract](#cosmwasm.wasm.v1beta1.MsgInstantiateContract) | | | +| `execute_contract` | [MsgExecuteContract](#cosmwasm.wasm.v1beta1.MsgExecuteContract) | | | + + + + + + + + +### Sequence +Sequence key and value of an id generation counter + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `id_key` | [bytes](#bytes) | | | +| `value` | [uint64](#uint64) | | | + + + + + + + + + + + + + + + + +

Top

+ +## cosmwasm/wasm/v1beta1/ibc.proto + + + + + +### MsgIBCCloseChannel +MsgIBCCloseChannel port and channel need to be owned by the contract + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `channel` | [string](#string) | | | + + + + + + + + +### MsgIBCSend +MsgIBCSend + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `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 | + + + + + + + + + + + + + + + + +

Top

+ +## cosmwasm/wasm/v1beta1/proposal.proto + + + + + +### ClearAdminProposal +ClearAdminProposal gov proposal content type to clear the admin of a +contract. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `title` | [string](#string) | | Title is a short summary | +| `description` | [string](#string) | | Description is a human readable text | +| `contract` | [string](#string) | | Contract is the address of the smart contract | + + + + + + + + +### InstantiateContractProposal +InstantiateContractProposal gov proposal content type to instantiate a +contract. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `title` | [string](#string) | | Title is a short summary | +| `description` | [string](#string) | | Description is a human readable text | +| `run_as` | [string](#string) | | RunAs is the address that is passed to the contract's environment as sender | +| `admin` | [string](#string) | | Admin is an optional address that can execute migrations | +| `code_id` | [uint64](#uint64) | | CodeID is the reference to the stored WASM code | +| `label` | [string](#string) | | Label is optional metadata to be stored with a constract instance. | +| `init_msg` | [bytes](#bytes) | | InitMsg json encoded message to be passed to the contract on instantiation | +| `funds` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | Funds coins that are transferred to the contract on instantiation | + + + + + + + + +### MigrateContractProposal +MigrateContractProposal gov proposal content type to migrate a contract. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `title` | [string](#string) | | Title is a short summary | +| `description` | [string](#string) | | Description is a human readable text | +| `run_as` | [string](#string) | | RunAs is the address that is passed to the contract's environment as sender | +| `contract` | [string](#string) | | Contract is the address of the smart contract | +| `code_id` | [uint64](#uint64) | | CodeID references the new WASM code | +| `migrate_msg` | [bytes](#bytes) | | MigrateMsg json encoded message to be passed to the contract on migration | + + + + + + + + +### PinCodesProposal +PinCodesProposal gov proposal content type to pin a set of code ids in the +wasmvm cache. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `title` | [string](#string) | | Title is a short summary | +| `description` | [string](#string) | | Description is a human readable text | +| `code_ids` | [uint64](#uint64) | repeated | CodeIDs references the new WASM codes | + + + + + + + + +### StoreCodeProposal +StoreCodeProposal gov proposal content type to submit WASM code to the system + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `title` | [string](#string) | | Title is a short summary | +| `description` | [string](#string) | | Description is a human readable text | +| `run_as` | [string](#string) | | RunAs is the address that is passed to the contract's environment as sender | +| `wasm_byte_code` | [bytes](#bytes) | | WASMByteCode can be raw or gzip compressed | +| `source` | [string](#string) | | Source is a valid absolute HTTPS URI to the contract's source code, optional | +| `builder` | [string](#string) | | Builder is a valid docker image name with tag, optional | +| `instantiate_permission` | [AccessConfig](#cosmwasm.wasm.v1beta1.AccessConfig) | | InstantiatePermission to apply on contract creation, optional | + + + + + + + + +### UnpinCodesProposal +UnpinCodesProposal gov proposal content type to unpin a set of code ids in +the wasmvm cache. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `title` | [string](#string) | | Title is a short summary | +| `description` | [string](#string) | | Description is a human readable text | +| `code_ids` | [uint64](#uint64) | repeated | CodeIDs references the WASM codes | + + + + + + + + +### UpdateAdminProposal +UpdateAdminProposal gov proposal content type to set an admin for a contract. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `title` | [string](#string) | | Title is a short summary | +| `description` | [string](#string) | | Description is a human readable text | +| `new_admin` | [string](#string) | | NewAdmin address to be set | +| `contract` | [string](#string) | | Contract is the address of the smart contract | + + + + + + + + + + + + + + + + +

Top

+ +## cosmwasm/wasm/v1beta1/query.proto + + + + + +### CodeInfoResponse +CodeInfoResponse contains code meta data from CodeInfo + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `code_id` | [uint64](#uint64) | | id for legacy support | +| `creator` | [string](#string) | | | +| `data_hash` | [bytes](#bytes) | | | +| `source` | [string](#string) | | | +| `builder` | [string](#string) | | | + + + + + + + + +### ContractInfoWithAddress +ContractInfoWithAddress adds the address (key) to the ContractInfo +representation + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [string](#string) | | | +| `contract_info` | [ContractInfo](#cosmwasm.wasm.v1beta1.ContractInfo) | | | + + + + + + + + +### QueryAllContractStateRequest +QueryAllContractStateRequest is the request type for the +Query/AllContractState RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [string](#string) | | address is the address of the contract | +| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | + + + + + + + + +### QueryAllContractStateResponse +QueryAllContractStateResponse is the response type for the +Query/AllContractState RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `models` | [Model](#cosmwasm.wasm.v1beta1.Model) | repeated | | +| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. | + + + + + + + + +### QueryCodeRequest +QueryCodeRequest is the request type for the Query/Code RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `code_id` | [uint64](#uint64) | | grpc-gateway_out does not support Go style CodID | + + + + + + + + +### QueryCodeResponse +QueryCodeResponse is the response type for the Query/Code RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `code_info` | [CodeInfoResponse](#cosmwasm.wasm.v1beta1.CodeInfoResponse) | | | +| `data` | [bytes](#bytes) | | | + + + + + + + + +### QueryCodesRequest +QueryCodesRequest is the request type for the Query/Codes RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | + + + + + + + + +### QueryCodesResponse +QueryCodesResponse is the response type for the Query/Codes RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `code_infos` | [CodeInfoResponse](#cosmwasm.wasm.v1beta1.CodeInfoResponse) | repeated | | +| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. | + + + + + + + + +### QueryContractHistoryRequest +QueryContractHistoryRequest is the request type for the Query/ContractHistory +RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [string](#string) | | address is the address of the contract to query | +| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | + + + + + + + + +### QueryContractHistoryResponse +QueryContractHistoryResponse is the response type for the +Query/ContractHistory RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `entries` | [ContractCodeHistoryEntry](#cosmwasm.wasm.v1beta1.ContractCodeHistoryEntry) | repeated | | +| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. | + + + + + + + + +### QueryContractInfoRequest +QueryContractInfoRequest is the request type for the Query/ContractInfo RPC +method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [string](#string) | | address is the address of the contract to query | + + + + + + + + +### QueryContractInfoResponse +QueryContractInfoResponse is the response type for the Query/ContractInfo RPC +method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [string](#string) | | address is the address of the contract | +| `contract_info` | [ContractInfo](#cosmwasm.wasm.v1beta1.ContractInfo) | | | + + + + + + + + +### QueryContractsByCodeRequest +QueryContractsByCodeRequest is the request type for the Query/ContractsByCode +RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `code_id` | [uint64](#uint64) | | grpc-gateway_out does not support Go style CodID | +| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | + + + + + + + + +### QueryContractsByCodeResponse +QueryContractsByCodeResponse is the response type for the +Query/ContractsByCode RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `contract_infos` | [ContractInfoWithAddress](#cosmwasm.wasm.v1beta1.ContractInfoWithAddress) | repeated | | +| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. | + + + + + + + + +### QueryRawContractStateRequest +QueryRawContractStateRequest is the request type for the +Query/RawContractState RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [string](#string) | | address is the address of the contract | +| `query_data` | [bytes](#bytes) | | | + + + + + + + + +### QueryRawContractStateResponse +QueryRawContractStateResponse is the response type for the +Query/RawContractState RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `data` | [bytes](#bytes) | | Data contains the raw store data | + + + + + + + + +### QuerySmartContractStateRequest +QuerySmartContractStateRequest is the request type for the +Query/SmartContractState RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [string](#string) | | address is the address of the contract | +| `query_data` | [bytes](#bytes) | | QueryData contains the query data passed to the contract | + + + + + + + + +### QuerySmartContractStateResponse +QuerySmartContractStateResponse is the response type for the +Query/SmartContractState RPC method + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `data` | [bytes](#bytes) | | Data contains the json data returned from the smart contract | + + + + + + + + + + + + + + +### Query +Query provides defines the gRPC querier service + +| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | +| ----------- | ------------ | ------------- | ------------| ------- | -------- | +| `ContractInfo` | [QueryContractInfoRequest](#cosmwasm.wasm.v1beta1.QueryContractInfoRequest) | [QueryContractInfoResponse](#cosmwasm.wasm.v1beta1.QueryContractInfoResponse) | ContractInfo gets the contract meta data | GET|/wasm/v1beta1/contract/{address}| +| `ContractHistory` | [QueryContractHistoryRequest](#cosmwasm.wasm.v1beta1.QueryContractHistoryRequest) | [QueryContractHistoryResponse](#cosmwasm.wasm.v1beta1.QueryContractHistoryResponse) | ContractHistory gets the contract code history | GET|/wasm/v1beta1/contract/{address}/history| +| `ContractsByCode` | [QueryContractsByCodeRequest](#cosmwasm.wasm.v1beta1.QueryContractsByCodeRequest) | [QueryContractsByCodeResponse](#cosmwasm.wasm.v1beta1.QueryContractsByCodeResponse) | ContractsByCode lists all smart contracts for a code id | GET|/wasm/v1beta1/code/{code_id}/contracts| +| `AllContractState` | [QueryAllContractStateRequest](#cosmwasm.wasm.v1beta1.QueryAllContractStateRequest) | [QueryAllContractStateResponse](#cosmwasm.wasm.v1beta1.QueryAllContractStateResponse) | AllContractState gets all raw store data for a single contract | GET|/wasm/v1beta1/contract/{address}/state| +| `RawContractState` | [QueryRawContractStateRequest](#cosmwasm.wasm.v1beta1.QueryRawContractStateRequest) | [QueryRawContractStateResponse](#cosmwasm.wasm.v1beta1.QueryRawContractStateResponse) | RawContractState gets single key from the raw store data of a contract | GET|/wasm/v1beta1/contract/{address}/raw/{query_data}| +| `SmartContractState` | [QuerySmartContractStateRequest](#cosmwasm.wasm.v1beta1.QuerySmartContractStateRequest) | [QuerySmartContractStateResponse](#cosmwasm.wasm.v1beta1.QuerySmartContractStateResponse) | SmartContractState get smart query result from the contract | GET|/wasm/v1beta1/contract/{address}/smart/{query_data}| +| `Code` | [QueryCodeRequest](#cosmwasm.wasm.v1beta1.QueryCodeRequest) | [QueryCodeResponse](#cosmwasm.wasm.v1beta1.QueryCodeResponse) | Code gets the binary code and metadata for a singe wasm code | GET|/wasm/v1beta1/code/{code_id}| +| `Codes` | [QueryCodesRequest](#cosmwasm.wasm.v1beta1.QueryCodesRequest) | [QueryCodesResponse](#cosmwasm.wasm.v1beta1.QueryCodesResponse) | Codes gets the metadata for all stored wasm codes | GET|/wasm/v1beta1/code| + + + + + +## Scalar Value Types + +| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby | +| ----------- | ----- | --- | ---- | ------ | -- | -- | --- | ---- | +| double | | double | double | float | float64 | double | float | Float | +| float | | float | float | float | float32 | float | float | Float | +| int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | +| int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum | +| uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) | +| uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) | +| sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | +| sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum | +| fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) | +| fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum | +| sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | +| sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum | +| bool | | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass | +| string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) | +| bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) | + diff --git a/doc/proto.md b/docs/proto/proto.md similarity index 100% rename from doc/proto.md rename to docs/proto/proto.md diff --git a/docs/proto/protodoc-markdown.tmpl b/docs/proto/protodoc-markdown.tmpl new file mode 100644 index 0000000000..28201837e5 --- /dev/null +++ b/docs/proto/protodoc-markdown.tmpl @@ -0,0 +1,105 @@ + +# Protobuf Documentation + + +## Table of Contents +{{range .Files}} +{{$file_name := .Name}}- [{{.Name}}](#{{.Name}}) + {{- if .Messages }} + {{range .Messages}} - [{{.LongName}}](#{{.FullName}}) + {{end}} + {{- end -}} + {{- if .Enums }} + {{range .Enums}} - [{{.LongName}}](#{{.FullName}}) + {{end}} + {{- end -}} + {{- if .Extensions }} + {{range .Extensions}} - [File-level Extensions](#{{$file_name}}-extensions) + {{end}} + {{- end -}} + {{- if .Services }} + {{range .Services}} - [{{.Name}}](#{{.FullName}}) + {{end}} + {{- end -}} +{{end}} +- [Scalar Value Types](#scalar-value-types) + +{{range .Files}} +{{$file_name := .Name}} + +

Top

+ +## {{.Name}} +{{.Description}} + +{{range .Messages}} + + +### {{.LongName}} +{{.Description}} + +{{if .HasFields}} +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +{{range .Fields -}} + | `{{.Name}}` | [{{.LongType}}](#{{.FullType}}) | {{.Label}} | {{if (index .Options "deprecated"|default false)}}**Deprecated.** {{end}}{{nobr .Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}} | +{{end}} +{{end}} + +{{if .HasExtensions}} +| Extension | Type | Base | Number | Description | +| --------- | ---- | ---- | ------ | ----------- | +{{range .Extensions -}} + | `{{.Name}}` | {{.LongType}} | {{.ContainingLongType}} | {{.Number}} | {{nobr .Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}} | +{{end}} +{{end}} + +{{end}} + +{{range .Enums}} + + +### {{.LongName}} +{{.Description}} + +| Name | Number | Description | +| ---- | ------ | ----------- | +{{range .Values -}} + | {{.Name}} | {{.Number}} | {{nobr .Description}} | +{{end}} + +{{end}} + +{{if .HasExtensions}} + + +### File-level Extensions +| Extension | Type | Base | Number | Description | +| --------- | ---- | ---- | ------ | ----------- | +{{range .Extensions -}} + | `{{.Name}}` | {{.LongType}} | {{.ContainingLongType}} | {{.Number}} | {{nobr .Description}}{{if .DefaultValue}} Default: `{{.DefaultValue}}`{{end}} | +{{end}} +{{end}} + +{{range .Services}} + + +### {{.Name}} +{{.Description}} + +| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | +| ----------- | ------------ | ------------- | ------------| ------- | -------- | +{{range .Methods -}} + | `{{.Name}}` | [{{.RequestLongType}}](#{{.RequestFullType}}){{if .RequestStreaming}} stream{{end}} | [{{.ResponseLongType}}](#{{.ResponseFullType}}){{if .ResponseStreaming}} stream{{end}} | {{nobr .Description}} | {{with (index .Options "google.api.http")}}{{range .Rules}}{{.Method}}|{{.Pattern}}{{end}}{{end}}| +{{end}} +{{end}} + +{{end}} + +## Scalar Value Types + +| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby | +| ----------- | ----- | --- | ---- | ------ | -- | -- | --- | ---- | +{{range .Scalars -}} + | {{.ProtoType}} | {{.Notes}} | {{.CppType}} | {{.JavaType}} | {{.PythonType}} | {{.GoType}} | {{.CSharp}} | {{.PhpType}} | {{.RubyType}} | +{{end}} diff --git a/proto/cosmwasm/wasm/v1beta1/genesis.proto b/proto/cosmwasm/wasm/v1beta1/genesis.proto new file mode 100644 index 0000000000..c00fd066bc --- /dev/null +++ b/proto/cosmwasm/wasm/v1beta1/genesis.proto @@ -0,0 +1,60 @@ +syntax = "proto3"; +package cosmwasm.wasm.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmwasm/wasm/v1beta1/types.proto"; +import "cosmwasm/wasm/v1beta1/tx.proto"; + +option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; + +// GenesisState - genesis state of x/wasm +message GenesisState { + Params params = 1 [ (gogoproto.nullable) = false ]; + repeated Code codes = 2 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "codes,omitempty" ]; + repeated Contract contracts = 3 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "contracts,omitempty" + ]; + repeated Sequence sequences = 4 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "sequences,omitempty" + ]; + repeated GenMsgs gen_msgs = 5 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "gen_msgs,omitempty" + ]; + + // GenMsgs define the messages that can be executed during genesis phase in + // order. The intention is to have more human readable data that is auditable. + message GenMsgs { + // sum is a single message + oneof sum { + MsgStoreCode store_code = 1; + MsgInstantiateContract instantiate_contract = 2; + MsgExecuteContract execute_contract = 3; + } + } +} + +// Code struct encompasses CodeInfo and CodeBytes +message Code { + uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; + CodeInfo code_info = 2 [ (gogoproto.nullable) = false ]; + bytes code_bytes = 3; + // Pinned to wasmvm cache + bool pinned = 4; +} + +// Contract struct encompasses ContractAddress, ContractInfo, and ContractState +message Contract { + string contract_address = 1; + ContractInfo contract_info = 2 [ (gogoproto.nullable) = false ]; + repeated Model contract_state = 3 [ (gogoproto.nullable) = false ]; +} + +// Sequence key and value of an id generation counter +message Sequence { + bytes id_key = 1 [ (gogoproto.customname) = "IDKey" ]; + uint64 value = 2; +} \ No newline at end of file diff --git a/proto/cosmwasm/wasm/v1beta1/ibc.proto b/proto/cosmwasm/wasm/v1beta1/ibc.proto new file mode 100644 index 0000000000..e0462c34b8 --- /dev/null +++ b/proto/cosmwasm/wasm/v1beta1/ibc.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; +package cosmwasm.wasm.v1beta1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; +option (gogoproto.goproto_getters_all) = false; + +// MsgIBCSend +message MsgIBCSend { + // the channel by which the packet will be sent + string channel = 2 [ (gogoproto.moretags) = "yaml:\"source_channel\"" ]; + + // Timeout height relative to the current block height. + // The timeout is disabled when set to 0. + uint64 timeout_height = 4 + [ (gogoproto.moretags) = "yaml:\"timeout_height\"" ]; + // Timeout timestamp (in nanoseconds) relative to the current block timestamp. + // The timeout is disabled when set to 0. + uint64 timeout_timestamp = 5 + [ (gogoproto.moretags) = "yaml:\"timeout_timestamp\"" ]; + + // data is the payload to transfer + bytes data = 6 [ (gogoproto.casttype) = "encoding/json.RawMessage" ]; +} + +// MsgIBCCloseChannel port and channel need to be owned by the contract +message MsgIBCCloseChannel { + string channel = 2 [ (gogoproto.moretags) = "yaml:\"source_channel\"" ]; +} diff --git a/proto/cosmwasm/wasm/v1beta1/proposal.proto b/proto/cosmwasm/wasm/v1beta1/proposal.proto new file mode 100644 index 0000000000..88052c8273 --- /dev/null +++ b/proto/cosmwasm/wasm/v1beta1/proposal.proto @@ -0,0 +1,121 @@ +syntax = "proto3"; +package cosmwasm.wasm.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmwasm/wasm/v1beta1/types.proto"; + +option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; +option (gogoproto.goproto_stringer_all) = false; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.equal_all) = true; + +// StoreCodeProposal gov proposal content type to submit WASM code to the system +message StoreCodeProposal { + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // RunAs is the address that is passed to the contract's environment as sender + string run_as = 3; + // WASMByteCode can be raw or gzip compressed + bytes wasm_byte_code = 4 [ (gogoproto.customname) = "WASMByteCode" ]; + // Source is a valid absolute HTTPS URI to the contract's source code, + // optional + string source = 5; + // Builder is a valid docker image name with tag, optional + string builder = 6; + // InstantiatePermission to apply on contract creation, optional + AccessConfig instantiate_permission = 7; +} + +// InstantiateContractProposal gov proposal content type to instantiate a +// contract. +message InstantiateContractProposal { + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // RunAs is the address that is passed to the contract's environment as sender + string run_as = 3; + // Admin is an optional address that can execute migrations + string admin = 4; + // CodeID is the reference to the stored WASM code + uint64 code_id = 5 [ (gogoproto.customname) = "CodeID" ]; + // Label is optional metadata to be stored with a constract instance. + string label = 6; + // InitMsg json encoded message to be passed to the contract on instantiation + bytes init_msg = 7 [ (gogoproto.casttype) = "encoding/json.RawMessage" ]; + // Funds coins that are transferred to the contract on instantiation + repeated cosmos.base.v1beta1.Coin funds = 8 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// MigrateContractProposal gov proposal content type to migrate a contract. +message MigrateContractProposal { + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // RunAs is the address that is passed to the contract's environment as sender + string run_as = 3; + // Contract is the address of the smart contract + string contract = 4; + // CodeID references the new WASM code + uint64 code_id = 5 [ (gogoproto.customname) = "CodeID" ]; + // MigrateMsg json encoded message to be passed to the contract on migration + bytes migrate_msg = 6 [ (gogoproto.casttype) = "encoding/json.RawMessage" ]; +} + +// UpdateAdminProposal gov proposal content type to set an admin for a contract. +message UpdateAdminProposal { + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // NewAdmin address to be set + string new_admin = 3 [ (gogoproto.moretags) = "yaml:\"new_admin\"" ]; + // Contract is the address of the smart contract + string contract = 4; +} + +// ClearAdminProposal gov proposal content type to clear the admin of a +// contract. +message ClearAdminProposal { + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // Contract is the address of the smart contract + string contract = 3; +} + +// PinCodesProposal gov proposal content type to pin a set of code ids in the +// wasmvm cache. +message PinCodesProposal { + // Title is a short summary + string title = 1 [ (gogoproto.moretags) = "yaml:\"title\"" ]; + // Description is a human readable text + string description = 2 [ (gogoproto.moretags) = "yaml:\"description\"" ]; + // CodeIDs references the new WASM codes + repeated uint64 code_ids = 3 [ + (gogoproto.customname) = "CodeIDs", + (gogoproto.moretags) = "yaml:\"code_ids\"" + ]; +} + +// UnpinCodesProposal gov proposal content type to unpin a set of code ids in +// the wasmvm cache. +message UnpinCodesProposal { + // Title is a short summary + string title = 1 [ (gogoproto.moretags) = "yaml:\"title\"" ]; + // Description is a human readable text + string description = 2 [ (gogoproto.moretags) = "yaml:\"description\"" ]; + // CodeIDs references the WASM codes + repeated uint64 code_ids = 3 [ + (gogoproto.customname) = "CodeIDs", + (gogoproto.moretags) = "yaml:\"code_ids\"" + ]; +} diff --git a/proto/cosmwasm/wasm/v1beta1/query.proto b/proto/cosmwasm/wasm/v1beta1/query.proto new file mode 100644 index 0000000000..1ddc871283 --- /dev/null +++ b/proto/cosmwasm/wasm/v1beta1/query.proto @@ -0,0 +1,206 @@ +syntax = "proto3"; +package cosmwasm.wasm.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmwasm/wasm/v1beta1/types.proto"; +import "google/api/annotations.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; + +option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.equal_all) = false; + +// Query provides defines the gRPC querier service +service Query { + // ContractInfo gets the contract meta data + rpc ContractInfo(QueryContractInfoRequest) + returns (QueryContractInfoResponse) { + option (google.api.http).get = "/wasm/v1beta1/contract/{address}"; + } + // ContractHistory gets the contract code history + rpc ContractHistory(QueryContractHistoryRequest) + returns (QueryContractHistoryResponse) { + option (google.api.http).get = "/wasm/v1beta1/contract/{address}/history"; + } + // ContractsByCode lists all smart contracts for a code id + rpc ContractsByCode(QueryContractsByCodeRequest) + returns (QueryContractsByCodeResponse) { + option (google.api.http).get = "/wasm/v1beta1/code/{code_id}/contracts"; + } + // AllContractState gets all raw store data for a single contract + rpc AllContractState(QueryAllContractStateRequest) + returns (QueryAllContractStateResponse) { + option (google.api.http).get = "/wasm/v1beta1/contract/{address}/state"; + } + // RawContractState gets single key from the raw store data of a contract + rpc RawContractState(QueryRawContractStateRequest) + returns (QueryRawContractStateResponse) { + option (google.api.http).get = + "/wasm/v1beta1/contract/{address}/raw/{query_data}"; + } + // SmartContractState get smart query result from the contract + rpc SmartContractState(QuerySmartContractStateRequest) + returns (QuerySmartContractStateResponse) { + option (google.api.http).get = + "/wasm/v1beta1/contract/{address}/smart/{query_data}"; + } + // Code gets the binary code and metadata for a singe wasm code + rpc Code(QueryCodeRequest) returns (QueryCodeResponse) { + option (google.api.http).get = "/wasm/v1beta1/code/{code_id}"; + } + // Codes gets the metadata for all stored wasm codes + rpc Codes(QueryCodesRequest) returns (QueryCodesResponse) { + option (google.api.http).get = "/wasm/v1beta1/code"; + } +} + +// QueryContractInfoRequest is the request type for the Query/ContractInfo RPC +// method +message QueryContractInfoRequest { + // address is the address of the contract to query + string address = 1; +} +// QueryContractInfoResponse is the response type for the Query/ContractInfo RPC +// method +message QueryContractInfoResponse { + option (gogoproto.equal) = true; + + // address is the address of the contract + string address = 1; + ContractInfo contract_info = 2 + [ (gogoproto.embed) = true, (gogoproto.jsontag) = "" ]; +} + +// QueryContractHistoryRequest is the request type for the Query/ContractHistory +// RPC method +message QueryContractHistoryRequest { + // address is the address of the contract to query + string address = 1; + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryContractHistoryResponse is the response type for the +// Query/ContractHistory RPC method +message QueryContractHistoryResponse { + repeated ContractCodeHistoryEntry entries = 1 + [ (gogoproto.nullable) = false ]; + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryContractsByCodeRequest is the request type for the Query/ContractsByCode +// RPC method +message QueryContractsByCodeRequest { + uint64 code_id = 1; // grpc-gateway_out does not support Go style CodID + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// ContractInfoWithAddress adds the address (key) to the ContractInfo +// representation +message ContractInfoWithAddress { + option (gogoproto.equal) = true; + + string address = 1; + ContractInfo contract_info = 2 + [ (gogoproto.embed) = true, (gogoproto.jsontag) = "" ]; +} +// QueryContractsByCodeResponse is the response type for the +// Query/ContractsByCode RPC method +message QueryContractsByCodeResponse { + repeated ContractInfoWithAddress contract_infos = 1 + [ (gogoproto.nullable) = false ]; + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryAllContractStateRequest is the request type for the +// Query/AllContractState RPC method +message QueryAllContractStateRequest { + // address is the address of the contract + string address = 1; + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryAllContractStateResponse is the response type for the +// Query/AllContractState RPC method +message QueryAllContractStateResponse { + repeated Model models = 1 [ (gogoproto.nullable) = false ]; + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryRawContractStateRequest is the request type for the +// Query/RawContractState RPC method +message QueryRawContractStateRequest { + // address is the address of the contract + string address = 1; + bytes query_data = 2; +} + +// QueryRawContractStateResponse is the response type for the +// Query/RawContractState RPC method +message QueryRawContractStateResponse { + // Data contains the raw store data + bytes data = 1; +} + +// QuerySmartContractStateRequest is the request type for the +// Query/SmartContractState RPC method +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; +} + +// 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" ]; +} + +// QueryCodeRequest is the request type for the Query/Code RPC method +message QueryCodeRequest { + uint64 code_id = 1; // grpc-gateway_out does not support Go style CodID +} + +// CodeInfoResponse contains code meta data from CodeInfo +message CodeInfoResponse { + option (gogoproto.equal) = true; + + uint64 code_id = 1 [ + (gogoproto.customname) = "CodeID", + (gogoproto.jsontag) = "id" + ]; // id for legacy support + string creator = 2; + bytes data_hash = 3 + [ (gogoproto.casttype) = + "github.com/tendermint/tendermint/libs/bytes.HexBytes" ]; + string source = 4; + string builder = 5; +} + +// QueryCodeResponse is the response type for the Query/Code RPC method +message QueryCodeResponse { + option (gogoproto.equal) = true; + CodeInfoResponse code_info = 1 + [ (gogoproto.embed) = true, (gogoproto.jsontag) = "" ]; + bytes data = 2 [ (gogoproto.jsontag) = "data" ]; +} + +// QueryCodesRequest is the request type for the Query/Codes RPC method +message QueryCodesRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryCodesResponse is the response type for the Query/Codes RPC method +message QueryCodesResponse { + repeated CodeInfoResponse code_infos = 1 [ (gogoproto.nullable) = false ]; + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/x/wasm/types/tx.proto b/proto/cosmwasm/wasm/v1beta1/tx.proto similarity index 79% rename from x/wasm/types/tx.proto rename to proto/cosmwasm/wasm/v1beta1/tx.proto index 07932c4f4b..a7747ec11f 100644 --- a/x/wasm/types/tx.proto +++ b/proto/cosmwasm/wasm/v1beta1/tx.proto @@ -1,10 +1,9 @@ syntax = "proto3"; package cosmwasm.wasm.v1beta1; - import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; -import "x/wasm/types/types.proto"; +import "cosmwasm/wasm/v1beta1/types.proto"; option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; option (gogoproto.goproto_getters_all) = false; @@ -14,7 +13,8 @@ service Msg { // StoreCode to submit Wasm code to the system rpc StoreCode(MsgStoreCode) returns (MsgStoreCodeResponse); // Instantiate creates a new smart contract instance for the given code id. - rpc InstantiateContract(MsgInstantiateContract) returns (MsgInstantiateContractResponse); + rpc InstantiateContract(MsgInstantiateContract) + returns (MsgInstantiateContractResponse); // Execute submits the given message data to a smart contract rpc ExecuteContract(MsgExecuteContract) returns (MsgExecuteContractResponse); // Migrate runs a code upgrade/ downgrade for a smart contract @@ -30,34 +30,40 @@ message MsgStoreCode { // Sender is the that actor that signed the messages string sender = 1; // WASMByteCode can be raw or gzip compressed - bytes wasm_byte_code = 2 [(gogoproto.customname) = "WASMByteCode"]; - // Source is a valid absolute HTTPS URI to the contract's source code, optional + bytes wasm_byte_code = 2 [ (gogoproto.customname) = "WASMByteCode" ]; + // Source is a valid absolute HTTPS URI to the contract's source code, + // optional string source = 3; // Builder is a valid docker image name with tag, optional string builder = 4; - // InstantiatePermission access control to apply on contract creation, optional + // InstantiatePermission access control to apply on contract creation, + // optional AccessConfig instantiate_permission = 5; } // MsgStoreCodeResponse returns store result data. -message MsgStoreCodeResponse{ +message MsgStoreCodeResponse { // CodeID is the reference to the stored WASM code - uint64 code_id = 1 [(gogoproto.customname) = "CodeID"]; + uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; } -// MsgInstantiateContract create a new smart contract instance for the given code id. +// MsgInstantiateContract create a new smart contract instance for the given +// code id. message MsgInstantiateContract { // Sender is the that actor that signed the messages string sender = 1; // Admin is an optional address that can execute migrations string admin = 2; // CodeID is the reference to the stored WASM code - uint64 code_id = 3 [(gogoproto.customname) = "CodeID"]; + uint64 code_id = 3 [ (gogoproto.customname) = "CodeID" ]; // Label is optional metadata to be stored with a contract instance. string label = 4; // InitMsg json encoded message to be passed to the contract on instantiation - bytes init_msg = 5 [(gogoproto.casttype) = "encoding/json.RawMessage"]; + bytes init_msg = 5 [ (gogoproto.casttype) = "encoding/json.RawMessage" ]; // Funds coins that are transferred to the contract on instantiation - repeated cosmos.base.v1beta1.Coin funds = 6 [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin funds = 6 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // MsgInstantiateContractResponse return instantiation result data message MsgInstantiateContractResponse { @@ -74,9 +80,12 @@ 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 [(gogoproto.casttype) = "encoding/json.RawMessage"]; + bytes msg = 3 [ (gogoproto.casttype) = "encoding/json.RawMessage" ]; // Funds coins that are transferred to the contract on execution - repeated cosmos.base.v1beta1.Coin funds = 5 [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin funds = 5 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // MsgExecuteContractResponse returns execution result data. @@ -92,9 +101,9 @@ message MsgMigrateContract { // Contract is the address of the smart contract string contract = 2; // CodeID references the new WASM code - uint64 code_id = 3 [(gogoproto.customname) = "CodeID"]; + uint64 code_id = 3 [ (gogoproto.customname) = "CodeID" ]; // MigrateMsg json encoded message to be passed to the contract on migration - bytes migrate_msg = 4 [(gogoproto.casttype) = "encoding/json.RawMessage"]; + bytes migrate_msg = 4 [ (gogoproto.casttype) = "encoding/json.RawMessage" ]; } // MsgMigrateContractResponse returns contract migration result data. @@ -115,7 +124,7 @@ message MsgUpdateAdmin { } // MsgUpdateAdminResponse returns empty data -message MsgUpdateAdminResponse{} +message MsgUpdateAdminResponse {} // MsgClearAdmin removes any admin stored for a smart contract message MsgClearAdmin { @@ -126,4 +135,4 @@ message MsgClearAdmin { } // MsgClearAdminResponse returns empty data -message MsgClearAdminResponse{} +message MsgClearAdminResponse {} diff --git a/proto/cosmwasm/wasm/v1beta1/types.proto b/proto/cosmwasm/wasm/v1beta1/types.proto new file mode 100644 index 0000000000..bf976ddcb8 --- /dev/null +++ b/proto/cosmwasm/wasm/v1beta1/types.proto @@ -0,0 +1,136 @@ +syntax = "proto3"; +package cosmwasm.wasm.v1beta1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.equal_all) = true; + +// AccessType permission types +enum AccessType { + option (gogoproto.goproto_enum_prefix) = false; + option (gogoproto.goproto_enum_stringer) = false; + // AccessTypeUnspecified placeholder for empty value + ACCESS_TYPE_UNSPECIFIED = 0 + [ (gogoproto.enumvalue_customname) = "AccessTypeUnspecified" ]; + // AccessTypeNobody forbidden + ACCESS_TYPE_NOBODY = 1 + [ (gogoproto.enumvalue_customname) = "AccessTypeNobody" ]; + // AccessTypeOnlyAddress restricted to an address + ACCESS_TYPE_ONLY_ADDRESS = 2 + [ (gogoproto.enumvalue_customname) = "AccessTypeOnlyAddress" ]; + // AccessTypeEverybody unrestricted + ACCESS_TYPE_EVERYBODY = 3 + [ (gogoproto.enumvalue_customname) = "AccessTypeEverybody" ]; +} + +// AccessTypeParam +message AccessTypeParam { + option (gogoproto.goproto_stringer) = true; + AccessType value = 1 [ (gogoproto.moretags) = "yaml:\"value\"" ]; +} + +// AccessConfig access control type. +message AccessConfig { + option (gogoproto.goproto_stringer) = true; + AccessType permission = 1 [ (gogoproto.moretags) = "yaml:\"permission\"" ]; + string address = 2 [ (gogoproto.moretags) = "yaml:\"address\"" ]; +} + +// Params defines the set of wasm parameters. +message Params { + option (gogoproto.goproto_stringer) = false; + AccessConfig code_upload_access = 1 [ + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"code_upload_access\"" + ]; + AccessType instantiate_default_permission = 2 + [ (gogoproto.moretags) = "yaml:\"instantiate_default_permission\"" ]; + uint64 max_wasm_code_size = 3 + [ (gogoproto.moretags) = "yaml:\"max_wasm_code_size\"" ]; +} + +// CodeInfo is data for the uploaded contract WASM code +message CodeInfo { + // CodeHash is the unique identifier created by wasmvm + bytes code_hash = 1; + // Creator address who initially stored the code + string creator = 2; + // Source is a valid absolute HTTPS URI to the contract's source code, + // optional + string source = 3; + // Builder is a valid docker image name with tag, optional + string builder = 4; + // InstantiateConfig access control to apply on contract creation, optional + AccessConfig instantiate_config = 5 [ (gogoproto.nullable) = false ]; +} + +// ContractInfo stores a WASM contract instance +message ContractInfo { + option (gogoproto.equal) = true; + + // CodeID is the reference to the stored Wasm code + uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; + // Creator address who initially instantiated the contract + string creator = 2; + // Admin is an optional address that can execute migrations + string admin = 3; + // Label is optional metadata to be stored with a contract instance. + string label = 4; + // Created Tx position when the contract was instantiated. + // This data should kept internal and not be exposed via query results. Just + // use for sorting + AbsoluteTxPosition created = 5; + string ibc_port_id = 6 [ (gogoproto.customname) = "IBCPortID" ]; +} + +// ContractCodeHistoryOperationType actions that caused a code change +enum ContractCodeHistoryOperationType { + option (gogoproto.goproto_enum_prefix) = false; + // ContractCodeHistoryOperationTypeUnspecified placeholder for empty value + CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED = 0 + [ (gogoproto.enumvalue_customname) = + "ContractCodeHistoryOperationTypeUnspecified" ]; + // ContractCodeHistoryOperationTypeInit on chain contract instantiation + CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT = 1 + [ (gogoproto.enumvalue_customname) = + "ContractCodeHistoryOperationTypeInit" ]; + // ContractCodeHistoryOperationTypeMigrate code migration + CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE = 2 + [ (gogoproto.enumvalue_customname) = + "ContractCodeHistoryOperationTypeMigrate" ]; + // ContractCodeHistoryOperationTypeGenesis based on genesis data + CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS = 3 + [ (gogoproto.enumvalue_customname) = + "ContractCodeHistoryOperationTypeGenesis" ]; +} + +// ContractCodeHistoryEntry metadata to a contract. +message ContractCodeHistoryEntry { + ContractCodeHistoryOperationType operation = 1; + // CodeID is the reference to the stored WASM code + 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" ]; +} + +// AbsoluteTxPosition is a unique transaction position that allows for global +// ordering of transactions. +message AbsoluteTxPosition { + // BlockHeight is the block the contract was created at + uint64 block_height = 1; + // TxIndex is a monotonic counter within the block (actual transaction index, + // or gas consumed) + uint64 tx_index = 2; +} + +// Model is a struct that holds a KV pair +message Model { + // hex-encode key to read it better (this is often ascii) + bytes key = 1 [ (gogoproto.casttype) = + "github.com/tendermint/tendermint/libs/bytes.HexBytes" ]; + // base64-encode raw value + bytes value = 2; +} diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000000..c0aba168f1 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,7 @@ +# Scripts + +These scripts are copied from the [Cosmos-SDK](https://github.com/cosmos/cosmos-sdk/tree/v0.42.1/scripts) respository +with minor modifications. All credits and big thanks go to the original authors. + +Please note that a custom [fork](github.com/regen-network/protobuf) by the Regen network team is used. +See [`go.mod`](../go.mod) for version. \ No newline at end of file diff --git a/scripts/protoc-swagger-gen.sh b/scripts/protoc-swagger-gen.sh new file mode 100755 index 0000000000..f0a6bc8d9d --- /dev/null +++ b/scripts/protoc-swagger-gen.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +set -eo pipefail + +mkdir -p ./docs/client +proto_dirs=$(find ./proto -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) +for dir in $proto_dirs; do + + # generate swagger files (filter query files) + query_file=$(find "${dir}" -maxdepth 1 \( -name 'query.proto' -o -name 'service.proto' \)) + if [[ ! -z "$query_file" ]]; then + buf protoc \ + -I "proto" \ + -I "third_party/proto" \ + "$query_file" \ + --swagger_out=./docs/client \ + --swagger_opt=logtostderr=true --swagger_opt=fqn_for_swagger_name=true --swagger_opt=simple_operation_ids=true + fi +done diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index d355ddda50..f9d5572f1e 100755 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -1,19 +1,38 @@ -#!/bin/sh +#!/usr/bin/env bash set -eo pipefail -PROJECT_PROTO_DIR=x/wasm/types/ -COSMOS_SDK_DIR=${COSMOS_SDK_DIR:-$(go list -f "{{ .Dir }}" -m github.com/cosmos/cosmos-sdk)} +protoc_gen_gocosmos() { + if ! grep "github.com/gogo/protobuf => github.com/regen-network/protobuf" go.mod &>/dev/null ; then + echo -e "\tPlease run this command from somewhere inside the cosmos-sdk folder." + return 1 + fi -# Generate Go types from protobuf -protoc \ - -I=. \ - -I="$COSMOS_SDK_DIR/third_party/proto" \ - -I="$COSMOS_SDK_DIR/proto" \ - --gocosmos_out=Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types,Mgoogle/protobuf/empty.proto=github.com/gogo/protobuf/types,plugins=interfacetype+grpc,paths=source_relative:. \ - --grpc-gateway_out .\ - --grpc-gateway_opt logtostderr=true \ - --grpc-gateway_opt paths=Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types,Mgoogle/protobuf/empty.proto=github.com/gogo/protobuf/types,paths=source_relative \ - --doc_out=./doc \ - --doc_opt=markdown,proto.md \ - $(find "${PROJECT_PROTO_DIR}" -maxdepth 1 -name '*.proto') + go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@latest 2>/dev/null +} + +protoc_gen_gocosmos + +proto_dirs=$(find ./proto -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) +for dir in $proto_dirs; do + buf protoc \ + -I "proto" \ + -I "third_party/proto" \ + --gocosmos_out=plugins=interfacetype+grpc,\ +Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types:. \ + --grpc-gateway_out=logtostderr=true:. \ + $(find "${dir}" -maxdepth 1 -name '*.proto') + +done +# +## command to generate docs using protoc-gen-doc +buf protoc \ +-I "proto" \ +-I "third_party/proto" \ +--doc_out=./docs/proto \ +--doc_opt=./docs/proto/protodoc-markdown.tmpl,proto-docs.md \ +$(find "$(pwd)/proto" -maxdepth 5 -name '*.proto') + +# move proto files to the right places +cp -r github.com/CosmWasm/wasmd/* ./ +rm -rf github.com diff --git a/third_party/README.md b/third_party/README.md new file mode 100644 index 0000000000..29ac5daa16 --- /dev/null +++ b/third_party/README.md @@ -0,0 +1,8 @@ +# Third party +Contain the protobuf dependencies + +## Cosmos-SDK +* [/proto dir](https://github.com/cosmos/cosmos-sdk/tree/master/proto) +* [/third_party dir](https://github.com/cosmos/cosmos-sdk/tree/master/third_party/proto) + +Credits and :bouquet: to the original authors diff --git a/third_party/proto/confio/proofs.proto b/third_party/proto/confio/proofs.proto new file mode 100644 index 0000000000..da43503ecb --- /dev/null +++ b/third_party/proto/confio/proofs.proto @@ -0,0 +1,234 @@ +syntax = "proto3"; + +package ics23; +option go_package = "github.com/confio/ics23/go"; + +enum HashOp { + // NO_HASH is the default if no data passed. Note this is an illegal argument some places. + NO_HASH = 0; + SHA256 = 1; + SHA512 = 2; + KECCAK = 3; + RIPEMD160 = 4; + BITCOIN = 5; // ripemd160(sha256(x)) +} + +/** +LengthOp defines how to process the key and value of the LeafOp +to include length information. After encoding the length with the given +algorithm, the length will be prepended to the key and value bytes. +(Each one with it's own encoded length) +*/ +enum LengthOp { + // NO_PREFIX don't include any length info + NO_PREFIX = 0; + // VAR_PROTO uses protobuf (and go-amino) varint encoding of the length + VAR_PROTO = 1; + // VAR_RLP uses rlp int encoding of the length + VAR_RLP = 2; + // FIXED32_BIG uses big-endian encoding of the length as a 32 bit integer + FIXED32_BIG = 3; + // FIXED32_LITTLE uses little-endian encoding of the length as a 32 bit integer + FIXED32_LITTLE = 4; + // FIXED64_BIG uses big-endian encoding of the length as a 64 bit integer + FIXED64_BIG = 5; + // FIXED64_LITTLE uses little-endian encoding of the length as a 64 bit integer + FIXED64_LITTLE = 6; + // REQUIRE_32_BYTES is like NONE, but will fail if the input is not exactly 32 bytes (sha256 output) + REQUIRE_32_BYTES = 7; + // REQUIRE_64_BYTES is like NONE, but will fail if the input is not exactly 64 bytes (sha512 output) + REQUIRE_64_BYTES = 8; +} + +/** +ExistenceProof takes a key and a value and a set of steps to perform on it. +The result of peforming all these steps will provide a "root hash", which can +be compared to the value in a header. + +Since it is computationally infeasible to produce a hash collission for any of the used +cryptographic hash functions, if someone can provide a series of operations to transform +a given key and value into a root hash that matches some trusted root, these key and values +must be in the referenced merkle tree. + +The only possible issue is maliablity in LeafOp, such as providing extra prefix data, +which should be controlled by a spec. Eg. with lengthOp as NONE, + prefix = FOO, key = BAR, value = CHOICE +and + prefix = F, key = OOBAR, value = CHOICE +would produce the same value. + +With LengthOp this is tricker but not impossible. Which is why the "leafPrefixEqual" field +in the ProofSpec is valuable to prevent this mutability. And why all trees should +length-prefix the data before hashing it. +*/ +message ExistenceProof { + bytes key = 1; + bytes value = 2; + LeafOp leaf = 3; + repeated InnerOp path = 4; +} + +/* +NonExistenceProof takes a proof of two neighbors, one left of the desired key, +one right of the desired key. If both proofs are valid AND they are neighbors, +then there is no valid proof for the given key. +*/ +message NonExistenceProof { + bytes key = 1; // TODO: remove this as unnecessary??? we prove a range + ExistenceProof left = 2; + ExistenceProof right = 3; +} + +/* +CommitmentProof is either an ExistenceProof or a NonExistenceProof, or a Batch of such messages +*/ +message CommitmentProof { + oneof proof { + ExistenceProof exist = 1; + NonExistenceProof nonexist = 2; + BatchProof batch = 3; + CompressedBatchProof compressed = 4; + } +} + +/** +LeafOp represents the raw key-value data we wish to prove, and +must be flexible to represent the internal transformation from +the original key-value pairs into the basis hash, for many existing +merkle trees. + +key and value are passed in. So that the signature of this operation is: + leafOp(key, value) -> output + +To process this, first prehash the keys and values if needed (ANY means no hash in this case): + hkey = prehashKey(key) + hvalue = prehashValue(value) + +Then combine the bytes, and hash it + output = hash(prefix || length(hkey) || hkey || length(hvalue) || hvalue) +*/ +message LeafOp { + HashOp hash = 1; + HashOp prehash_key = 2; + HashOp prehash_value = 3; + LengthOp length = 4; + // prefix is a fixed bytes that may optionally be included at the beginning to differentiate + // a leaf node from an inner node. + bytes prefix = 5; +} + +/** +InnerOp represents a merkle-proof step that is not a leaf. +It represents concatenating two children and hashing them to provide the next result. + +The result of the previous step is passed in, so the signature of this op is: + innerOp(child) -> output + +The result of applying InnerOp should be: + output = op.hash(op.prefix || child || op.suffix) + + where the || operator is concatenation of binary data, +and child is the result of hashing all the tree below this step. + +Any special data, like prepending child with the length, or prepending the entire operation with +some value to differentiate from leaf nodes, should be included in prefix and suffix. +If either of prefix or suffix is empty, we just treat it as an empty string +*/ +message InnerOp { + HashOp hash = 1; + bytes prefix = 2; + bytes suffix = 3; +} + + +/** +ProofSpec defines what the expected parameters are for a given proof type. +This can be stored in the client and used to validate any incoming proofs. + + verify(ProofSpec, Proof) -> Proof | Error + +As demonstrated in tests, if we don't fix the algorithm used to calculate the +LeafHash for a given tree, there are many possible key-value pairs that can +generate a given hash (by interpretting the preimage differently). +We need this for proper security, requires client knows a priori what +tree format server uses. But not in code, rather a configuration object. +*/ +message ProofSpec { + // any field in the ExistenceProof must be the same as in this spec. + // except Prefix, which is just the first bytes of prefix (spec can be longer) + LeafOp leaf_spec = 1; + InnerSpec inner_spec = 2; + // max_depth (if > 0) is the maximum number of InnerOps allowed (mainly for fixed-depth tries) + int32 max_depth = 3; + // min_depth (if > 0) is the minimum number of InnerOps allowed (mainly for fixed-depth tries) + int32 min_depth = 4; +} + +/* +InnerSpec contains all store-specific structure info to determine if two proofs from a +given store are neighbors. + +This enables: + + isLeftMost(spec: InnerSpec, op: InnerOp) + isRightMost(spec: InnerSpec, op: InnerOp) + isLeftNeighbor(spec: InnerSpec, left: InnerOp, right: InnerOp) +*/ +message InnerSpec { + // Child order is the ordering of the children node, must count from 0 + // iavl tree is [0, 1] (left then right) + // merk is [0, 2, 1] (left, right, here) + repeated int32 child_order = 1; + int32 child_size = 2; + int32 min_prefix_length = 3; + int32 max_prefix_length = 4; + // empty child is the prehash image that is used when one child is nil (eg. 20 bytes of 0) + bytes empty_child = 5; + // hash is the algorithm that must be used for each InnerOp + HashOp hash = 6; +} + +/* +BatchProof is a group of multiple proof types than can be compressed +*/ +message BatchProof { + repeated BatchEntry entries = 1; +} + +// Use BatchEntry not CommitmentProof, to avoid recursion +message BatchEntry { + oneof proof { + ExistenceProof exist = 1; + NonExistenceProof nonexist = 2; + } +} + + +/****** all items here are compressed forms *******/ + +message CompressedBatchProof { + repeated CompressedBatchEntry entries = 1; + repeated InnerOp lookup_inners = 2; +} + +// Use BatchEntry not CommitmentProof, to avoid recursion +message CompressedBatchEntry { + oneof proof { + CompressedExistenceProof exist = 1; + CompressedNonExistenceProof nonexist = 2; + } +} + +message CompressedExistenceProof { + bytes key = 1; + bytes value = 2; + LeafOp leaf = 3; + // these are indexes into the lookup_inners table in CompressedBatchProof + repeated int32 path = 4; +} + +message CompressedNonExistenceProof { + bytes key = 1; // TODO: remove this as unnecessary??? we prove a range + CompressedExistenceProof left = 2; + CompressedExistenceProof right = 3; +} diff --git a/third_party/proto/cosmos/auth/v1beta1/auth.proto b/third_party/proto/cosmos/auth/v1beta1/auth.proto new file mode 100644 index 0000000000..72e1d9ec28 --- /dev/null +++ b/third_party/proto/cosmos/auth/v1beta1/auth.proto @@ -0,0 +1,50 @@ +syntax = "proto3"; +package cosmos.auth.v1beta1; + +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types"; + +// BaseAccount defines a base account type. It contains all the necessary fields +// for basic account functionality. Any custom account type should extend this +// type for additional functionality (e.g. vesting). +message BaseAccount { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = false; + + option (cosmos_proto.implements_interface) = "AccountI"; + + string address = 1; + google.protobuf.Any pub_key = 2 + [(gogoproto.jsontag) = "public_key,omitempty", (gogoproto.moretags) = "yaml:\"public_key\""]; + uint64 account_number = 3 [(gogoproto.moretags) = "yaml:\"account_number\""]; + uint64 sequence = 4; +} + +// ModuleAccount defines an account for modules that holds coins on a pool. +message ModuleAccount { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + option (cosmos_proto.implements_interface) = "ModuleAccountI"; + + BaseAccount base_account = 1 [(gogoproto.embed) = true, (gogoproto.moretags) = "yaml:\"base_account\""]; + string name = 2; + repeated string permissions = 3; +} + +// Params defines the parameters for the auth module. +message Params { + option (gogoproto.equal) = true; + option (gogoproto.goproto_stringer) = false; + + uint64 max_memo_characters = 1 [(gogoproto.moretags) = "yaml:\"max_memo_characters\""]; + uint64 tx_sig_limit = 2 [(gogoproto.moretags) = "yaml:\"tx_sig_limit\""]; + uint64 tx_size_cost_per_byte = 3 [(gogoproto.moretags) = "yaml:\"tx_size_cost_per_byte\""]; + uint64 sig_verify_cost_ed25519 = 4 + [(gogoproto.customname) = "SigVerifyCostED25519", (gogoproto.moretags) = "yaml:\"sig_verify_cost_ed25519\""]; + uint64 sig_verify_cost_secp256k1 = 5 + [(gogoproto.customname) = "SigVerifyCostSecp256k1", (gogoproto.moretags) = "yaml:\"sig_verify_cost_secp256k1\""]; +} diff --git a/third_party/proto/cosmos/auth/v1beta1/genesis.proto b/third_party/proto/cosmos/auth/v1beta1/genesis.proto new file mode 100644 index 0000000000..c88b94ee4e --- /dev/null +++ b/third_party/proto/cosmos/auth/v1beta1/genesis.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +package cosmos.auth.v1beta1; + +import "google/protobuf/any.proto"; +import "gogoproto/gogo.proto"; +import "cosmos/auth/v1beta1/auth.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types"; + +// GenesisState defines the auth module's genesis state. +message GenesisState { + // params defines all the paramaters of the module. + Params params = 1 [(gogoproto.nullable) = false]; + + // accounts are the accounts present at genesis. + repeated google.protobuf.Any accounts = 2; +} diff --git a/third_party/proto/cosmos/auth/v1beta1/query.proto b/third_party/proto/cosmos/auth/v1beta1/query.proto new file mode 100644 index 0000000000..a885792683 --- /dev/null +++ b/third_party/proto/cosmos/auth/v1beta1/query.proto @@ -0,0 +1,47 @@ +syntax = "proto3"; +package cosmos.auth.v1beta1; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "google/api/annotations.proto"; +import "cosmos/auth/v1beta1/auth.proto"; +import "cosmos_proto/cosmos.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types"; + +// Query defines the gRPC querier service. +service Query { + // Account returns account details based on address. + rpc Account(QueryAccountRequest) returns (QueryAccountResponse) { + option (google.api.http).get = "/cosmos/auth/v1beta1/accounts/{address}"; + } + + // Params queries all parameters. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/auth/v1beta1/params"; + } +} + +// QueryAccountRequest is the request type for the Query/Account RPC method. +message QueryAccountRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address defines the address to query for. + string address = 1; +} + +// QueryAccountResponse is the response type for the Query/Account RPC method. +message QueryAccountResponse { + // account defines the account of the corresponding address. + google.protobuf.Any account = 1 [(cosmos_proto.accepts_interface) = "AccountI"]; +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // params defines the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos/bank/v1beta1/bank.proto b/third_party/proto/cosmos/bank/v1beta1/bank.proto new file mode 100644 index 0000000000..5a9383362e --- /dev/null +++ b/third_party/proto/cosmos/bank/v1beta1/bank.proto @@ -0,0 +1,85 @@ +syntax = "proto3"; +package cosmos.bank.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; + +// Params defines the parameters for the bank module. +message Params { + option (gogoproto.goproto_stringer) = false; + repeated SendEnabled send_enabled = 1 [(gogoproto.moretags) = "yaml:\"send_enabled,omitempty\""]; + bool default_send_enabled = 2 [(gogoproto.moretags) = "yaml:\"default_send_enabled,omitempty\""]; +} + +// SendEnabled maps coin denom to a send_enabled status (whether a denom is +// sendable). +message SendEnabled { + option (gogoproto.equal) = true; + option (gogoproto.goproto_stringer) = false; + string denom = 1; + bool enabled = 2; +} + +// Input models transaction input. +message Input { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string address = 1; + repeated cosmos.base.v1beta1.Coin coins = 2 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; +} + +// Output models transaction outputs. +message Output { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string address = 1; + repeated cosmos.base.v1beta1.Coin coins = 2 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; +} + +// Supply represents a struct that passively keeps track of the total supply +// amounts in the network. +message Supply { + option (gogoproto.equal) = true; + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + option (cosmos_proto.implements_interface) = "*github.com/cosmos/cosmos-sdk/x/bank/exported.SupplyI"; + + repeated cosmos.base.v1beta1.Coin total = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; +} + +// DenomUnit represents a struct that describes a given +// denomination unit of the basic token. +message DenomUnit { + // denom represents the string name of the given denom unit (e.g uatom). + string denom = 1; + // exponent represents power of 10 exponent that one must + // raise the base_denom to in order to equal the given DenomUnit's denom + // 1 denom = 1^exponent base_denom + // (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with + // exponent = 6, thus: 1 atom = 10^6 uatom). + uint32 exponent = 2; + // aliases is a list of string aliases for the given denom + repeated string aliases = 3; +} + +// Metadata represents a struct that describes +// a basic token. +message Metadata { + string description = 1; + // denom_units represents the list of DenomUnit's for a given coin + repeated DenomUnit denom_units = 2; + // base represents the base denom (should be the DenomUnit with exponent = 0). + string base = 3; + // display indicates the suggested denom that should be + // displayed in clients. + string display = 4; +} diff --git a/third_party/proto/cosmos/bank/v1beta1/genesis.proto b/third_party/proto/cosmos/bank/v1beta1/genesis.proto new file mode 100644 index 0000000000..25c80a38b5 --- /dev/null +++ b/third_party/proto/cosmos/bank/v1beta1/genesis.proto @@ -0,0 +1,38 @@ +syntax = "proto3"; +package cosmos.bank.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/bank/v1beta1/bank.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; + +// GenesisState defines the bank module's genesis state. +message GenesisState { + // params defines all the paramaters of the module. + Params params = 1 [(gogoproto.nullable) = false]; + + // balances is an array containing the balances of all the accounts. + repeated Balance balances = 2 [(gogoproto.nullable) = false]; + + // supply represents the total supply. + repeated cosmos.base.v1beta1.Coin supply = 3 + [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", (gogoproto.nullable) = false]; + + // denom_metadata defines the metadata of the differents coins. + repeated Metadata denom_metadata = 4 [(gogoproto.moretags) = "yaml:\"denom_metadata\"", (gogoproto.nullable) = false]; +} + +// Balance defines an account address and balance pair used in the bank module's +// genesis state. +message Balance { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address is the address of the balance holder. + string address = 1; + + // coins defines the different coins this balance holds. + repeated cosmos.base.v1beta1.Coin coins = 2 + [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", (gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos/bank/v1beta1/query.proto b/third_party/proto/cosmos/bank/v1beta1/query.proto new file mode 100644 index 0000000000..bc5e29137a --- /dev/null +++ b/third_party/proto/cosmos/bank/v1beta1/query.proto @@ -0,0 +1,150 @@ +syntax = "proto3"; +package cosmos.bank.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/bank/v1beta1/bank.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; + +// Query defines the gRPC querier service. +service Query { + // Balance queries the balance of a single coin for a single account. + rpc Balance(QueryBalanceRequest) returns (QueryBalanceResponse) { + option (google.api.http).get = "/cosmos/bank/v1beta1/balances/{address}/{denom}"; + } + + // AllBalances queries the balance of all coins for a single account. + rpc AllBalances(QueryAllBalancesRequest) returns (QueryAllBalancesResponse) { + option (google.api.http).get = "/cosmos/bank/v1beta1/balances/{address}"; + } + + // TotalSupply queries the total supply of all coins. + rpc TotalSupply(QueryTotalSupplyRequest) returns (QueryTotalSupplyResponse) { + option (google.api.http).get = "/cosmos/bank/v1beta1/supply"; + } + + // SupplyOf queries the supply of a single coin. + rpc SupplyOf(QuerySupplyOfRequest) returns (QuerySupplyOfResponse) { + option (google.api.http).get = "/cosmos/bank/v1beta1/supply/{denom}"; + } + + // Params queries the parameters of x/bank module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/bank/v1beta1/params"; + } + + // DenomsMetadata queries the client metadata of a given coin denomination. + rpc DenomMetadata(QueryDenomMetadataRequest) returns (QueryDenomMetadataResponse) { + option (google.api.http).get = "/cosmos/bank/v1beta1/denoms_metadata/{denom}"; + } + + // DenomsMetadata queries the client metadata for all registered coin denominations. + rpc DenomsMetadata(QueryDenomsMetadataRequest) returns (QueryDenomsMetadataResponse) { + option (google.api.http).get = "/cosmos/bank/v1beta1/denoms_metadata"; + } +} + +// QueryBalanceRequest is the request type for the Query/Balance RPC method. +message QueryBalanceRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address is the address to query balances for. + string address = 1; + + // denom is the coin denom to query balances for. + string denom = 2; +} + +// QueryBalanceResponse is the response type for the Query/Balance RPC method. +message QueryBalanceResponse { + // balance is the balance of the coin. + cosmos.base.v1beta1.Coin balance = 1; +} + +// QueryBalanceRequest is the request type for the Query/AllBalances RPC method. +message QueryAllBalancesRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address is the address to query balances for. + string address = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryAllBalancesResponse is the response type for the Query/AllBalances RPC +// method. +message QueryAllBalancesResponse { + // balances is the balances of all the coins. + repeated cosmos.base.v1beta1.Coin balances = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryTotalSupplyRequest is the request type for the Query/TotalSupply RPC +// method. +message QueryTotalSupplyRequest {} + +// QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC +// method +message QueryTotalSupplyResponse { + // supply is the supply of the coins + repeated cosmos.base.v1beta1.Coin supply = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; +} + +// QuerySupplyOfRequest is the request type for the Query/SupplyOf RPC method. +message QuerySupplyOfRequest { + // denom is the coin denom to query balances for. + string denom = 1; +} + +// QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC method. +message QuerySupplyOfResponse { + // amount is the supply of the coin. + cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false]; +} + +// QueryParamsRequest defines the request type for querying x/bank parameters. +message QueryParamsRequest {} + +// QueryParamsResponse defines the response type for querying x/bank parameters. +message QueryParamsResponse { + Params params = 1 [(gogoproto.nullable) = false]; +} + +// QueryDenomsMetadataRequest is the request type for the Query/DenomsMetadata RPC method. +message QueryDenomsMetadataRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryDenomsMetadataResponse is the response type for the Query/DenomsMetadata RPC +// method. +message QueryDenomsMetadataResponse { + // metadata provides the client information for all the registered tokens. + repeated Metadata metadatas = 1 [(gogoproto.nullable) = false]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDenomMetadataRequest is the request type for the Query/DenomMetadata RPC method. +message QueryDenomMetadataRequest { + // denom is the coin denom to query the metadata for. + string denom = 1; +} + +// QueryDenomMetadataResponse is the response type for the Query/DenomMetadata RPC +// method. +message QueryDenomMetadataResponse { + // metadata describes and provides all the client information for the requested token. + Metadata metadata = 1 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos/bank/v1beta1/tx.proto b/third_party/proto/cosmos/bank/v1beta1/tx.proto new file mode 100644 index 0000000000..26b2ab41f4 --- /dev/null +++ b/third_party/proto/cosmos/bank/v1beta1/tx.proto @@ -0,0 +1,42 @@ +syntax = "proto3"; +package cosmos.bank.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/bank/v1beta1/bank.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; + +// Msg defines the bank Msg service. +service Msg { + // Send defines a method for sending coins from one account to another account. + rpc Send(MsgSend) returns (MsgSendResponse); + + // MultiSend defines a method for sending coins from some accounts to other accounts. + rpc MultiSend(MsgMultiSend) returns (MsgMultiSendResponse); +} + +// MsgSend represents a message to send coins from one account to another. +message MsgSend { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string from_address = 1 [(gogoproto.moretags) = "yaml:\"from_address\""]; + string to_address = 2 [(gogoproto.moretags) = "yaml:\"to_address\""]; + repeated cosmos.base.v1beta1.Coin amount = 3 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; +} + +// MsgSendResponse defines the Msg/Send response type. +message MsgSendResponse {} + +// MsgMultiSend represents an arbitrary multi-in, multi-out send message. +message MsgMultiSend { + option (gogoproto.equal) = false; + + repeated Input inputs = 1 [(gogoproto.nullable) = false]; + repeated Output outputs = 2 [(gogoproto.nullable) = false]; +} + +// MsgMultiSendResponse defines the Msg/MultiSend response type. +message MsgMultiSendResponse {} diff --git a/third_party/proto/cosmos/base/abci/v1beta1/abci.proto b/third_party/proto/cosmos/base/abci/v1beta1/abci.proto new file mode 100644 index 0000000000..72da2aacc3 --- /dev/null +++ b/third_party/proto/cosmos/base/abci/v1beta1/abci.proto @@ -0,0 +1,137 @@ +syntax = "proto3"; +package cosmos.base.abci.v1beta1; + +import "gogoproto/gogo.proto"; +import "tendermint/abci/types.proto"; +import "google/protobuf/any.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/types"; +option (gogoproto.goproto_stringer_all) = false; + +// TxResponse defines a structure containing relevant tx data and metadata. The +// tags are stringified and the log is JSON decoded. +message TxResponse { + option (gogoproto.goproto_getters) = false; + // The block height + int64 height = 1; + // The transaction hash. + string txhash = 2 [(gogoproto.customname) = "TxHash"]; + // Namespace for the Code + string codespace = 3; + // Response code. + uint32 code = 4; + // Result bytes, if any. + string data = 5; + // The output of the application's logger (raw string). May be + // non-deterministic. + string raw_log = 6; + // The output of the application's logger (typed). May be non-deterministic. + repeated ABCIMessageLog logs = 7 [(gogoproto.castrepeated) = "ABCIMessageLogs", (gogoproto.nullable) = false]; + // Additional information. May be non-deterministic. + string info = 8; + // Amount of gas requested for transaction. + int64 gas_wanted = 9; + // Amount of gas consumed by transaction. + int64 gas_used = 10; + // The request transaction bytes. + google.protobuf.Any tx = 11; + // Time of the previous block. For heights > 1, it's the weighted median of + // the timestamps of the valid votes in the block.LastCommit. For height == 1, + // it's genesis time. + string timestamp = 12; +} + +// ABCIMessageLog defines a structure containing an indexed tx ABCI message log. +message ABCIMessageLog { + option (gogoproto.stringer) = true; + + uint32 msg_index = 1; + string log = 2; + + // Events contains a slice of Event objects that were emitted during some + // execution. + repeated StringEvent events = 3 [(gogoproto.castrepeated) = "StringEvents", (gogoproto.nullable) = false]; +} + +// StringEvent defines en Event object wrapper where all the attributes +// contain key/value pairs that are strings instead of raw bytes. +message StringEvent { + option (gogoproto.stringer) = true; + + string type = 1; + repeated Attribute attributes = 2 [(gogoproto.nullable) = false]; +} + +// Attribute defines an attribute wrapper where the key and value are +// strings instead of raw bytes. +message Attribute { + string key = 1; + string value = 2; +} + +// GasInfo defines tx execution gas context. +message GasInfo { + // GasWanted is the maximum units of work we allow this tx to perform. + uint64 gas_wanted = 1 [(gogoproto.moretags) = "yaml:\"gas_wanted\""]; + + // GasUsed is the amount of gas actually consumed. + uint64 gas_used = 2 [(gogoproto.moretags) = "yaml:\"gas_used\""]; +} + +// Result is the union of ResponseFormat and ResponseCheckTx. +message Result { + option (gogoproto.goproto_getters) = false; + + // Data is any data returned from message or handler execution. It MUST be + // length prefixed in order to separate data from multiple message executions. + bytes data = 1; + + // Log contains the log information from message or handler execution. + string log = 2; + + // Events contains a slice of Event objects that were emitted during message + // or handler execution. + repeated tendermint.abci.Event events = 3 [(gogoproto.nullable) = false]; +} + +// SimulationResponse defines the response generated when a transaction is +// successfully simulated. +message SimulationResponse { + GasInfo gas_info = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; + Result result = 2; +} + +// MsgData defines the data returned in a Result object during message +// execution. +message MsgData { + option (gogoproto.stringer) = true; + + string msg_type = 1; + bytes data = 2; +} + +// TxMsgData defines a list of MsgData. A transaction will have a MsgData object +// for each message. +message TxMsgData { + option (gogoproto.stringer) = true; + + repeated MsgData data = 1; +} + +// SearchTxsResult defines a structure for querying txs pageable +message SearchTxsResult { + option (gogoproto.stringer) = true; + + // Count of all txs + uint64 total_count = 1 [(gogoproto.moretags) = "yaml:\"total_count\"", (gogoproto.jsontag) = "total_count"]; + // Count of txs in current page + uint64 count = 2; + // Index of current page, start from 1 + uint64 page_number = 3 [(gogoproto.moretags) = "yaml:\"page_number\"", (gogoproto.jsontag) = "page_number"]; + // Count of total pages + uint64 page_total = 4 [(gogoproto.moretags) = "yaml:\"page_total\"", (gogoproto.jsontag) = "page_total"]; + // Max count txs per page + uint64 limit = 5; + // List of txs in current page + repeated TxResponse txs = 6; +} diff --git a/third_party/proto/cosmos/base/kv/v1beta1/kv.proto b/third_party/proto/cosmos/base/kv/v1beta1/kv.proto new file mode 100644 index 0000000000..4e9b8d2850 --- /dev/null +++ b/third_party/proto/cosmos/base/kv/v1beta1/kv.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +package cosmos.base.kv.v1beta1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/types/kv"; + +// Pairs defines a repeated slice of Pair objects. +message Pairs { + repeated Pair pairs = 1 [(gogoproto.nullable) = false]; +} + +// Pair defines a key/value bytes tuple. +message Pair { + bytes key = 1; + bytes value = 2; +} diff --git a/third_party/proto/cosmos/base/query/v1beta1/pagination.proto b/third_party/proto/cosmos/base/query/v1beta1/pagination.proto new file mode 100644 index 0000000000..2a8cbccedd --- /dev/null +++ b/third_party/proto/cosmos/base/query/v1beta1/pagination.proto @@ -0,0 +1,50 @@ +syntax = "proto3"; +package cosmos.base.query.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/types/query"; + +// PageRequest is to be embedded in gRPC request messages for efficient +// pagination. Ex: +// +// message SomeRequest { +// Foo some_parameter = 1; +// PageRequest pagination = 2; +// } +message PageRequest { + // key is a value returned in PageResponse.next_key to begin + // querying the next page most efficiently. Only one of offset or key + // should be set. + bytes key = 1; + + // offset is a numeric offset that can be used when key is unavailable. + // It is less efficient than using key. Only one of offset or key should + // be set. + uint64 offset = 2; + + // limit is the total number of results to be returned in the result page. + // If left empty it will default to a value to be set by each app. + uint64 limit = 3; + + // count_total is set to true to indicate that the result set should include + // a count of the total number of items available for pagination in UIs. + // count_total is only respected when offset is used. It is ignored when key + // is set. + bool count_total = 4; +} + +// PageResponse is to be embedded in gRPC response messages where the +// corresponding request message has used PageRequest. +// +// message SomeResponse { +// repeated Bar results = 1; +// PageResponse page = 2; +// } +message PageResponse { + // next_key is the key to be passed to PageRequest.key to + // query the next page most efficiently + bytes next_key = 1; + + // total is total number of results available if PageRequest.count_total + // was set, its value is undefined otherwise + uint64 total = 2; +} diff --git a/third_party/proto/cosmos/base/reflection/v1beta1/reflection.proto b/third_party/proto/cosmos/base/reflection/v1beta1/reflection.proto new file mode 100644 index 0000000000..22670e72b8 --- /dev/null +++ b/third_party/proto/cosmos/base/reflection/v1beta1/reflection.proto @@ -0,0 +1,44 @@ +syntax = "proto3"; +package cosmos.base.reflection.v1beta1; + +import "google/api/annotations.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/client/grpc/reflection"; + +// ReflectionService defines a service for interface reflection. +service ReflectionService { + // ListAllInterfaces lists all the interfaces registered in the interface + // registry. + rpc ListAllInterfaces(ListAllInterfacesRequest) returns (ListAllInterfacesResponse) { + option (google.api.http).get = "/cosmos/base/reflection/v1beta1/interfaces"; + }; + + // ListImplementations list all the concrete types that implement a given + // interface. + rpc ListImplementations(ListImplementationsRequest) returns (ListImplementationsResponse) { + option (google.api.http).get = "/cosmos/base/reflection/v1beta1/interfaces/" + "{interface_name}/implementations"; + }; +} + +// ListAllInterfacesRequest is the request type of the ListAllInterfaces RPC. +message ListAllInterfacesRequest {} + +// ListAllInterfacesResponse is the response type of the ListAllInterfaces RPC. +message ListAllInterfacesResponse { + // interface_names is an array of all the registered interfaces. + repeated string interface_names = 1; +} + +// ListImplementationsRequest is the request type of the ListImplementations +// RPC. +message ListImplementationsRequest { + // interface_name defines the interface to query the implementations for. + string interface_name = 1; +} + +// ListImplementationsResponse is the response type of the ListImplementations +// RPC. +message ListImplementationsResponse { + repeated string implementation_message_names = 1; +} diff --git a/third_party/proto/cosmos/base/snapshots/v1beta1/snapshot.proto b/third_party/proto/cosmos/base/snapshots/v1beta1/snapshot.proto new file mode 100644 index 0000000000..9ac5a7c31b --- /dev/null +++ b/third_party/proto/cosmos/base/snapshots/v1beta1/snapshot.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; +package cosmos.base.snapshots.v1beta1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/snapshots/types"; + +// Snapshot contains Tendermint state sync snapshot info. +message Snapshot { + uint64 height = 1; + uint32 format = 2; + uint32 chunks = 3; + bytes hash = 4; + Metadata metadata = 5 [(gogoproto.nullable) = false]; +} + +// Metadata contains SDK-specific snapshot metadata. +message Metadata { + repeated bytes chunk_hashes = 1; // SHA-256 chunk hashes +} \ No newline at end of file diff --git a/third_party/proto/cosmos/base/store/v1beta1/commit_info.proto b/third_party/proto/cosmos/base/store/v1beta1/commit_info.proto new file mode 100644 index 0000000000..98a33d30e7 --- /dev/null +++ b/third_party/proto/cosmos/base/store/v1beta1/commit_info.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; +package cosmos.base.store.v1beta1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/store/types"; + +// CommitInfo defines commit information used by the multi-store when committing +// a version/height. +message CommitInfo { + int64 version = 1; + repeated StoreInfo store_infos = 2 [(gogoproto.nullable) = false]; +} + +// StoreInfo defines store-specific commit information. It contains a reference +// between a store name and the commit ID. +message StoreInfo { + string name = 1; + CommitID commit_id = 2 [(gogoproto.nullable) = false]; +} + +// CommitID defines the committment information when a specific store is +// committed. +message CommitID { + option (gogoproto.goproto_stringer) = false; + + int64 version = 1; + bytes hash = 2; +} diff --git a/third_party/proto/cosmos/base/store/v1beta1/snapshot.proto b/third_party/proto/cosmos/base/store/v1beta1/snapshot.proto new file mode 100644 index 0000000000..834855093b --- /dev/null +++ b/third_party/proto/cosmos/base/store/v1beta1/snapshot.proto @@ -0,0 +1,28 @@ +syntax = "proto3"; +package cosmos.base.store.v1beta1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/store/types"; + +// SnapshotItem is an item contained in a rootmulti.Store snapshot. +message SnapshotItem { + // item is the specific type of snapshot item. + oneof item { + SnapshotStoreItem store = 1; + SnapshotIAVLItem iavl = 2 [(gogoproto.customname) = "IAVL"]; + } +} + +// SnapshotStoreItem contains metadata about a snapshotted store. +message SnapshotStoreItem { + string name = 1; +} + +// SnapshotIAVLItem is an exported IAVL node. +message SnapshotIAVLItem { + bytes key = 1; + bytes value = 2; + int64 version = 3; + int32 height = 4; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/base/tendermint/v1beta1/query.proto b/third_party/proto/cosmos/base/tendermint/v1beta1/query.proto new file mode 100644 index 0000000000..50cb5852cd --- /dev/null +++ b/third_party/proto/cosmos/base/tendermint/v1beta1/query.proto @@ -0,0 +1,136 @@ +syntax = "proto3"; +package cosmos.base.tendermint.v1beta1; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "google/api/annotations.proto"; +import "tendermint/p2p/types.proto"; +import "tendermint/types/block.proto"; +import "tendermint/types/types.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/client/grpc/tmservice"; + +// Service defines the gRPC querier service for tendermint queries. +service Service { + // GetNodeInfo queries the current node info. + rpc GetNodeInfo(GetNodeInfoRequest) returns (GetNodeInfoResponse) { + option (google.api.http).get = "/cosmos/base/tendermint/v1beta1/node_info"; + } + // GetSyncing queries node syncing. + rpc GetSyncing(GetSyncingRequest) returns (GetSyncingResponse) { + option (google.api.http).get = "/cosmos/base/tendermint/v1beta1/syncing"; + } + // GetLatestBlock returns the latest block. + rpc GetLatestBlock(GetLatestBlockRequest) returns (GetLatestBlockResponse) { + option (google.api.http).get = "/cosmos/base/tendermint/v1beta1/blocks/latest"; + } + // GetBlockByHeight queries block for given height. + rpc GetBlockByHeight(GetBlockByHeightRequest) returns (GetBlockByHeightResponse) { + option (google.api.http).get = "/cosmos/base/tendermint/v1beta1/blocks/{height}"; + } + + // GetLatestValidatorSet queries latest validator-set. + rpc GetLatestValidatorSet(GetLatestValidatorSetRequest) returns (GetLatestValidatorSetResponse) { + option (google.api.http).get = "/cosmos/base/tendermint/v1beta1/validatorsets/latest"; + } + // GetValidatorSetByHeight queries validator-set at a given height. + rpc GetValidatorSetByHeight(GetValidatorSetByHeightRequest) returns (GetValidatorSetByHeightResponse) { + option (google.api.http).get = "/cosmos/base/tendermint/v1beta1/validatorsets/{height}"; + } +} + +// GetValidatorSetByHeightRequest is the request type for the Query/GetValidatorSetByHeight RPC method. +message GetValidatorSetByHeightRequest { + int64 height = 1; + // pagination defines an pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// GetValidatorSetByHeightResponse is the response type for the Query/GetValidatorSetByHeight RPC method. +message GetValidatorSetByHeightResponse { + int64 block_height = 1; + repeated Validator validators = 2; + // pagination defines an pagination for the response. + cosmos.base.query.v1beta1.PageResponse pagination = 3; +} + +// GetLatestValidatorSetRequest is the request type for the Query/GetValidatorSetByHeight RPC method. +message GetLatestValidatorSetRequest { + // pagination defines an pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// GetLatestValidatorSetResponse is the response type for the Query/GetValidatorSetByHeight RPC method. +message GetLatestValidatorSetResponse { + int64 block_height = 1; + repeated Validator validators = 2; + // pagination defines an pagination for the response. + cosmos.base.query.v1beta1.PageResponse pagination = 3; +} + +// Validator is the type for the validator-set. +message Validator { + string address = 1; + google.protobuf.Any pub_key = 2; + int64 voting_power = 3; + int64 proposer_priority = 4; +} + +// GetBlockByHeightRequest is the request type for the Query/GetBlockByHeight RPC method. +message GetBlockByHeightRequest { + int64 height = 1; +} + +// GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight RPC method. +message GetBlockByHeightResponse { + .tendermint.types.BlockID block_id = 1; + .tendermint.types.Block block = 2; +} + +// GetLatestBlockRequest is the request type for the Query/GetLatestBlock RPC method. +message GetLatestBlockRequest {} + +// GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC method. +message GetLatestBlockResponse { + .tendermint.types.BlockID block_id = 1; + .tendermint.types.Block block = 2; +} + +// GetSyncingRequest is the request type for the Query/GetSyncing RPC method. +message GetSyncingRequest {} + +// GetSyncingResponse is the response type for the Query/GetSyncing RPC method. +message GetSyncingResponse { + bool syncing = 1; +} + +// GetNodeInfoRequest is the request type for the Query/GetNodeInfo RPC method. +message GetNodeInfoRequest {} + +// GetNodeInfoResponse is the request type for the Query/GetNodeInfo RPC method. +message GetNodeInfoResponse { + .tendermint.p2p.DefaultNodeInfo default_node_info = 1; + VersionInfo application_version = 2; +} + +// VersionInfo is the type for the GetNodeInfoResponse message. +message VersionInfo { + string name = 1; + string app_name = 2; + string version = 3; + string git_commit = 4; + string build_tags = 5; + string go_version = 6; + repeated Module build_deps = 7; +} + +// Module is the type for VersionInfo +message Module { + // module path + string path = 1; + // module version + string version = 2; + // checksum + string sum = 3; +} diff --git a/third_party/proto/cosmos/base/v1beta1/coin.proto b/third_party/proto/cosmos/base/v1beta1/coin.proto new file mode 100644 index 0000000000..fab75284b7 --- /dev/null +++ b/third_party/proto/cosmos/base/v1beta1/coin.proto @@ -0,0 +1,40 @@ +syntax = "proto3"; +package cosmos.base.v1beta1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/types"; +option (gogoproto.goproto_stringer_all) = false; +option (gogoproto.stringer_all) = false; + +// Coin defines a token with a denomination and an amount. +// +// NOTE: The amount field is an Int which implements the custom method +// signatures required by gogoproto. +message Coin { + option (gogoproto.equal) = true; + + string denom = 1; + string amount = 2 [(gogoproto.customtype) = "Int", (gogoproto.nullable) = false]; +} + +// DecCoin defines a token with a denomination and a decimal amount. +// +// NOTE: The amount field is an Dec which implements the custom method +// signatures required by gogoproto. +message DecCoin { + option (gogoproto.equal) = true; + + string denom = 1; + string amount = 2 [(gogoproto.customtype) = "Dec", (gogoproto.nullable) = false]; +} + +// IntProto defines a Protobuf wrapper around an Int object. +message IntProto { + string int = 1 [(gogoproto.customtype) = "Int", (gogoproto.nullable) = false]; +} + +// DecProto defines a Protobuf wrapper around a Dec object. +message DecProto { + string dec = 1 [(gogoproto.customtype) = "Dec", (gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos/capability/v1beta1/capability.proto b/third_party/proto/cosmos/capability/v1beta1/capability.proto new file mode 100644 index 0000000000..1c8332f341 --- /dev/null +++ b/third_party/proto/cosmos/capability/v1beta1/capability.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; +package cosmos.capability.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/capability/types"; + +import "gogoproto/gogo.proto"; + +// Capability defines an implementation of an object capability. The index +// provided to a Capability must be globally unique. +message Capability { + option (gogoproto.goproto_stringer) = false; + + uint64 index = 1 [(gogoproto.moretags) = "yaml:\"index\""]; +} + +// Owner defines a single capability owner. An owner is defined by the name of +// capability and the module name. +message Owner { + option (gogoproto.goproto_stringer) = false; + option (gogoproto.goproto_getters) = false; + + string module = 1 [(gogoproto.moretags) = "yaml:\"module\""]; + string name = 2 [(gogoproto.moretags) = "yaml:\"name\""]; +} + +// CapabilityOwners defines a set of owners of a single Capability. The set of +// owners must be unique. +message CapabilityOwners { + repeated Owner owners = 1 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos/capability/v1beta1/genesis.proto b/third_party/proto/cosmos/capability/v1beta1/genesis.proto new file mode 100644 index 0000000000..05bb0afc4a --- /dev/null +++ b/third_party/proto/cosmos/capability/v1beta1/genesis.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; +package cosmos.capability.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/capability/v1beta1/capability.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/capability/types"; + +// GenesisOwners defines the capability owners with their corresponding index. +message GenesisOwners { + // index is the index of the capability owner. + uint64 index = 1; + + // index_owners are the owners at the given index. + CapabilityOwners index_owners = 2 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"index_owners\""]; +} + +// GenesisState defines the capability module's genesis state. +message GenesisState { + // index is the capability global index. + uint64 index = 1; + + // owners represents a map from index to owners of the capability index + // index key is string to allow amino marshalling. + repeated GenesisOwners owners = 2 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos/crisis/v1beta1/genesis.proto b/third_party/proto/cosmos/crisis/v1beta1/genesis.proto new file mode 100644 index 0000000000..5b0ff7ec72 --- /dev/null +++ b/third_party/proto/cosmos/crisis/v1beta1/genesis.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; +package cosmos.crisis.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/crisis/types"; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; + +// GenesisState defines the crisis module's genesis state. +message GenesisState { + // constant_fee is the fee used to verify the invariant in the crisis + // module. + cosmos.base.v1beta1.Coin constant_fee = 3 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"constant_fee\""]; +} diff --git a/third_party/proto/cosmos/crisis/v1beta1/tx.proto b/third_party/proto/cosmos/crisis/v1beta1/tx.proto new file mode 100644 index 0000000000..26457ad6d5 --- /dev/null +++ b/third_party/proto/cosmos/crisis/v1beta1/tx.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; +package cosmos.crisis.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/crisis/types"; + +import "gogoproto/gogo.proto"; + +// Msg defines the bank Msg service. +service Msg { + // VerifyInvariant defines a method to verify a particular invariance. + rpc VerifyInvariant(MsgVerifyInvariant) returns (MsgVerifyInvariantResponse); +} + +// MsgVerifyInvariant represents a message to verify a particular invariance. +message MsgVerifyInvariant { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string sender = 1; + string invariant_module_name = 2 [(gogoproto.moretags) = "yaml:\"invariant_module_name\""]; + string invariant_route = 3 [(gogoproto.moretags) = "yaml:\"invariant_route\""]; +} + +// MsgVerifyInvariantResponse defines the Msg/VerifyInvariant response type. +message MsgVerifyInvariantResponse {} diff --git a/third_party/proto/cosmos/crypto/ed25519/keys.proto b/third_party/proto/cosmos/crypto/ed25519/keys.proto new file mode 100644 index 0000000000..bed9c29cc7 --- /dev/null +++ b/third_party/proto/cosmos/crypto/ed25519/keys.proto @@ -0,0 +1,22 @@ +syntax = "proto3"; +package cosmos.crypto.ed25519; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"; + +// PubKey defines a ed25519 public key +// Key is the compressed form of the pubkey. The first byte depends is a 0x02 byte +// if the y-coordinate is the lexicographically largest of the two associated with +// the x-coordinate. Otherwise the first byte is a 0x03. +// This prefix is followed with the x-coordinate. +message PubKey { + option (gogoproto.goproto_stringer) = false; + + bytes key = 1 [(gogoproto.casttype) = "crypto/ed25519.PublicKey"]; +} + +// PrivKey defines a ed25519 private key. +message PrivKey { + bytes key = 1 [(gogoproto.casttype) = "crypto/ed25519.PrivateKey"]; +} diff --git a/third_party/proto/cosmos/crypto/multisig/keys.proto b/third_party/proto/cosmos/crypto/multisig/keys.proto new file mode 100644 index 0000000000..f8398e8052 --- /dev/null +++ b/third_party/proto/cosmos/crypto/multisig/keys.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; +package cosmos.crypto.multisig; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/crypto/keys/multisig"; + +// LegacyAminoPubKey specifies a public key type +// which nests multiple public keys and a threshold, +// it uses legacy amino address rules. +message LegacyAminoPubKey { + option (gogoproto.goproto_getters) = false; + + uint32 threshold = 1 [(gogoproto.moretags) = "yaml:\"threshold\""]; + repeated google.protobuf.Any public_keys = 2 + [(gogoproto.customname) = "PubKeys", (gogoproto.moretags) = "yaml:\"pubkeys\""]; +} diff --git a/third_party/proto/cosmos/crypto/multisig/v1beta1/multisig.proto b/third_party/proto/cosmos/crypto/multisig/v1beta1/multisig.proto new file mode 100644 index 0000000000..bf671f1711 --- /dev/null +++ b/third_party/proto/cosmos/crypto/multisig/v1beta1/multisig.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; +package cosmos.crypto.multisig.v1beta1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/crypto/types"; + +// MultiSignature wraps the signatures from a multisig.LegacyAminoPubKey. +// See cosmos.tx.v1betata1.ModeInfo.Multi for how to specify which signers +// signed and with which modes. +message MultiSignature { + option (gogoproto.goproto_unrecognized) = true; + repeated bytes signatures = 1; +} + +// CompactBitArray is an implementation of a space efficient bit array. +// This is used to ensure that the encoded data takes up a minimal amount of +// space after proto encoding. +// This is not thread safe, and is not intended for concurrent usage. +message CompactBitArray { + option (gogoproto.goproto_stringer) = false; + + uint32 extra_bits_stored = 1; + bytes elems = 2; +} diff --git a/third_party/proto/cosmos/crypto/secp256k1/keys.proto b/third_party/proto/cosmos/crypto/secp256k1/keys.proto new file mode 100644 index 0000000000..a22725713a --- /dev/null +++ b/third_party/proto/cosmos/crypto/secp256k1/keys.proto @@ -0,0 +1,22 @@ +syntax = "proto3"; +package cosmos.crypto.secp256k1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"; + +// PubKey defines a secp256k1 public key +// Key is the compressed form of the pubkey. The first byte depends is a 0x02 byte +// if the y-coordinate is the lexicographically largest of the two associated with +// the x-coordinate. Otherwise the first byte is a 0x03. +// This prefix is followed with the x-coordinate. +message PubKey { + option (gogoproto.goproto_stringer) = false; + + bytes key = 1; +} + +// PrivKey defines a secp256k1 private key. +message PrivKey { + bytes key = 1; +} diff --git a/third_party/proto/cosmos/distribution/v1beta1/distribution.proto b/third_party/proto/cosmos/distribution/v1beta1/distribution.proto new file mode 100644 index 0000000000..ae98ec0b98 --- /dev/null +++ b/third_party/proto/cosmos/distribution/v1beta1/distribution.proto @@ -0,0 +1,157 @@ +syntax = "proto3"; +package cosmos.distribution.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/distribution/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; + +// Params defines the set of params for the distribution module. +message Params { + option (gogoproto.goproto_stringer) = false; + string community_tax = 1 [ + (gogoproto.moretags) = "yaml:\"community_tax\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + string base_proposer_reward = 2 [ + (gogoproto.moretags) = "yaml:\"base_proposer_reward\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + string bonus_proposer_reward = 3 [ + (gogoproto.moretags) = "yaml:\"bonus_proposer_reward\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + bool withdraw_addr_enabled = 4 [(gogoproto.moretags) = "yaml:\"withdraw_addr_enabled\""]; +} + +// ValidatorHistoricalRewards represents historical rewards for a validator. +// Height is implicit within the store key. +// Cumulative reward ratio is the sum from the zeroeth period +// until this period of rewards / tokens, per the spec. +// The reference count indicates the number of objects +// which might need to reference this historical entry at any point. +// ReferenceCount = +// number of outstanding delegations which ended the associated period (and +// might need to read that record) +// + number of slashes which ended the associated period (and might need to +// read that record) +// + one per validator for the zeroeth period, set on initialization +message ValidatorHistoricalRewards { + repeated cosmos.base.v1beta1.DecCoin cumulative_reward_ratio = 1 [ + (gogoproto.moretags) = "yaml:\"cumulative_reward_ratio\"", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false + ]; + uint32 reference_count = 2 [(gogoproto.moretags) = "yaml:\"reference_count\""]; +} + +// ValidatorCurrentRewards represents current rewards and current +// period for a validator kept as a running counter and incremented +// each block as long as the validator's tokens remain constant. +message ValidatorCurrentRewards { + repeated cosmos.base.v1beta1.DecCoin rewards = 1 + [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; + uint64 period = 2; +} + +// ValidatorAccumulatedCommission represents accumulated commission +// for a validator kept as a running counter, can be withdrawn at any time. +message ValidatorAccumulatedCommission { + repeated cosmos.base.v1beta1.DecCoin commission = 1 + [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; +} + +// ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards +// for a validator inexpensive to track, allows simple sanity checks. +message ValidatorOutstandingRewards { + repeated cosmos.base.v1beta1.DecCoin rewards = 1 [ + (gogoproto.moretags) = "yaml:\"rewards\"", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false + ]; +} + +// ValidatorSlashEvent represents a validator slash event. +// Height is implicit within the store key. +// This is needed to calculate appropriate amount of staking tokens +// for delegations which are withdrawn after a slash has occurred. +message ValidatorSlashEvent { + uint64 validator_period = 1 [(gogoproto.moretags) = "yaml:\"validator_period\""]; + string fraction = 2 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; +} + +// ValidatorSlashEvents is a collection of ValidatorSlashEvent messages. +message ValidatorSlashEvents { + option (gogoproto.goproto_stringer) = false; + repeated ValidatorSlashEvent validator_slash_events = 1 + [(gogoproto.moretags) = "yaml:\"validator_slash_events\"", (gogoproto.nullable) = false]; +} + +// FeePool is the global fee pool for distribution. +message FeePool { + repeated cosmos.base.v1beta1.DecCoin community_pool = 1 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.moretags) = "yaml:\"community_pool\"" + ]; +} + +// CommunityPoolSpendProposal details a proposal for use of community funds, +// together with how many coins are proposed to be spent, and to which +// recipient account. +message CommunityPoolSpendProposal { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + string title = 1; + string description = 2; + string recipient = 3; + repeated cosmos.base.v1beta1.Coin amount = 4 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; +} + +// DelegatorStartingInfo represents the starting info for a delegator reward +// period. It tracks the previous validator period, the delegation's amount of +// staking token, and the creation height (to check later on if any slashes have +// occurred). NOTE: Even though validators are slashed to whole staking tokens, +// the delegators within the validator may be left with less than a full token, +// thus sdk.Dec is used. +message DelegatorStartingInfo { + uint64 previous_period = 1 [(gogoproto.moretags) = "yaml:\"previous_period\""]; + string stake = 2 [ + (gogoproto.moretags) = "yaml:\"stake\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + uint64 height = 3 [(gogoproto.moretags) = "yaml:\"creation_height\"", (gogoproto.jsontag) = "creation_height"]; +} + +// DelegationDelegatorReward represents the properties +// of a delegator's delegation reward. +message DelegationDelegatorReward { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = true; + + string validator_address = 1 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + + repeated cosmos.base.v1beta1.DecCoin reward = 2 + [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; +} + +// CommunityPoolSpendProposalWithDeposit defines a CommunityPoolSpendProposal +// with a deposit +message CommunityPoolSpendProposalWithDeposit { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = true; + + string title = 1 [(gogoproto.moretags) = "yaml:\"title\""]; + string description = 2 [(gogoproto.moretags) = "yaml:\"description\""]; + string recipient = 3 [(gogoproto.moretags) = "yaml:\"recipient\""]; + string amount = 4 [(gogoproto.moretags) = "yaml:\"amount\""]; + string deposit = 5 [(gogoproto.moretags) = "yaml:\"deposit\""]; +} diff --git a/third_party/proto/cosmos/distribution/v1beta1/genesis.proto b/third_party/proto/cosmos/distribution/v1beta1/genesis.proto new file mode 100644 index 0000000000..c0b17cdf11 --- /dev/null +++ b/third_party/proto/cosmos/distribution/v1beta1/genesis.proto @@ -0,0 +1,155 @@ +syntax = "proto3"; +package cosmos.distribution.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/distribution/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/distribution/v1beta1/distribution.proto"; + +// DelegatorWithdrawInfo is the address for where distributions rewards are +// withdrawn to by default this struct is only used at genesis to feed in +// default withdraw addresses. +message DelegatorWithdrawInfo { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address is the address of the delegator. + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + + // withdraw_address is the address to withdraw the delegation rewards to. + string withdraw_address = 2 [(gogoproto.moretags) = "yaml:\"withdraw_address\""]; +} + +// ValidatorOutstandingRewardsRecord is used for import/export via genesis json. +message ValidatorOutstandingRewardsRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // validator_address is the address of the validator. + string validator_address = 1 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + + // outstanding_rewards represents the oustanding rewards of a validator. + repeated cosmos.base.v1beta1.DecCoin outstanding_rewards = 2 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"outstanding_rewards\"" + ]; +} + +// ValidatorAccumulatedCommissionRecord is used for import / export via genesis +// json. +message ValidatorAccumulatedCommissionRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // validator_address is the address of the validator. + string validator_address = 1 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + + // accumulated is the accumulated commission of a validator. + ValidatorAccumulatedCommission accumulated = 2 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"accumulated\""]; +} + +// ValidatorHistoricalRewardsRecord is used for import / export via genesis +// json. +message ValidatorHistoricalRewardsRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // validator_address is the address of the validator. + string validator_address = 1 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + + // period defines the period the historical rewards apply to. + uint64 period = 2; + + // rewards defines the historical rewards of a validator. + ValidatorHistoricalRewards rewards = 3 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"rewards\""]; +} + +// ValidatorCurrentRewardsRecord is used for import / export via genesis json. +message ValidatorCurrentRewardsRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // validator_address is the address of the validator. + string validator_address = 1 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + + // rewards defines the current rewards of a validator. + ValidatorCurrentRewards rewards = 2 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"rewards\""]; +} + +// DelegatorStartingInfoRecord used for import / export via genesis json. +message DelegatorStartingInfoRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address is the address of the delegator. + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + + // validator_address is the address of the validator. + string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + + // starting_info defines the starting info of a delegator. + DelegatorStartingInfo starting_info = 3 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"starting_info\""]; +} + +// ValidatorSlashEventRecord is used for import / export via genesis json. +message ValidatorSlashEventRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // validator_address is the address of the validator. + string validator_address = 1 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + // height defines the block height at which the slash event occured. + uint64 height = 2; + // period is the period of the slash event. + uint64 period = 3; + // validator_slash_event describes the slash event. + ValidatorSlashEvent validator_slash_event = 4 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"event\""]; +} + +// GenesisState defines the distribution module's genesis state. +message GenesisState { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // params defines all the paramaters of the module. + Params params = 1 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"params\""]; + + // fee_pool defines the fee pool at genesis. + FeePool fee_pool = 2 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"fee_pool\""]; + + // fee_pool defines the delegator withdraw infos at genesis. + repeated DelegatorWithdrawInfo delegator_withdraw_infos = 3 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"delegator_withdraw_infos\""]; + + // fee_pool defines the previous proposer at genesis. + string previous_proposer = 4 [(gogoproto.moretags) = "yaml:\"previous_proposer\""]; + + // fee_pool defines the outstanding rewards of all validators at genesis. + repeated ValidatorOutstandingRewardsRecord outstanding_rewards = 5 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"outstanding_rewards\""]; + + // fee_pool defines the accumulated commisions of all validators at genesis. + repeated ValidatorAccumulatedCommissionRecord validator_accumulated_commissions = 6 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"validator_accumulated_commissions\""]; + + // fee_pool defines the historical rewards of all validators at genesis. + repeated ValidatorHistoricalRewardsRecord validator_historical_rewards = 7 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"validator_historical_rewards\""]; + + // fee_pool defines the current rewards of all validators at genesis. + repeated ValidatorCurrentRewardsRecord validator_current_rewards = 8 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"validator_current_rewards\""]; + + // fee_pool defines the delegator starting infos at genesis. + repeated DelegatorStartingInfoRecord delegator_starting_infos = 9 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"delegator_starting_infos\""]; + + // fee_pool defines the validator slash events at genesis. + repeated ValidatorSlashEventRecord validator_slash_events = 10 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"validator_slash_events\""]; +} diff --git a/third_party/proto/cosmos/distribution/v1beta1/query.proto b/third_party/proto/cosmos/distribution/v1beta1/query.proto new file mode 100644 index 0000000000..2991218d80 --- /dev/null +++ b/third_party/proto/cosmos/distribution/v1beta1/query.proto @@ -0,0 +1,218 @@ +syntax = "proto3"; +package cosmos.distribution.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/distribution/v1beta1/distribution.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/distribution/types"; + +// Query defines the gRPC querier service for distribution module. +service Query { + // Params queries params of the distribution module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/params"; + } + + // ValidatorOutstandingRewards queries rewards of a validator address. + rpc ValidatorOutstandingRewards(QueryValidatorOutstandingRewardsRequest) + returns (QueryValidatorOutstandingRewardsResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/validators/" + "{validator_address}/outstanding_rewards"; + } + + // ValidatorCommission queries accumulated commission for a validator. + rpc ValidatorCommission(QueryValidatorCommissionRequest) returns (QueryValidatorCommissionResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/validators/" + "{validator_address}/commission"; + } + + // ValidatorSlashes queries slash events of a validator. + rpc ValidatorSlashes(QueryValidatorSlashesRequest) returns (QueryValidatorSlashesResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/validators/{validator_address}/slashes"; + } + + // DelegationRewards queries the total rewards accrued by a delegation. + rpc DelegationRewards(QueryDelegationRewardsRequest) returns (QueryDelegationRewardsResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/" + "{validator_address}"; + } + + // DelegationTotalRewards queries the total rewards accrued by a each + // validator. + rpc DelegationTotalRewards(QueryDelegationTotalRewardsRequest) returns (QueryDelegationTotalRewardsResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards"; + } + + // DelegatorValidators queries the validators of a delegator. + rpc DelegatorValidators(QueryDelegatorValidatorsRequest) returns (QueryDelegatorValidatorsResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/delegators/" + "{delegator_address}/validators"; + } + + // DelegatorWithdrawAddress queries withdraw address of a delegator. + rpc DelegatorWithdrawAddress(QueryDelegatorWithdrawAddressRequest) returns (QueryDelegatorWithdrawAddressResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/delegators/" + "{delegator_address}/withdraw_address"; + } + + // CommunityPool queries the community pool coins. + rpc CommunityPool(QueryCommunityPoolRequest) returns (QueryCommunityPoolResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/community_pool"; + } +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // params defines the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false]; +} + +// QueryValidatorOutstandingRewardsRequest is the request type for the +// Query/ValidatorOutstandingRewards RPC method. +message QueryValidatorOutstandingRewardsRequest { + // validator_address defines the validator address to query for. + string validator_address = 1; +} + +// QueryValidatorOutstandingRewardsResponse is the response type for the +// Query/ValidatorOutstandingRewards RPC method. +message QueryValidatorOutstandingRewardsResponse { + ValidatorOutstandingRewards rewards = 1 [(gogoproto.nullable) = false]; +} + +// QueryValidatorCommissionRequest is the request type for the +// Query/ValidatorCommission RPC method +message QueryValidatorCommissionRequest { + // validator_address defines the validator address to query for. + string validator_address = 1; +} + +// QueryValidatorCommissionResponse is the response type for the +// Query/ValidatorCommission RPC method +message QueryValidatorCommissionResponse { + // commission defines the commision the validator received. + ValidatorAccumulatedCommission commission = 1 [(gogoproto.nullable) = false]; +} + +// QueryValidatorSlashesRequest is the request type for the +// Query/ValidatorSlashes RPC method +message QueryValidatorSlashesRequest { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = true; + + // validator_address defines the validator address to query for. + string validator_address = 1; + // starting_height defines the optional starting height to query the slashes. + uint64 starting_height = 2; + // starting_height defines the optional ending height to query the slashes. + uint64 ending_height = 3; + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 4; +} + +// QueryValidatorSlashesResponse is the response type for the +// Query/ValidatorSlashes RPC method. +message QueryValidatorSlashesResponse { + // slashes defines the slashes the validator received. + repeated ValidatorSlashEvent slashes = 1 [(gogoproto.nullable) = false]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDelegationRewardsRequest is the request type for the +// Query/DelegationRewards RPC method. +message QueryDelegationRewardsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address defines the delegator address to query for. + string delegator_address = 1; + // validator_address defines the validator address to query for. + string validator_address = 2; +} + +// QueryDelegationRewardsResponse is the response type for the +// Query/DelegationRewards RPC method. +message QueryDelegationRewardsResponse { + // rewards defines the rewards accrued by a delegation. + repeated cosmos.base.v1beta1.DecCoin rewards = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins"]; +} + +// QueryDelegationTotalRewardsRequest is the request type for the +// Query/DelegationTotalRewards RPC method. +message QueryDelegationTotalRewardsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + // delegator_address defines the delegator address to query for. + string delegator_address = 1; +} + +// QueryDelegationTotalRewardsResponse is the response type for the +// Query/DelegationTotalRewards RPC method. +message QueryDelegationTotalRewardsResponse { + // rewards defines all the rewards accrued by a delegator. + repeated DelegationDelegatorReward rewards = 1 [(gogoproto.nullable) = false]; + // total defines the sum of all the rewards. + repeated cosmos.base.v1beta1.DecCoin total = 2 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins"]; +} + +// QueryDelegatorValidatorsRequest is the request type for the +// Query/DelegatorValidators RPC method. +message QueryDelegatorValidatorsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address defines the delegator address to query for. + string delegator_address = 1; +} + +// QueryDelegatorValidatorsResponse is the response type for the +// Query/DelegatorValidators RPC method. +message QueryDelegatorValidatorsResponse { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // validators defines the validators a delegator is delegating for. + repeated string validators = 1; +} + +// QueryDelegatorWithdrawAddressRequest is the request type for the +// Query/DelegatorWithdrawAddress RPC method. +message QueryDelegatorWithdrawAddressRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address defines the delegator address to query for. + string delegator_address = 1; +} + +// QueryDelegatorWithdrawAddressResponse is the response type for the +// Query/DelegatorWithdrawAddress RPC method. +message QueryDelegatorWithdrawAddressResponse { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // withdraw_address defines the delegator address to query for. + string withdraw_address = 1; +} + +// QueryCommunityPoolRequest is the request type for the Query/CommunityPool RPC +// method. +message QueryCommunityPoolRequest {} + +// QueryCommunityPoolResponse is the response type for the Query/CommunityPool +// RPC method. +message QueryCommunityPoolResponse { + // pool defines community pool's coins. + repeated cosmos.base.v1beta1.DecCoin pool = 1 + [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos/distribution/v1beta1/tx.proto b/third_party/proto/cosmos/distribution/v1beta1/tx.proto new file mode 100644 index 0000000000..e6ce478bcd --- /dev/null +++ b/third_party/proto/cosmos/distribution/v1beta1/tx.proto @@ -0,0 +1,79 @@ +syntax = "proto3"; +package cosmos.distribution.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/distribution/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; + +// Msg defines the distribution Msg service. +service Msg { + // SetWithdrawAddress defines a method to change the withdraw address + // for a delegator (or validator self-delegation). + rpc SetWithdrawAddress(MsgSetWithdrawAddress) returns (MsgSetWithdrawAddressResponse); + + // WithdrawDelegatorReward defines a method to withdraw rewards of delegator + // from a single validator. + rpc WithdrawDelegatorReward(MsgWithdrawDelegatorReward) returns (MsgWithdrawDelegatorRewardResponse); + + // WithdrawValidatorCommission defines a method to withdraw the + // full commission to the validator address. + rpc WithdrawValidatorCommission(MsgWithdrawValidatorCommission) returns (MsgWithdrawValidatorCommissionResponse); + + // FundCommunityPool defines a method to allow an account to directly + // fund the community pool. + rpc FundCommunityPool(MsgFundCommunityPool) returns (MsgFundCommunityPoolResponse); +} + +// MsgSetWithdrawAddress sets the withdraw address for +// a delegator (or validator self-delegation). +message MsgSetWithdrawAddress { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + string withdraw_address = 2 [(gogoproto.moretags) = "yaml:\"withdraw_address\""]; +} + +// MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response type. +message MsgSetWithdrawAddressResponse {} + +// MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator +// from a single validator. +message MsgWithdrawDelegatorReward { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""]; +} + +// MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward response type. +message MsgWithdrawDelegatorRewardResponse {} + +// MsgWithdrawValidatorCommission withdraws the full commission to the validator +// address. +message MsgWithdrawValidatorCommission { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string validator_address = 1 [(gogoproto.moretags) = "yaml:\"validator_address\""]; +} + +// MsgWithdrawValidatorCommissionResponse defines the Msg/WithdrawValidatorCommission response type. +message MsgWithdrawValidatorCommissionResponse {} + +// MsgFundCommunityPool allows an account to directly +// fund the community pool. +message MsgFundCommunityPool { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + repeated cosmos.base.v1beta1.Coin amount = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + string depositor = 2; +} + +// MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type. +message MsgFundCommunityPoolResponse {} diff --git a/third_party/proto/cosmos/evidence/v1beta1/evidence.proto b/third_party/proto/cosmos/evidence/v1beta1/evidence.proto new file mode 100644 index 0000000000..14612c314f --- /dev/null +++ b/third_party/proto/cosmos/evidence/v1beta1/evidence.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; +package cosmos.evidence.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/evidence/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; + +// Equivocation implements the Evidence interface and defines evidence of double +// signing misbehavior. +message Equivocation { + option (gogoproto.goproto_stringer) = false; + option (gogoproto.goproto_getters) = false; + option (gogoproto.equal) = false; + + int64 height = 1; + google.protobuf.Timestamp time = 2 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + int64 power = 3; + string consensus_address = 4 [(gogoproto.moretags) = "yaml:\"consensus_address\""]; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/evidence/v1beta1/genesis.proto b/third_party/proto/cosmos/evidence/v1beta1/genesis.proto new file mode 100644 index 0000000000..199f446f7e --- /dev/null +++ b/third_party/proto/cosmos/evidence/v1beta1/genesis.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; +package cosmos.evidence.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/evidence/types"; + +import "google/protobuf/any.proto"; + +// GenesisState defines the evidence module's genesis state. +message GenesisState { + // evidence defines all the evidence at genesis. + repeated google.protobuf.Any evidence = 1; +} diff --git a/third_party/proto/cosmos/evidence/v1beta1/query.proto b/third_party/proto/cosmos/evidence/v1beta1/query.proto new file mode 100644 index 0000000000..eda00544c7 --- /dev/null +++ b/third_party/proto/cosmos/evidence/v1beta1/query.proto @@ -0,0 +1,51 @@ +syntax = "proto3"; +package cosmos.evidence.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "google/api/annotations.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/evidence/types"; + +// Query defines the gRPC querier service. +service Query { + // Evidence queries evidence based on evidence hash. + rpc Evidence(QueryEvidenceRequest) returns (QueryEvidenceResponse) { + option (google.api.http).get = "/cosmos/evidence/v1beta1/evidence/{evidence_hash}"; + } + + // AllEvidence queries all evidence. + rpc AllEvidence(QueryAllEvidenceRequest) returns (QueryAllEvidenceResponse) { + option (google.api.http).get = "/cosmos/evidence/v1beta1/evidence"; + } +} + +// QueryEvidenceRequest is the request type for the Query/Evidence RPC method. +message QueryEvidenceRequest { + // evidence_hash defines the hash of the requested evidence. + bytes evidence_hash = 1 [(gogoproto.casttype) = "github.com/tendermint/tendermint/libs/bytes.HexBytes"]; +} + +// QueryEvidenceResponse is the response type for the Query/Evidence RPC method. +message QueryEvidenceResponse { + // evidence returns the requested evidence. + google.protobuf.Any evidence = 1; +} + +// QueryEvidenceRequest is the request type for the Query/AllEvidence RPC +// method. +message QueryAllEvidenceRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryAllEvidenceResponse is the response type for the Query/AllEvidence RPC +// method. +message QueryAllEvidenceResponse { + // evidence returns all evidences. + repeated google.protobuf.Any evidence = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/third_party/proto/cosmos/evidence/v1beta1/tx.proto b/third_party/proto/cosmos/evidence/v1beta1/tx.proto new file mode 100644 index 0000000000..38795f25d4 --- /dev/null +++ b/third_party/proto/cosmos/evidence/v1beta1/tx.proto @@ -0,0 +1,32 @@ +syntax = "proto3"; +package cosmos.evidence.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/evidence/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "cosmos_proto/cosmos.proto"; + +// Msg defines the evidence Msg service. +service Msg { + // SubmitEvidence submits an arbitrary Evidence of misbehavior such as equivocation or + // counterfactual signing. + rpc SubmitEvidence(MsgSubmitEvidence) returns (MsgSubmitEvidenceResponse); +} + +// MsgSubmitEvidence represents a message that supports submitting arbitrary +// Evidence of misbehavior such as equivocation or counterfactual signing. +message MsgSubmitEvidence { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string submitter = 1; + google.protobuf.Any evidence = 2 [(cosmos_proto.accepts_interface) = "Evidence"]; +} + +// MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type. +message MsgSubmitEvidenceResponse { + // hash defines the hash of the evidence. + bytes hash = 4; +} diff --git a/third_party/proto/cosmos/genutil/v1beta1/genesis.proto b/third_party/proto/cosmos/genutil/v1beta1/genesis.proto new file mode 100644 index 0000000000..a0207793d9 --- /dev/null +++ b/third_party/proto/cosmos/genutil/v1beta1/genesis.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package cosmos.genutil.v1beta1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/genutil/types"; + +// GenesisState defines the raw genesis transaction in JSON. +message GenesisState { + // gen_txs defines the genesis transactions. + repeated bytes gen_txs = 1 [ + (gogoproto.casttype) = "encoding/json.RawMessage", + (gogoproto.jsontag) = "gentxs", + (gogoproto.moretags) = "yaml:\"gentxs\"" + ]; +} diff --git a/third_party/proto/cosmos/gov/v1beta1/genesis.proto b/third_party/proto/cosmos/gov/v1beta1/genesis.proto new file mode 100644 index 0000000000..a999500449 --- /dev/null +++ b/third_party/proto/cosmos/gov/v1beta1/genesis.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; + +package cosmos.gov.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/gov/v1beta1/gov.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types"; + +// GenesisState defines the gov module's genesis state. +message GenesisState { + // starting_proposal_id is the ID of the starting proposal. + uint64 starting_proposal_id = 1 [(gogoproto.moretags) = "yaml:\"starting_proposal_id\""]; + // deposits defines all the deposits present at genesis. + repeated Deposit deposits = 2 [(gogoproto.castrepeated) = "Deposits", (gogoproto.nullable) = false]; + // votes defines all the votes present at genesis. + repeated Vote votes = 3 [(gogoproto.castrepeated) = "Votes", (gogoproto.nullable) = false]; + // proposals defines all the proposals present at genesis. + repeated Proposal proposals = 4 [(gogoproto.castrepeated) = "Proposals", (gogoproto.nullable) = false]; + // params defines all the paramaters of related to deposit. + DepositParams deposit_params = 5 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"deposit_params\""]; + // params defines all the paramaters of related to voting. + VotingParams voting_params = 6 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"voting_params\""]; + // params defines all the paramaters of related to tally. + TallyParams tally_params = 7 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"tally_params\""]; +} diff --git a/third_party/proto/cosmos/gov/v1beta1/gov.proto b/third_party/proto/cosmos/gov/v1beta1/gov.proto new file mode 100644 index 0000000000..1d72e64321 --- /dev/null +++ b/third_party/proto/cosmos/gov/v1beta1/gov.proto @@ -0,0 +1,183 @@ +syntax = "proto3"; +package cosmos.gov.v1beta1; + +import "cosmos/base/v1beta1/coin.proto"; +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/any.proto"; +import "google/protobuf/duration.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types"; +option (gogoproto.goproto_stringer_all) = false; +option (gogoproto.stringer_all) = false; +option (gogoproto.goproto_getters_all) = false; + +// VoteOption enumerates the valid vote options for a given governance proposal. +enum VoteOption { + option (gogoproto.goproto_enum_prefix) = false; + + // VOTE_OPTION_UNSPECIFIED defines a no-op vote option. + VOTE_OPTION_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "OptionEmpty"]; + // VOTE_OPTION_YES defines a yes vote option. + VOTE_OPTION_YES = 1 [(gogoproto.enumvalue_customname) = "OptionYes"]; + // VOTE_OPTION_ABSTAIN defines an abstain vote option. + VOTE_OPTION_ABSTAIN = 2 [(gogoproto.enumvalue_customname) = "OptionAbstain"]; + // VOTE_OPTION_NO defines a no vote option. + VOTE_OPTION_NO = 3 [(gogoproto.enumvalue_customname) = "OptionNo"]; + // VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + VOTE_OPTION_NO_WITH_VETO = 4 [(gogoproto.enumvalue_customname) = "OptionNoWithVeto"]; +} + +// TextProposal defines a standard text proposal whose changes need to be +// manually updated in case of approval. +message TextProposal { + option (cosmos_proto.implements_interface) = "Content"; + + option (gogoproto.equal) = true; + + string title = 1; + string description = 2; +} + +// Deposit defines an amount deposited by an account address to an active +// proposal. +message Deposit { + option (gogoproto.goproto_getters) = false; + option (gogoproto.equal) = false; + + uint64 proposal_id = 1 [(gogoproto.moretags) = "yaml:\"proposal_id\""]; + string depositor = 2; + repeated cosmos.base.v1beta1.Coin amount = 3 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; +} + +// Proposal defines the core field members of a governance proposal. +message Proposal { + option (gogoproto.equal) = true; + + uint64 proposal_id = 1 [(gogoproto.jsontag) = "id", (gogoproto.moretags) = "yaml:\"id\""]; + google.protobuf.Any content = 2 [(cosmos_proto.accepts_interface) = "Content"]; + ProposalStatus status = 3 [(gogoproto.moretags) = "yaml:\"proposal_status\""]; + TallyResult final_tally_result = 4 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"final_tally_result\""]; + google.protobuf.Timestamp submit_time = 5 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"submit_time\""]; + google.protobuf.Timestamp deposit_end_time = 6 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"deposit_end_time\""]; + repeated cosmos.base.v1beta1.Coin total_deposit = 7 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"total_deposit\"" + ]; + google.protobuf.Timestamp voting_start_time = 8 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"voting_start_time\""]; + google.protobuf.Timestamp voting_end_time = 9 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"voting_end_time\""]; +} + +// ProposalStatus enumerates the valid statuses of a proposal. +enum ProposalStatus { + option (gogoproto.goproto_enum_prefix) = false; + + // PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. + PROPOSAL_STATUS_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "StatusNil"]; + // PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit + // period. + PROPOSAL_STATUS_DEPOSIT_PERIOD = 1 [(gogoproto.enumvalue_customname) = "StatusDepositPeriod"]; + // PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting + // period. + PROPOSAL_STATUS_VOTING_PERIOD = 2 [(gogoproto.enumvalue_customname) = "StatusVotingPeriod"]; + // PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has + // passed. + PROPOSAL_STATUS_PASSED = 3 [(gogoproto.enumvalue_customname) = "StatusPassed"]; + // PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has + // been rejected. + PROPOSAL_STATUS_REJECTED = 4 [(gogoproto.enumvalue_customname) = "StatusRejected"]; + // PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has + // failed. + PROPOSAL_STATUS_FAILED = 5 [(gogoproto.enumvalue_customname) = "StatusFailed"]; +} + +// TallyResult defines a standard tally for a governance proposal. +message TallyResult { + option (gogoproto.equal) = true; + + string yes = 1 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + string abstain = 2 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + string no = 3 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + string no_with_veto = 4 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"no_with_veto\"" + ]; +} + +// Vote defines a vote on a governance proposal. +// A Vote consists of a proposal ID, the voter, and the vote option. +message Vote { + option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = false; + + uint64 proposal_id = 1 [(gogoproto.moretags) = "yaml:\"proposal_id\""]; + string voter = 2; + VoteOption option = 3; +} + +// DepositParams defines the params for deposits on governance proposals. +message DepositParams { + // Minimum deposit for a proposal to enter voting period. + repeated cosmos.base.v1beta1.Coin min_deposit = 1 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"min_deposit\"", + (gogoproto.jsontag) = "min_deposit,omitempty" + ]; + + // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 + // months. + google.protobuf.Duration max_deposit_period = 2 [ + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true, + (gogoproto.jsontag) = "max_deposit_period,omitempty", + (gogoproto.moretags) = "yaml:\"max_deposit_period\"" + ]; +} + +// VotingParams defines the params for voting on governance proposals. +message VotingParams { + // Length of the voting period. + google.protobuf.Duration voting_period = 1 [ + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true, + (gogoproto.jsontag) = "voting_period,omitempty", + (gogoproto.moretags) = "yaml:\"voting_period\"" + ]; +} + +// TallyParams defines the params for tallying votes on governance proposals. +message TallyParams { + // Minimum percentage of total stake needed to vote for a result to be + // considered valid. + bytes quorum = 1 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "quorum,omitempty" + ]; + + // Minimum proportion of Yes votes for proposal to pass. Default value: 0.5. + bytes threshold = 2 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "threshold,omitempty" + ]; + + // Minimum value of Veto votes to Total votes ratio for proposal to be + // vetoed. Default value: 1/3. + bytes veto_threshold = 3 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "veto_threshold,omitempty", + (gogoproto.moretags) = "yaml:\"veto_threshold\"" + ]; +} diff --git a/third_party/proto/cosmos/gov/v1beta1/query.proto b/third_party/proto/cosmos/gov/v1beta1/query.proto new file mode 100644 index 0000000000..da62bdbad1 --- /dev/null +++ b/third_party/proto/cosmos/gov/v1beta1/query.proto @@ -0,0 +1,190 @@ +syntax = "proto3"; +package cosmos.gov.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/gov/v1beta1/gov.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types"; + +// Query defines the gRPC querier service for gov module +service Query { + // Proposal queries proposal details based on ProposalID. + rpc Proposal(QueryProposalRequest) returns (QueryProposalResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}"; + } + + // Proposals queries all proposals based on given status. + rpc Proposals(QueryProposalsRequest) returns (QueryProposalsResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals"; + } + + // Vote queries voted information based on proposalID, voterAddr. + rpc Vote(QueryVoteRequest) returns (QueryVoteResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}"; + } + + // Votes queries votes of a given proposal. + rpc Votes(QueryVotesRequest) returns (QueryVotesResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}/votes"; + } + + // Params queries all parameters of the gov module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/params/{params_type}"; + } + + // Deposit queries single deposit information based proposalID, depositAddr. + rpc Deposit(QueryDepositRequest) returns (QueryDepositResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}"; + } + + // Deposits queries all deposits of a single proposal. + rpc Deposits(QueryDepositsRequest) returns (QueryDepositsResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits"; + } + + // TallyResult queries the tally of a proposal vote. + rpc TallyResult(QueryTallyResultRequest) returns (QueryTallyResultResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}/tally"; + } +} + +// QueryProposalRequest is the request type for the Query/Proposal RPC method. +message QueryProposalRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; +} + +// QueryProposalResponse is the response type for the Query/Proposal RPC method. +message QueryProposalResponse { + Proposal proposal = 1 [(gogoproto.nullable) = false]; +} + +// QueryProposalsRequest is the request type for the Query/Proposals RPC method. +message QueryProposalsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // proposal_status defines the status of the proposals. + ProposalStatus proposal_status = 1; + + // voter defines the voter address for the proposals. + string voter = 2; + + // depositor defines the deposit addresses from the proposals. + string depositor = 3; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 4; +} + +// QueryProposalsResponse is the response type for the Query/Proposals RPC +// method. +message QueryProposalsResponse { + repeated Proposal proposals = 1 [(gogoproto.nullable) = false]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryVoteRequest is the request type for the Query/Vote RPC method. +message QueryVoteRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // voter defines the oter address for the proposals. + string voter = 2; +} + +// QueryVoteResponse is the response type for the Query/Vote RPC method. +message QueryVoteResponse { + // vote defined the queried vote. + Vote vote = 1 [(gogoproto.nullable) = false]; +} + +// QueryVotesRequest is the request type for the Query/Votes RPC method. +message QueryVotesRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryVotesResponse is the response type for the Query/Votes RPC method. +message QueryVotesResponse { + // votes defined the queried votes. + repeated Vote votes = 1 [(gogoproto.nullable) = false]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest { + // params_type defines which parameters to query for, can be one of "voting", + // "tallying" or "deposit". + string params_type = 1; +} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // voting_params defines the parameters related to voting. + VotingParams voting_params = 1 [(gogoproto.nullable) = false]; + // deposit_params defines the parameters related to deposit. + DepositParams deposit_params = 2 [(gogoproto.nullable) = false]; + // tally_params defines the parameters related to tally. + TallyParams tally_params = 3 [(gogoproto.nullable) = false]; +} + +// QueryDepositRequest is the request type for the Query/Deposit RPC method. +message QueryDepositRequest { + option (gogoproto.goproto_getters) = false; + option (gogoproto.equal) = false; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // depositor defines the deposit addresses from the proposals. + string depositor = 2; +} + +// QueryDepositResponse is the response type for the Query/Deposit RPC method. +message QueryDepositResponse { + // deposit defines the requested deposit. + Deposit deposit = 1 [(gogoproto.nullable) = false]; +} + +// QueryDepositsRequest is the request type for the Query/Deposits RPC method. +message QueryDepositsRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryDepositsResponse is the response type for the Query/Deposits RPC method. +message QueryDepositsResponse { + repeated Deposit deposits = 1 [(gogoproto.nullable) = false]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryTallyResultRequest is the request type for the Query/Tally RPC method. +message QueryTallyResultRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; +} + +// QueryTallyResultResponse is the response type for the Query/Tally RPC method. +message QueryTallyResultResponse { + // tally defines the requested tally. + TallyResult tally = 1 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos/gov/v1beta1/tx.proto b/third_party/proto/cosmos/gov/v1beta1/tx.proto new file mode 100644 index 0000000000..d4f0c1f99a --- /dev/null +++ b/third_party/proto/cosmos/gov/v1beta1/tx.proto @@ -0,0 +1,75 @@ +syntax = "proto3"; +package cosmos.gov.v1beta1; + +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/gov/v1beta1/gov.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types"; + +// Msg defines the bank Msg service. +service Msg { + // SubmitProposal defines a method to create new proposal given a content. + rpc SubmitProposal(MsgSubmitProposal) returns (MsgSubmitProposalResponse); + + // Vote defines a method to add a vote on a specific proposal. + rpc Vote(MsgVote) returns (MsgVoteResponse); + + // Deposit defines a method to add deposit on a specific proposal. + rpc Deposit(MsgDeposit) returns (MsgDepositResponse); +} + +// MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary +// proposal Content. +message MsgSubmitProposal { + option (gogoproto.equal) = false; + option (gogoproto.goproto_stringer) = false; + option (gogoproto.stringer) = false; + option (gogoproto.goproto_getters) = false; + + google.protobuf.Any content = 1 [(cosmos_proto.accepts_interface) = "Content"]; + repeated cosmos.base.v1beta1.Coin initial_deposit = 2 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"initial_deposit\"" + ]; + string proposer = 3; +} + +// MsgSubmitProposalResponse defines the Msg/SubmitProposal response type. +message MsgSubmitProposalResponse { + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (gogoproto.moretags) = "yaml:\"proposal_id\""]; +} + +// MsgVote defines a message to cast a vote. +message MsgVote { + option (gogoproto.equal) = false; + option (gogoproto.goproto_stringer) = false; + option (gogoproto.stringer) = false; + option (gogoproto.goproto_getters) = false; + + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (gogoproto.moretags) = "yaml:\"proposal_id\""]; + string voter = 2; + VoteOption option = 3; +} + +// MsgVoteResponse defines the Msg/Vote response type. +message MsgVoteResponse {} + +// MsgDeposit defines a message to submit a deposit to an existing proposal. +message MsgDeposit { + option (gogoproto.equal) = false; + option (gogoproto.goproto_stringer) = false; + option (gogoproto.stringer) = false; + option (gogoproto.goproto_getters) = false; + + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (gogoproto.moretags) = "yaml:\"proposal_id\""]; + string depositor = 2; + repeated cosmos.base.v1beta1.Coin amount = 3 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; +} + +// MsgDepositResponse defines the Msg/Deposit response type. +message MsgDepositResponse {} diff --git a/third_party/proto/cosmos/mint/v1beta1/genesis.proto b/third_party/proto/cosmos/mint/v1beta1/genesis.proto new file mode 100644 index 0000000000..4e783fb544 --- /dev/null +++ b/third_party/proto/cosmos/mint/v1beta1/genesis.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package cosmos.mint.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/mint/v1beta1/mint.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/mint/types"; + +// GenesisState defines the mint module's genesis state. +message GenesisState { + // minter is a space for holding current inflation information. + Minter minter = 1 [(gogoproto.nullable) = false]; + + // params defines all the paramaters of the module. + Params params = 2 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos/mint/v1beta1/mint.proto b/third_party/proto/cosmos/mint/v1beta1/mint.proto new file mode 100644 index 0000000000..f94d4ae2e8 --- /dev/null +++ b/third_party/proto/cosmos/mint/v1beta1/mint.proto @@ -0,0 +1,53 @@ +syntax = "proto3"; +package cosmos.mint.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/mint/types"; + +import "gogoproto/gogo.proto"; + +// Minter represents the minting state. +message Minter { + // current annual inflation rate + string inflation = 1 + [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + // current annual expected provisions + string annual_provisions = 2 [ + (gogoproto.moretags) = "yaml:\"annual_provisions\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; +} + +// Params holds parameters for the mint module. +message Params { + option (gogoproto.goproto_stringer) = false; + + // type of coin to mint + string mint_denom = 1; + // maximum annual change in inflation rate + string inflation_rate_change = 2 [ + (gogoproto.moretags) = "yaml:\"inflation_rate_change\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // maximum inflation rate + string inflation_max = 3 [ + (gogoproto.moretags) = "yaml:\"inflation_max\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // minimum inflation rate + string inflation_min = 4 [ + (gogoproto.moretags) = "yaml:\"inflation_min\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // goal of percent bonded atoms + string goal_bonded = 5 [ + (gogoproto.moretags) = "yaml:\"goal_bonded\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // expected blocks per year + uint64 blocks_per_year = 6 [(gogoproto.moretags) = "yaml:\"blocks_per_year\""]; +} diff --git a/third_party/proto/cosmos/mint/v1beta1/query.proto b/third_party/proto/cosmos/mint/v1beta1/query.proto new file mode 100644 index 0000000000..acd341d777 --- /dev/null +++ b/third_party/proto/cosmos/mint/v1beta1/query.proto @@ -0,0 +1,57 @@ +syntax = "proto3"; +package cosmos.mint.v1beta1; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/mint/v1beta1/mint.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/mint/types"; + +// Query provides defines the gRPC querier service. +service Query { + // Params returns the total set of minting parameters. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/mint/v1beta1/params"; + } + + // Inflation returns the current minting inflation value. + rpc Inflation(QueryInflationRequest) returns (QueryInflationResponse) { + option (google.api.http).get = "/cosmos/mint/v1beta1/inflation"; + } + + // AnnualProvisions current minting annual provisions value. + rpc AnnualProvisions(QueryAnnualProvisionsRequest) returns (QueryAnnualProvisionsResponse) { + option (google.api.http).get = "/cosmos/mint/v1beta1/annual_provisions"; + } +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // params defines the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false]; +} + +// QueryInflationRequest is the request type for the Query/Inflation RPC method. +message QueryInflationRequest {} + +// QueryInflationResponse is the response type for the Query/Inflation RPC +// method. +message QueryInflationResponse { + // inflation is the current minting inflation value. + bytes inflation = 1 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; +} + +// QueryAnnualProvisionsRequest is the request type for the +// Query/AnnualProvisions RPC method. +message QueryAnnualProvisionsRequest {} + +// QueryAnnualProvisionsResponse is the response type for the +// Query/AnnualProvisions RPC method. +message QueryAnnualProvisionsResponse { + // annual_provisions is the current minting annual provisions value. + bytes annual_provisions = 1 + [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos/params/v1beta1/params.proto b/third_party/proto/cosmos/params/v1beta1/params.proto new file mode 100644 index 0000000000..5382fd7999 --- /dev/null +++ b/third_party/proto/cosmos/params/v1beta1/params.proto @@ -0,0 +1,27 @@ +syntax = "proto3"; +package cosmos.params.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/params/types/proposal"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; + +// ParameterChangeProposal defines a proposal to change one or more parameters. +message ParameterChangeProposal { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + string title = 1; + string description = 2; + repeated ParamChange changes = 3 [(gogoproto.nullable) = false]; +} + +// ParamChange defines an individual parameter change, for use in +// ParameterChangeProposal. +message ParamChange { + option (gogoproto.goproto_stringer) = false; + + string subspace = 1; + string key = 2; + string value = 3; +} diff --git a/third_party/proto/cosmos/params/v1beta1/query.proto b/third_party/proto/cosmos/params/v1beta1/query.proto new file mode 100644 index 0000000000..1078e02ae3 --- /dev/null +++ b/third_party/proto/cosmos/params/v1beta1/query.proto @@ -0,0 +1,32 @@ +syntax = "proto3"; +package cosmos.params.v1beta1; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/params/v1beta1/params.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/params/types/proposal"; + +// Query defines the gRPC querier service. +service Query { + // Params queries a specific parameter of a module, given its subspace and + // key. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/params/v1beta1/params"; + } +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest { + // subspace defines the module to query the parameter for. + string subspace = 1; + + // key defines the key of the parameter in the subspace. + string key = 2; +} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // param defines the queried parameter. + ParamChange param = 1 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos/slashing/v1beta1/genesis.proto b/third_party/proto/cosmos/slashing/v1beta1/genesis.proto new file mode 100644 index 0000000000..c813561343 --- /dev/null +++ b/third_party/proto/cosmos/slashing/v1beta1/genesis.proto @@ -0,0 +1,50 @@ +syntax = "proto3"; +package cosmos.slashing.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/slashing/types"; + +import "gogoproto/gogo.proto"; +import "cosmos/slashing/v1beta1/slashing.proto"; + +// GenesisState defines the slashing module's genesis state. +message GenesisState { + // params defines all the paramaters of related to deposit. + Params params = 1 [(gogoproto.nullable) = false]; + + // signing_infos represents a map between validator addresses and their + // signing infos. + repeated SigningInfo signing_infos = 2 + [(gogoproto.moretags) = "yaml:\"signing_infos\"", (gogoproto.nullable) = false]; + + // signing_infos represents a map between validator addresses and their + // missed blocks. + repeated ValidatorMissedBlocks missed_blocks = 3 + [(gogoproto.moretags) = "yaml:\"missed_blocks\"", (gogoproto.nullable) = false]; +} + +// SigningInfo stores validator signing info of corresponding address. +message SigningInfo { + // address is the validator address. + string address = 1; + // validator_signing_info represents the signing info of this validator. + ValidatorSigningInfo validator_signing_info = 2 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"validator_signing_info\""]; +} + +// ValidatorMissedBlocks contains array of missed blocks of corresponding +// address. +message ValidatorMissedBlocks { + // address is the validator address. + string address = 1; + // missed_blocks is an array of missed blocks by the validator. + repeated MissedBlock missed_blocks = 2 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"missed_blocks\""]; +} + +// MissedBlock contains height and missed status as boolean. +message MissedBlock { + // index is the height at which the block was missed. + int64 index = 1; + // missed is the missed status. + bool missed = 2; +} diff --git a/third_party/proto/cosmos/slashing/v1beta1/query.proto b/third_party/proto/cosmos/slashing/v1beta1/query.proto new file mode 100644 index 0000000000..869049a0ed --- /dev/null +++ b/third_party/proto/cosmos/slashing/v1beta1/query.proto @@ -0,0 +1,63 @@ +syntax = "proto3"; +package cosmos.slashing.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/slashing/v1beta1/slashing.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/slashing/types"; + +// Query provides defines the gRPC querier service +service Query { + // Params queries the parameters of slashing module + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/slashing/v1beta1/params"; + } + + // SigningInfo queries the signing info of given cons address + rpc SigningInfo(QuerySigningInfoRequest) returns (QuerySigningInfoResponse) { + option (google.api.http).get = "/cosmos/slashing/v1beta1/signing_infos/{cons_address}"; + } + + // SigningInfos queries signing info of all validators + rpc SigningInfos(QuerySigningInfosRequest) returns (QuerySigningInfosResponse) { + option (google.api.http).get = "/cosmos/slashing/v1beta1/signing_infos"; + } +} + +// QueryParamsRequest is the request type for the Query/Params RPC method +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method +message QueryParamsResponse { + Params params = 1 [(gogoproto.nullable) = false]; +} + +// QuerySigningInfoRequest is the request type for the Query/SigningInfo RPC +// method +message QuerySigningInfoRequest { + // cons_address is the address to query signing info of + string cons_address = 1; +} + +// QuerySigningInfoResponse is the response type for the Query/SigningInfo RPC +// method +message QuerySigningInfoResponse { + // val_signing_info is the signing info of requested val cons address + ValidatorSigningInfo val_signing_info = 1 [(gogoproto.nullable) = false]; +} + +// QuerySigningInfosRequest is the request type for the Query/SigningInfos RPC +// method +message QuerySigningInfosRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QuerySigningInfosResponse is the response type for the Query/SigningInfos RPC +// method +message QuerySigningInfosResponse { + // info is the signing info of all validators + repeated cosmos.slashing.v1beta1.ValidatorSigningInfo info = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/third_party/proto/cosmos/slashing/v1beta1/slashing.proto b/third_party/proto/cosmos/slashing/v1beta1/slashing.proto new file mode 100644 index 0000000000..657a90f1bd --- /dev/null +++ b/third_party/proto/cosmos/slashing/v1beta1/slashing.proto @@ -0,0 +1,55 @@ +syntax = "proto3"; +package cosmos.slashing.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/slashing/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; + +// ValidatorSigningInfo defines a validator's signing info for monitoring their +// liveness activity. +message ValidatorSigningInfo { + option (gogoproto.equal) = true; + option (gogoproto.goproto_stringer) = false; + + string address = 1; + // height at which validator was first a candidate OR was unjailed + int64 start_height = 2 [(gogoproto.moretags) = "yaml:\"start_height\""]; + // index offset into signed block bit array + int64 index_offset = 3 [(gogoproto.moretags) = "yaml:\"index_offset\""]; + // timestamp validator cannot be unjailed until + google.protobuf.Timestamp jailed_until = 4 + [(gogoproto.moretags) = "yaml:\"jailed_until\"", (gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + // whether or not a validator has been tombstoned (killed out of validator + // set) + bool tombstoned = 5; + // missed blocks counter (to avoid scanning the array every time) + int64 missed_blocks_counter = 6 [(gogoproto.moretags) = "yaml:\"missed_blocks_counter\""]; +} + +// Params represents the parameters used for by the slashing module. +message Params { + int64 signed_blocks_window = 1 [(gogoproto.moretags) = "yaml:\"signed_blocks_window\""]; + bytes min_signed_per_window = 2 [ + (gogoproto.moretags) = "yaml:\"min_signed_per_window\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + google.protobuf.Duration downtime_jail_duration = 3 [ + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true, + (gogoproto.moretags) = "yaml:\"downtime_jail_duration\"" + ]; + bytes slash_fraction_double_sign = 4 [ + (gogoproto.moretags) = "yaml:\"slash_fraction_double_sign\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + bytes slash_fraction_downtime = 5 [ + (gogoproto.moretags) = "yaml:\"slash_fraction_downtime\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; +} diff --git a/third_party/proto/cosmos/slashing/v1beta1/tx.proto b/third_party/proto/cosmos/slashing/v1beta1/tx.proto new file mode 100644 index 0000000000..4d63370ecc --- /dev/null +++ b/third_party/proto/cosmos/slashing/v1beta1/tx.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; +package cosmos.slashing.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/slashing/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; + +// Msg defines the slashing Msg service. +service Msg { + // Unjail defines a method for unjailing a jailed validator, thus returning + // them into the bonded validator set, so they can begin receiving provisions + // and rewards again. + rpc Unjail(MsgUnjail) returns (MsgUnjailResponse); +} + +// MsgUnjail defines the Msg/Unjail request type +message MsgUnjail { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = true; + + string validator_addr = 1 [(gogoproto.moretags) = "yaml:\"address\"", (gogoproto.jsontag) = "address"]; +} + +// MsgUnjailResponse defines the Msg/Unjail response type +message MsgUnjailResponse {} \ No newline at end of file diff --git a/third_party/proto/cosmos/staking/v1beta1/genesis.proto b/third_party/proto/cosmos/staking/v1beta1/genesis.proto new file mode 100644 index 0000000000..d1563dbc54 --- /dev/null +++ b/third_party/proto/cosmos/staking/v1beta1/genesis.proto @@ -0,0 +1,53 @@ +syntax = "proto3"; +package cosmos.staking.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; + +import "gogoproto/gogo.proto"; +import "cosmos/staking/v1beta1/staking.proto"; + +// GenesisState defines the staking module's genesis state. +message GenesisState { + // params defines all the paramaters of related to deposit. + Params params = 1 [(gogoproto.nullable) = false]; + + // last_total_power tracks the total amounts of bonded tokens recorded during + // the previous end block. + bytes last_total_power = 2 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.moretags) = "yaml:\"last_total_power\"", + (gogoproto.nullable) = false + ]; + + // last_validator_powers is a special index that provides a historical list + // of the last-block's bonded validators. + repeated LastValidatorPower last_validator_powers = 3 + [(gogoproto.moretags) = "yaml:\"last_validator_powers\"", (gogoproto.nullable) = false]; + + // delegations defines the validator set at genesis. + repeated Validator validators = 4 [(gogoproto.nullable) = false]; + + // delegations defines the delegations active at genesis. + repeated Delegation delegations = 5 [(gogoproto.nullable) = false]; + + // unbonding_delegations defines the unbonding delegations active at genesis. + repeated UnbondingDelegation unbonding_delegations = 6 + [(gogoproto.moretags) = "yaml:\"unbonding_delegations\"", (gogoproto.nullable) = false]; + + // redelegations defines the redelegations active at genesis. + repeated Redelegation redelegations = 7 [(gogoproto.nullable) = false]; + + bool exported = 8; +} + +// LastValidatorPower required for validator set update logic. +message LastValidatorPower { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address is the address of the validator. + string address = 1; + + // power defines the power of the validator. + int64 power = 2; +} diff --git a/third_party/proto/cosmos/staking/v1beta1/query.proto b/third_party/proto/cosmos/staking/v1beta1/query.proto new file mode 100644 index 0000000000..4852c53535 --- /dev/null +++ b/third_party/proto/cosmos/staking/v1beta1/query.proto @@ -0,0 +1,348 @@ +syntax = "proto3"; +package cosmos.staking.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/staking/v1beta1/staking.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; + +// Query defines the gRPC querier service. +service Query { + // Validators queries all validators that match the given status. + rpc Validators(QueryValidatorsRequest) returns (QueryValidatorsResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/validators"; + } + + // Validator queries validator info for given validator address. + rpc Validator(QueryValidatorRequest) returns (QueryValidatorResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}"; + } + + // ValidatorDelegations queries delegate info for given validator. + rpc ValidatorDelegations(QueryValidatorDelegationsRequest) returns (QueryValidatorDelegationsResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations"; + } + + // ValidatorUnbondingDelegations queries unbonding delegations of a validator. + rpc ValidatorUnbondingDelegations(QueryValidatorUnbondingDelegationsRequest) + returns (QueryValidatorUnbondingDelegationsResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/" + "{validator_addr}/unbonding_delegations"; + } + + // Delegation queries delegate info for given validator delegator pair. + rpc Delegation(QueryDelegationRequest) returns (QueryDelegationResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/" + "{delegator_addr}"; + } + + // UnbondingDelegation queries unbonding info for given validator delegator + // pair. + rpc UnbondingDelegation(QueryUnbondingDelegationRequest) returns (QueryUnbondingDelegationResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/" + "{delegator_addr}/unbonding_delegation"; + } + + // DelegatorDelegations queries all delegations of a given delegator address. + rpc DelegatorDelegations(QueryDelegatorDelegationsRequest) returns (QueryDelegatorDelegationsResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/delegations/{delegator_addr}"; + } + + // DelegatorUnbondingDelegations queries all unbonding delegations of a given + // delegator address. + rpc DelegatorUnbondingDelegations(QueryDelegatorUnbondingDelegationsRequest) + returns (QueryDelegatorUnbondingDelegationsResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/" + "{delegator_addr}/unbonding_delegations"; + } + + // Redelegations queries redelegations of given address. + rpc Redelegations(QueryRedelegationsRequest) returns (QueryRedelegationsResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations"; + } + + // DelegatorValidators queries all validators info for given delegator + // address. + rpc DelegatorValidators(QueryDelegatorValidatorsRequest) returns (QueryDelegatorValidatorsResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators"; + } + + // DelegatorValidator queries validator info for given delegator validator + // pair. + rpc DelegatorValidator(QueryDelegatorValidatorRequest) returns (QueryDelegatorValidatorResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/" + "{validator_addr}"; + } + + // HistoricalInfo queries the historical info for given height. + rpc HistoricalInfo(QueryHistoricalInfoRequest) returns (QueryHistoricalInfoResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/historical_info/{height}"; + } + + // Pool queries the pool info. + rpc Pool(QueryPoolRequest) returns (QueryPoolResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/pool"; + } + + // Parameters queries the staking parameters. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/staking/v1beta1/params"; + } +} + +// QueryValidatorsRequest is request type for Query/Validators RPC method. +message QueryValidatorsRequest { + // status enables to query for validators matching a given status. + string status = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryValidatorsResponse is response type for the Query/Validators RPC method +message QueryValidatorsResponse { + // validators contains all the queried validators. + repeated Validator validators = 1 [(gogoproto.nullable) = false]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryValidatorRequest is response type for the Query/Validator RPC method +message QueryValidatorRequest { + // validator_addr defines the validator address to query for. + string validator_addr = 1; +} + +// QueryValidatorResponse is response type for the Query/Validator RPC method +message QueryValidatorResponse { + // validator defines the the validator info. + Validator validator = 1 [(gogoproto.nullable) = false]; +} + +// QueryValidatorDelegationsRequest is request type for the +// Query/ValidatorDelegations RPC method +message QueryValidatorDelegationsRequest { + // validator_addr defines the validator address to query for. + string validator_addr = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryValidatorDelegationsResponse is response type for the +// Query/ValidatorDelegations RPC method +message QueryValidatorDelegationsResponse { + repeated DelegationResponse delegation_responses = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "DelegationResponses"]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryValidatorUnbondingDelegationsRequest is required type for the +// Query/ValidatorUnbondingDelegations RPC method +message QueryValidatorUnbondingDelegationsRequest { + // validator_addr defines the validator address to query for. + string validator_addr = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryValidatorUnbondingDelegationsResponse is response type for the +// Query/ValidatorUnbondingDelegations RPC method. +message QueryValidatorUnbondingDelegationsResponse { + repeated UnbondingDelegation unbonding_responses = 1 [(gogoproto.nullable) = false]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDelegationRequest is request type for the Query/Delegation RPC method. +message QueryDelegationRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1; + + // validator_addr defines the validator address to query for. + string validator_addr = 2; +} + +// QueryDelegationResponse is response type for the Query/Delegation RPC method. +message QueryDelegationResponse { + // delegation_responses defines the delegation info of a delegation. + DelegationResponse delegation_response = 1; +} + +// QueryUnbondingDelegationRequest is request type for the +// Query/UnbondingDelegation RPC method. +message QueryUnbondingDelegationRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1; + + // validator_addr defines the validator address to query for. + string validator_addr = 2; +} + +// QueryDelegationResponse is response type for the Query/UnbondingDelegation +// RPC method. +message QueryUnbondingDelegationResponse { + // unbond defines the unbonding information of a delegation. + UnbondingDelegation unbond = 1 [(gogoproto.nullable) = false]; +} + +// QueryDelegatorDelegationsRequest is request type for the +// Query/DelegatorDelegations RPC method. +message QueryDelegatorDelegationsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryDelegatorDelegationsResponse is response type for the +// Query/DelegatorDelegations RPC method. +message QueryDelegatorDelegationsResponse { + // delegation_responses defines all the delegations' info of a delegator. + repeated DelegationResponse delegation_responses = 1 [(gogoproto.nullable) = false]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDelegatorUnbondingDelegationsRequest is request type for the +// Query/DelegatorUnbondingDelegations RPC method. +message QueryDelegatorUnbondingDelegationsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryUnbondingDelegatorDelegationsResponse is response type for the +// Query/UnbondingDelegatorDelegations RPC method. +message QueryDelegatorUnbondingDelegationsResponse { + repeated UnbondingDelegation unbonding_responses = 1 [(gogoproto.nullable) = false]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryRedelegationsRequest is request type for the Query/Redelegations RPC +// method. +message QueryRedelegationsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1; + + // src_validator_addr defines the validator address to redelegate from. + string src_validator_addr = 2; + + // dst_validator_addr defines the validator address to redelegate to. + string dst_validator_addr = 3; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 4; +} + +// QueryRedelegationsResponse is response type for the Query/Redelegations RPC +// method. +message QueryRedelegationsResponse { + repeated RedelegationResponse redelegation_responses = 1 [(gogoproto.nullable) = false]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDelegatorValidatorsRequest is request type for the +// Query/DelegatorValidators RPC method. +message QueryDelegatorValidatorsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryDelegatorValidatorsResponse is response type for the +// Query/DelegatorValidators RPC method. +message QueryDelegatorValidatorsResponse { + // validators defines the the validators' info of a delegator. + repeated Validator validators = 1 [(gogoproto.nullable) = false]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDelegatorValidatorRequest is request type for the +// Query/DelegatorValidator RPC method. +message QueryDelegatorValidatorRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1; + + // validator_addr defines the validator address to query for. + string validator_addr = 2; +} + +// QueryDelegatorValidatorResponse response type for the +// Query/DelegatorValidator RPC method. +message QueryDelegatorValidatorResponse { + // validator defines the the validator info. + Validator validator = 1 [(gogoproto.nullable) = false]; +} + +// QueryHistoricalInfoRequest is request type for the Query/HistoricalInfo RPC +// method. +message QueryHistoricalInfoRequest { + // height defines at which height to query the historical info. + int64 height = 1; +} + +// QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo RPC +// method. +message QueryHistoricalInfoResponse { + // hist defines the historical info at the given height. + HistoricalInfo hist = 1; +} + +// QueryPoolRequest is request type for the Query/Pool RPC method. +message QueryPoolRequest {} + +// QueryPoolResponse is response type for the Query/Pool RPC method. +message QueryPoolResponse { + // pool defines the pool info. + Pool pool = 1 [(gogoproto.nullable) = false]; +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos/staking/v1beta1/staking.proto b/third_party/proto/cosmos/staking/v1beta1/staking.proto new file mode 100644 index 0000000000..e37b28b6d0 --- /dev/null +++ b/third_party/proto/cosmos/staking/v1beta1/staking.proto @@ -0,0 +1,334 @@ +syntax = "proto3"; +package cosmos.staking.v1beta1; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; + +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "tendermint/types/types.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; + +// HistoricalInfo contains header and validator information for a given block. +// It is stored as part of staking module's state, which persists the `n` most +// recent HistoricalInfo +// (`n` is set by the staking module's `historical_entries` parameter). +message HistoricalInfo { + tendermint.types.Header header = 1 [(gogoproto.nullable) = false]; + repeated Validator valset = 2 [(gogoproto.nullable) = false]; +} + +// CommissionRates defines the initial commission rates to be used for creating +// a validator. +message CommissionRates { + option (gogoproto.equal) = true; + option (gogoproto.goproto_stringer) = false; + + // rate is the commission rate charged to delegators, as a fraction. + string rate = 1 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + // max_rate defines the maximum commission rate which validator can ever charge, as a fraction. + string max_rate = 2 [ + (gogoproto.moretags) = "yaml:\"max_rate\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // max_change_rate defines the maximum daily increase of the validator commission, as a fraction. + string max_change_rate = 3 [ + (gogoproto.moretags) = "yaml:\"max_change_rate\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; +} + +// Commission defines commission parameters for a given validator. +message Commission { + option (gogoproto.equal) = true; + option (gogoproto.goproto_stringer) = false; + + // commission_rates defines the initial commission rates to be used for creating a validator. + CommissionRates commission_rates = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; + // update_time is the last time the commission rate was changed. + google.protobuf.Timestamp update_time = 2 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.moretags) = "yaml:\"update_time\""]; +} + +// Description defines a validator description. +message Description { + option (gogoproto.equal) = true; + option (gogoproto.goproto_stringer) = false; + + // moniker defines a human-readable name for the validator. + string moniker = 1; + // identity defines an optional identity signature (ex. UPort or Keybase). + string identity = 2; + // website defines an optional website link. + string website = 3; + // security_contact defines an optional email for security contact. + string security_contact = 4 [(gogoproto.moretags) = "yaml:\"security_contact\""]; + // details define other optional details. + string details = 5; +} + +// Validator defines a validator, together with the total amount of the +// Validator's bond shares and their exchange rate to coins. Slashing results in +// a decrease in the exchange rate, allowing correct calculation of future +// undelegations without iterating over delegators. When coins are delegated to +// this validator, the validator is credited with a delegation whose number of +// bond shares is based on the amount of coins delegated divided by the current +// exchange rate. Voting power can be calculated as total bonded shares +// multiplied by exchange rate. +message Validator { + option (gogoproto.equal) = false; + option (gogoproto.goproto_stringer) = false; + option (gogoproto.goproto_getters) = false; + + // operator_address defines the address of the validator's operator; bech encoded in JSON. + string operator_address = 1 [(gogoproto.moretags) = "yaml:\"operator_address\""]; + // consensus_pubkey is the consensus public key of the validator, as a Protobuf Any. + google.protobuf.Any consensus_pubkey = 2 + [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey", (gogoproto.moretags) = "yaml:\"consensus_pubkey\""]; + // jailed defined whether the validator has been jailed from bonded status or not. + bool jailed = 3; + // status is the validator status (bonded/unbonding/unbonded). + BondStatus status = 4; + // tokens define the delegated tokens (incl. self-delegation). + string tokens = 5 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + // delegator_shares defines total shares issued to a validator's delegators. + string delegator_shares = 6 [ + (gogoproto.moretags) = "yaml:\"delegator_shares\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // description defines the description terms for the validator. + Description description = 7 [(gogoproto.nullable) = false]; + // unbonding_height defines, if unbonding, the height at which this validator has begun unbonding. + int64 unbonding_height = 8 [(gogoproto.moretags) = "yaml:\"unbonding_height\""]; + // unbonding_time defines, if unbonding, the min time for the validator to complete unbonding. + google.protobuf.Timestamp unbonding_time = 9 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.moretags) = "yaml:\"unbonding_time\""]; + // commission defines the commission parameters. + Commission commission = 10 [(gogoproto.nullable) = false]; + // min_self_delegation is the validator's self declared minimum self delegation. + string min_self_delegation = 11 [ + (gogoproto.moretags) = "yaml:\"min_self_delegation\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.nullable) = false + ]; +} + +// BondStatus is the status of a validator. +enum BondStatus { + option (gogoproto.goproto_enum_prefix) = false; + + // UNSPECIFIED defines an invalid validator status. + BOND_STATUS_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "Unspecified"]; + // UNBONDED defines a validator that is not bonded. + BOND_STATUS_UNBONDED = 1 [(gogoproto.enumvalue_customname) = "Unbonded"]; + // UNBONDING defines a validator that is unbonding. + BOND_STATUS_UNBONDING = 2 [(gogoproto.enumvalue_customname) = "Unbonding"]; + // BONDED defines a validator that is bonded. + BOND_STATUS_BONDED = 3 [(gogoproto.enumvalue_customname) = "Bonded"]; +} + +// ValAddresses defines a repeated set of validator addresses. +message ValAddresses { + option (gogoproto.goproto_stringer) = false; + option (gogoproto.stringer) = true; + + repeated string addresses = 1; +} + +// DVPair is struct that just has a delegator-validator pair with no other data. +// It is intended to be used as a marshalable pointer. For example, a DVPair can +// be used to construct the key to getting an UnbondingDelegation from state. +message DVPair { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""]; +} + +// DVPairs defines an array of DVPair objects. +message DVPairs { + repeated DVPair pairs = 1 [(gogoproto.nullable) = false]; +} + +// DVVTriplet is struct that just has a delegator-validator-validator triplet +// with no other data. It is intended to be used as a marshalable pointer. For +// example, a DVVTriplet can be used to construct the key to getting a +// Redelegation from state. +message DVVTriplet { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + string validator_src_address = 2 [(gogoproto.moretags) = "yaml:\"validator_src_address\""]; + string validator_dst_address = 3 [(gogoproto.moretags) = "yaml:\"validator_dst_address\""]; +} + +// DVVTriplets defines an array of DVVTriplet objects. +message DVVTriplets { + repeated DVVTriplet triplets = 1 [(gogoproto.nullable) = false]; +} + +// Delegation represents the bond with tokens held by an account. It is +// owned by one delegator, and is associated with the voting power of one +// validator. +message Delegation { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + // delegator_address is the bech32-encoded address of the delegator. + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + // validator_address is the bech32-encoded address of the validator. + string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + // shares define the delegation shares received. + string shares = 3 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; +} + +// UnbondingDelegation stores all of a single delegator's unbonding bonds +// for a single validator in an time-ordered list. +message UnbondingDelegation { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + // delegator_address is the bech32-encoded address of the delegator. + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + // validator_address is the bech32-encoded address of the validator. + string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + // entries are the unbonding delegation entries. + repeated UnbondingDelegationEntry entries = 3 [(gogoproto.nullable) = false]; // unbonding delegation entries +} + +// UnbondingDelegationEntry defines an unbonding object with relevant metadata. +message UnbondingDelegationEntry { + option (gogoproto.equal) = true; + option (gogoproto.goproto_stringer) = false; + + // creation_height is the height which the unbonding took place. + int64 creation_height = 1 [(gogoproto.moretags) = "yaml:\"creation_height\""]; + // completion_time is the unix time for unbonding completion. + google.protobuf.Timestamp completion_time = 2 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.moretags) = "yaml:\"completion_time\""]; + // initial_balance defines the tokens initially scheduled to receive at completion. + string initial_balance = 3 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"initial_balance\"" + ]; + // balance defines the tokens to receive at completion. + string balance = 4 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; +} + +// RedelegationEntry defines a redelegation object with relevant metadata. +message RedelegationEntry { + option (gogoproto.equal) = true; + option (gogoproto.goproto_stringer) = false; + + // creation_height defines the height which the redelegation took place. + int64 creation_height = 1 [(gogoproto.moretags) = "yaml:\"creation_height\""]; + // completion_time defines the unix time for redelegation completion. + google.protobuf.Timestamp completion_time = 2 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.moretags) = "yaml:\"completion_time\""]; + // initial_balance defines the initial balance when redelegation started. + string initial_balance = 3 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"initial_balance\"" + ]; + // shares_dst is the amount of destination-validator shares created by redelegation. + string shares_dst = 4 + [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; +} + +// Redelegation contains the list of a particular delegator's redelegating bonds +// from a particular source validator to a particular destination validator. +message Redelegation { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + // delegator_address is the bech32-encoded address of the delegator. + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + // validator_src_address is the validator redelegation source operator address. + string validator_src_address = 2 [(gogoproto.moretags) = "yaml:\"validator_src_address\""]; + // validator_dst_address is the validator redelegation destination operator address. + string validator_dst_address = 3 [(gogoproto.moretags) = "yaml:\"validator_dst_address\""]; + // entries are the redelegation entries. + repeated RedelegationEntry entries = 4 [(gogoproto.nullable) = false]; // redelegation entries +} + +// Params defines the parameters for the staking module. +message Params { + option (gogoproto.equal) = true; + option (gogoproto.goproto_stringer) = false; + + // unbonding_time is the time duration of unbonding. + google.protobuf.Duration unbonding_time = 1 + [(gogoproto.nullable) = false, (gogoproto.stdduration) = true, (gogoproto.moretags) = "yaml:\"unbonding_time\""]; + // max_validators is the maximum number of validators. + uint32 max_validators = 2 [(gogoproto.moretags) = "yaml:\"max_validators\""]; + // max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio). + uint32 max_entries = 3 [(gogoproto.moretags) = "yaml:\"max_entries\""]; + // historical_entries is the number of historical entries to persist. + uint32 historical_entries = 4 [(gogoproto.moretags) = "yaml:\"historical_entries\""]; + // bond_denom defines the bondable coin denomination. + string bond_denom = 5 [(gogoproto.moretags) = "yaml:\"bond_denom\""]; +} + +// DelegationResponse is equivalent to Delegation except that it contains a +// balance in addition to shares which is more suitable for client responses. +message DelegationResponse { + option (gogoproto.equal) = false; + option (gogoproto.goproto_stringer) = false; + + Delegation delegation = 1 [(gogoproto.nullable) = false]; + + cosmos.base.v1beta1.Coin balance = 2 [(gogoproto.nullable) = false]; +} + +// RedelegationEntryResponse is equivalent to a RedelegationEntry except that it +// contains a balance in addition to shares which is more suitable for client +// responses. +message RedelegationEntryResponse { + option (gogoproto.equal) = true; + + RedelegationEntry redelegation_entry = 1 [(gogoproto.nullable) = false]; + string balance = 4 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; +} + +// RedelegationResponse is equivalent to a Redelegation except that its entries +// contain a balance in addition to shares which is more suitable for client +// responses. +message RedelegationResponse { + option (gogoproto.equal) = false; + + Redelegation redelegation = 1 [(gogoproto.nullable) = false]; + repeated RedelegationEntryResponse entries = 2 [(gogoproto.nullable) = false]; +} + +// Pool is used for tracking bonded and not-bonded token supply of the bond +// denomination. +message Pool { + option (gogoproto.description) = true; + option (gogoproto.equal) = true; + string not_bonded_tokens = 1 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.jsontag) = "not_bonded_tokens", + (gogoproto.nullable) = false + ]; + string bonded_tokens = 2 [ + (gogoproto.jsontag) = "bonded_tokens", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"bonded_tokens\"" + ]; +} diff --git a/third_party/proto/cosmos/staking/v1beta1/tx.proto b/third_party/proto/cosmos/staking/v1beta1/tx.proto new file mode 100644 index 0000000000..7b05d89eea --- /dev/null +++ b/third_party/proto/cosmos/staking/v1beta1/tx.proto @@ -0,0 +1,126 @@ +syntax = "proto3"; +package cosmos.staking.v1beta1; + +import "google/protobuf/any.proto"; +import "google/protobuf/timestamp.proto"; +import "gogoproto/gogo.proto"; + +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/staking/v1beta1/staking.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; + +// Msg defines the staking Msg service. +service Msg { + // CreateValidator defines a method for creating a new validator. + rpc CreateValidator(MsgCreateValidator) returns (MsgCreateValidatorResponse); + + // EditValidator defines a method for editing an existing validator. + rpc EditValidator(MsgEditValidator) returns (MsgEditValidatorResponse); + + // Delegate defines a method for performing a delegation of coins + // from a delegator to a validator. + rpc Delegate(MsgDelegate) returns (MsgDelegateResponse); + + // BeginRedelegate defines a method for performing a redelegation + // of coins from a delegator and source validator to a destination validator. + rpc BeginRedelegate(MsgBeginRedelegate) returns (MsgBeginRedelegateResponse); + + // Undelegate defines a method for performing an undelegation from a + // delegate and a validator. + rpc Undelegate(MsgUndelegate) returns (MsgUndelegateResponse); +} + +// MsgCreateValidator defines a SDK message for creating a new validator. +message MsgCreateValidator { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + Description description = 1 [(gogoproto.nullable) = false]; + CommissionRates commission = 2 [(gogoproto.nullable) = false]; + string min_self_delegation = 3 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.moretags) = "yaml:\"min_self_delegation\"", + (gogoproto.nullable) = false + ]; + string delegator_address = 4 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + string validator_address = 5 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + google.protobuf.Any pubkey = 6 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"]; + cosmos.base.v1beta1.Coin value = 7 [(gogoproto.nullable) = false]; +} + +// MsgCreateValidatorResponse defines the Msg/CreateValidator response type. +message MsgCreateValidatorResponse {} + +// MsgEditValidator defines a SDK message for editing an existing validator. +message MsgEditValidator { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + Description description = 1 [(gogoproto.nullable) = false]; + string validator_address = 2 [(gogoproto.moretags) = "yaml:\"address\""]; + + // We pass a reference to the new commission rate and min self delegation as + // it's not mandatory to update. If not updated, the deserialized rate will be + // zero with no way to distinguish if an update was intended. + // REF: #2373 + string commission_rate = 3 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.moretags) = "yaml:\"commission_rate\"" + ]; + string min_self_delegation = 4 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.moretags) = "yaml:\"min_self_delegation\"" + ]; +} + +// MsgEditValidatorResponse defines the Msg/EditValidator response type. +message MsgEditValidatorResponse {} + +// MsgDelegate defines a SDK message for performing a delegation of coins +// from a delegator to a validator. +message MsgDelegate { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; +} + +// MsgDelegateResponse defines the Msg/Delegate response type. +message MsgDelegateResponse {} + +// MsgBeginRedelegate defines a SDK message for performing a redelegation +// of coins from a delegator and source validator to a destination validator. +message MsgBeginRedelegate { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + string validator_src_address = 2 [(gogoproto.moretags) = "yaml:\"validator_src_address\""]; + string validator_dst_address = 3 [(gogoproto.moretags) = "yaml:\"validator_dst_address\""]; + cosmos.base.v1beta1.Coin amount = 4 [(gogoproto.nullable) = false]; +} + +// MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type. +message MsgBeginRedelegateResponse { + google.protobuf.Timestamp completion_time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} + +// MsgUndelegate defines a SDK message for performing an undelegation from a +// delegate and a validator. +message MsgUndelegate { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""]; + string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""]; + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; +} + +// MsgUndelegateResponse defines the Msg/Undelegate response type. +message MsgUndelegateResponse { + google.protobuf.Timestamp completion_time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} diff --git a/third_party/proto/cosmos/tx/signing/v1beta1/signing.proto b/third_party/proto/cosmos/tx/signing/v1beta1/signing.proto new file mode 100644 index 0000000000..4c1be40594 --- /dev/null +++ b/third_party/proto/cosmos/tx/signing/v1beta1/signing.proto @@ -0,0 +1,79 @@ +syntax = "proto3"; +package cosmos.tx.signing.v1beta1; + +import "cosmos/crypto/multisig/v1beta1/multisig.proto"; +import "google/protobuf/any.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/types/tx/signing"; + +// SignMode represents a signing mode with its own security guarantees. +enum SignMode { + // SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be + // rejected + SIGN_MODE_UNSPECIFIED = 0; + + // SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is + // verified with raw bytes from Tx + SIGN_MODE_DIRECT = 1; + + // SIGN_MODE_TEXTUAL is a future signing mode that will verify some + // human-readable textual representation on top of the binary representation + // from SIGN_MODE_DIRECT + SIGN_MODE_TEXTUAL = 2; + + // SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses + // Amino JSON and will be removed in the future + SIGN_MODE_LEGACY_AMINO_JSON = 127; +} + +// SignatureDescriptors wraps multiple SignatureDescriptor's. +message SignatureDescriptors { + // signatures are the signature descriptors + repeated SignatureDescriptor signatures = 1; +} + +// SignatureDescriptor is a convenience type which represents the full data for +// a signature including the public key of the signer, signing modes and the +// signature itself. It is primarily used for coordinating signatures between +// clients. +message SignatureDescriptor { + // public_key is the public key of the signer + google.protobuf.Any public_key = 1; + + Data data = 2; + + // sequence is the sequence of the account, which describes the + // number of committed transactions signed by a given address. It is used to prevent + // replay attacks. + uint64 sequence = 3; + + // Data represents signature data + message Data { + // sum is the oneof that specifies whether this represents single or multi-signature data + oneof sum { + // single represents a single signer + Single single = 1; + + // multi represents a multisig signer + Multi multi = 2; + } + + // Single is the signature data for a single signer + message Single { + // mode is the signing mode of the single signer + SignMode mode = 1; + + // signature is the raw signature bytes + bytes signature = 2; + } + + // Multi is the signature data for a multisig public key + message Multi { + // bitarray specifies which keys within the multisig are signing + cosmos.crypto.multisig.v1beta1.CompactBitArray bitarray = 1; + + // signatures is the signatures of the multi-signature + repeated Data signatures = 2; + } + } +} diff --git a/third_party/proto/cosmos/tx/v1beta1/service.proto b/third_party/proto/cosmos/tx/v1beta1/service.proto new file mode 100644 index 0000000000..59df75bab1 --- /dev/null +++ b/third_party/proto/cosmos/tx/v1beta1/service.proto @@ -0,0 +1,117 @@ +syntax = "proto3"; +package cosmos.tx.v1beta1; + +import "google/api/annotations.proto"; +import "cosmos/base/abci/v1beta1/abci.proto"; +import "cosmos/tx/v1beta1/tx.proto"; +import "gogoproto/gogo.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/types/tx"; + +// Service defines a gRPC service for interacting with transactions. +service Service { + // Simulate simulates executing a transaction for estimating gas usage. + rpc Simulate(SimulateRequest) returns (SimulateResponse) { + option (google.api.http) = { + post: "/cosmos/tx/v1beta1/simulate" + body: "*" + }; + } + // GetTx fetches a tx by hash. + rpc GetTx(GetTxRequest) returns (GetTxResponse) { + option (google.api.http).get = "/cosmos/tx/v1beta1/txs/{hash}"; + } + // BroadcastTx broadcast transaction. + rpc BroadcastTx(BroadcastTxRequest) returns (BroadcastTxResponse) { + option (google.api.http) = { + post: "/cosmos/tx/v1beta1/txs" + body: "*" + }; + } + // GetTxsEvent fetches txs by event. + rpc GetTxsEvent(GetTxsEventRequest) returns (GetTxsEventResponse) { + option (google.api.http).get = "/cosmos/tx/v1beta1/txs"; + } +} + +// GetTxsEventRequest is the request type for the Service.TxsByEvents +// RPC method. +message GetTxsEventRequest { + // events is the list of transaction event type. + repeated string events = 1; + // pagination defines an pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// GetTxsEventResponse is the response type for the Service.TxsByEvents +// RPC method. +message GetTxsEventResponse { + // txs is the list of queried transactions. + repeated cosmos.tx.v1beta1.Tx txs = 1; + // tx_responses is the list of queried TxResponses. + repeated cosmos.base.abci.v1beta1.TxResponse tx_responses = 2; + // pagination defines an pagination for the response. + cosmos.base.query.v1beta1.PageResponse pagination = 3; +} + +// BroadcastTxRequest is the request type for the Service.BroadcastTxRequest +// RPC method. +message BroadcastTxRequest { + // tx_bytes is the raw transaction. + bytes tx_bytes = 1; + BroadcastMode mode = 2; +} + +// BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC method. +enum BroadcastMode { + // zero-value for mode ordering + BROADCAST_MODE_UNSPECIFIED = 0; + // BROADCAST_MODE_BLOCK defines a tx broadcasting mode where the client waits for + // the tx to be committed in a block. + BROADCAST_MODE_BLOCK = 1; + // BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits for + // a CheckTx execution response only. + BROADCAST_MODE_SYNC = 2; + // BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client returns + // immediately. + BROADCAST_MODE_ASYNC = 3; +} + +// BroadcastTxResponse is the response type for the +// Service.BroadcastTx method. +message BroadcastTxResponse { + // tx_response is the queried TxResponses. + cosmos.base.abci.v1beta1.TxResponse tx_response = 1; +} + +// SimulateRequest is the request type for the Service.Simulate +// RPC method. +message SimulateRequest { + // tx is the transaction to simulate. + cosmos.tx.v1beta1.Tx tx = 1; +} + +// SimulateResponse is the response type for the +// Service.SimulateRPC method. +message SimulateResponse { + // gas_info is the information about gas used in the simulation. + cosmos.base.abci.v1beta1.GasInfo gas_info = 1; + // result is the result of the simulation. + cosmos.base.abci.v1beta1.Result result = 2; +} + +// GetTxRequest is the request type for the Service.GetTx +// RPC method. +message GetTxRequest { + // hash is the tx hash to query, encoded as a hex string. + string hash = 1; +} + +// GetTxResponse is the response type for the Service.GetTx method. +message GetTxResponse { + // tx is the queried transaction. + cosmos.tx.v1beta1.Tx tx = 1; + // tx_response is the queried TxResponses. + cosmos.base.abci.v1beta1.TxResponse tx_response = 2; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/tx/v1beta1/tx.proto b/third_party/proto/cosmos/tx/v1beta1/tx.proto new file mode 100644 index 0000000000..2b02874cc1 --- /dev/null +++ b/third_party/proto/cosmos/tx/v1beta1/tx.proto @@ -0,0 +1,181 @@ +syntax = "proto3"; +package cosmos.tx.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/crypto/multisig/v1beta1/multisig.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/tx/signing/v1beta1/signing.proto"; +import "google/protobuf/any.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/types/tx"; + +// Tx is the standard type used for broadcasting transactions. +message Tx { + // body is the processable content of the transaction + TxBody body = 1; + + // auth_info is the authorization related content of the transaction, + // specifically signers, signer modes and fee + AuthInfo auth_info = 2; + + // signatures is a list of signatures that matches the length and order of + // AuthInfo's signer_infos to allow connecting signature meta information like + // public key and signing mode by position. + repeated bytes signatures = 3; +} + +// TxRaw is a variant of Tx that pins the signer's exact binary representation +// of body and auth_info. This is used for signing, broadcasting and +// verification. The binary `serialize(tx: TxRaw)` is stored in Tendermint and +// the hash `sha256(serialize(tx: TxRaw))` becomes the "txhash", commonly used +// as the transaction ID. +message TxRaw { + // body_bytes is a protobuf serialization of a TxBody that matches the + // representation in SignDoc. + bytes body_bytes = 1; + + // auth_info_bytes is a protobuf serialization of an AuthInfo that matches the + // representation in SignDoc. + bytes auth_info_bytes = 2; + + // signatures is a list of signatures that matches the length and order of + // AuthInfo's signer_infos to allow connecting signature meta information like + // public key and signing mode by position. + repeated bytes signatures = 3; +} + +// SignDoc is the type used for generating sign bytes for SIGN_MODE_DIRECT. +message SignDoc { + // body_bytes is protobuf serialization of a TxBody that matches the + // representation in TxRaw. + bytes body_bytes = 1; + + // auth_info_bytes is a protobuf serialization of an AuthInfo that matches the + // representation in TxRaw. + bytes auth_info_bytes = 2; + + // chain_id is the unique identifier of the chain this transaction targets. + // It prevents signed transactions from being used on another chain by an + // attacker + string chain_id = 3; + + // account_number is the account number of the account in state + uint64 account_number = 4; +} + +// TxBody is the body of a transaction that all signers sign over. +message TxBody { + // messages is a list of messages to be executed. The required signers of + // those messages define the number and order of elements in AuthInfo's + // signer_infos and Tx's signatures. Each required signer address is added to + // the list only the first time it occurs. + // By convention, the first required signer (usually from the first message) + // is referred to as the primary signer and pays the fee for the whole + // transaction. + repeated google.protobuf.Any messages = 1; + + // memo is any arbitrary memo to be added to the transaction + string memo = 2; + + // timeout is the block height after which this transaction will not + // be processed by the chain + uint64 timeout_height = 3; + + // extension_options are arbitrary options that can be added by chains + // when the default options are not sufficient. If any of these are present + // and can't be handled, the transaction will be rejected + repeated google.protobuf.Any extension_options = 1023; + + // extension_options are arbitrary options that can be added by chains + // when the default options are not sufficient. If any of these are present + // and can't be handled, they will be ignored + repeated google.protobuf.Any non_critical_extension_options = 2047; +} + +// AuthInfo describes the fee and signer modes that are used to sign a +// transaction. +message AuthInfo { + // signer_infos defines the signing modes for the required signers. The number + // and order of elements must match the required signers from TxBody's + // messages. The first element is the primary signer and the one which pays + // the fee. + repeated SignerInfo signer_infos = 1; + + // Fee is the fee and gas limit for the transaction. The first signer is the + // primary signer and the one which pays the fee. The fee can be calculated + // based on the cost of evaluating the body and doing signature verification + // of the signers. This can be estimated via simulation. + Fee fee = 2; +} + +// SignerInfo describes the public key and signing mode of a single top-level +// signer. +message SignerInfo { + // public_key is the public key of the signer. It is optional for accounts + // that already exist in state. If unset, the verifier can use the required \ + // signer address for this position and lookup the public key. + google.protobuf.Any public_key = 1; + + // mode_info describes the signing mode of the signer and is a nested + // structure to support nested multisig pubkey's + ModeInfo mode_info = 2; + + // sequence is the sequence of the account, which describes the + // number of committed transactions signed by a given address. It is used to + // prevent replay attacks. + uint64 sequence = 3; +} + +// ModeInfo describes the signing mode of a single or nested multisig signer. +message ModeInfo { + // sum is the oneof that specifies whether this represents a single or nested + // multisig signer + oneof sum { + // single represents a single signer + Single single = 1; + + // multi represents a nested multisig signer + Multi multi = 2; + } + + // Single is the mode info for a single signer. It is structured as a message + // to allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the + // future + message Single { + // mode is the signing mode of the single signer + cosmos.tx.signing.v1beta1.SignMode mode = 1; + } + + // Multi is the mode info for a multisig public key + message Multi { + // bitarray specifies which keys within the multisig are signing + cosmos.crypto.multisig.v1beta1.CompactBitArray bitarray = 1; + + // mode_infos is the corresponding modes of the signers of the multisig + // which could include nested multisig public keys + repeated ModeInfo mode_infos = 2; + } +} + +// Fee includes the amount of coins paid in fees and the maximum +// gas to be used by the transaction. The ratio yields an effective "gasprice", +// which must be above some miminum to be accepted into the mempool. +message Fee { + // amount is the amount of coins to be paid as a fee + repeated cosmos.base.v1beta1.Coin amount = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + + // gas_limit is the maximum gas that can be used in transaction processing + // before an out of gas error occurs + uint64 gas_limit = 2; + + // if unset, the first signer is responsible for paying the fees. If set, the specified account must pay the fees. + // the payer must be a tx signer (and thus have signed this field in AuthInfo). + // setting this field does *not* change the ordering of required signers for the transaction. + string payer = 3; + + // if set, the fee payer (either the first signer or the value of the payer field) requests that a fee grant be used + // to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does + // not support fee grants, this will fail + string granter = 4; +} diff --git a/third_party/proto/cosmos/upgrade/v1beta1/query.proto b/third_party/proto/cosmos/upgrade/v1beta1/query.proto new file mode 100644 index 0000000000..9eab27e76b --- /dev/null +++ b/third_party/proto/cosmos/upgrade/v1beta1/query.proto @@ -0,0 +1,68 @@ +syntax = "proto3"; +package cosmos.upgrade.v1beta1; + +import "google/protobuf/any.proto"; +import "google/api/annotations.proto"; +import "cosmos/upgrade/v1beta1/upgrade.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/upgrade/types"; + +// Query defines the gRPC upgrade querier service. +service Query { + // CurrentPlan queries the current upgrade plan. + rpc CurrentPlan(QueryCurrentPlanRequest) returns (QueryCurrentPlanResponse) { + option (google.api.http).get = "/cosmos/upgrade/v1beta1/current_plan"; + } + + // AppliedPlan queries a previously applied upgrade plan by its name. + rpc AppliedPlan(QueryAppliedPlanRequest) returns (QueryAppliedPlanResponse) { + option (google.api.http).get = "/cosmos/upgrade/v1beta1/applied_plan/{name}"; + } + + // UpgradedConsensusState queries the consensus state that will serve + // as a trusted kernel for the next version of this chain. It will only be + // stored at the last height of this chain. + // UpgradedConsensusState RPC not supported with legacy querier + rpc UpgradedConsensusState(QueryUpgradedConsensusStateRequest) returns (QueryUpgradedConsensusStateResponse) { + option (google.api.http).get = "/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}"; + } +} + +// QueryCurrentPlanRequest is the request type for the Query/CurrentPlan RPC +// method. +message QueryCurrentPlanRequest {} + +// QueryCurrentPlanResponse is the response type for the Query/CurrentPlan RPC +// method. +message QueryCurrentPlanResponse { + // plan is the current upgrade plan. + Plan plan = 1; +} + +// QueryCurrentPlanRequest is the request type for the Query/AppliedPlan RPC +// method. +message QueryAppliedPlanRequest { + // name is the name of the applied plan to query for. + string name = 1; +} + +// QueryAppliedPlanResponse is the response type for the Query/AppliedPlan RPC +// method. +message QueryAppliedPlanResponse { + // height is the block height at which the plan was applied. + int64 height = 1; +} + +// QueryUpgradedConsensusStateRequest is the request type for the Query/UpgradedConsensusState +// RPC method. +message QueryUpgradedConsensusStateRequest { + // last height of the current chain must be sent in request + // as this is the height under which next consensus state is stored + int64 last_height = 1; +} + +// QueryUpgradedConsensusStateResponse is the response type for the Query/UpgradedConsensusState +// RPC method. +message QueryUpgradedConsensusStateResponse { + google.protobuf.Any upgraded_consensus_state = 1; +} diff --git a/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto b/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto new file mode 100644 index 0000000000..6d6839ca56 --- /dev/null +++ b/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto @@ -0,0 +1,62 @@ +syntax = "proto3"; +package cosmos.upgrade.v1beta1; + +import "google/protobuf/any.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/upgrade/types"; +option (gogoproto.goproto_stringer_all) = false; +option (gogoproto.goproto_getters_all) = false; + +// Plan specifies information about a planned upgrade and when it should occur. +message Plan { + option (gogoproto.equal) = true; + + // Sets the name for the upgrade. This name will be used by the upgraded + // version of the software to apply any special "on-upgrade" commands during + // the first BeginBlock method after the upgrade is applied. It is also used + // to detect whether a software version can handle a given upgrade. If no + // upgrade handler with this name has been set in the software, it will be + // assumed that the software is out-of-date when the upgrade Time or Height is + // reached and the software will exit. + string name = 1; + + // The time after which the upgrade must be performed. + // Leave set to its zero value to use a pre-defined Height instead. + google.protobuf.Timestamp time = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + + // The height at which the upgrade must be performed. + // Only used if Time is not set. + int64 height = 3; + + // Any application specific upgrade info to be included on-chain + // such as a git commit that validators could automatically upgrade to + string info = 4; + + // IBC-enabled chains can opt-in to including the upgraded client state in its upgrade plan + // This will make the chain commit to the correct upgraded (self) client state before the upgrade occurs, + // so that connecting chains can verify that the new upgraded client is valid by verifying a proof on the + // previous version of the chain. + // This will allow IBC connections to persist smoothly across planned chain upgrades + google.protobuf.Any upgraded_client_state = 5 [(gogoproto.moretags) = "yaml:\"upgraded_client_state\""]; +} + +// SoftwareUpgradeProposal is a gov Content type for initiating a software +// upgrade. +message SoftwareUpgradeProposal { + option (gogoproto.equal) = true; + + string title = 1; + string description = 2; + Plan plan = 3 [(gogoproto.nullable) = false]; +} + +// CancelSoftwareUpgradeProposal is a gov Content type for cancelling a software +// upgrade. +message CancelSoftwareUpgradeProposal { + option (gogoproto.equal) = true; + + string title = 1; + string description = 2; +} diff --git a/third_party/proto/cosmos/vesting/v1beta1/tx.proto b/third_party/proto/cosmos/vesting/v1beta1/tx.proto new file mode 100644 index 0000000000..c49be802a7 --- /dev/null +++ b/third_party/proto/cosmos/vesting/v1beta1/tx.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; +package cosmos.vesting.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"; + +// Msg defines the bank Msg service. +service Msg { + // CreateVestingAccount defines a method that enables creating a vesting + // account. + rpc CreateVestingAccount(MsgCreateVestingAccount) returns (MsgCreateVestingAccountResponse); +} + +// MsgCreateVestingAccount defines a message that enables creating a vesting +// account. +message MsgCreateVestingAccount { + option (gogoproto.equal) = true; + + string from_address = 1 [(gogoproto.moretags) = "yaml:\"from_address\""]; + string to_address = 2 [(gogoproto.moretags) = "yaml:\"to_address\""]; + repeated cosmos.base.v1beta1.Coin amount = 3 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + + int64 end_time = 4 [(gogoproto.moretags) = "yaml:\"end_time\""]; + bool delayed = 5; +} + +// MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type. +message MsgCreateVestingAccountResponse {} \ No newline at end of file diff --git a/third_party/proto/cosmos/vesting/v1beta1/vesting.proto b/third_party/proto/cosmos/vesting/v1beta1/vesting.proto new file mode 100644 index 0000000000..6bdbbf08e4 --- /dev/null +++ b/third_party/proto/cosmos/vesting/v1beta1/vesting.proto @@ -0,0 +1,73 @@ +syntax = "proto3"; +package cosmos.vesting.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/auth/v1beta1/auth.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"; + +// BaseVestingAccount implements the VestingAccount interface. It contains all +// the necessary fields needed for any vesting account implementation. +message BaseVestingAccount { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + cosmos.auth.v1beta1.BaseAccount base_account = 1 [(gogoproto.embed) = true]; + repeated cosmos.base.v1beta1.Coin original_vesting = 2 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"original_vesting\"" + ]; + repeated cosmos.base.v1beta1.Coin delegated_free = 3 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"delegated_free\"" + ]; + repeated cosmos.base.v1beta1.Coin delegated_vesting = 4 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"delegated_vesting\"" + ]; + int64 end_time = 5 [(gogoproto.moretags) = "yaml:\"end_time\""]; +} + +// ContinuousVestingAccount implements the VestingAccount interface. It +// continuously vests by unlocking coins linearly with respect to time. +message ContinuousVestingAccount { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + BaseVestingAccount base_vesting_account = 1 [(gogoproto.embed) = true]; + int64 start_time = 2 [(gogoproto.moretags) = "yaml:\"start_time\""]; +} + +// DelayedVestingAccount implements the VestingAccount interface. It vests all +// coins after a specific time, but non prior. In other words, it keeps them +// locked until a specified time. +message DelayedVestingAccount { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + BaseVestingAccount base_vesting_account = 1 [(gogoproto.embed) = true]; +} + +// Period defines a length of time and amount of coins that will vest. +message Period { + option (gogoproto.goproto_stringer) = false; + + int64 length = 1; + repeated cosmos.base.v1beta1.Coin amount = 2 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; +} + +// PeriodicVestingAccount implements the VestingAccount interface. It +// periodically vests by unlocking coins during each specified period. +message PeriodicVestingAccount { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + BaseVestingAccount base_vesting_account = 1 [(gogoproto.embed) = true]; + int64 start_time = 2 [(gogoproto.moretags) = "yaml:\"start_time\""]; + repeated Period vesting_periods = 3 [(gogoproto.moretags) = "yaml:\"vesting_periods\"", (gogoproto.nullable) = false]; +} diff --git a/third_party/proto/cosmos_proto/cosmos.proto b/third_party/proto/cosmos_proto/cosmos.proto new file mode 100644 index 0000000000..167b170757 --- /dev/null +++ b/third_party/proto/cosmos_proto/cosmos.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package cosmos_proto; + +import "google/protobuf/descriptor.proto"; + +option go_package = "github.com/regen-network/cosmos-proto"; + +extend google.protobuf.MessageOptions { + string interface_type = 93001; + + string implements_interface = 93002; +} + +extend google.protobuf.FieldOptions { + string accepts_interface = 93001; +} diff --git a/third_party/proto/gogoproto/gogo.proto b/third_party/proto/gogoproto/gogo.proto new file mode 100644 index 0000000000..49e78f99fe --- /dev/null +++ b/third_party/proto/gogoproto/gogo.proto @@ -0,0 +1,145 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; +package gogoproto; + +import "google/protobuf/descriptor.proto"; + +option java_package = "com.google.protobuf"; +option java_outer_classname = "GoGoProtos"; +option go_package = "github.com/gogo/protobuf/gogoproto"; + +extend google.protobuf.EnumOptions { + optional bool goproto_enum_prefix = 62001; + optional bool goproto_enum_stringer = 62021; + optional bool enum_stringer = 62022; + optional string enum_customname = 62023; + optional bool enumdecl = 62024; +} + +extend google.protobuf.EnumValueOptions { + optional string enumvalue_customname = 66001; +} + +extend google.protobuf.FileOptions { + optional bool goproto_getters_all = 63001; + optional bool goproto_enum_prefix_all = 63002; + optional bool goproto_stringer_all = 63003; + optional bool verbose_equal_all = 63004; + optional bool face_all = 63005; + optional bool gostring_all = 63006; + optional bool populate_all = 63007; + optional bool stringer_all = 63008; + optional bool onlyone_all = 63009; + + optional bool equal_all = 63013; + optional bool description_all = 63014; + optional bool testgen_all = 63015; + optional bool benchgen_all = 63016; + optional bool marshaler_all = 63017; + optional bool unmarshaler_all = 63018; + optional bool stable_marshaler_all = 63019; + + optional bool sizer_all = 63020; + + optional bool goproto_enum_stringer_all = 63021; + optional bool enum_stringer_all = 63022; + + optional bool unsafe_marshaler_all = 63023; + optional bool unsafe_unmarshaler_all = 63024; + + optional bool goproto_extensions_map_all = 63025; + optional bool goproto_unrecognized_all = 63026; + optional bool gogoproto_import = 63027; + optional bool protosizer_all = 63028; + optional bool compare_all = 63029; + optional bool typedecl_all = 63030; + optional bool enumdecl_all = 63031; + + optional bool goproto_registration = 63032; + optional bool messagename_all = 63033; + + optional bool goproto_sizecache_all = 63034; + optional bool goproto_unkeyed_all = 63035; +} + +extend google.protobuf.MessageOptions { + optional bool goproto_getters = 64001; + optional bool goproto_stringer = 64003; + optional bool verbose_equal = 64004; + optional bool face = 64005; + optional bool gostring = 64006; + optional bool populate = 64007; + optional bool stringer = 67008; + optional bool onlyone = 64009; + + optional bool equal = 64013; + optional bool description = 64014; + optional bool testgen = 64015; + optional bool benchgen = 64016; + optional bool marshaler = 64017; + optional bool unmarshaler = 64018; + optional bool stable_marshaler = 64019; + + optional bool sizer = 64020; + + optional bool unsafe_marshaler = 64023; + optional bool unsafe_unmarshaler = 64024; + + optional bool goproto_extensions_map = 64025; + optional bool goproto_unrecognized = 64026; + + optional bool protosizer = 64028; + optional bool compare = 64029; + + optional bool typedecl = 64030; + + optional bool messagename = 64033; + + optional bool goproto_sizecache = 64034; + optional bool goproto_unkeyed = 64035; +} + +extend google.protobuf.FieldOptions { + optional bool nullable = 65001; + optional bool embed = 65002; + optional string customtype = 65003; + optional string customname = 65004; + optional string jsontag = 65005; + optional string moretags = 65006; + optional string casttype = 65007; + optional string castkey = 65008; + optional string castvalue = 65009; + + optional bool stdtime = 65010; + optional bool stdduration = 65011; + optional bool wktpointer = 65012; + + optional string castrepeated = 65013; +} diff --git a/third_party/proto/google/api/annotations.proto b/third_party/proto/google/api/annotations.proto new file mode 100644 index 0000000000..85c361b47f --- /dev/null +++ b/third_party/proto/google/api/annotations.proto @@ -0,0 +1,31 @@ +// Copyright (c) 2015, Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/api/http.proto"; +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "AnnotationsProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.MethodOptions { + // See `HttpRule`. + HttpRule http = 72295728; +} diff --git a/third_party/proto/google/api/http.proto b/third_party/proto/google/api/http.proto new file mode 100644 index 0000000000..2bd3a19bfa --- /dev/null +++ b/third_party/proto/google/api/http.proto @@ -0,0 +1,318 @@ +// Copyright 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "HttpProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + + +// Defines the HTTP configuration for an API service. It contains a list of +// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method +// to one or more HTTP REST API methods. +message Http { + // A list of HTTP configuration rules that apply to individual API methods. + // + // **NOTE:** All service configuration rules follow "last one wins" order. + repeated HttpRule rules = 1; + + // When set to true, URL path parmeters will be fully URI-decoded except in + // cases of single segment matches in reserved expansion, where "%2F" will be + // left encoded. + // + // The default behavior is to not decode RFC 6570 reserved characters in multi + // segment matches. + bool fully_decode_reserved_expansion = 2; +} + +// `HttpRule` defines the mapping of an RPC method to one or more HTTP +// REST API methods. The mapping specifies how different portions of the RPC +// request message are mapped to URL path, URL query parameters, and +// HTTP request body. The mapping is typically specified as an +// `google.api.http` annotation on the RPC method, +// see "google/api/annotations.proto" for details. +// +// The mapping consists of a field specifying the path template and +// method kind. The path template can refer to fields in the request +// message, as in the example below which describes a REST GET +// operation on a resource collection of messages: +// +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http).get = "/v1/messages/{message_id}/{sub.subfield}"; +// } +// } +// message GetMessageRequest { +// message SubMessage { +// string subfield = 1; +// } +// string message_id = 1; // mapped to the URL +// SubMessage sub = 2; // `sub.subfield` is url-mapped +// } +// message Message { +// string text = 1; // content of the resource +// } +// +// The same http annotation can alternatively be expressed inside the +// `GRPC API Configuration` YAML file. +// +// http: +// rules: +// - selector: .Messaging.GetMessage +// get: /v1/messages/{message_id}/{sub.subfield} +// +// This definition enables an automatic, bidrectional mapping of HTTP +// JSON to RPC. Example: +// +// HTTP | RPC +// -----|----- +// `GET /v1/messages/123456/foo` | `GetMessage(message_id: "123456" sub: SubMessage(subfield: "foo"))` +// +// In general, not only fields but also field paths can be referenced +// from a path pattern. Fields mapped to the path pattern cannot be +// repeated and must have a primitive (non-message) type. +// +// Any fields in the request message which are not bound by the path +// pattern automatically become (optional) HTTP query +// parameters. Assume the following definition of the request message: +// +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http).get = "/v1/messages/{message_id}"; +// } +// } +// message GetMessageRequest { +// message SubMessage { +// string subfield = 1; +// } +// string message_id = 1; // mapped to the URL +// int64 revision = 2; // becomes a parameter +// SubMessage sub = 3; // `sub.subfield` becomes a parameter +// } +// +// +// This enables a HTTP JSON to RPC mapping as below: +// +// HTTP | RPC +// -----|----- +// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: "foo"))` +// +// Note that fields which are mapped to HTTP parameters must have a +// primitive type or a repeated primitive type. Message types are not +// allowed. In the case of a repeated type, the parameter can be +// repeated in the URL, as in `...?param=A¶m=B`. +// +// For HTTP method kinds which allow a request body, the `body` field +// specifies the mapping. Consider a REST update method on the +// message resource collection: +// +// +// service Messaging { +// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { +// option (google.api.http) = { +// put: "/v1/messages/{message_id}" +// body: "message" +// }; +// } +// } +// message UpdateMessageRequest { +// string message_id = 1; // mapped to the URL +// Message message = 2; // mapped to the body +// } +// +// +// The following HTTP JSON to RPC mapping is enabled, where the +// representation of the JSON in the request body is determined by +// protos JSON encoding: +// +// HTTP | RPC +// -----|----- +// `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" message { text: "Hi!" })` +// +// The special name `*` can be used in the body mapping to define that +// every field not bound by the path template should be mapped to the +// request body. This enables the following alternative definition of +// the update method: +// +// service Messaging { +// rpc UpdateMessage(Message) returns (Message) { +// option (google.api.http) = { +// put: "/v1/messages/{message_id}" +// body: "*" +// }; +// } +// } +// message Message { +// string message_id = 1; +// string text = 2; +// } +// +// +// The following HTTP JSON to RPC mapping is enabled: +// +// HTTP | RPC +// -----|----- +// `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" text: "Hi!")` +// +// Note that when using `*` in the body mapping, it is not possible to +// have HTTP parameters, as all fields not bound by the path end in +// the body. This makes this option more rarely used in practice of +// defining REST APIs. The common usage of `*` is in custom methods +// which don't use the URL at all for transferring data. +// +// It is possible to define multiple HTTP methods for one RPC by using +// the `additional_bindings` option. Example: +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http) = { +// get: "/v1/messages/{message_id}" +// additional_bindings { +// get: "/v1/users/{user_id}/messages/{message_id}" +// } +// }; +// } +// } +// message GetMessageRequest { +// string message_id = 1; +// string user_id = 2; +// } +// +// +// This enables the following two alternative HTTP JSON to RPC +// mappings: +// +// HTTP | RPC +// -----|----- +// `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` +// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: "123456")` +// +// # Rules for HTTP mapping +// +// The rules for mapping HTTP path, query parameters, and body fields +// to the request message are as follows: +// +// 1. The `body` field specifies either `*` or a field path, or is +// omitted. If omitted, it indicates there is no HTTP request body. +// 2. Leaf fields (recursive expansion of nested messages in the +// request) can be classified into three types: +// (a) Matched in the URL template. +// (b) Covered by body (if body is `*`, everything except (a) fields; +// else everything under the body field) +// (c) All other fields. +// 3. URL query parameters found in the HTTP request are mapped to (c) fields. +// 4. Any body sent with an HTTP request can contain only (b) fields. +// +// The syntax of the path template is as follows: +// +// Template = "/" Segments [ Verb ] ; +// Segments = Segment { "/" Segment } ; +// Segment = "*" | "**" | LITERAL | Variable ; +// Variable = "{" FieldPath [ "=" Segments ] "}" ; +// FieldPath = IDENT { "." IDENT } ; +// Verb = ":" LITERAL ; +// +// The syntax `*` matches a single path segment. The syntax `**` matches zero +// or more path segments, which must be the last part of the path except the +// `Verb`. The syntax `LITERAL` matches literal text in the path. +// +// The syntax `Variable` matches part of the URL path as specified by its +// template. A variable template must not contain other variables. If a variable +// matches a single path segment, its template may be omitted, e.g. `{var}` +// is equivalent to `{var=*}`. +// +// If a variable contains exactly one path segment, such as `"{var}"` or +// `"{var=*}"`, when such a variable is expanded into a URL path, all characters +// except `[-_.~0-9a-zA-Z]` are percent-encoded. Such variables show up in the +// Discovery Document as `{var}`. +// +// If a variable contains one or more path segments, such as `"{var=foo/*}"` +// or `"{var=**}"`, when such a variable is expanded into a URL path, all +// characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. Such variables +// show up in the Discovery Document as `{+var}`. +// +// NOTE: While the single segment variable matches the semantics of +// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 +// Simple String Expansion, the multi segment variable **does not** match +// RFC 6570 Reserved Expansion. The reason is that the Reserved Expansion +// does not expand special characters like `?` and `#`, which would lead +// to invalid URLs. +// +// NOTE: the field paths in variables and in the `body` must not refer to +// repeated fields or map fields. +message HttpRule { + // Selects methods to which this rule applies. + // + // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. + string selector = 1; + + // Determines the URL pattern is matched by this rules. This pattern can be + // used with any of the {get|put|post|delete|patch} methods. A custom method + // can be defined using the 'custom' field. + oneof pattern { + // Used for listing and getting information about resources. + string get = 2; + + // Used for updating a resource. + string put = 3; + + // Used for creating a resource. + string post = 4; + + // Used for deleting a resource. + string delete = 5; + + // Used for updating a resource. + string patch = 6; + + // The custom pattern is used for specifying an HTTP method that is not + // included in the `pattern` field, such as HEAD, or "*" to leave the + // HTTP method unspecified for this rule. The wild-card rule is useful + // for services that provide content to Web (HTML) clients. + CustomHttpPattern custom = 8; + } + + // The name of the request field whose value is mapped to the HTTP body, or + // `*` for mapping all fields not captured by the path pattern to the HTTP + // body. NOTE: the referred field must not be a repeated field and must be + // present at the top-level of request message type. + string body = 7; + + // Optional. The name of the response field whose value is mapped to the HTTP + // body of response. Other response fields are ignored. When + // not set, the response message will be used as HTTP body of response. + string response_body = 12; + + // Additional HTTP bindings for the selector. Nested bindings must + // not contain an `additional_bindings` field themselves (that is, + // the nesting may only be one level deep). + repeated HttpRule additional_bindings = 11; +} + +// A custom pattern is used for defining custom HTTP verb. +message CustomHttpPattern { + // The name of this custom HTTP verb. + string kind = 1; + + // The path matched by this custom verb. + string path = 2; +} diff --git a/third_party/proto/google/api/httpbody.proto b/third_party/proto/google/api/httpbody.proto new file mode 100644 index 0000000000..4428515c12 --- /dev/null +++ b/third_party/proto/google/api/httpbody.proto @@ -0,0 +1,78 @@ +// Copyright 2018 Google LLC. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/any.proto"; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/genproto/googleapis/api/httpbody;httpbody"; +option java_multiple_files = true; +option java_outer_classname = "HttpBodyProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +// Message that represents an arbitrary HTTP body. It should only be used for +// payload formats that can't be represented as JSON, such as raw binary or +// an HTML page. +// +// +// This message can be used both in streaming and non-streaming API methods in +// the request as well as the response. +// +// It can be used as a top-level request field, which is convenient if one +// wants to extract parameters from either the URL or HTTP template into the +// request fields and also want access to the raw HTTP body. +// +// Example: +// +// message GetResourceRequest { +// // A unique request id. +// string request_id = 1; +// +// // The raw HTTP body is bound to this field. +// google.api.HttpBody http_body = 2; +// } +// +// service ResourceService { +// rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); +// rpc UpdateResource(google.api.HttpBody) returns +// (google.protobuf.Empty); +// } +// +// Example with streaming methods: +// +// service CaldavService { +// rpc GetCalendar(stream google.api.HttpBody) +// returns (stream google.api.HttpBody); +// rpc UpdateCalendar(stream google.api.HttpBody) +// returns (stream google.api.HttpBody); +// } +// +// Use of this type only changes how the request and response bodies are +// handled, all other features will continue to work unchanged. +message HttpBody { + // The HTTP Content-Type header value specifying the content type of the body. + string content_type = 1; + + // The HTTP request/response body as raw binary. + bytes data = 2; + + // Application specific response metadata. Must be set in the first response + // for streaming APIs. + repeated google.protobuf.Any extensions = 3; +} \ No newline at end of file diff --git a/third_party/proto/google/protobuf/any.proto b/third_party/proto/google/protobuf/any.proto new file mode 100644 index 0000000000..1431810ea4 --- /dev/null +++ b/third_party/proto/google/protobuf/any.proto @@ -0,0 +1,161 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +import "gogoproto/gogo.proto"; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option go_package = "types"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "AnyProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// `Any` contains an arbitrary serialized protocol buffer message along with a +// URL that describes the type of the serialized message. +// +// Protobuf library provides support to pack/unpack Any values in the form +// of utility functions or additional generated methods of the Any type. +// +// Example 1: Pack and unpack a message in C++. +// +// Foo foo = ...; +// Any any; +// any.PackFrom(foo); +// ... +// if (any.UnpackTo(&foo)) { +// ... +// } +// +// Example 2: Pack and unpack a message in Java. +// +// Foo foo = ...; +// Any any = Any.pack(foo); +// ... +// if (any.is(Foo.class)) { +// foo = any.unpack(Foo.class); +// } +// +// Example 3: Pack and unpack a message in Python. +// +// foo = Foo(...) +// any = Any() +// any.Pack(foo) +// ... +// if any.Is(Foo.DESCRIPTOR): +// any.Unpack(foo) +// ... +// +// Example 4: Pack and unpack a message in Go +// +// foo := &pb.Foo{...} +// any, err := ptypes.MarshalAny(foo) +// ... +// foo := &pb.Foo{} +// if err := ptypes.UnmarshalAny(any, foo); err != nil { +// ... +// } +// +// The pack methods provided by protobuf library will by default use +// 'type.googleapis.com/full.type.name' as the type URL and the unpack +// methods only use the fully qualified type name after the last '/' +// in the type URL, for example "foo.bar.com/x/y.z" will yield type +// name "y.z". +// +// +// JSON +// ==== +// The JSON representation of an `Any` value uses the regular +// representation of the deserialized, embedded message, with an +// additional field `@type` which contains the type URL. Example: +// +// package google.profile; +// message Person { +// string first_name = 1; +// string last_name = 2; +// } +// +// { +// "@type": "type.googleapis.com/google.profile.Person", +// "firstName": , +// "lastName": +// } +// +// If the embedded message type is well-known and has a custom JSON +// representation, that representation will be embedded adding a field +// `value` which holds the custom JSON in addition to the `@type` +// field. Example (for message [google.protobuf.Duration][]): +// +// { +// "@type": "type.googleapis.com/google.protobuf.Duration", +// "value": "1.212s" +// } +// +message Any { + // A URL/resource name that uniquely identifies the type of the serialized + // protocol buffer message. This string must contain at least + // one "/" character. The last segment of the URL's path must represent + // the fully qualified name of the type (as in + // `path/google.protobuf.Duration`). The name should be in a canonical form + // (e.g., leading "." is not accepted). + // + // In practice, teams usually precompile into the binary all types that they + // expect it to use in the context of Any. However, for URLs which use the + // scheme `http`, `https`, or no scheme, one can optionally set up a type + // server that maps type URLs to message definitions as follows: + // + // * If no scheme is provided, `https` is assumed. + // * An HTTP GET on the URL must yield a [google.protobuf.Type][] + // value in binary format, or produce an error. + // * Applications are allowed to cache lookup results based on the + // URL, or have them precompiled into a binary to avoid any + // lookup. Therefore, binary compatibility needs to be preserved + // on changes to types. (Use versioned type names to manage + // breaking changes.) + // + // Note: this functionality is not currently available in the official + // protobuf release, and it is not used for type URLs beginning with + // type.googleapis.com. + // + // Schemes other than `http`, `https` (or the empty scheme) might be + // used with implementation specific semantics. + // + string type_url = 1; + + // Must be a valid serialized protocol buffer of the above specified type. + bytes value = 2; + + option (gogoproto.typedecl) = false; +} + +option (gogoproto.goproto_registration) = false; diff --git a/third_party/proto/ibc/applications/transfer/v1/genesis.proto b/third_party/proto/ibc/applications/transfer/v1/genesis.proto new file mode 100644 index 0000000000..98cf2296d2 --- /dev/null +++ b/third_party/proto/ibc/applications/transfer/v1/genesis.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; +package ibc.applications.transfer.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types"; + +import "gogoproto/gogo.proto"; +import "ibc/applications/transfer/v1/transfer.proto"; + +// GenesisState defines the ibc-transfer genesis state +message GenesisState { + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + repeated DenomTrace denom_traces = 2 [ + (gogoproto.castrepeated) = "Traces", + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"denom_traces\"" + ]; + Params params = 3 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/ibc/applications/transfer/v1/query.proto b/third_party/proto/ibc/applications/transfer/v1/query.proto new file mode 100644 index 0000000000..e9cbd02a31 --- /dev/null +++ b/third_party/proto/ibc/applications/transfer/v1/query.proto @@ -0,0 +1,66 @@ +syntax = "proto3"; +package ibc.applications.transfer.v1; + +import "gogoproto/gogo.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "ibc/applications/transfer/v1/transfer.proto"; +import "google/api/annotations.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types"; + +// Query provides defines the gRPC querier service. +service Query { + // DenomTrace queries a denomination trace information. + rpc DenomTrace(QueryDenomTraceRequest) returns (QueryDenomTraceResponse) { + option (google.api.http).get = "/ibc/applications/transfer/v1beta1/denom_traces/{hash}"; + } + + // DenomTraces queries all denomination traces. + rpc DenomTraces(QueryDenomTracesRequest) returns (QueryDenomTracesResponse) { + option (google.api.http).get = "/ibc/applications/transfer/v1beta1/denom_traces"; + } + + // Params queries all parameters of the ibc-transfer module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/ibc/applications/transfer/v1beta1/params"; + } +} + +// QueryDenomTraceRequest is the request type for the Query/DenomTrace RPC +// method +message QueryDenomTraceRequest { + // hash (in hex format) of the denomination trace information. + string hash = 1; +} + +// QueryDenomTraceResponse is the response type for the Query/DenomTrace RPC +// method. +message QueryDenomTraceResponse { + // denom_trace returns the requested denomination trace information. + DenomTrace denom_trace = 1; +} + +// QueryConnectionsRequest is the request type for the Query/DenomTraces RPC +// method +message QueryDenomTracesRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryConnectionsResponse is the response type for the Query/DenomTraces RPC +// method. +message QueryDenomTracesResponse { + // denom_traces returns all denominations trace information. + repeated DenomTrace denom_traces = 1 [(gogoproto.castrepeated) = "Traces", (gogoproto.nullable) = false]; + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // params defines the parameters of the module. + Params params = 1; +} diff --git a/third_party/proto/ibc/applications/transfer/v1/transfer.proto b/third_party/proto/ibc/applications/transfer/v1/transfer.proto new file mode 100644 index 0000000000..b388c3b879 --- /dev/null +++ b/third_party/proto/ibc/applications/transfer/v1/transfer.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; +package ibc.applications.transfer.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types"; + +import "gogoproto/gogo.proto"; + +// FungibleTokenPacketData defines a struct for the packet payload +// See FungibleTokenPacketData spec: +// https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#data-structures +message FungibleTokenPacketData { + // the token denomination to be transferred + string denom = 1; + // the token amount to be transferred + uint64 amount = 2; + // the sender address + string sender = 3; + // the recipient address on the destination chain + string receiver = 4; +} + +// DenomTrace contains the base denomination for ICS20 fungible tokens and the +// source tracing information path. +message DenomTrace { + // path defines the chain of port/channel identifiers used for tracing the + // source of the fungible token. + string path = 1; + // base denomination of the relayed fungible token. + string base_denom = 2; +} + +// Params defines the set of IBC transfer parameters. +// NOTE: To prevent a single token from being transferred, set the +// TransfersEnabled parameter to true and then set the bank module's SendEnabled +// parameter for the denomination to false. +message Params { + // send_enabled enables or disables all cross-chain token transfers from this + // chain. + bool send_enabled = 1 [(gogoproto.moretags) = "yaml:\"send_enabled\""]; + // receive_enabled enables or disables all cross-chain token transfers to this + // chain. + bool receive_enabled = 2 [(gogoproto.moretags) = "yaml:\"receive_enabled\""]; +} diff --git a/third_party/proto/ibc/applications/transfer/v1/tx.proto b/third_party/proto/ibc/applications/transfer/v1/tx.proto new file mode 100644 index 0000000000..a0f0827aaf --- /dev/null +++ b/third_party/proto/ibc/applications/transfer/v1/tx.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; +package ibc.applications.transfer.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types"; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "ibc/core/client/v1/client.proto"; + +// Msg defines the ibc/transfer Msg service. +service Msg { + // Transfer defines a rpc handler method for MsgTransfer. + rpc Transfer(MsgTransfer) returns (MsgTransferResponse); +} + +// MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between +// ICS20 enabled chains. See ICS Spec here: +// https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#data-structures +message MsgTransfer { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // the port on which the packet will be sent + string source_port = 1 [(gogoproto.moretags) = "yaml:\"source_port\""]; + // the channel by which the packet will be sent + string source_channel = 2 [(gogoproto.moretags) = "yaml:\"source_channel\""]; + // the tokens to be transferred + cosmos.base.v1beta1.Coin token = 3 [(gogoproto.nullable) = false]; + // the sender address + string sender = 4; + // the recipient address on the destination chain + string receiver = 5; + // Timeout height relative to the current block height. + // The timeout is disabled when set to 0. + ibc.core.client.v1.Height timeout_height = 6 + [(gogoproto.moretags) = "yaml:\"timeout_height\"", (gogoproto.nullable) = false]; + // Timeout timestamp (in nanoseconds) relative to the current block timestamp. + // The timeout is disabled when set to 0. + uint64 timeout_timestamp = 7 [(gogoproto.moretags) = "yaml:\"timeout_timestamp\""]; +} + +// MsgTransferResponse defines the Msg/Transfer response type. +message MsgTransferResponse {} diff --git a/third_party/proto/ibc/core/channel/v1/channel.proto b/third_party/proto/ibc/core/channel/v1/channel.proto new file mode 100644 index 0000000000..302a480689 --- /dev/null +++ b/third_party/proto/ibc/core/channel/v1/channel.proto @@ -0,0 +1,147 @@ +syntax = "proto3"; +package ibc.core.channel.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types"; + +import "gogoproto/gogo.proto"; +import "ibc/core/client/v1/client.proto"; + +// Channel defines pipeline for exactly-once packet delivery between specific +// modules on separate blockchains, which has at least one end capable of +// sending packets and one end capable of receiving packets. +message Channel { + option (gogoproto.goproto_getters) = false; + + // current state of the channel end + State state = 1; + // whether the channel is ordered or unordered + Order ordering = 2; + // counterparty channel end + Counterparty counterparty = 3 [(gogoproto.nullable) = false]; + // list of connection identifiers, in order, along which packets sent on + // this channel will travel + repeated string connection_hops = 4 [(gogoproto.moretags) = "yaml:\"connection_hops\""]; + // opaque channel version, which is agreed upon during the handshake + string version = 5; +} + +// IdentifiedChannel defines a channel with additional port and channel +// identifier fields. +message IdentifiedChannel { + option (gogoproto.goproto_getters) = false; + + // current state of the channel end + State state = 1; + // whether the channel is ordered or unordered + Order ordering = 2; + // counterparty channel end + Counterparty counterparty = 3 [(gogoproto.nullable) = false]; + // list of connection identifiers, in order, along which packets sent on + // this channel will travel + repeated string connection_hops = 4 [(gogoproto.moretags) = "yaml:\"connection_hops\""]; + // opaque channel version, which is agreed upon during the handshake + string version = 5; + // port identifier + string port_id = 6; + // channel identifier + string channel_id = 7; +} + +// State defines if a channel is in one of the following states: +// CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. +enum State { + option (gogoproto.goproto_enum_prefix) = false; + + // Default State + STATE_UNINITIALIZED_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "UNINITIALIZED"]; + // A channel has just started the opening handshake. + STATE_INIT = 1 [(gogoproto.enumvalue_customname) = "INIT"]; + // A channel has acknowledged the handshake step on the counterparty chain. + STATE_TRYOPEN = 2 [(gogoproto.enumvalue_customname) = "TRYOPEN"]; + // A channel has completed the handshake. Open channels are + // ready to send and receive packets. + STATE_OPEN = 3 [(gogoproto.enumvalue_customname) = "OPEN"]; + // A channel has been closed and can no longer be used to send or receive + // packets. + STATE_CLOSED = 4 [(gogoproto.enumvalue_customname) = "CLOSED"]; +} + +// Order defines if a channel is ORDERED or UNORDERED +enum Order { + option (gogoproto.goproto_enum_prefix) = false; + + // zero-value for channel ordering + ORDER_NONE_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "NONE"]; + // packets can be delivered in any order, which may differ from the order in + // which they were sent. + ORDER_UNORDERED = 1 [(gogoproto.enumvalue_customname) = "UNORDERED"]; + // packets are delivered exactly in the order which they were sent + ORDER_ORDERED = 2 [(gogoproto.enumvalue_customname) = "ORDERED"]; +} + +// Counterparty defines a channel end counterparty +message Counterparty { + option (gogoproto.goproto_getters) = false; + + // port on the counterparty chain which owns the other end of the channel. + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + // channel end on the counterparty chain + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; +} + +// Packet defines a type that carries data across different chains through IBC +message Packet { + option (gogoproto.goproto_getters) = false; + + // number corresponds to the order of sends and receives, where a Packet + // with an earlier sequence number must be sent and received before a Packet + // with a later sequence number. + uint64 sequence = 1; + // identifies the port on the sending chain. + string source_port = 2 [(gogoproto.moretags) = "yaml:\"source_port\""]; + // identifies the channel end on the sending chain. + string source_channel = 3 [(gogoproto.moretags) = "yaml:\"source_channel\""]; + // identifies the port on the receiving chain. + string destination_port = 4 [(gogoproto.moretags) = "yaml:\"destination_port\""]; + // identifies the channel end on the receiving chain. + string destination_channel = 5 [(gogoproto.moretags) = "yaml:\"destination_channel\""]; + // actual opaque bytes transferred directly to the application module + bytes data = 6; + // block height after which the packet times out + ibc.core.client.v1.Height timeout_height = 7 + [(gogoproto.moretags) = "yaml:\"timeout_height\"", (gogoproto.nullable) = false]; + // block timestamp (in nanoseconds) after which the packet times out + uint64 timeout_timestamp = 8 [(gogoproto.moretags) = "yaml:\"timeout_timestamp\""]; +} + +// PacketState defines the generic type necessary to retrieve and store +// packet commitments, acknowledgements, and receipts. +// Caller is responsible for knowing the context necessary to interpret this +// state as a commitment, acknowledgement, or a receipt. +message PacketState { + option (gogoproto.goproto_getters) = false; + + // channel port identifier. + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + // channel unique identifier. + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + // packet sequence. + uint64 sequence = 3; + // embedded data that represents packet state. + bytes data = 4; +} + +// Acknowledgement is the recommended acknowledgement format to be used by +// app-specific protocols. +// NOTE: The field numbers 21 and 22 were explicitly chosen to avoid accidental +// conflicts with other protobuf message formats used for acknowledgements. +// The first byte of any message with this format will be the non-ASCII values +// `0xaa` (result) or `0xb2` (error). Implemented as defined by ICS: +// https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#acknowledgement-envelope +message Acknowledgement { + // response contains either a result or an error and must be non-empty + oneof response { + bytes result = 21; + string error = 22; + } +} diff --git a/third_party/proto/ibc/core/channel/v1/genesis.proto b/third_party/proto/ibc/core/channel/v1/genesis.proto new file mode 100644 index 0000000000..d3b2c0424e --- /dev/null +++ b/third_party/proto/ibc/core/channel/v1/genesis.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; +package ibc.core.channel.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types"; + +import "gogoproto/gogo.proto"; +import "ibc/core/channel/v1/channel.proto"; + +// GenesisState defines the ibc channel submodule's genesis state. +message GenesisState { + repeated IdentifiedChannel channels = 1 [(gogoproto.casttype) = "IdentifiedChannel", (gogoproto.nullable) = false]; + repeated PacketState acknowledgements = 2 [(gogoproto.nullable) = false]; + repeated PacketState commitments = 3 [(gogoproto.nullable) = false]; + repeated PacketState receipts = 4 [(gogoproto.nullable) = false]; + repeated PacketSequence send_sequences = 5 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"send_sequences\""]; + repeated PacketSequence recv_sequences = 6 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"recv_sequences\""]; + repeated PacketSequence ack_sequences = 7 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"ack_sequences\""]; + // the sequence for the next generated channel identifier + uint64 next_channel_sequence = 8 [(gogoproto.moretags) = "yaml:\"next_channel_sequence\""]; +} + +// PacketSequence defines the genesis type necessary to retrieve and store +// next send and receive sequences. +message PacketSequence { + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + uint64 sequence = 3; +} diff --git a/third_party/proto/ibc/core/channel/v1/query.proto b/third_party/proto/ibc/core/channel/v1/query.proto new file mode 100644 index 0000000000..d9e3ceb8a6 --- /dev/null +++ b/third_party/proto/ibc/core/channel/v1/query.proto @@ -0,0 +1,367 @@ +syntax = "proto3"; +package ibc.core.channel.v1; + +import "ibc/core/client/v1/client.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "ibc/core/channel/v1/channel.proto"; +import "google/api/annotations.proto"; +import "google/protobuf/any.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types"; + +// Query provides defines the gRPC querier service +service Query { + // Channel queries an IBC Channel. + rpc Channel(QueryChannelRequest) returns (QueryChannelResponse) { + option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}"; + } + + // Channels queries all the IBC channels of a chain. + rpc Channels(QueryChannelsRequest) returns (QueryChannelsResponse) { + option (google.api.http).get = "/ibc/core/channel/v1beta1/channels"; + } + + // ConnectionChannels queries all the channels associated with a connection + // end. + rpc ConnectionChannels(QueryConnectionChannelsRequest) returns (QueryConnectionChannelsResponse) { + option (google.api.http).get = "/ibc/core/channel/v1beta1/connections/{connection}/channels"; + } + + // ChannelClientState queries for the client state for the channel associated + // with the provided channel identifiers. + rpc ChannelClientState(QueryChannelClientStateRequest) returns (QueryChannelClientStateResponse) { + option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/client_state"; + } + + // ChannelConsensusState queries for the consensus state for the channel + // associated with the provided channel identifiers. + rpc ChannelConsensusState(QueryChannelConsensusStateRequest) returns (QueryChannelConsensusStateResponse) { + option (google.api.http).get = + "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/" + "{revision_number}/height/{revision_height}"; + } + + // PacketCommitment queries a stored packet commitment hash. + rpc PacketCommitment(QueryPacketCommitmentRequest) returns (QueryPacketCommitmentResponse) { + option (google.api.http).get = + "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}"; + } + + // PacketCommitments returns all the packet commitments hashes associated + // with a channel. + rpc PacketCommitments(QueryPacketCommitmentsRequest) returns (QueryPacketCommitmentsResponse) { + option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments"; + } + + // PacketReceipt queries if a given packet sequence has been received on the queried chain + rpc PacketReceipt(QueryPacketReceiptRequest) returns (QueryPacketReceiptResponse) { + option (google.api.http).get = + "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}"; + } + + // PacketAcknowledgement queries a stored packet acknowledgement hash. + rpc PacketAcknowledgement(QueryPacketAcknowledgementRequest) returns (QueryPacketAcknowledgementResponse) { + option (google.api.http).get = + "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}"; + } + + // PacketAcknowledgements returns all the packet acknowledgements associated + // with a channel. + rpc PacketAcknowledgements(QueryPacketAcknowledgementsRequest) returns (QueryPacketAcknowledgementsResponse) { + option (google.api.http).get = + "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements"; + } + + // UnreceivedPackets returns all the unreceived IBC packets associated with a + // channel and sequences. + rpc UnreceivedPackets(QueryUnreceivedPacketsRequest) returns (QueryUnreceivedPacketsResponse) { + option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/" + "{packet_commitment_sequences}/unreceived_packets"; + } + + // UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a + // channel and sequences. + rpc UnreceivedAcks(QueryUnreceivedAcksRequest) returns (QueryUnreceivedAcksResponse) { + option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/" + "{packet_ack_sequences}/unreceived_acks"; + } + + // NextSequenceReceive returns the next receive sequence for a given channel. + rpc NextSequenceReceive(QueryNextSequenceReceiveRequest) returns (QueryNextSequenceReceiveResponse) { + option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/next_sequence"; + } +} + +// QueryChannelRequest is the request type for the Query/Channel RPC method +message QueryChannelRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; +} + +// QueryChannelResponse is the response type for the Query/Channel RPC method. +// Besides the Channel end, it includes a proof and the height from which the +// proof was retrieved. +message QueryChannelResponse { + // channel associated with the request identifiers + ibc.core.channel.v1.Channel channel = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} + +// QueryChannelsRequest is the request type for the Query/Channels RPC method +message QueryChannelsRequest { + // pagination request + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryChannelsResponse is the response type for the Query/Channels RPC method. +message QueryChannelsResponse { + // list of stored channels of the chain. + repeated ibc.core.channel.v1.IdentifiedChannel channels = 1; + // pagination response + cosmos.base.query.v1beta1.PageResponse pagination = 2; + // query block height + ibc.core.client.v1.Height height = 3 [(gogoproto.nullable) = false]; +} + +// QueryConnectionChannelsRequest is the request type for the +// Query/QueryConnectionChannels RPC method +message QueryConnectionChannelsRequest { + // connection unique identifier + string connection = 1; + // pagination request + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryConnectionChannelsResponse is the Response type for the +// Query/QueryConnectionChannels RPC method +message QueryConnectionChannelsResponse { + // list of channels associated with a connection. + repeated ibc.core.channel.v1.IdentifiedChannel channels = 1; + // pagination response + cosmos.base.query.v1beta1.PageResponse pagination = 2; + // query block height + ibc.core.client.v1.Height height = 3 [(gogoproto.nullable) = false]; +} + +// QueryChannelClientStateRequest is the request type for the Query/ClientState +// RPC method +message QueryChannelClientStateRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; +} + +// QueryChannelClientStateResponse is the Response type for the +// Query/QueryChannelClientState RPC method +message QueryChannelClientStateResponse { + // client state associated with the channel + ibc.core.client.v1.IdentifiedClientState identified_client_state = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} + +// QueryChannelConsensusStateRequest is the request type for the +// Query/ConsensusState RPC method +message QueryChannelConsensusStateRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; + // revision number of the consensus state + uint64 revision_number = 3; + // revision height of the consensus state + uint64 revision_height = 4; +} + +// QueryChannelClientStateResponse is the Response type for the +// Query/QueryChannelClientState RPC method +message QueryChannelConsensusStateResponse { + // consensus state associated with the channel + google.protobuf.Any consensus_state = 1; + // client ID associated with the consensus state + string client_id = 2; + // merkle proof of existence + bytes proof = 3; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; +} + +// QueryPacketCommitmentRequest is the request type for the +// Query/PacketCommitment RPC method +message QueryPacketCommitmentRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; + // packet sequence + uint64 sequence = 3; +} + +// QueryPacketCommitmentResponse defines the client query response for a packet +// which also includes a proof and the height from which the proof was +// retrieved +message QueryPacketCommitmentResponse { + // packet associated with the request fields + bytes commitment = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} + +// QueryPacketCommitmentsRequest is the request type for the +// Query/QueryPacketCommitments RPC method +message QueryPacketCommitmentsRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; + // pagination request + cosmos.base.query.v1beta1.PageRequest pagination = 3; +} + +// QueryPacketCommitmentsResponse is the request type for the +// Query/QueryPacketCommitments RPC method +message QueryPacketCommitmentsResponse { + repeated ibc.core.channel.v1.PacketState commitments = 1; + // pagination response + cosmos.base.query.v1beta1.PageResponse pagination = 2; + // query block height + ibc.core.client.v1.Height height = 3 [(gogoproto.nullable) = false]; +} + +// QueryPacketReceiptRequest is the request type for the +// Query/PacketReceipt RPC method +message QueryPacketReceiptRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; + // packet sequence + uint64 sequence = 3; +} + +// QueryPacketReceiptResponse defines the client query response for a packet receipt +// which also includes a proof, and the height from which the proof was +// retrieved +message QueryPacketReceiptResponse { + // success flag for if receipt exists + bool received = 2; + // merkle proof of existence + bytes proof = 3; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; +} + +// QueryPacketAcknowledgementRequest is the request type for the +// Query/PacketAcknowledgement RPC method +message QueryPacketAcknowledgementRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; + // packet sequence + uint64 sequence = 3; +} + +// QueryPacketAcknowledgementResponse defines the client query response for a +// packet which also includes a proof and the height from which the +// proof was retrieved +message QueryPacketAcknowledgementResponse { + // packet associated with the request fields + bytes acknowledgement = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} + +// QueryPacketAcknowledgementsRequest is the request type for the +// Query/QueryPacketCommitments RPC method +message QueryPacketAcknowledgementsRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; + // pagination request + cosmos.base.query.v1beta1.PageRequest pagination = 3; +} + +// QueryPacketAcknowledgemetsResponse is the request type for the +// Query/QueryPacketAcknowledgements RPC method +message QueryPacketAcknowledgementsResponse { + repeated ibc.core.channel.v1.PacketState acknowledgements = 1; + // pagination response + cosmos.base.query.v1beta1.PageResponse pagination = 2; + // query block height + ibc.core.client.v1.Height height = 3 [(gogoproto.nullable) = false]; +} + +// QueryUnreceivedPacketsRequest is the request type for the +// Query/UnreceivedPackets RPC method +message QueryUnreceivedPacketsRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; + // list of packet sequences + repeated uint64 packet_commitment_sequences = 3; +} + +// QueryUnreceivedPacketsResponse is the response type for the +// Query/UnreceivedPacketCommitments RPC method +message QueryUnreceivedPacketsResponse { + // list of unreceived packet sequences + repeated uint64 sequences = 1; + // query block height + ibc.core.client.v1.Height height = 2 [(gogoproto.nullable) = false]; +} + +// QueryUnreceivedAcks is the request type for the +// Query/UnreceivedAcks RPC method +message QueryUnreceivedAcksRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; + // list of acknowledgement sequences + repeated uint64 packet_ack_sequences = 3; +} + +// QueryUnreceivedAcksResponse is the response type for the +// Query/UnreceivedAcks RPC method +message QueryUnreceivedAcksResponse { + // list of unreceived acknowledgement sequences + repeated uint64 sequences = 1; + // query block height + ibc.core.client.v1.Height height = 2 [(gogoproto.nullable) = false]; +} + +// QueryNextSequenceReceiveRequest is the request type for the +// Query/QueryNextSequenceReceiveRequest RPC method +message QueryNextSequenceReceiveRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; +} + +// QuerySequenceResponse is the request type for the +// Query/QueryNextSequenceReceiveResponse RPC method +message QueryNextSequenceReceiveResponse { + // next sequence receive number + uint64 next_sequence_receive = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/ibc/core/channel/v1/tx.proto b/third_party/proto/ibc/core/channel/v1/tx.proto new file mode 100644 index 0000000000..5f84264124 --- /dev/null +++ b/third_party/proto/ibc/core/channel/v1/tx.proto @@ -0,0 +1,207 @@ +syntax = "proto3"; +package ibc.core.channel.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types"; + +import "gogoproto/gogo.proto"; +import "ibc/core/client/v1/client.proto"; +import "ibc/core/channel/v1/channel.proto"; + +// Msg defines the ibc/channel Msg service. +service Msg { + // ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit. + rpc ChannelOpenInit(MsgChannelOpenInit) returns (MsgChannelOpenInitResponse); + + // ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry. + rpc ChannelOpenTry(MsgChannelOpenTry) returns (MsgChannelOpenTryResponse); + + // ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck. + rpc ChannelOpenAck(MsgChannelOpenAck) returns (MsgChannelOpenAckResponse); + + // ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm. + rpc ChannelOpenConfirm(MsgChannelOpenConfirm) returns (MsgChannelOpenConfirmResponse); + + // ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit. + rpc ChannelCloseInit(MsgChannelCloseInit) returns (MsgChannelCloseInitResponse); + + // ChannelCloseConfirm defines a rpc handler method for MsgChannelCloseConfirm. + rpc ChannelCloseConfirm(MsgChannelCloseConfirm) returns (MsgChannelCloseConfirmResponse); + + // RecvPacket defines a rpc handler method for MsgRecvPacket. + rpc RecvPacket(MsgRecvPacket) returns (MsgRecvPacketResponse); + + // Timeout defines a rpc handler method for MsgTimeout. + rpc Timeout(MsgTimeout) returns (MsgTimeoutResponse); + + // TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose. + rpc TimeoutOnClose(MsgTimeoutOnClose) returns (MsgTimeoutOnCloseResponse); + + // Acknowledgement defines a rpc handler method for MsgAcknowledgement. + rpc Acknowledgement(MsgAcknowledgement) returns (MsgAcknowledgementResponse); +} + +// MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It +// is called by a relayer on Chain A. +message MsgChannelOpenInit { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + Channel channel = 2 [(gogoproto.nullable) = false]; + string signer = 3; +} + +// MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type. +message MsgChannelOpenInitResponse {} + +// MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel +// on Chain B. +message MsgChannelOpenTry { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + // in the case of crossing hello's, when both chains call OpenInit, we need the channel identifier + // of the previous channel in state INIT + string previous_channel_id = 2 [(gogoproto.moretags) = "yaml:\"previous_channel_id\""]; + Channel channel = 3 [(gogoproto.nullable) = false]; + string counterparty_version = 4 [(gogoproto.moretags) = "yaml:\"counterparty_version\""]; + bytes proof_init = 5 [(gogoproto.moretags) = "yaml:\"proof_init\""]; + ibc.core.client.v1.Height proof_height = 6 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 7; +} + +// MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type. +message MsgChannelOpenTryResponse {} + +// MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge +// the change of channel state to TRYOPEN on Chain B. +message MsgChannelOpenAck { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string counterparty_channel_id = 3 [(gogoproto.moretags) = "yaml:\"counterparty_channel_id\""]; + string counterparty_version = 4 [(gogoproto.moretags) = "yaml:\"counterparty_version\""]; + bytes proof_try = 5 [(gogoproto.moretags) = "yaml:\"proof_try\""]; + ibc.core.client.v1.Height proof_height = 6 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 7; +} + +// MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type. +message MsgChannelOpenAckResponse {} + +// MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to +// acknowledge the change of channel state to OPEN on Chain A. +message MsgChannelOpenConfirm { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + bytes proof_ack = 3 [(gogoproto.moretags) = "yaml:\"proof_ack\""]; + ibc.core.client.v1.Height proof_height = 4 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 5; +} + +// MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response type. +message MsgChannelOpenConfirmResponse {} + +// MsgChannelCloseInit defines a msg sent by a Relayer to Chain A +// to close a channel with Chain B. +message MsgChannelCloseInit { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string signer = 3; +} + +// MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type. +message MsgChannelCloseInitResponse {} + +// MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B +// to acknowledge the change of channel state to CLOSED on Chain A. +message MsgChannelCloseConfirm { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + bytes proof_init = 3 [(gogoproto.moretags) = "yaml:\"proof_init\""]; + ibc.core.client.v1.Height proof_height = 4 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 5; +} + +// MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response type. +message MsgChannelCloseConfirmResponse {} + +// MsgRecvPacket receives incoming IBC packet +message MsgRecvPacket { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof_commitment = 2 [(gogoproto.moretags) = "yaml:\"proof_commitment\""]; + ibc.core.client.v1.Height proof_height = 3 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 4; +} + +// MsgRecvPacketResponse defines the Msg/RecvPacket response type. +message MsgRecvPacketResponse {} + +// MsgTimeout receives timed-out packet +message MsgTimeout { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof_unreceived = 2 [(gogoproto.moretags) = "yaml:\"proof_unreceived\""]; + ibc.core.client.v1.Height proof_height = 3 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + uint64 next_sequence_recv = 4 [(gogoproto.moretags) = "yaml:\"next_sequence_recv\""]; + string signer = 5; +} + +// MsgTimeoutResponse defines the Msg/Timeout response type. +message MsgTimeoutResponse {} + +// MsgTimeoutOnClose timed-out packet upon counterparty channel closure. +message MsgTimeoutOnClose { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof_unreceived = 2 [(gogoproto.moretags) = "yaml:\"proof_unreceived\""]; + bytes proof_close = 3 [(gogoproto.moretags) = "yaml:\"proof_close\""]; + ibc.core.client.v1.Height proof_height = 4 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + uint64 next_sequence_recv = 5 [(gogoproto.moretags) = "yaml:\"next_sequence_recv\""]; + string signer = 6; +} + +// MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type. +message MsgTimeoutOnCloseResponse {} + +// MsgAcknowledgement receives incoming IBC acknowledgement +message MsgAcknowledgement { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes acknowledgement = 2; + bytes proof_acked = 3 [(gogoproto.moretags) = "yaml:\"proof_acked\""]; + ibc.core.client.v1.Height proof_height = 4 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 5; +} + +// MsgAcknowledgementResponse defines the Msg/Acknowledgement response type. +message MsgAcknowledgementResponse {} diff --git a/third_party/proto/ibc/core/client/v1/client.proto b/third_party/proto/ibc/core/client/v1/client.proto new file mode 100644 index 0000000000..11d2195aaf --- /dev/null +++ b/third_party/proto/ibc/core/client/v1/client.proto @@ -0,0 +1,74 @@ +syntax = "proto3"; +package ibc.core.client.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; + +// IdentifiedClientState defines a client state with an additional client +// identifier field. +message IdentifiedClientState { + // client identifier + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // client state + google.protobuf.Any client_state = 2 [(gogoproto.moretags) = "yaml:\"client_state\""]; +} + +// ConsensusStateWithHeight defines a consensus state with an additional height field. +message ConsensusStateWithHeight { + // consensus state height + Height height = 1 [(gogoproto.nullable) = false]; + // consensus state + google.protobuf.Any consensus_state = 2 [(gogoproto.moretags) = "yaml\"consensus_state\""]; +} + +// ClientConsensusStates defines all the stored consensus states for a given +// client. +message ClientConsensusStates { + // client identifier + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // consensus states and their heights associated with the client + repeated ConsensusStateWithHeight consensus_states = 2 + [(gogoproto.moretags) = "yaml:\"consensus_states\"", (gogoproto.nullable) = false]; +} + +// ClientUpdateProposal is a governance proposal. If it passes, the client is +// updated with the provided header. The update may fail if the header is not +// valid given certain conditions specified by the client implementation. +message ClientUpdateProposal { + option (gogoproto.goproto_getters) = false; + // the title of the update proposal + string title = 1; + // the description of the proposal + string description = 2; + // the client identifier for the client to be updated if the proposal passes + string client_id = 3 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // the header used to update the client if the proposal passes + google.protobuf.Any header = 4; +} + +// Height is a monotonically increasing data type +// that can be compared against another Height for the purposes of updating and +// freezing clients +// +// Normally the RevisionHeight is incremented at each height while keeping RevisionNumber +// the same. However some consensus algorithms may choose to reset the +// height in certain conditions e.g. hard forks, state-machine breaking changes +// In these cases, the RevisionNumber is incremented so that height continues to +// be monitonically increasing even as the RevisionHeight gets reset +message Height { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + // the revision that the client is currently on + uint64 revision_number = 1 [(gogoproto.moretags) = "yaml:\"revision_number\""]; + // the height within the given revision + uint64 revision_height = 2 [(gogoproto.moretags) = "yaml:\"revision_height\""]; +} + +// Params defines the set of IBC light client parameters. +message Params { + // allowed_clients defines the list of allowed client state types. + repeated string allowed_clients = 1 [(gogoproto.moretags) = "yaml:\"allowed_clients\""]; +} diff --git a/third_party/proto/ibc/core/client/v1/genesis.proto b/third_party/proto/ibc/core/client/v1/genesis.proto new file mode 100644 index 0000000000..16febbceef --- /dev/null +++ b/third_party/proto/ibc/core/client/v1/genesis.proto @@ -0,0 +1,46 @@ +syntax = "proto3"; +package ibc.core.client.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types"; + +import "ibc/core/client/v1/client.proto"; +import "gogoproto/gogo.proto"; + +// GenesisState defines the ibc client submodule's genesis state. +message GenesisState { + // client states with their corresponding identifiers + repeated IdentifiedClientState clients = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "IdentifiedClientStates"]; + // consensus states from each client + repeated ClientConsensusStates clients_consensus = 2 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "ClientsConsensusStates", + (gogoproto.moretags) = "yaml:\"clients_consensus\"" + ]; + // metadata from each client + repeated IdentifiedGenesisMetadata clients_metadata = 3 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"clients_metadata\""]; + Params params = 4 [(gogoproto.nullable) = false]; + // create localhost on initialization + bool create_localhost = 5 [(gogoproto.moretags) = "yaml:\"create_localhost\""]; + // the sequence for the next generated client identifier + uint64 next_client_sequence = 6 [(gogoproto.moretags) = "yaml:\"next_client_sequence\""]; +} + +// GenesisMetadata defines the genesis type for metadata that clients may return +// with ExportMetadata +message GenesisMetadata { + option (gogoproto.goproto_getters) = false; + + // store key of metadata without clientID-prefix + bytes key = 1; + // metadata value + bytes value = 2; +} + +// IdentifiedGenesisMetadata has the client metadata with the corresponding client id. +message IdentifiedGenesisMetadata { + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + repeated GenesisMetadata client_metadata = 2 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"client_metadata\""]; +} \ No newline at end of file diff --git a/third_party/proto/ibc/core/client/v1/query.proto b/third_party/proto/ibc/core/client/v1/query.proto new file mode 100644 index 0000000000..97f3acd627 --- /dev/null +++ b/third_party/proto/ibc/core/client/v1/query.proto @@ -0,0 +1,130 @@ +syntax = "proto3"; +package ibc.core.client.v1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "ibc/core/client/v1/client.proto"; +import "google/protobuf/any.proto"; +import "google/api/annotations.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types"; + +// Query provides defines the gRPC querier service +service Query { + // ClientState queries an IBC light client. + rpc ClientState(QueryClientStateRequest) returns (QueryClientStateResponse) { + option (google.api.http).get = "/ibc/core/client/v1beta1/client_states/{client_id}"; + } + + // ClientStates queries all the IBC light clients of a chain. + rpc ClientStates(QueryClientStatesRequest) returns (QueryClientStatesResponse) { + option (google.api.http).get = "/ibc/core/client/v1beta1/client_states"; + } + + // ConsensusState queries a consensus state associated with a client state at + // a given height. + rpc ConsensusState(QueryConsensusStateRequest) returns (QueryConsensusStateResponse) { + option (google.api.http).get = "/ibc/core/client/v1beta1/consensus_states/{client_id}/revision/{revision_number}/" + "height/{revision_height}"; + } + + // ConsensusStates queries all the consensus state associated with a given + // client. + rpc ConsensusStates(QueryConsensusStatesRequest) returns (QueryConsensusStatesResponse) { + option (google.api.http).get = "/ibc/core/client/v1beta1/consensus_states/{client_id}"; + } + + // ClientParams queries all parameters of the ibc client. + rpc ClientParams(QueryClientParamsRequest) returns (QueryClientParamsResponse) { + option (google.api.http).get = "/ibc/client/v1beta1/params"; + } +} + +// QueryClientStateRequest is the request type for the Query/ClientState RPC +// method +message QueryClientStateRequest { + // client state unique identifier + string client_id = 1; +} + +// QueryClientStateResponse is the response type for the Query/ClientState RPC +// method. Besides the client state, it includes a proof and the height from +// which the proof was retrieved. +message QueryClientStateResponse { + // client state associated with the request identifier + google.protobuf.Any client_state = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} + +// QueryClientStatesRequest is the request type for the Query/ClientStates RPC +// method +message QueryClientStatesRequest { + // pagination request + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryClientStatesResponse is the response type for the Query/ClientStates RPC +// method. +message QueryClientStatesResponse { + // list of stored ClientStates of the chain. + repeated IdentifiedClientState client_states = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "IdentifiedClientStates"]; + // pagination response + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryConsensusStateRequest is the request type for the Query/ConsensusState +// RPC method. Besides the consensus state, it includes a proof and the height +// from which the proof was retrieved. +message QueryConsensusStateRequest { + // client identifier + string client_id = 1; + // consensus state revision number + uint64 revision_number = 2; + // consensus state revision height + uint64 revision_height = 3; + // latest_height overrrides the height field and queries the latest stored + // ConsensusState + bool latest_height = 4; +} + +// QueryConsensusStateResponse is the response type for the Query/ConsensusState +// RPC method +message QueryConsensusStateResponse { + // consensus state associated with the client identifier at the given height + google.protobuf.Any consensus_state = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} + +// QueryConsensusStatesRequest is the request type for the Query/ConsensusStates +// RPC method. +message QueryConsensusStatesRequest { + // client identifier + string client_id = 1; + // pagination request + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryConsensusStatesResponse is the response type for the +// Query/ConsensusStates RPC method +message QueryConsensusStatesResponse { + // consensus states associated with the identifier + repeated ConsensusStateWithHeight consensus_states = 1 [(gogoproto.nullable) = false]; + // pagination response + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryClientParamsRequest is the request type for the Query/ClientParams RPC method. +message QueryClientParamsRequest {} + +// QueryClientParamsResponse is the response type for the Query/ClientParams RPC method. +message QueryClientParamsResponse { + // params defines the parameters of the module. + Params params = 1; +} diff --git a/third_party/proto/ibc/core/client/v1/tx.proto b/third_party/proto/ibc/core/client/v1/tx.proto new file mode 100644 index 0000000000..a30ec8bbf1 --- /dev/null +++ b/third_party/proto/ibc/core/client/v1/tx.proto @@ -0,0 +1,96 @@ +syntax = "proto3"; +package ibc.core.client.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "ibc/core/client/v1/client.proto"; + +// Msg defines the ibc/client Msg service. +service Msg { + // CreateClient defines a rpc handler method for MsgCreateClient. + rpc CreateClient(MsgCreateClient) returns (MsgCreateClientResponse); + + // UpdateClient defines a rpc handler method for MsgUpdateClient. + rpc UpdateClient(MsgUpdateClient) returns (MsgUpdateClientResponse); + + // UpgradeClient defines a rpc handler method for MsgUpgradeClient. + rpc UpgradeClient(MsgUpgradeClient) returns (MsgUpgradeClientResponse); + + // SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour. + rpc SubmitMisbehaviour(MsgSubmitMisbehaviour) returns (MsgSubmitMisbehaviourResponse); +} + +// MsgCreateClient defines a message to create an IBC client +message MsgCreateClient { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // light client state + google.protobuf.Any client_state = 1 [(gogoproto.moretags) = "yaml:\"client_state\""]; + // consensus state associated with the client that corresponds to a given + // height. + google.protobuf.Any consensus_state = 2 [(gogoproto.moretags) = "yaml:\"consensus_state\""]; + // signer address + string signer = 3; +} + +// MsgCreateClientResponse defines the Msg/CreateClient response type. +message MsgCreateClientResponse {} + +// MsgUpdateClient defines an sdk.Msg to update a IBC client state using +// the given header. +message MsgUpdateClient { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // client unique identifier + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // header to update the light client + google.protobuf.Any header = 2; + // signer address + string signer = 3; +} + +// MsgUpdateClientResponse defines the Msg/UpdateClient response type. +message MsgUpdateClientResponse {} + +// MsgUpgradeClient defines an sdk.Msg to upgrade an IBC client to a new client state +message MsgUpgradeClient { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // client unique identifier + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // upgraded client state + google.protobuf.Any client_state = 2 [(gogoproto.moretags) = "yaml:\"client_state\""]; + // upgraded consensus state, only contains enough information to serve as a basis of trust in update logic + google.protobuf.Any consensus_state = 3 [(gogoproto.moretags) = "yaml:\"consensus_state\""]; + // proof that old chain committed to new client + bytes proof_upgrade_client = 4 [(gogoproto.moretags) = "yaml:\"proof_upgrade_client\""]; + // proof that old chain committed to new consensus state + bytes proof_upgrade_consensus_state = 5 [(gogoproto.moretags) = "yaml:\"proof_upgrade_consensus_state\""]; + // signer address + string signer = 6; +} + +// MsgUpgradeClientResponse defines the Msg/UpgradeClient response type. +message MsgUpgradeClientResponse {} + +// MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for +// light client misbehaviour. +message MsgSubmitMisbehaviour { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // client unique identifier + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // misbehaviour used for freezing the light client + google.protobuf.Any misbehaviour = 2; + // signer address + string signer = 3; +} + +// MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response type. +message MsgSubmitMisbehaviourResponse {} diff --git a/third_party/proto/ibc/core/commitment/v1/commitment.proto b/third_party/proto/ibc/core/commitment/v1/commitment.proto new file mode 100644 index 0000000000..51c1027316 --- /dev/null +++ b/third_party/proto/ibc/core/commitment/v1/commitment.proto @@ -0,0 +1,40 @@ +syntax = "proto3"; +package ibc.core.commitment.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types"; + +import "gogoproto/gogo.proto"; +import "confio/proofs.proto"; + +// MerkleRoot defines a merkle root hash. +// In the Cosmos SDK, the AppHash of a block header becomes the root. +message MerkleRoot { + option (gogoproto.goproto_getters) = false; + + bytes hash = 1; +} + +// MerklePrefix is merkle path prefixed to the key. +// The constructed key from the Path and the key will be append(Path.KeyPath, +// append(Path.KeyPrefix, key...)) +message MerklePrefix { + bytes key_prefix = 1 [(gogoproto.moretags) = "yaml:\"key_prefix\""]; +} + +// MerklePath is the path used to verify commitment proofs, which can be an +// arbitrary structured object (defined by a commitment type). +// MerklePath is represented from root-to-leaf +message MerklePath { + option (gogoproto.goproto_stringer) = false; + + repeated string key_path = 1 [(gogoproto.moretags) = "yaml:\"key_path\""]; +} + +// MerkleProof is a wrapper type over a chain of CommitmentProofs. +// It demonstrates membership or non-membership for an element or set of +// elements, verifiable in conjunction with a known commitment root. Proofs +// should be succinct. +// MerkleProofs are ordered from leaf-to-root +message MerkleProof { + repeated ics23.CommitmentProof proofs = 1; +} \ No newline at end of file diff --git a/third_party/proto/ibc/core/connection/v1/connection.proto b/third_party/proto/ibc/core/connection/v1/connection.proto new file mode 100644 index 0000000000..d21e595165 --- /dev/null +++ b/third_party/proto/ibc/core/connection/v1/connection.proto @@ -0,0 +1,104 @@ +syntax = "proto3"; +package ibc.core.connection.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/03-connection/types"; + +import "gogoproto/gogo.proto"; +import "ibc/core/commitment/v1/commitment.proto"; + +// ICS03 - Connection Data Structures as defined in +// https://github.com/cosmos/ics/tree/master/spec/ics-003-connection-semantics#data-structures + +// ConnectionEnd defines a stateful object on a chain connected to another +// separate one. +// NOTE: there must only be 2 defined ConnectionEnds to establish +// a connection between two chains. +message ConnectionEnd { + option (gogoproto.goproto_getters) = false; + // client associated with this connection. + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // IBC version which can be utilised to determine encodings or protocols for + // channels or packets utilising this connection. + repeated Version versions = 2; + // current state of the connection end. + State state = 3; + // counterparty chain associated with this connection. + Counterparty counterparty = 4 [(gogoproto.nullable) = false]; + // delay period that must pass before a consensus state can be used for packet-verification + // NOTE: delay period logic is only implemented by some clients. + uint64 delay_period = 5 [(gogoproto.moretags) = "yaml:\"delay_period\""]; +} + +// IdentifiedConnection defines a connection with additional connection +// identifier field. +message IdentifiedConnection { + option (gogoproto.goproto_getters) = false; + // connection identifier. + string id = 1 [(gogoproto.moretags) = "yaml:\"id\""]; + // client associated with this connection. + string client_id = 2 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // IBC version which can be utilised to determine encodings or protocols for + // channels or packets utilising this connection + repeated Version versions = 3; + // current state of the connection end. + State state = 4; + // counterparty chain associated with this connection. + Counterparty counterparty = 5 [(gogoproto.nullable) = false]; + // delay period associated with this connection. + uint64 delay_period = 6 [(gogoproto.moretags) = "yaml:\"delay_period\""]; +} + +// State defines if a connection is in one of the following states: +// INIT, TRYOPEN, OPEN or UNINITIALIZED. +enum State { + option (gogoproto.goproto_enum_prefix) = false; + + // Default State + STATE_UNINITIALIZED_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "UNINITIALIZED"]; + // A connection end has just started the opening handshake. + STATE_INIT = 1 [(gogoproto.enumvalue_customname) = "INIT"]; + // A connection end has acknowledged the handshake step on the counterparty + // chain. + STATE_TRYOPEN = 2 [(gogoproto.enumvalue_customname) = "TRYOPEN"]; + // A connection end has completed the handshake. + STATE_OPEN = 3 [(gogoproto.enumvalue_customname) = "OPEN"]; +} + +// Counterparty defines the counterparty chain associated with a connection end. +message Counterparty { + option (gogoproto.goproto_getters) = false; + + // identifies the client on the counterparty chain associated with a given + // connection. + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // identifies the connection end on the counterparty chain associated with a + // given connection. + string connection_id = 2 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + // commitment merkle prefix of the counterparty chain. + ibc.core.commitment.v1.MerklePrefix prefix = 3 [(gogoproto.nullable) = false]; +} + +// ClientPaths define all the connection paths for a client state. +message ClientPaths { + // list of connection paths + repeated string paths = 1; +} + +// ConnectionPaths define all the connection paths for a given client state. +message ConnectionPaths { + // client state unique identifier + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // list of connection paths + repeated string paths = 2; +} + +// Version defines the versioning scheme used to negotiate the IBC verison in +// the connection handshake. +message Version { + option (gogoproto.goproto_getters) = false; + + // unique version identifier + string identifier = 1; + // list of features compatible with the specified identifier + repeated string features = 2; +} diff --git a/third_party/proto/ibc/core/connection/v1/genesis.proto b/third_party/proto/ibc/core/connection/v1/genesis.proto new file mode 100644 index 0000000000..11df4ba180 --- /dev/null +++ b/third_party/proto/ibc/core/connection/v1/genesis.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package ibc.core.connection.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/03-connection/types"; + +import "gogoproto/gogo.proto"; +import "ibc/core/connection/v1/connection.proto"; + +// GenesisState defines the ibc connection submodule's genesis state. +message GenesisState { + repeated IdentifiedConnection connections = 1 [(gogoproto.nullable) = false]; + repeated ConnectionPaths client_connection_paths = 2 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"client_connection_paths\""]; + // the sequence for the next generated connection identifier + uint64 next_connection_sequence = 3 [(gogoproto.moretags) = "yaml:\"next_connection_sequence\""]; +} diff --git a/third_party/proto/ibc/core/connection/v1/query.proto b/third_party/proto/ibc/core/connection/v1/query.proto new file mode 100644 index 0000000000..c5085a131f --- /dev/null +++ b/third_party/proto/ibc/core/connection/v1/query.proto @@ -0,0 +1,137 @@ +syntax = "proto3"; +package ibc.core.connection.v1; + +import "gogoproto/gogo.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "ibc/core/client/v1/client.proto"; +import "ibc/core/connection/v1/connection.proto"; +import "google/api/annotations.proto"; +import "google/protobuf/any.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/03-connection/types"; + +// Query provides defines the gRPC querier service +service Query { + // Connection queries an IBC connection end. + rpc Connection(QueryConnectionRequest) returns (QueryConnectionResponse) { + option (google.api.http).get = "/ibc/core/connection/v1beta1/connections/{connection_id}"; + } + + // Connections queries all the IBC connections of a chain. + rpc Connections(QueryConnectionsRequest) returns (QueryConnectionsResponse) { + option (google.api.http).get = "/ibc/core/connection/v1beta1/connections"; + } + + // ClientConnections queries the connection paths associated with a client + // state. + rpc ClientConnections(QueryClientConnectionsRequest) returns (QueryClientConnectionsResponse) { + option (google.api.http).get = "/ibc/core/connection/v1beta1/client_connections/{client_id}"; + } + + // ConnectionClientState queries the client state associated with the + // connection. + rpc ConnectionClientState(QueryConnectionClientStateRequest) returns (QueryConnectionClientStateResponse) { + option (google.api.http).get = "/ibc/core/connection/v1beta1/connections/{connection_id}/client_state"; + } + + // ConnectionConsensusState queries the consensus state associated with the + // connection. + rpc ConnectionConsensusState(QueryConnectionConsensusStateRequest) returns (QueryConnectionConsensusStateResponse) { + option (google.api.http).get = "/ibc/core/connection/v1beta1/connections/{connection_id}/consensus_state/" + "revision/{revision_number}/height/{revision_height}"; + } +} + +// QueryConnectionRequest is the request type for the Query/Connection RPC +// method +message QueryConnectionRequest { + // connection unique identifier + string connection_id = 1; +} + +// QueryConnectionResponse is the response type for the Query/Connection RPC +// method. Besides the connection end, it includes a proof and the height from +// which the proof was retrieved. +message QueryConnectionResponse { + // connection associated with the request identifier + ibc.core.connection.v1.ConnectionEnd connection = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} + +// QueryConnectionsRequest is the request type for the Query/Connections RPC +// method +message QueryConnectionsRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryConnectionsResponse is the response type for the Query/Connections RPC +// method. +message QueryConnectionsResponse { + // list of stored connections of the chain. + repeated ibc.core.connection.v1.IdentifiedConnection connections = 1; + // pagination response + cosmos.base.query.v1beta1.PageResponse pagination = 2; + // query block height + ibc.core.client.v1.Height height = 3 [(gogoproto.nullable) = false]; +} + +// QueryClientConnectionsRequest is the request type for the +// Query/ClientConnections RPC method +message QueryClientConnectionsRequest { + // client identifier associated with a connection + string client_id = 1; +} + +// QueryClientConnectionsResponse is the response type for the +// Query/ClientConnections RPC method +message QueryClientConnectionsResponse { + // slice of all the connection paths associated with a client. + repeated string connection_paths = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was generated + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} + +// QueryConnectionClientStateRequest is the request type for the +// Query/ConnectionClientState RPC method +message QueryConnectionClientStateRequest { + // connection identifier + string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; +} + +// QueryConnectionClientStateResponse is the response type for the +// Query/ConnectionClientState RPC method +message QueryConnectionClientStateResponse { + // client state associated with the channel + ibc.core.client.v1.IdentifiedClientState identified_client_state = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} + +// QueryConnectionConsensusStateRequest is the request type for the +// Query/ConnectionConsensusState RPC method +message QueryConnectionConsensusStateRequest { + // connection identifier + string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + uint64 revision_number = 2; + uint64 revision_height = 3; +} + +// QueryConnectionConsensusStateResponse is the response type for the +// Query/ConnectionConsensusState RPC method +message QueryConnectionConsensusStateResponse { + // consensus state associated with the channel + google.protobuf.Any consensus_state = 1; + // client ID associated with the consensus state + string client_id = 2; + // merkle proof of existence + bytes proof = 3; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/ibc/core/connection/v1/tx.proto b/third_party/proto/ibc/core/connection/v1/tx.proto new file mode 100644 index 0000000000..19b40c69c3 --- /dev/null +++ b/third_party/proto/ibc/core/connection/v1/tx.proto @@ -0,0 +1,115 @@ +syntax = "proto3"; +package ibc.core.connection.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/03-connection/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "ibc/core/client/v1/client.proto"; +import "ibc/core/connection/v1/connection.proto"; + +// Msg defines the ibc/connection Msg service. +service Msg { + // ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit. + rpc ConnectionOpenInit(MsgConnectionOpenInit) returns (MsgConnectionOpenInitResponse); + + // ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry. + rpc ConnectionOpenTry(MsgConnectionOpenTry) returns (MsgConnectionOpenTryResponse); + + // ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck. + rpc ConnectionOpenAck(MsgConnectionOpenAck) returns (MsgConnectionOpenAckResponse); + + // ConnectionOpenConfirm defines a rpc handler method for MsgConnectionOpenConfirm. + rpc ConnectionOpenConfirm(MsgConnectionOpenConfirm) returns (MsgConnectionOpenConfirmResponse); +} + +// MsgConnectionOpenInit defines the msg sent by an account on Chain A to +// initialize a connection with Chain B. +message MsgConnectionOpenInit { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + Counterparty counterparty = 2 [(gogoproto.nullable) = false]; + Version version = 3; + uint64 delay_period = 4 [(gogoproto.moretags) = "yaml:\"delay_period\""]; + string signer = 5; +} + +// MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response type. +message MsgConnectionOpenInitResponse {} + +// MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a +// connection on Chain B. +message MsgConnectionOpenTry { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // in the case of crossing hello's, when both chains call OpenInit, we need the connection identifier + // of the previous connection in state INIT + string previous_connection_id = 2 [(gogoproto.moretags) = "yaml:\"previous_connection_id\""]; + google.protobuf.Any client_state = 3 [(gogoproto.moretags) = "yaml:\"client_state\""]; + Counterparty counterparty = 4 [(gogoproto.nullable) = false]; + uint64 delay_period = 5 [(gogoproto.moretags) = "yaml:\"delay_period\""]; + repeated Version counterparty_versions = 6 [(gogoproto.moretags) = "yaml:\"counterparty_versions\""]; + ibc.core.client.v1.Height proof_height = 7 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + // proof of the initialization the connection on Chain A: `UNITIALIZED -> + // INIT` + bytes proof_init = 8 [(gogoproto.moretags) = "yaml:\"proof_init\""]; + // proof of client state included in message + bytes proof_client = 9 [(gogoproto.moretags) = "yaml:\"proof_client\""]; + // proof of client consensus state + bytes proof_consensus = 10 [(gogoproto.moretags) = "yaml:\"proof_consensus\""]; + ibc.core.client.v1.Height consensus_height = 11 + [(gogoproto.moretags) = "yaml:\"consensus_height\"", (gogoproto.nullable) = false]; + string signer = 12; +} + +// MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type. +message MsgConnectionOpenTryResponse {} + +// MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to +// acknowledge the change of connection state to TRYOPEN on Chain B. +message MsgConnectionOpenAck { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + string counterparty_connection_id = 2 [(gogoproto.moretags) = "yaml:\"counterparty_connection_id\""]; + Version version = 3; + google.protobuf.Any client_state = 4 [(gogoproto.moretags) = "yaml:\"client_state\""]; + ibc.core.client.v1.Height proof_height = 5 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + // proof of the initialization the connection on Chain B: `UNITIALIZED -> + // TRYOPEN` + bytes proof_try = 6 [(gogoproto.moretags) = "yaml:\"proof_try\""]; + // proof of client state included in message + bytes proof_client = 7 [(gogoproto.moretags) = "yaml:\"proof_client\""]; + // proof of client consensus state + bytes proof_consensus = 8 [(gogoproto.moretags) = "yaml:\"proof_consensus\""]; + ibc.core.client.v1.Height consensus_height = 9 + [(gogoproto.moretags) = "yaml:\"consensus_height\"", (gogoproto.nullable) = false]; + string signer = 10; +} + +// MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type. +message MsgConnectionOpenAckResponse {} + +// MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to +// acknowledge the change of connection state to OPEN on Chain A. +message MsgConnectionOpenConfirm { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + // proof for the change of the connection state on Chain A: `INIT -> OPEN` + bytes proof_ack = 2 [(gogoproto.moretags) = "yaml:\"proof_ack\""]; + ibc.core.client.v1.Height proof_height = 3 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 4; +} + +// MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm response type. +message MsgConnectionOpenConfirmResponse {} diff --git a/third_party/proto/ibc/core/types/v1/genesis.proto b/third_party/proto/ibc/core/types/v1/genesis.proto new file mode 100644 index 0000000000..ace5085993 --- /dev/null +++ b/third_party/proto/ibc/core/types/v1/genesis.proto @@ -0,0 +1,22 @@ +syntax = "proto3"; +package ibc.core.types.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/types"; + +import "gogoproto/gogo.proto"; +import "ibc/core/client/v1/genesis.proto"; +import "ibc/core/connection/v1/genesis.proto"; +import "ibc/core/channel/v1/genesis.proto"; + +// GenesisState defines the ibc module's genesis state. +message GenesisState { + // ICS002 - Clients genesis state + ibc.core.client.v1.GenesisState client_genesis = 1 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"client_genesis\""]; + // ICS003 - Connections genesis state + ibc.core.connection.v1.GenesisState connection_genesis = 2 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"connection_genesis\""]; + // ICS004 - Channel genesis state + ibc.core.channel.v1.GenesisState channel_genesis = 3 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"channel_genesis\""]; +} diff --git a/third_party/proto/ibc/lightclients/localhost/v1/localhost.proto b/third_party/proto/ibc/lightclients/localhost/v1/localhost.proto new file mode 100644 index 0000000000..d48a1c0076 --- /dev/null +++ b/third_party/proto/ibc/lightclients/localhost/v1/localhost.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +package ibc.lightclients.localhost.v1; + +import "gogoproto/gogo.proto"; +import "ibc/core/client/v1/client.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/light-clients/09-localhost/types"; + +// ClientState defines a loopback (localhost) client. It requires (read-only) +// access to keys outside the client prefix. +message ClientState { + option (gogoproto.goproto_getters) = false; + // self chain ID + string chain_id = 1 [(gogoproto.moretags) = "yaml:\"chain_id\""]; + // self latest block height + ibc.core.client.v1.Height height = 2 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/ibc/lightclients/solomachine/v1/solomachine.proto b/third_party/proto/ibc/lightclients/solomachine/v1/solomachine.proto new file mode 100644 index 0000000000..89686f3b7f --- /dev/null +++ b/third_party/proto/ibc/lightclients/solomachine/v1/solomachine.proto @@ -0,0 +1,186 @@ +syntax = "proto3"; +package ibc.lightclients.solomachine.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/light-clients/06-solomachine/types"; + +import "ibc/core/connection/v1/connection.proto"; +import "ibc/core/channel/v1/channel.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; + +// ClientState defines a solo machine client that tracks the current consensus +// state and if the client is frozen. +message ClientState { + option (gogoproto.goproto_getters) = false; + // latest sequence of the client state + uint64 sequence = 1; + // frozen sequence of the solo machine + uint64 frozen_sequence = 2 [(gogoproto.moretags) = "yaml:\"frozen_sequence\""]; + ConsensusState consensus_state = 3 [(gogoproto.moretags) = "yaml:\"consensus_state\""]; + // when set to true, will allow governance to update a solo machine client. + // The client will be unfrozen if it is frozen. + bool allow_update_after_proposal = 4 [(gogoproto.moretags) = "yaml:\"allow_update_after_proposal\""]; +} + +// ConsensusState defines a solo machine consensus state. The sequence of a consensus state +// is contained in the "height" key used in storing the consensus state. +message ConsensusState { + option (gogoproto.goproto_getters) = false; + // public key of the solo machine + google.protobuf.Any public_key = 1 [(gogoproto.moretags) = "yaml:\"public_key\""]; + // diversifier allows the same public key to be re-used across different solo machine clients + // (potentially on different chains) without being considered misbehaviour. + string diversifier = 2; + uint64 timestamp = 3; +} + +// Header defines a solo machine consensus header +message Header { + option (gogoproto.goproto_getters) = false; + // sequence to update solo machine public key at + uint64 sequence = 1; + uint64 timestamp = 2; + bytes signature = 3; + google.protobuf.Any new_public_key = 4 [(gogoproto.moretags) = "yaml:\"new_public_key\""]; + string new_diversifier = 5 [(gogoproto.moretags) = "yaml:\"new_diversifier\""]; +} + +// Misbehaviour defines misbehaviour for a solo machine which consists +// of a sequence and two signatures over different messages at that sequence. +message Misbehaviour { + option (gogoproto.goproto_getters) = false; + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + uint64 sequence = 2; + SignatureAndData signature_one = 3 [(gogoproto.moretags) = "yaml:\"signature_one\""]; + SignatureAndData signature_two = 4 [(gogoproto.moretags) = "yaml:\"signature_two\""]; +} + +// SignatureAndData contains a signature and the data signed over to create that +// signature. +message SignatureAndData { + option (gogoproto.goproto_getters) = false; + bytes signature = 1; + DataType data_type = 2 [(gogoproto.moretags) = "yaml:\"data_type\""]; + bytes data = 3; + uint64 timestamp = 4; +} + +// TimestampedSignatureData contains the signature data and the timestamp of the +// signature. +message TimestampedSignatureData { + option (gogoproto.goproto_getters) = false; + bytes signature_data = 1 [(gogoproto.moretags) = "yaml:\"signature_data\""]; + uint64 timestamp = 2; +} + +// SignBytes defines the signed bytes used for signature verification. +message SignBytes { + option (gogoproto.goproto_getters) = false; + + uint64 sequence = 1; + uint64 timestamp = 2; + string diversifier = 3; + // type of the data used + DataType data_type = 4 [(gogoproto.moretags) = "yaml:\"data_type\""]; + // marshaled data + bytes data = 5; +} + +// DataType defines the type of solo machine proof being created. This is done to preserve uniqueness of different +// data sign byte encodings. +enum DataType { + option (gogoproto.goproto_enum_prefix) = false; + + // Default State + DATA_TYPE_UNINITIALIZED_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "UNSPECIFIED"]; + // Data type for client state verification + DATA_TYPE_CLIENT_STATE = 1 [(gogoproto.enumvalue_customname) = "CLIENT"]; + // Data type for consensus state verification + DATA_TYPE_CONSENSUS_STATE = 2 [(gogoproto.enumvalue_customname) = "CONSENSUS"]; + // Data type for connection state verification + DATA_TYPE_CONNECTION_STATE = 3 [(gogoproto.enumvalue_customname) = "CONNECTION"]; + // Data type for channel state verification + DATA_TYPE_CHANNEL_STATE = 4 [(gogoproto.enumvalue_customname) = "CHANNEL"]; + // Data type for packet commitment verification + DATA_TYPE_PACKET_COMMITMENT = 5 [(gogoproto.enumvalue_customname) = "PACKETCOMMITMENT"]; + // Data type for packet acknowledgement verification + DATA_TYPE_PACKET_ACKNOWLEDGEMENT = 6 [(gogoproto.enumvalue_customname) = "PACKETACKNOWLEDGEMENT"]; + // Data type for packet receipt absence verification + DATA_TYPE_PACKET_RECEIPT_ABSENCE = 7 [(gogoproto.enumvalue_customname) = "PACKETRECEIPTABSENCE"]; + // Data type for next sequence recv verification + DATA_TYPE_NEXT_SEQUENCE_RECV = 8 [(gogoproto.enumvalue_customname) = "NEXTSEQUENCERECV"]; + // Data type for header verification + DATA_TYPE_HEADER = 9 [(gogoproto.enumvalue_customname) = "HEADER"]; +} + +// HeaderData returns the SignBytes data for update verification. +message HeaderData { + option (gogoproto.goproto_getters) = false; + + // header public key + google.protobuf.Any new_pub_key = 1 [(gogoproto.moretags) = "yaml:\"new_pub_key\""]; + // header diversifier + string new_diversifier = 2 [(gogoproto.moretags) = "yaml:\"new_diversifier\""]; +} + +// ClientStateData returns the SignBytes data for client state verification. +message ClientStateData { + option (gogoproto.goproto_getters) = false; + + bytes path = 1; + google.protobuf.Any client_state = 2 [(gogoproto.moretags) = "yaml:\"client_state\""]; +} + +// ConsensusStateData returns the SignBytes data for consensus state +// verification. +message ConsensusStateData { + option (gogoproto.goproto_getters) = false; + + bytes path = 1; + google.protobuf.Any consensus_state = 2 [(gogoproto.moretags) = "yaml:\"consensus_state\""]; +} + +// ConnectionStateData returns the SignBytes data for connection state +// verification. +message ConnectionStateData { + option (gogoproto.goproto_getters) = false; + + bytes path = 1; + ibc.core.connection.v1.ConnectionEnd connection = 2; +} + +// ChannelStateData returns the SignBytes data for channel state +// verification. +message ChannelStateData { + option (gogoproto.goproto_getters) = false; + + bytes path = 1; + ibc.core.channel.v1.Channel channel = 2; +} + +// PacketCommitmentData returns the SignBytes data for packet commitment +// verification. +message PacketCommitmentData { + bytes path = 1; + bytes commitment = 2; +} + +// PacketAcknowledgementData returns the SignBytes data for acknowledgement +// verification. +message PacketAcknowledgementData { + bytes path = 1; + bytes acknowledgement = 2; +} + +// PacketReceiptAbsenceData returns the SignBytes data for +// packet receipt absence verification. +message PacketReceiptAbsenceData { + bytes path = 1; +} + +// NextSequenceRecvData returns the SignBytes data for verification of the next +// sequence to be received. +message NextSequenceRecvData { + bytes path = 1; + uint64 next_seq_recv = 2 [(gogoproto.moretags) = "yaml:\"next_seq_recv\""]; +} diff --git a/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto b/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto new file mode 100644 index 0000000000..a6882bf432 --- /dev/null +++ b/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto @@ -0,0 +1,111 @@ +syntax = "proto3"; +package ibc.lightclients.tendermint.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/light-clients/07-tendermint/types"; + +import "tendermint/types/validator.proto"; +import "tendermint/types/types.proto"; +import "confio/proofs.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; +import "ibc/core/client/v1/client.proto"; +import "ibc/core/commitment/v1/commitment.proto"; +import "gogoproto/gogo.proto"; + +// ClientState from Tendermint tracks the current validator set, latest height, +// and a possible frozen height. +message ClientState { + option (gogoproto.goproto_getters) = false; + + string chain_id = 1; + Fraction trust_level = 2 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"trust_level\""]; + // duration of the period since the LastestTimestamp during which the + // submitted headers are valid for upgrade + google.protobuf.Duration trusting_period = 3 + [(gogoproto.nullable) = false, (gogoproto.stdduration) = true, (gogoproto.moretags) = "yaml:\"trusting_period\""]; + // duration of the staking unbonding period + google.protobuf.Duration unbonding_period = 4 [ + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true, + (gogoproto.moretags) = "yaml:\"unbonding_period\"" + ]; + // defines how much new (untrusted) header's Time can drift into the future. + google.protobuf.Duration max_clock_drift = 5 + [(gogoproto.nullable) = false, (gogoproto.stdduration) = true, (gogoproto.moretags) = "yaml:\"max_clock_drift\""]; + // Block height when the client was frozen due to a misbehaviour + ibc.core.client.v1.Height frozen_height = 6 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"frozen_height\""]; + // Latest height the client was updated to + ibc.core.client.v1.Height latest_height = 7 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"latest_height\""]; + + // Proof specifications used in verifying counterparty state + repeated ics23.ProofSpec proof_specs = 8 [(gogoproto.moretags) = "yaml:\"proof_specs\""]; + + // Path at which next upgraded client will be committed. + // Each element corresponds to the key for a single CommitmentProof in the chained proof. + // NOTE: ClientState must stored under `{upgradePath}/{upgradeHeight}/clientState` + // ConsensusState must be stored under `{upgradepath}/{upgradeHeight}/consensusState` + // For SDK chains using the default upgrade module, upgrade_path should be []string{"upgrade", "upgradedIBCState"}` + repeated string upgrade_path = 9 [(gogoproto.moretags) = "yaml:\"upgrade_path\""]; + + // This flag, when set to true, will allow governance to recover a client + // which has expired + bool allow_update_after_expiry = 10 [(gogoproto.moretags) = "yaml:\"allow_update_after_expiry\""]; + // This flag, when set to true, will allow governance to unfreeze a client + // whose chain has experienced a misbehaviour event + bool allow_update_after_misbehaviour = 11 [(gogoproto.moretags) = "yaml:\"allow_update_after_misbehaviour\""]; +} + +// ConsensusState defines the consensus state from Tendermint. +message ConsensusState { + option (gogoproto.goproto_getters) = false; + + // timestamp that corresponds to the block height in which the ConsensusState + // was stored. + google.protobuf.Timestamp timestamp = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + // commitment root (i.e app hash) + ibc.core.commitment.v1.MerkleRoot root = 2 [(gogoproto.nullable) = false]; + bytes next_validators_hash = 3 [ + (gogoproto.casttype) = "github.com/tendermint/tendermint/libs/bytes.HexBytes", + (gogoproto.moretags) = "yaml:\"next_validators_hash\"" + ]; +} + +// Misbehaviour is a wrapper over two conflicting Headers +// that implements Misbehaviour interface expected by ICS-02 +message Misbehaviour { + option (gogoproto.goproto_getters) = false; + + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + Header header_1 = 2 [(gogoproto.customname) = "Header1", (gogoproto.moretags) = "yaml:\"header_1\""]; + Header header_2 = 3 [(gogoproto.customname) = "Header2", (gogoproto.moretags) = "yaml:\"header_2\""]; +} + +// Header defines the Tendermint client consensus Header. +// It encapsulates all the information necessary to update from a trusted +// Tendermint ConsensusState. The inclusion of TrustedHeight and +// TrustedValidators allows this update to process correctly, so long as the +// ConsensusState for the TrustedHeight exists, this removes race conditions +// among relayers The SignedHeader and ValidatorSet are the new untrusted update +// fields for the client. The TrustedHeight is the height of a stored +// ConsensusState on the client that will be used to verify the new untrusted +// header. The Trusted ConsensusState must be within the unbonding period of +// current time in order to correctly verify, and the TrustedValidators must +// hash to TrustedConsensusState.NextValidatorsHash since that is the last +// trusted validator set at the TrustedHeight. +message Header { + .tendermint.types.SignedHeader signed_header = 1 + [(gogoproto.embed) = true, (gogoproto.moretags) = "yaml:\"signed_header\""]; + + .tendermint.types.ValidatorSet validator_set = 2 [(gogoproto.moretags) = "yaml:\"validator_set\""]; + ibc.core.client.v1.Height trusted_height = 3 + [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"trusted_height\""]; + .tendermint.types.ValidatorSet trusted_validators = 4 [(gogoproto.moretags) = "yaml:\"trusted_validators\""]; +} + +// Fraction defines the protobuf message type for tmmath.Fraction that only supports positive values. +message Fraction { + uint64 numerator = 1; + uint64 denominator = 2; +} diff --git a/third_party/proto/tendermint/abci/types.proto b/third_party/proto/tendermint/abci/types.proto new file mode 100644 index 0000000000..2cbcabb29b --- /dev/null +++ b/third_party/proto/tendermint/abci/types.proto @@ -0,0 +1,407 @@ +syntax = "proto3"; +package tendermint.abci; + +option go_package = "github.com/tendermint/tendermint/abci/types"; + +// For more information on gogo.proto, see: +// https://github.com/gogo/protobuf/blob/master/extensions.md +import "tendermint/crypto/proof.proto"; +import "tendermint/types/types.proto"; +import "tendermint/crypto/keys.proto"; +import "tendermint/types/params.proto"; +import "google/protobuf/timestamp.proto"; +import "gogoproto/gogo.proto"; + +// This file is copied from http://github.com/tendermint/abci +// NOTE: When using custom types, mind the warnings. +// https://github.com/gogo/protobuf/blob/master/custom_types.md#warnings-and-issues + +//---------------------------------------- +// Request types + +message Request { + oneof value { + RequestEcho echo = 1; + RequestFlush flush = 2; + RequestInfo info = 3; + RequestSetOption set_option = 4; + RequestInitChain init_chain = 5; + RequestQuery query = 6; + RequestBeginBlock begin_block = 7; + RequestCheckTx check_tx = 8; + RequestDeliverTx deliver_tx = 9; + RequestEndBlock end_block = 10; + RequestCommit commit = 11; + RequestListSnapshots list_snapshots = 12; + RequestOfferSnapshot offer_snapshot = 13; + RequestLoadSnapshotChunk load_snapshot_chunk = 14; + RequestApplySnapshotChunk apply_snapshot_chunk = 15; + } +} + +message RequestEcho { + string message = 1; +} + +message RequestFlush {} + +message RequestInfo { + string version = 1; + uint64 block_version = 2; + uint64 p2p_version = 3; +} + +// nondeterministic +message RequestSetOption { + string key = 1; + string value = 2; +} + +message RequestInitChain { + google.protobuf.Timestamp time = 1 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + string chain_id = 2; + ConsensusParams consensus_params = 3; + repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; + bytes app_state_bytes = 5; + int64 initial_height = 6; +} + +message RequestQuery { + bytes data = 1; + string path = 2; + int64 height = 3; + bool prove = 4; +} + +message RequestBeginBlock { + bytes hash = 1; + tendermint.types.Header header = 2 [(gogoproto.nullable) = false]; + LastCommitInfo last_commit_info = 3 [(gogoproto.nullable) = false]; + repeated Evidence byzantine_validators = 4 [(gogoproto.nullable) = false]; +} + +enum CheckTxType { + NEW = 0 [(gogoproto.enumvalue_customname) = "New"]; + RECHECK = 1 [(gogoproto.enumvalue_customname) = "Recheck"]; +} + +message RequestCheckTx { + bytes tx = 1; + CheckTxType type = 2; +} + +message RequestDeliverTx { + bytes tx = 1; +} + +message RequestEndBlock { + int64 height = 1; +} + +message RequestCommit {} + +// lists available snapshots +message RequestListSnapshots { +} + +// offers a snapshot to the application +message RequestOfferSnapshot { + Snapshot snapshot = 1; // snapshot offered by peers + bytes app_hash = 2; // light client-verified app hash for snapshot height +} + +// loads a snapshot chunk +message RequestLoadSnapshotChunk { + uint64 height = 1; + uint32 format = 2; + uint32 chunk = 3; +} + +// Applies a snapshot chunk +message RequestApplySnapshotChunk { + uint32 index = 1; + bytes chunk = 2; + string sender = 3; +} + +//---------------------------------------- +// Response types + +message Response { + oneof value { + ResponseException exception = 1; + ResponseEcho echo = 2; + ResponseFlush flush = 3; + ResponseInfo info = 4; + ResponseSetOption set_option = 5; + ResponseInitChain init_chain = 6; + ResponseQuery query = 7; + ResponseBeginBlock begin_block = 8; + ResponseCheckTx check_tx = 9; + ResponseDeliverTx deliver_tx = 10; + ResponseEndBlock end_block = 11; + ResponseCommit commit = 12; + ResponseListSnapshots list_snapshots = 13; + ResponseOfferSnapshot offer_snapshot = 14; + ResponseLoadSnapshotChunk load_snapshot_chunk = 15; + ResponseApplySnapshotChunk apply_snapshot_chunk = 16; + } +} + +// nondeterministic +message ResponseException { + string error = 1; +} + +message ResponseEcho { + string message = 1; +} + +message ResponseFlush {} + +message ResponseInfo { + string data = 1; + + string version = 2; + uint64 app_version = 3; + + int64 last_block_height = 4; + bytes last_block_app_hash = 5; +} + +// nondeterministic +message ResponseSetOption { + uint32 code = 1; + // bytes data = 2; + string log = 3; + string info = 4; +} + +message ResponseInitChain { + ConsensusParams consensus_params = 1; + repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; + bytes app_hash = 3; +} + +message ResponseQuery { + uint32 code = 1; + // bytes data = 2; // use "value" instead. + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 index = 5; + bytes key = 6; + bytes value = 7; + tendermint.crypto.ProofOps proof_ops = 8; + int64 height = 9; + string codespace = 10; +} + +message ResponseBeginBlock { + repeated Event events = 1 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; +} + +message ResponseCheckTx { + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 gas_wanted = 5 [json_name = "gas_wanted"]; + int64 gas_used = 6 [json_name = "gas_used"]; + repeated Event events = 7 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + string codespace = 8; +} + +message ResponseDeliverTx { + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 gas_wanted = 5 [json_name = "gas_wanted"]; + int64 gas_used = 6 [json_name = "gas_used"]; + repeated Event events = 7 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + string codespace = 8; +} + +message ResponseEndBlock { + repeated ValidatorUpdate validator_updates = 1 + [(gogoproto.nullable) = false]; + ConsensusParams consensus_param_updates = 2; + repeated Event events = 3 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; +} + +message ResponseCommit { + // reserve 1 + bytes data = 2; + int64 retain_height = 3; +} + +message ResponseListSnapshots { + repeated Snapshot snapshots = 1; +} + +message ResponseOfferSnapshot { + Result result = 1; + + enum Result { + UNKNOWN = 0; // Unknown result, abort all snapshot restoration + ACCEPT = 1; // Snapshot accepted, apply chunks + ABORT = 2; // Abort all snapshot restoration + REJECT = 3; // Reject this specific snapshot, try others + REJECT_FORMAT = 4; // Reject all snapshots of this format, try others + REJECT_SENDER = 5; // Reject all snapshots from the sender(s), try others + } +} + +message ResponseLoadSnapshotChunk { + bytes chunk = 1; +} + +message ResponseApplySnapshotChunk { + Result result = 1; + repeated uint32 refetch_chunks = 2; // Chunks to refetch and reapply + repeated string reject_senders = 3; // Chunk senders to reject and ban + + enum Result { + UNKNOWN = 0; // Unknown result, abort all snapshot restoration + ACCEPT = 1; // Chunk successfully accepted + ABORT = 2; // Abort all snapshot restoration + RETRY = 3; // Retry chunk (combine with refetch and reject) + RETRY_SNAPSHOT = 4; // Retry snapshot (combine with refetch and reject) + REJECT_SNAPSHOT = 5; // Reject this snapshot, try others + } +} + +//---------------------------------------- +// Misc. + +// ConsensusParams contains all consensus-relevant parameters +// that can be adjusted by the abci app +message ConsensusParams { + BlockParams block = 1; + tendermint.types.EvidenceParams evidence = 2; + tendermint.types.ValidatorParams validator = 3; + tendermint.types.VersionParams version = 4; +} + +// BlockParams contains limits on the block size. +message BlockParams { + // Note: must be greater than 0 + int64 max_bytes = 1; + // Note: must be greater or equal to -1 + int64 max_gas = 2; +} + +message LastCommitInfo { + int32 round = 1; + repeated VoteInfo votes = 2 [(gogoproto.nullable) = false]; +} + +// Event allows application developers to attach additional information to +// ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx. +// Later, transactions may be queried using these events. +message Event { + string type = 1; + repeated EventAttribute attributes = 2 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "attributes,omitempty" + ]; +} + +// EventAttribute is a single key-value pair, associated with an event. +message EventAttribute { + bytes key = 1; + bytes value = 2; + bool index = 3; // nondeterministic +} + +// TxResult contains results of executing the transaction. +// +// One usage is indexing transaction results. +message TxResult { + int64 height = 1; + uint32 index = 2; + bytes tx = 3; + ResponseDeliverTx result = 4 [(gogoproto.nullable) = false]; +} + +//---------------------------------------- +// Blockchain Types + +// Validator +message Validator { + bytes address = 1; // The first 20 bytes of SHA256(public key) + // PubKey pub_key = 2 [(gogoproto.nullable)=false]; + int64 power = 3; // The voting power +} + +// ValidatorUpdate +message ValidatorUpdate { + tendermint.crypto.PublicKey pub_key = 1 [(gogoproto.nullable) = false]; + int64 power = 2; +} + +// VoteInfo +message VoteInfo { + Validator validator = 1 [(gogoproto.nullable) = false]; + bool signed_last_block = 2; +} + +enum EvidenceType { + UNKNOWN = 0; + DUPLICATE_VOTE = 1; + LIGHT_CLIENT_ATTACK = 2; +} + +message Evidence { + EvidenceType type = 1; + // The offending validator + Validator validator = 2 [(gogoproto.nullable) = false]; + // The height when the offense occurred + int64 height = 3; + // The corresponding time where the offense occurred + google.protobuf.Timestamp time = 4 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true + ]; + // Total voting power of the validator set in case the ABCI application does + // not store historical validators. + // https://github.com/tendermint/tendermint/issues/4581 + int64 total_voting_power = 5; +} + +//---------------------------------------- +// State Sync Types + +message Snapshot { + uint64 height = 1; // The height at which the snapshot was taken + uint32 format = 2; // The application-specific snapshot format + uint32 chunks = 3; // Number of chunks in the snapshot + bytes hash = 4; // Arbitrary snapshot hash, equal only if identical + bytes metadata = 5; // Arbitrary application metadata +} + +//---------------------------------------- +// Service Definition + +service ABCIApplication { + rpc Echo(RequestEcho) returns (ResponseEcho); + rpc Flush(RequestFlush) returns (ResponseFlush); + rpc Info(RequestInfo) returns (ResponseInfo); + rpc SetOption(RequestSetOption) returns (ResponseSetOption); + rpc DeliverTx(RequestDeliverTx) returns (ResponseDeliverTx); + rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); + rpc Query(RequestQuery) returns (ResponseQuery); + rpc Commit(RequestCommit) returns (ResponseCommit); + rpc InitChain(RequestInitChain) returns (ResponseInitChain); + rpc BeginBlock(RequestBeginBlock) returns (ResponseBeginBlock); + rpc EndBlock(RequestEndBlock) returns (ResponseEndBlock); + rpc ListSnapshots(RequestListSnapshots) returns (ResponseListSnapshots); + rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); + rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) returns (ResponseLoadSnapshotChunk); + rpc ApplySnapshotChunk(RequestApplySnapshotChunk) returns (ResponseApplySnapshotChunk); +} diff --git a/third_party/proto/tendermint/crypto/keys.proto b/third_party/proto/tendermint/crypto/keys.proto new file mode 100644 index 0000000000..16fd7adf3e --- /dev/null +++ b/third_party/proto/tendermint/crypto/keys.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +package tendermint.crypto; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; + +import "gogoproto/gogo.proto"; + +// PublicKey defines the keys available for use with Tendermint Validators +message PublicKey { + option (gogoproto.compare) = true; + option (gogoproto.equal) = true; + + oneof sum { + bytes ed25519 = 1; + bytes secp256k1 = 2; + } +} diff --git a/third_party/proto/tendermint/crypto/proof.proto b/third_party/proto/tendermint/crypto/proof.proto new file mode 100644 index 0000000000..975df76853 --- /dev/null +++ b/third_party/proto/tendermint/crypto/proof.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; +package tendermint.crypto; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; + +import "gogoproto/gogo.proto"; + +message Proof { + int64 total = 1; + int64 index = 2; + bytes leaf_hash = 3; + repeated bytes aunts = 4; +} + +message ValueOp { + // Encoded in ProofOp.Key. + bytes key = 1; + + // To encode in ProofOp.Data + Proof proof = 2; +} + +message DominoOp { + string key = 1; + string input = 2; + string output = 3; +} + +// ProofOp defines an operation used for calculating Merkle root +// The data could be arbitrary format, providing nessecary data +// for example neighbouring node hash +message ProofOp { + string type = 1; + bytes key = 2; + bytes data = 3; +} + +// ProofOps is Merkle proof defined by the list of ProofOps +message ProofOps { + repeated ProofOp ops = 1 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/tendermint/libs/bits/types.proto b/third_party/proto/tendermint/libs/bits/types.proto new file mode 100644 index 0000000000..3111d113a5 --- /dev/null +++ b/third_party/proto/tendermint/libs/bits/types.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; +package tendermint.libs.bits; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/libs/bits"; + +message BitArray { + int64 bits = 1; + repeated uint64 elems = 2; +} diff --git a/third_party/proto/tendermint/p2p/types.proto b/third_party/proto/tendermint/p2p/types.proto new file mode 100644 index 0000000000..0d42ea4002 --- /dev/null +++ b/third_party/proto/tendermint/p2p/types.proto @@ -0,0 +1,34 @@ +syntax = "proto3"; +package tendermint.p2p; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/p2p"; + +import "gogoproto/gogo.proto"; + +message NetAddress { + string id = 1 [(gogoproto.customname) = "ID"]; + string ip = 2 [(gogoproto.customname) = "IP"]; + uint32 port = 3; +} + +message ProtocolVersion { + uint64 p2p = 1 [(gogoproto.customname) = "P2P"]; + uint64 block = 2; + uint64 app = 3; +} + +message DefaultNodeInfo { + ProtocolVersion protocol_version = 1 [(gogoproto.nullable) = false]; + string default_node_id = 2 [(gogoproto.customname) = "DefaultNodeID"]; + string listen_addr = 3; + string network = 4; + string version = 5; + bytes channels = 6; + string moniker = 7; + DefaultNodeInfoOther other = 8 [(gogoproto.nullable) = false]; +} + +message DefaultNodeInfoOther { + string tx_index = 1; + string rpc_address = 2 [(gogoproto.customname) = "RPCAddress"]; +} diff --git a/third_party/proto/tendermint/types/block.proto b/third_party/proto/tendermint/types/block.proto new file mode 100644 index 0000000000..84e9bb15d8 --- /dev/null +++ b/third_party/proto/tendermint/types/block.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "tendermint/types/types.proto"; +import "tendermint/types/evidence.proto"; + +message Block { + Header header = 1 [(gogoproto.nullable) = false]; + Data data = 2 [(gogoproto.nullable) = false]; + tendermint.types.EvidenceList evidence = 3 [(gogoproto.nullable) = false]; + Commit last_commit = 4; +} diff --git a/third_party/proto/tendermint/types/evidence.proto b/third_party/proto/tendermint/types/evidence.proto new file mode 100644 index 0000000000..3b234571ba --- /dev/null +++ b/third_party/proto/tendermint/types/evidence.proto @@ -0,0 +1,38 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "tendermint/types/types.proto"; +import "tendermint/types/validator.proto"; + +message Evidence { + oneof sum { + DuplicateVoteEvidence duplicate_vote_evidence = 1; + LightClientAttackEvidence light_client_attack_evidence = 2; + } +} + +// DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes. +message DuplicateVoteEvidence { + tendermint.types.Vote vote_a = 1; + tendermint.types.Vote vote_b = 2; + int64 total_voting_power = 3; + int64 validator_power = 4; + google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} + +// LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client. +message LightClientAttackEvidence { + tendermint.types.LightBlock conflicting_block = 1; + int64 common_height = 2; + repeated tendermint.types.Validator byzantine_validators = 3; + int64 total_voting_power = 4; + google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} + +message EvidenceList { + repeated Evidence evidence = 1 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/tendermint/types/params.proto b/third_party/proto/tendermint/types/params.proto new file mode 100644 index 0000000000..0de7d846fb --- /dev/null +++ b/third_party/proto/tendermint/types/params.proto @@ -0,0 +1,80 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; + +option (gogoproto.equal_all) = true; + +// ConsensusParams contains consensus critical parameters that determine the +// validity of blocks. +message ConsensusParams { + BlockParams block = 1 [(gogoproto.nullable) = false]; + EvidenceParams evidence = 2 [(gogoproto.nullable) = false]; + ValidatorParams validator = 3 [(gogoproto.nullable) = false]; + VersionParams version = 4 [(gogoproto.nullable) = false]; +} + +// BlockParams contains limits on the block size. +message BlockParams { + // Max block size, in bytes. + // Note: must be greater than 0 + int64 max_bytes = 1; + // Max gas per block. + // Note: must be greater or equal to -1 + int64 max_gas = 2; + // Minimum time increment between consecutive blocks (in milliseconds) If the + // block header timestamp is ahead of the system clock, decrease this value. + // + // Not exposed to the application. + int64 time_iota_ms = 3; +} + +// EvidenceParams determine how we handle evidence of malfeasance. +message EvidenceParams { + // Max age of evidence, in blocks. + // + // The basic formula for calculating this is: MaxAgeDuration / {average block + // time}. + int64 max_age_num_blocks = 1; + + // Max age of evidence, in time. + // + // It should correspond with an app's "unbonding period" or other similar + // mechanism for handling [Nothing-At-Stake + // attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). + google.protobuf.Duration max_age_duration = 2 + [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + + // This sets the maximum size of total evidence in bytes that can be committed in a single block. + // and should fall comfortably under the max block bytes. + // Default is 1048576 or 1MB + int64 max_bytes = 3; +} + +// ValidatorParams restrict the public key types validators can use. +// NOTE: uses ABCI pubkey naming, not Amino names. +message ValidatorParams { + option (gogoproto.populate) = true; + option (gogoproto.equal) = true; + + repeated string pub_key_types = 1; +} + +// VersionParams contains the ABCI application version. +message VersionParams { + option (gogoproto.populate) = true; + option (gogoproto.equal) = true; + + uint64 app_version = 1; +} + +// HashedParams is a subset of ConsensusParams. +// +// It is hashed into the Header.ConsensusHash. +message HashedParams { + int64 block_max_bytes = 1; + int64 block_max_gas = 2; +} diff --git a/third_party/proto/tendermint/types/types.proto b/third_party/proto/tendermint/types/types.proto new file mode 100644 index 0000000000..7f7ea74cac --- /dev/null +++ b/third_party/proto/tendermint/types/types.proto @@ -0,0 +1,157 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "tendermint/crypto/proof.proto"; +import "tendermint/version/types.proto"; +import "tendermint/types/validator.proto"; + +// BlockIdFlag indicates which BlcokID the signature is for +enum BlockIDFlag { + option (gogoproto.goproto_enum_stringer) = true; + option (gogoproto.goproto_enum_prefix) = false; + + BLOCK_ID_FLAG_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "BlockIDFlagUnknown"]; + BLOCK_ID_FLAG_ABSENT = 1 [(gogoproto.enumvalue_customname) = "BlockIDFlagAbsent"]; + BLOCK_ID_FLAG_COMMIT = 2 [(gogoproto.enumvalue_customname) = "BlockIDFlagCommit"]; + BLOCK_ID_FLAG_NIL = 3 [(gogoproto.enumvalue_customname) = "BlockIDFlagNil"]; +} + +// SignedMsgType is a type of signed message in the consensus. +enum SignedMsgType { + option (gogoproto.goproto_enum_stringer) = true; + option (gogoproto.goproto_enum_prefix) = false; + + SIGNED_MSG_TYPE_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "UnknownType"]; + // Votes + SIGNED_MSG_TYPE_PREVOTE = 1 [(gogoproto.enumvalue_customname) = "PrevoteType"]; + SIGNED_MSG_TYPE_PRECOMMIT = 2 [(gogoproto.enumvalue_customname) = "PrecommitType"]; + + // Proposals + SIGNED_MSG_TYPE_PROPOSAL = 32 [(gogoproto.enumvalue_customname) = "ProposalType"]; +} + +// PartsetHeader +message PartSetHeader { + uint32 total = 1; + bytes hash = 2; +} + +message Part { + uint32 index = 1; + bytes bytes = 2; + tendermint.crypto.Proof proof = 3 [(gogoproto.nullable) = false]; +} + +// BlockID +message BlockID { + bytes hash = 1; + PartSetHeader part_set_header = 2 [(gogoproto.nullable) = false]; +} + +// -------------------------------- + +// Header defines the structure of a Tendermint block header. +message Header { + // basic block info + tendermint.version.Consensus version = 1 [(gogoproto.nullable) = false]; + string chain_id = 2 [(gogoproto.customname) = "ChainID"]; + int64 height = 3; + google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + + // prev block info + BlockID last_block_id = 5 [(gogoproto.nullable) = false]; + + // hashes of block data + bytes last_commit_hash = 6; // commit from validators from the last block + bytes data_hash = 7; // transactions + + // hashes from the app output from the prev block + bytes validators_hash = 8; // validators for the current block + bytes next_validators_hash = 9; // validators for the next block + bytes consensus_hash = 10; // consensus params for current block + bytes app_hash = 11; // state after txs from the previous block + bytes last_results_hash = 12; // root hash of all results from the txs from the previous block + + // consensus info + bytes evidence_hash = 13; // evidence included in the block + bytes proposer_address = 14; // original proposer of the block +} + +// Data contains the set of transactions included in the block +message Data { + // Txs that will be applied by state @ block.Height+1. + // NOTE: not all txs here are valid. We're just agreeing on the order first. + // This means that block.AppHash does not include these txs. + repeated bytes txs = 1; +} + +// Vote represents a prevote, precommit, or commit vote from validators for +// consensus. +message Vote { + SignedMsgType type = 1; + int64 height = 2; + int32 round = 3; + BlockID block_id = 4 + [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; // zero if vote is nil. + google.protobuf.Timestamp timestamp = 5 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes validator_address = 6; + int32 validator_index = 7; + bytes signature = 8; +} + +// Commit contains the evidence that a block was committed by a set of validators. +message Commit { + int64 height = 1; + int32 round = 2; + BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; + repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; +} + +// CommitSig is a part of the Vote included in a Commit. +message CommitSig { + BlockIDFlag block_id_flag = 1; + bytes validator_address = 2; + google.protobuf.Timestamp timestamp = 3 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes signature = 4; +} + +message Proposal { + SignedMsgType type = 1; + int64 height = 2; + int32 round = 3; + int32 pol_round = 4; + BlockID block_id = 5 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; + google.protobuf.Timestamp timestamp = 6 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes signature = 7; +} + +message SignedHeader { + Header header = 1; + Commit commit = 2; +} + +message LightBlock { + SignedHeader signed_header = 1; + tendermint.types.ValidatorSet validator_set = 2; +} + +message BlockMeta { + BlockID block_id = 1 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; + int64 block_size = 2; + Header header = 3 [(gogoproto.nullable) = false]; + int64 num_txs = 4; +} + +// TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree. +message TxProof { + bytes root_hash = 1; + bytes data = 2; + tendermint.crypto.Proof proof = 3; +} diff --git a/third_party/proto/tendermint/types/validator.proto b/third_party/proto/tendermint/types/validator.proto new file mode 100644 index 0000000000..49860b96d6 --- /dev/null +++ b/third_party/proto/tendermint/types/validator.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "tendermint/crypto/keys.proto"; + +message ValidatorSet { + repeated Validator validators = 1; + Validator proposer = 2; + int64 total_voting_power = 3; +} + +message Validator { + bytes address = 1; + tendermint.crypto.PublicKey pub_key = 2 [(gogoproto.nullable) = false]; + int64 voting_power = 3; + int64 proposer_priority = 4; +} + +message SimpleValidator { + tendermint.crypto.PublicKey pub_key = 1; + int64 voting_power = 2; +} diff --git a/third_party/proto/tendermint/version/types.proto b/third_party/proto/tendermint/version/types.proto new file mode 100644 index 0000000000..6061868bd4 --- /dev/null +++ b/third_party/proto/tendermint/version/types.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; +package tendermint.version; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/version"; + +import "gogoproto/gogo.proto"; + +// App includes the protocol and software version for the application. +// This information is included in ResponseInfo. The App.Protocol can be +// updated in ResponseEndBlock. +message App { + uint64 protocol = 1; + string software = 2; +} + +// Consensus captures the consensus rules for processing a block in the blockchain, +// including all blockchain data structures and the rules of the application's +// state transition machine. +message Consensus { + option (gogoproto.equal) = true; + + uint64 block = 1; + uint64 app = 2; +} diff --git a/x/wasm/types/genesis.pb.go b/x/wasm/types/genesis.pb.go index fcb3e6ba19..de95699049 100644 --- a/x/wasm/types/genesis.pb.go +++ b/x/wasm/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: x/wasm/types/genesis.proto +// source: cosmwasm/wasm/v1beta1/genesis.proto package types @@ -36,7 +36,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_8590831cc863f337, []int{0} + return fileDescriptor_931ba204ce53afe0, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -100,8 +100,8 @@ func (m *GenesisState) GetGenMsgs() []GenesisState_GenMsgs { return nil } -// GenMsgs define the messages that can be executed during genesis phase in order. -// The intention is to have more human readable data that is auditable. +// GenMsgs define the messages that can be executed during genesis phase in +// order. The intention is to have more human readable data that is auditable. type GenesisState_GenMsgs struct { // sum is a single message // @@ -116,7 +116,7 @@ func (m *GenesisState_GenMsgs) Reset() { *m = GenesisState_GenMsgs{} } func (m *GenesisState_GenMsgs) String() string { return proto.CompactTextString(m) } func (*GenesisState_GenMsgs) ProtoMessage() {} func (*GenesisState_GenMsgs) Descriptor() ([]byte, []int) { - return fileDescriptor_8590831cc863f337, []int{0, 0} + return fileDescriptor_931ba204ce53afe0, []int{0, 0} } func (m *GenesisState_GenMsgs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -215,7 +215,7 @@ func (m *Code) Reset() { *m = Code{} } func (m *Code) String() string { return proto.CompactTextString(m) } func (*Code) ProtoMessage() {} func (*Code) Descriptor() ([]byte, []int) { - return fileDescriptor_8590831cc863f337, []int{1} + return fileDescriptor_931ba204ce53afe0, []int{1} } func (m *Code) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -283,7 +283,7 @@ func (m *Contract) Reset() { *m = Contract{} } func (m *Contract) String() string { return proto.CompactTextString(m) } func (*Contract) ProtoMessage() {} func (*Contract) Descriptor() ([]byte, []int) { - return fileDescriptor_8590831cc863f337, []int{2} + return fileDescriptor_931ba204ce53afe0, []int{2} } func (m *Contract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -343,7 +343,7 @@ func (m *Sequence) Reset() { *m = Sequence{} } func (m *Sequence) String() string { return proto.CompactTextString(m) } func (*Sequence) ProtoMessage() {} func (*Sequence) Descriptor() ([]byte, []int) { - return fileDescriptor_8590831cc863f337, []int{3} + return fileDescriptor_931ba204ce53afe0, []int{3} } func (m *Sequence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -394,51 +394,53 @@ func init() { proto.RegisterType((*Sequence)(nil), "cosmwasm.wasm.v1beta1.Sequence") } -func init() { proto.RegisterFile("x/wasm/types/genesis.proto", fileDescriptor_8590831cc863f337) } - -var fileDescriptor_8590831cc863f337 = []byte{ - // 646 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0xcd, 0x6e, 0xd3, 0x40, - 0x10, 0xc7, 0xe3, 0x26, 0x4e, 0x93, 0x69, 0xa0, 0xd5, 0xb6, 0x05, 0x2b, 0xa5, 0x49, 0x94, 0x4a, - 0xa8, 0x15, 0x90, 0xa8, 0xe5, 0xc8, 0x05, 0xdc, 0x22, 0x1a, 0xaa, 0x22, 0xe4, 0x4a, 0x20, 0xf5, - 0x12, 0xf9, 0x63, 0x6a, 0x2c, 0x6a, 0x6f, 0xc8, 0x6e, 0x4a, 0xfd, 0x16, 0x88, 0x87, 0xe0, 0x59, - 0x7a, 0xec, 0x91, 0x53, 0x84, 0xd2, 0x1b, 0x4f, 0x81, 0x76, 0xbd, 0x76, 0x1d, 0x81, 0xcb, 0xc5, - 0xf2, 0xce, 0xcc, 0xff, 0x37, 0x3b, 0xb3, 0xb3, 0x0b, 0xcd, 0xcb, 0xfe, 0x57, 0x9b, 0x85, 0x7d, - 0x1e, 0x8f, 0x90, 0xf5, 0x7d, 0x8c, 0x90, 0x05, 0xac, 0x37, 0x1a, 0x53, 0x4e, 0xc9, 0xba, 0x4b, - 0x59, 0x28, 0xbc, 0x3d, 0xf9, 0xb9, 0xd8, 0x75, 0x90, 0xdb, 0xbb, 0xcd, 0x35, 0x9f, 0xfa, 0x54, - 0x46, 0xf4, 0xc5, 0x5f, 0x12, 0xdc, 0x34, 0xe6, 0x40, 0xf2, 0xab, 0x3c, 0xeb, 0xf3, 0x9e, 0xcb, - 0xc4, 0xdc, 0xbd, 0xd2, 0xa1, 0xf1, 0x26, 0xc9, 0x77, 0xc2, 0x6d, 0x8e, 0xe4, 0x05, 0x54, 0x47, - 0xf6, 0xd8, 0x0e, 0x99, 0xa1, 0x75, 0xb4, 0xed, 0xa5, 0xbd, 0xcd, 0xde, 0x3f, 0xf3, 0xf7, 0xde, - 0xcb, 0x20, 0xb3, 0x72, 0x35, 0x6d, 0x97, 0x2c, 0x25, 0x21, 0x6f, 0x41, 0x77, 0xa9, 0x87, 0xcc, - 0x58, 0xe8, 0x94, 0xb7, 0x97, 0xf6, 0x36, 0x0a, 0xb4, 0xfb, 0xd4, 0x43, 0xf3, 0xa1, 0x50, 0xfe, - 0x9e, 0xb6, 0x97, 0xa5, 0xe2, 0x29, 0x0d, 0x03, 0x8e, 0xe1, 0x88, 0xc7, 0x56, 0x82, 0x20, 0xa7, - 0x50, 0x77, 0x69, 0xc4, 0xc7, 0xb6, 0xcb, 0x99, 0x51, 0x96, 0xbc, 0x76, 0x21, 0x2f, 0x89, 0x33, - 0x37, 0x14, 0x73, 0x35, 0x53, 0xe6, 0xb8, 0xb7, 0x38, 0xc1, 0x66, 0xf8, 0x65, 0x82, 0x91, 0x8b, - 0xcc, 0xa8, 0xdc, 0xc9, 0x3e, 0x51, 0x71, 0xb7, 0xec, 0x4c, 0x99, 0x67, 0x67, 0x46, 0xe2, 0x40, - 0xcd, 0xc7, 0x68, 0x18, 0x32, 0x9f, 0x19, 0xba, 0x44, 0x3f, 0x29, 0x40, 0xe7, 0xfb, 0x2e, 0x16, - 0xc7, 0xcc, 0x67, 0x66, 0x53, 0xa5, 0x21, 0x29, 0x24, 0x97, 0x65, 0xd1, 0x4f, 0x82, 0x9a, 0xdf, - 0x17, 0x60, 0x51, 0x09, 0xc8, 0x01, 0x00, 0xe3, 0x74, 0x8c, 0x43, 0xd1, 0x36, 0x75, 0x68, 0x5b, - 0x05, 0x19, 0x8f, 0x99, 0x7f, 0x22, 0x62, 0xc5, 0x01, 0x1c, 0x96, 0xac, 0x3a, 0x4b, 0x17, 0xc4, - 0x81, 0xb5, 0x20, 0x62, 0xdc, 0x8e, 0x78, 0x60, 0x73, 0xc1, 0x4a, 0x5a, 0x65, 0x2c, 0x48, 0xde, - 0xb3, 0x62, 0xde, 0xe0, 0x56, 0x95, 0x1e, 0xc3, 0x61, 0xc9, 0x5a, 0x0d, 0xfe, 0x36, 0x93, 0x0f, - 0xb0, 0x82, 0x97, 0xe8, 0x4e, 0xf2, 0xfc, 0xb2, 0xe4, 0xef, 0x14, 0xf3, 0x5f, 0x27, 0x8a, 0x1c, - 0x7b, 0x19, 0xe7, 0x4d, 0xa6, 0x0e, 0x65, 0x36, 0x09, 0xbb, 0x3f, 0x34, 0xa8, 0xc8, 0x5a, 0xb6, - 0x60, 0x51, 0xf4, 0x62, 0x18, 0x78, 0xb2, 0x1d, 0x15, 0x13, 0x66, 0xd3, 0x76, 0x55, 0xb8, 0x06, - 0x07, 0x56, 0x55, 0xb8, 0x06, 0x1e, 0x31, 0xc5, 0x78, 0x89, 0xa0, 0xe8, 0x8c, 0xaa, 0x2a, 0xdb, - 0x77, 0x8c, 0xeb, 0x20, 0x3a, 0xa3, 0x6a, 0xd8, 0x6b, 0xae, 0x5a, 0x93, 0x4d, 0x00, 0xc9, 0x70, - 0x62, 0x8e, 0x4c, 0x96, 0xd2, 0xb0, 0x24, 0xd5, 0x14, 0x06, 0xf2, 0x00, 0xaa, 0xa3, 0x20, 0x8a, - 0xd0, 0x33, 0x2a, 0x1d, 0x6d, 0xbb, 0x66, 0xa9, 0x55, 0xf7, 0x5a, 0x83, 0x5a, 0xd6, 0x94, 0x1d, - 0x58, 0x49, 0x9b, 0x31, 0xb4, 0x3d, 0x6f, 0x8c, 0x2c, 0xb9, 0x79, 0x75, 0x6b, 0x39, 0xb5, 0xbf, - 0x4a, 0xcc, 0xe4, 0x1d, 0xdc, 0xcb, 0x42, 0x73, 0xdb, 0xde, 0xfa, 0xcf, 0xad, 0xc8, 0x6d, 0xbd, - 0xe1, 0xe6, 0x6c, 0x64, 0x00, 0xf7, 0x33, 0x1e, 0x13, 0x43, 0xa8, 0xae, 0xd9, 0xa3, 0xa2, 0xd3, - 0xa0, 0x1e, 0x9e, 0x2b, 0x52, 0xb6, 0x13, 0x39, 0xbd, 0x5d, 0x13, 0x6a, 0xe9, 0x45, 0x21, 0x1d, - 0xa8, 0x06, 0xde, 0xf0, 0x33, 0xc6, 0xb2, 0x8e, 0x86, 0x59, 0x9f, 0x4d, 0xdb, 0xfa, 0xe0, 0xe0, - 0x08, 0x63, 0x4b, 0x0f, 0xbc, 0x23, 0x8c, 0xc9, 0x1a, 0xe8, 0x17, 0xf6, 0xf9, 0x04, 0x65, 0x01, - 0x15, 0x2b, 0x59, 0x98, 0x2f, 0xaf, 0x66, 0x2d, 0xed, 0x7a, 0xd6, 0xd2, 0x7e, 0xcd, 0x5a, 0xda, - 0xb7, 0x9b, 0x56, 0xe9, 0xfa, 0xa6, 0x55, 0xfa, 0x79, 0xd3, 0x2a, 0x9d, 0x3e, 0xf6, 0x03, 0xfe, - 0x69, 0xe2, 0xf4, 0x5c, 0x1a, 0xf6, 0xf7, 0x29, 0x0b, 0x3f, 0x8a, 0x87, 0x4c, 0x6c, 0xcd, 0xeb, - 0xe7, 0x5f, 0x35, 0xa7, 0x2a, 0xdf, 0xb4, 0xe7, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xa1, - 0x56, 0xd4, 0x4f, 0x05, 0x00, 0x00, +func init() { + proto.RegisterFile("cosmwasm/wasm/v1beta1/genesis.proto", fileDescriptor_931ba204ce53afe0) +} + +var fileDescriptor_931ba204ce53afe0 = []byte{ + // 647 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0x86, 0xe3, 0x26, 0x4e, 0x93, 0x69, 0xa0, 0xd5, 0xb6, 0x80, 0x95, 0x52, 0x27, 0x24, 0x12, + 0x6a, 0x05, 0x24, 0x6a, 0x39, 0x72, 0x01, 0xb7, 0x88, 0x86, 0xaa, 0x08, 0xb9, 0x12, 0x48, 0xbd, + 0x44, 0x8e, 0x3d, 0x35, 0x16, 0xb5, 0x37, 0x64, 0x37, 0xa5, 0x7e, 0x0b, 0xc4, 0x43, 0xf0, 0x2c, + 0x3d, 0xf6, 0xc8, 0x29, 0x42, 0xe9, 0x8d, 0xa7, 0x40, 0xbb, 0x5e, 0xbb, 0x46, 0xd4, 0xe5, 0x62, + 0x79, 0x66, 0xff, 0xf9, 0x76, 0x66, 0x76, 0x76, 0xa1, 0xeb, 0x52, 0x16, 0x7e, 0x75, 0x58, 0xd8, + 0x97, 0x9f, 0xb3, 0xed, 0x11, 0x72, 0x67, 0xbb, 0xef, 0x63, 0x84, 0x2c, 0x60, 0xbd, 0xf1, 0x84, + 0x72, 0x4a, 0xee, 0xa5, 0xa2, 0x9e, 0xfc, 0x28, 0x51, 0x73, 0xcd, 0xa7, 0x3e, 0x95, 0x8a, 0xbe, + 0xf8, 0x4b, 0xc4, 0xcd, 0x47, 0x37, 0x13, 0x79, 0x3c, 0x46, 0xc5, 0x6b, 0x9a, 0x05, 0x92, 0xf3, + 0x64, 0xbd, 0x73, 0xa1, 0x43, 0xe3, 0x4d, 0x92, 0xc1, 0x11, 0x77, 0x38, 0x92, 0x17, 0x50, 0x1d, + 0x3b, 0x13, 0x27, 0x64, 0x86, 0xd6, 0xd6, 0x36, 0x97, 0x76, 0x36, 0x7a, 0x37, 0x66, 0xd4, 0x7b, + 0x2f, 0x45, 0x56, 0xe5, 0x62, 0xd6, 0x2a, 0xd9, 0x2a, 0x84, 0xbc, 0x05, 0xdd, 0xa5, 0x1e, 0x32, + 0x63, 0xa1, 0x5d, 0xde, 0x5c, 0xda, 0x59, 0x2f, 0x88, 0xdd, 0xa5, 0x1e, 0x5a, 0x0f, 0x44, 0xe4, + 0xef, 0x59, 0x6b, 0x59, 0x46, 0x3c, 0xa5, 0x61, 0xc0, 0x31, 0x1c, 0xf3, 0xd8, 0x4e, 0x10, 0xe4, + 0x18, 0xea, 0x2e, 0x8d, 0xf8, 0xc4, 0x71, 0x39, 0x33, 0xca, 0x92, 0xd7, 0x2a, 0xe4, 0x25, 0x3a, + 0x6b, 0x5d, 0x31, 0x57, 0xb3, 0xc8, 0x1c, 0xf7, 0x1a, 0x27, 0xd8, 0x0c, 0xbf, 0x4c, 0x31, 0x72, + 0x91, 0x19, 0x95, 0x5b, 0xd9, 0x47, 0x4a, 0x77, 0xcd, 0xce, 0x22, 0xf3, 0xec, 0xcc, 0x49, 0x46, + 0x50, 0xf3, 0x31, 0x1a, 0x86, 0xcc, 0x67, 0x86, 0x2e, 0xd1, 0x4f, 0x0a, 0xd0, 0xf9, 0xbe, 0x0b, + 0xe3, 0x90, 0xf9, 0xcc, 0x6a, 0xaa, 0x6d, 0x48, 0x0a, 0xc9, 0xed, 0xb2, 0xe8, 0x27, 0xa2, 0xe6, + 0xf7, 0x05, 0x58, 0x54, 0x01, 0x64, 0x0f, 0x80, 0x71, 0x3a, 0xc1, 0xa1, 0x68, 0x9b, 0x3a, 0xb4, + 0x6e, 0xc1, 0x8e, 0x87, 0xcc, 0x3f, 0x12, 0x5a, 0x71, 0x00, 0xfb, 0x25, 0xbb, 0xce, 0x52, 0x83, + 0x8c, 0x60, 0x2d, 0x88, 0x18, 0x77, 0x22, 0x1e, 0x38, 0x5c, 0xb0, 0x92, 0x56, 0x19, 0x0b, 0x92, + 0xf7, 0xac, 0x98, 0x37, 0xb8, 0x8e, 0x4a, 0x8f, 0x61, 0xbf, 0x64, 0xaf, 0x06, 0xff, 0xba, 0xc9, + 0x07, 0x58, 0xc1, 0x73, 0x74, 0xa7, 0x79, 0x7e, 0x59, 0xf2, 0xb7, 0x8a, 0xf9, 0xaf, 0x93, 0x88, + 0x1c, 0x7b, 0x19, 0xff, 0x76, 0x59, 0x3a, 0x94, 0xd9, 0x34, 0xec, 0xfc, 0xd0, 0xa0, 0x22, 0x6b, + 0xe9, 0xc2, 0xa2, 0xe8, 0xc5, 0x30, 0xf0, 0x64, 0x3b, 0x2a, 0x16, 0xcc, 0x67, 0xad, 0xaa, 0x58, + 0x1a, 0xec, 0xd9, 0x55, 0xb1, 0x34, 0xf0, 0x88, 0x25, 0xc6, 0x4b, 0x88, 0xa2, 0x13, 0xaa, 0xaa, + 0x6c, 0xdd, 0x32, 0xae, 0x83, 0xe8, 0x84, 0xaa, 0x61, 0xaf, 0xb9, 0xca, 0x26, 0x1b, 0x00, 0x92, + 0x31, 0x8a, 0x39, 0x32, 0x59, 0x4a, 0xc3, 0x96, 0x54, 0x4b, 0x38, 0xc8, 0x7d, 0xa8, 0x8e, 0x83, + 0x28, 0x42, 0xcf, 0xa8, 0xb4, 0xb5, 0xcd, 0x9a, 0xad, 0xac, 0xce, 0xa5, 0x06, 0xb5, 0xac, 0x29, + 0x5b, 0xb0, 0x92, 0x36, 0x63, 0xe8, 0x78, 0xde, 0x04, 0x59, 0x72, 0xf3, 0xea, 0xf6, 0x72, 0xea, + 0x7f, 0x95, 0xb8, 0xc9, 0x3b, 0xb8, 0x93, 0x49, 0x73, 0x69, 0x77, 0xff, 0x73, 0x2b, 0x72, 0xa9, + 0x37, 0xdc, 0x9c, 0x8f, 0x0c, 0xe0, 0x6e, 0xc6, 0x63, 0x62, 0x08, 0xd5, 0x35, 0x7b, 0x58, 0x74, + 0x1a, 0xd4, 0xc3, 0x53, 0x45, 0xca, 0x32, 0x91, 0xd3, 0xdb, 0xb1, 0xa0, 0x96, 0x5e, 0x14, 0xd2, + 0x86, 0x6a, 0xe0, 0x0d, 0x3f, 0x63, 0x2c, 0xeb, 0x68, 0x58, 0xf5, 0xf9, 0xac, 0xa5, 0x0f, 0xf6, + 0x0e, 0x30, 0xb6, 0xf5, 0xc0, 0x3b, 0xc0, 0x98, 0xac, 0x81, 0x7e, 0xe6, 0x9c, 0x4e, 0x51, 0x16, + 0x50, 0xb1, 0x13, 0xc3, 0x7a, 0x79, 0x31, 0x37, 0xb5, 0xcb, 0xb9, 0xa9, 0xfd, 0x9a, 0x9b, 0xda, + 0xb7, 0x2b, 0xb3, 0x74, 0x79, 0x65, 0x96, 0x7e, 0x5e, 0x99, 0xa5, 0xe3, 0xc7, 0x7e, 0xc0, 0x3f, + 0x4d, 0x47, 0x3d, 0x97, 0x86, 0xfd, 0x5d, 0xca, 0xc2, 0x8f, 0xe9, 0x7b, 0xe6, 0xf5, 0xcf, 0x93, + 0x77, 0x4d, 0x3e, 0x79, 0xa3, 0xaa, 0x7c, 0xd3, 0x9e, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xb4, + 0x5c, 0x72, 0x53, 0x6a, 0x05, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -1131,10 +1133,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { @@ -1289,10 +1288,7 @@ func (m *GenesisState_GenMsgs) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { @@ -1448,10 +1444,7 @@ func (m *Code) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { @@ -1600,10 +1593,7 @@ func (m *Contract) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { @@ -1706,10 +1696,7 @@ func (m *Sequence) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { diff --git a/x/wasm/types/genesis.proto b/x/wasm/types/genesis.proto deleted file mode 100644 index 4c0f3163f1..0000000000 --- a/x/wasm/types/genesis.proto +++ /dev/null @@ -1,50 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1beta1; - -import "gogoproto/gogo.proto"; -import "x/wasm/types/types.proto"; -import "x/wasm/types/tx.proto"; - -option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; - -// GenesisState - genesis state of x/wasm -message GenesisState { - Params params = 1 [(gogoproto.nullable) = false]; - repeated Code codes = 2 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "codes,omitempty"]; - repeated Contract contracts = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "contracts,omitempty"]; - repeated Sequence sequences = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "sequences,omitempty"]; - repeated GenMsgs gen_msgs = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "gen_msgs,omitempty"]; - - // GenMsgs define the messages that can be executed during genesis phase in order. - // The intention is to have more human readable data that is auditable. - message GenMsgs { - // sum is a single message - oneof sum { - MsgStoreCode store_code = 1; - MsgInstantiateContract instantiate_contract = 2; - MsgExecuteContract execute_contract = 3; - } - } -} - -// Code struct encompasses CodeInfo and CodeBytes -message Code { - uint64 code_id = 1 [(gogoproto.customname) = "CodeID"]; - CodeInfo code_info = 2 [(gogoproto.nullable) = false]; - bytes code_bytes = 3; - // Pinned to wasmvm cache - bool pinned = 4; -} - -// Contract struct encompasses ContractAddress, ContractInfo, and ContractState -message Contract { - string contract_address = 1; - ContractInfo contract_info = 2 [(gogoproto.nullable) = false]; - repeated Model contract_state = 3 [(gogoproto.nullable) = false]; -} - -// Sequence key and value of an id generation counter -message Sequence { - bytes id_key = 1 [(gogoproto.customname) = "IDKey"]; - uint64 value = 2; -} \ No newline at end of file diff --git a/x/wasm/types/ibc.pb.go b/x/wasm/types/ibc.pb.go index e651ffde14..d1a338d094 100644 --- a/x/wasm/types/ibc.pb.go +++ b/x/wasm/types/ibc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: x/wasm/types/ibc.proto +// source: cosmwasm/wasm/v1beta1/ibc.proto package types @@ -42,7 +42,7 @@ func (m *MsgIBCSend) Reset() { *m = MsgIBCSend{} } func (m *MsgIBCSend) String() string { return proto.CompactTextString(m) } func (*MsgIBCSend) ProtoMessage() {} func (*MsgIBCSend) Descriptor() ([]byte, []int) { - return fileDescriptor_d9bb1c22229d9ba9, []int{0} + return fileDescriptor_62898492b0dd5f88, []int{0} } func (m *MsgIBCSend) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -80,7 +80,7 @@ func (m *MsgIBCCloseChannel) Reset() { *m = MsgIBCCloseChannel{} } func (m *MsgIBCCloseChannel) String() string { return proto.CompactTextString(m) } func (*MsgIBCCloseChannel) ProtoMessage() {} func (*MsgIBCCloseChannel) Descriptor() ([]byte, []int) { - return fileDescriptor_d9bb1c22229d9ba9, []int{1} + return fileDescriptor_62898492b0dd5f88, []int{1} } func (m *MsgIBCCloseChannel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -114,31 +114,31 @@ func init() { proto.RegisterType((*MsgIBCCloseChannel)(nil), "cosmwasm.wasm.v1beta1.MsgIBCCloseChannel") } -func init() { proto.RegisterFile("x/wasm/types/ibc.proto", fileDescriptor_d9bb1c22229d9ba9) } +func init() { proto.RegisterFile("cosmwasm/wasm/v1beta1/ibc.proto", fileDescriptor_62898492b0dd5f88) } -var fileDescriptor_d9bb1c22229d9ba9 = []byte{ - // 332 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x91, 0x3f, 0x4f, 0xc2, 0x40, - 0x18, 0xc6, 0x5b, 0x82, 0x18, 0x2f, 0x6a, 0xb4, 0x11, 0x53, 0x0d, 0x39, 0x48, 0x07, 0xc3, 0xd4, - 0x93, 0xb0, 0x39, 0x99, 0xd6, 0x41, 0x06, 0x96, 0x6a, 0x62, 0xe2, 0x42, 0xae, 0xed, 0xe5, 0x5a, - 0xc3, 0xf5, 0x25, 0xdc, 0x21, 0xb2, 0xf9, 0x11, 0xfc, 0x58, 0x8c, 0x8c, 0x4e, 0x44, 0xe1, 0x1b, - 0x30, 0x3a, 0x99, 0x1e, 0xc5, 0xc0, 0xea, 0x72, 0x7f, 0x9e, 0xe7, 0x77, 0x6f, 0x72, 0xcf, 0x83, - 0xce, 0xdf, 0xc8, 0x98, 0x4a, 0x41, 0xd4, 0x64, 0xc0, 0x24, 0x49, 0xc3, 0xc8, 0x1d, 0x0c, 0x41, - 0x81, 0x55, 0x8d, 0x40, 0x8a, 0xdc, 0x71, 0xf5, 0xf2, 0xda, 0x0a, 0x99, 0xa2, 0xad, 0xcb, 0x33, - 0x0e, 0x1c, 0x34, 0x41, 0xf2, 0xd3, 0x1a, 0x76, 0xde, 0x4b, 0x08, 0x75, 0x25, 0xef, 0x78, 0xfe, - 0x03, 0xcb, 0x62, 0xab, 0x8d, 0xf6, 0xa3, 0x84, 0x66, 0x19, 0xeb, 0xdb, 0xa5, 0x86, 0xd9, 0x3c, - 0xf0, 0x2e, 0x56, 0xf3, 0x7a, 0x75, 0x42, 0x45, 0xff, 0xc6, 0x91, 0x30, 0x1a, 0x46, 0xac, 0x57, - 0xf8, 0x4e, 0xb0, 0x21, 0xad, 0x5b, 0x74, 0xac, 0x52, 0xc1, 0x60, 0xa4, 0x7a, 0x09, 0x4b, 0x79, - 0xa2, 0xec, 0x72, 0xc3, 0x6c, 0x96, 0xb7, 0xdf, 0xee, 0xfa, 0x4e, 0x70, 0x54, 0x08, 0xf7, 0xfa, - 0x6e, 0x75, 0xd0, 0xe9, 0x86, 0xc8, 0x77, 0xa9, 0xa8, 0x18, 0xd8, 0x7b, 0x7a, 0x48, 0x6d, 0x35, - 0xaf, 0xdb, 0xbb, 0x43, 0xfe, 0x10, 0x27, 0x38, 0x29, 0xb4, 0xc7, 0x8d, 0x64, 0x5d, 0xa3, 0x72, - 0x4c, 0x15, 0xb5, 0x2b, 0x0d, 0xb3, 0x79, 0xe8, 0xd5, 0x7e, 0xe6, 0x75, 0x9b, 0x65, 0x11, 0xc4, - 0x69, 0xc6, 0xc9, 0x8b, 0x84, 0xcc, 0x0d, 0xe8, 0xb8, 0xcb, 0xa4, 0xa4, 0x9c, 0x05, 0x9a, 0x74, - 0x3a, 0xc8, 0x5a, 0x27, 0xe0, 0xf7, 0x41, 0x32, 0xbf, 0xf8, 0xd4, 0x7f, 0x92, 0xf0, 0xee, 0xa6, - 0xdf, 0xd8, 0x98, 0x2e, 0xb0, 0x39, 0x5b, 0x60, 0xf3, 0x6b, 0x81, 0xcd, 0x8f, 0x25, 0x36, 0x66, - 0x4b, 0x6c, 0x7c, 0x2e, 0xb1, 0xf1, 0x7c, 0xc5, 0x53, 0x95, 0x8c, 0x42, 0x37, 0x02, 0x41, 0x7c, - 0x90, 0xe2, 0x29, 0x6f, 0x2f, 0xef, 0x28, 0x26, 0xdb, 0x55, 0x86, 0x15, 0x5d, 0x4d, 0xfb, 0x37, - 0x00, 0x00, 0xff, 0xff, 0x2d, 0xfe, 0x78, 0xdd, 0xe1, 0x01, 0x00, 0x00, +var fileDescriptor_62898492b0dd5f88 = []byte{ + // 333 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x91, 0x31, 0x4f, 0xc2, 0x40, + 0x14, 0xc7, 0x5b, 0x82, 0x18, 0x2f, 0x6a, 0xb4, 0x91, 0xa4, 0x1a, 0x72, 0x25, 0x1d, 0x0c, 0x53, + 0x2b, 0x61, 0x73, 0x32, 0xad, 0x83, 0x0c, 0x2c, 0xd5, 0xc4, 0xc4, 0x85, 0x5c, 0xdb, 0xcb, 0xb5, + 0x86, 0xbb, 0x47, 0xb8, 0x43, 0x64, 0xf3, 0x23, 0xf8, 0xb1, 0x18, 0x19, 0x9d, 0x88, 0xc2, 0x37, + 0x60, 0x74, 0x32, 0x1c, 0xad, 0x91, 0xd5, 0xe5, 0xdd, 0xdd, 0xff, 0xfd, 0xee, 0x25, 0xef, 0xff, + 0x47, 0x4e, 0x02, 0x92, 0x4f, 0x88, 0xe4, 0xbe, 0x2e, 0x2f, 0xed, 0x98, 0x2a, 0xd2, 0xf6, 0xf3, + 0x38, 0xf1, 0x86, 0x23, 0x50, 0x60, 0xd5, 0x4b, 0xc0, 0xd3, 0xa5, 0x00, 0x2e, 0xce, 0x18, 0x30, + 0xd0, 0x84, 0xbf, 0xb9, 0x6d, 0x61, 0xf7, 0xad, 0x82, 0x50, 0x4f, 0xb2, 0x6e, 0x10, 0xde, 0x53, + 0x91, 0x5a, 0x1d, 0xb4, 0x9f, 0x64, 0x44, 0x08, 0x3a, 0xb0, 0x2b, 0x4d, 0xb3, 0x75, 0x10, 0x9c, + 0xaf, 0x17, 0x4e, 0x7d, 0x4a, 0xf8, 0xe0, 0xda, 0x95, 0x30, 0x1e, 0x25, 0xb4, 0x5f, 0xf4, 0xdd, + 0xa8, 0x24, 0xad, 0x1b, 0x74, 0xac, 0x72, 0x4e, 0x61, 0xac, 0xfa, 0x19, 0xcd, 0x59, 0xa6, 0xec, + 0x6a, 0xd3, 0x6c, 0x55, 0xff, 0xfe, 0xdd, 0xed, 0xbb, 0xd1, 0x51, 0x21, 0xdc, 0xe9, 0xb7, 0xd5, + 0x45, 0xa7, 0x25, 0xb1, 0x39, 0xa5, 0x22, 0x7c, 0x68, 0xef, 0xe9, 0x21, 0x8d, 0xf5, 0xc2, 0xb1, + 0x77, 0x87, 0xfc, 0x22, 0x6e, 0x74, 0x52, 0x68, 0x0f, 0xa5, 0x64, 0x5d, 0xa1, 0x6a, 0x4a, 0x14, + 0xb1, 0x6b, 0x4d, 0xb3, 0x75, 0x18, 0x34, 0xbe, 0x17, 0x8e, 0x4d, 0x45, 0x02, 0x69, 0x2e, 0x98, + 0xff, 0x2c, 0x41, 0x78, 0x11, 0x99, 0xf4, 0xa8, 0x94, 0x84, 0xd1, 0x48, 0x93, 0x6e, 0x17, 0x59, + 0x5b, 0x07, 0xc2, 0x01, 0x48, 0x1a, 0x16, 0x4b, 0xfd, 0xc7, 0x89, 0xe0, 0x76, 0xf6, 0x85, 0x8d, + 0xd9, 0x12, 0x9b, 0xf3, 0x25, 0x36, 0x3f, 0x97, 0xd8, 0x7c, 0x5f, 0x61, 0x63, 0xbe, 0xc2, 0xc6, + 0xc7, 0x0a, 0x1b, 0x4f, 0x97, 0x2c, 0x57, 0xd9, 0x38, 0xf6, 0x12, 0xe0, 0x7e, 0x08, 0x92, 0x3f, + 0x96, 0x21, 0xa6, 0xfe, 0xeb, 0x36, 0x4c, 0x35, 0x1d, 0x52, 0x19, 0xd7, 0x74, 0x34, 0x9d, 0x9f, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x9f, 0xe8, 0x9b, 0xa4, 0xea, 0x01, 0x00, 0x00, } func (m *MsgIBCSend) Marshal() (dAtA []byte, err error) { @@ -410,10 +410,7 @@ func (m *MsgIBCSend) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthIbc - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthIbc } if (iNdEx + skippy) > l { @@ -495,10 +492,7 @@ func (m *MsgIBCCloseChannel) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthIbc - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthIbc } if (iNdEx + skippy) > l { diff --git a/x/wasm/types/ibc.proto b/x/wasm/types/ibc.proto deleted file mode 100644 index 30aa45a92e..0000000000 --- a/x/wasm/types/ibc.proto +++ /dev/null @@ -1,28 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1beta1; - -import "gogoproto/gogo.proto"; - -option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; -option (gogoproto.goproto_getters_all) = false; - -// MsgIBCSend -message MsgIBCSend { - // the channel by which the packet will be sent - string channel = 2 [(gogoproto.moretags) = "yaml:\"source_channel\""]; - - // Timeout height relative to the current block height. - // The timeout is disabled when set to 0. - uint64 timeout_height = 4 [(gogoproto.moretags) = "yaml:\"timeout_height\""]; - // Timeout timestamp (in nanoseconds) relative to the current block timestamp. - // The timeout is disabled when set to 0. - uint64 timeout_timestamp = 5 [(gogoproto.moretags) = "yaml:\"timeout_timestamp\""]; - - // data is the payload to transfer - bytes data = 6 [(gogoproto.casttype) = "encoding/json.RawMessage"]; -} - -// MsgIBCCloseChannel port and channel need to be owned by the contract -message MsgIBCCloseChannel { - string channel = 2 [(gogoproto.moretags) = "yaml:\"source_channel\""]; -} diff --git a/x/wasm/types/proposal.pb.go b/x/wasm/types/proposal.pb.go index 1de60876a5..0538af29f8 100644 --- a/x/wasm/types/proposal.pb.go +++ b/x/wasm/types/proposal.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: x/wasm/types/proposal.proto +// source: cosmwasm/wasm/v1beta1/proposal.proto package types @@ -37,7 +37,8 @@ type StoreCodeProposal struct { RunAs string `protobuf:"bytes,3,opt,name=run_as,json=runAs,proto3" json:"run_as,omitempty"` // WASMByteCode can be raw or gzip compressed WASMByteCode []byte `protobuf:"bytes,4,opt,name=wasm_byte_code,json=wasmByteCode,proto3" json:"wasm_byte_code,omitempty"` - // Source is a valid absolute HTTPS URI to the contract's source code, optional + // Source is a valid absolute HTTPS URI to the contract's source code, + // optional Source string `protobuf:"bytes,5,opt,name=source,proto3" json:"source,omitempty"` // Builder is a valid docker image name with tag, optional Builder string `protobuf:"bytes,6,opt,name=builder,proto3" json:"builder,omitempty"` @@ -48,7 +49,7 @@ type StoreCodeProposal struct { func (m *StoreCodeProposal) Reset() { *m = StoreCodeProposal{} } func (*StoreCodeProposal) ProtoMessage() {} func (*StoreCodeProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_0a371ed62f288510, []int{0} + return fileDescriptor_6428c760f8f86eed, []int{0} } func (m *StoreCodeProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -77,7 +78,8 @@ func (m *StoreCodeProposal) XXX_DiscardUnknown() { var xxx_messageInfo_StoreCodeProposal proto.InternalMessageInfo -// InstantiateContractProposal gov proposal content type to instantiate a contract. +// InstantiateContractProposal gov proposal content type to instantiate a +// contract. type InstantiateContractProposal struct { // Title is a short summary Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` @@ -100,7 +102,7 @@ type InstantiateContractProposal struct { func (m *InstantiateContractProposal) Reset() { *m = InstantiateContractProposal{} } func (*InstantiateContractProposal) ProtoMessage() {} func (*InstantiateContractProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_0a371ed62f288510, []int{1} + return fileDescriptor_6428c760f8f86eed, []int{1} } func (m *InstantiateContractProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -148,7 +150,7 @@ type MigrateContractProposal struct { func (m *MigrateContractProposal) Reset() { *m = MigrateContractProposal{} } func (*MigrateContractProposal) ProtoMessage() {} func (*MigrateContractProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_0a371ed62f288510, []int{2} + return fileDescriptor_6428c760f8f86eed, []int{2} } func (m *MigrateContractProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -192,7 +194,7 @@ type UpdateAdminProposal struct { func (m *UpdateAdminProposal) Reset() { *m = UpdateAdminProposal{} } func (*UpdateAdminProposal) ProtoMessage() {} func (*UpdateAdminProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_0a371ed62f288510, []int{3} + return fileDescriptor_6428c760f8f86eed, []int{3} } func (m *UpdateAdminProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -221,7 +223,8 @@ func (m *UpdateAdminProposal) XXX_DiscardUnknown() { var xxx_messageInfo_UpdateAdminProposal proto.InternalMessageInfo -// ClearAdminProposal gov proposal content type to clear the admin of a contract. +// ClearAdminProposal gov proposal content type to clear the admin of a +// contract. type ClearAdminProposal struct { // Title is a short summary Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` @@ -234,7 +237,7 @@ type ClearAdminProposal struct { func (m *ClearAdminProposal) Reset() { *m = ClearAdminProposal{} } func (*ClearAdminProposal) ProtoMessage() {} func (*ClearAdminProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_0a371ed62f288510, []int{4} + return fileDescriptor_6428c760f8f86eed, []int{4} } func (m *ClearAdminProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -263,7 +266,8 @@ func (m *ClearAdminProposal) XXX_DiscardUnknown() { var xxx_messageInfo_ClearAdminProposal proto.InternalMessageInfo -// PinCodesProposal gov proposal content type to pin a set of code ids in the wasmvm cache. +// PinCodesProposal gov proposal content type to pin a set of code ids in the +// wasmvm cache. type PinCodesProposal struct { // Title is a short summary Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty" yaml:"title"` @@ -276,7 +280,7 @@ type PinCodesProposal struct { func (m *PinCodesProposal) Reset() { *m = PinCodesProposal{} } func (*PinCodesProposal) ProtoMessage() {} func (*PinCodesProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_0a371ed62f288510, []int{5} + return fileDescriptor_6428c760f8f86eed, []int{5} } func (m *PinCodesProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -305,7 +309,8 @@ func (m *PinCodesProposal) XXX_DiscardUnknown() { var xxx_messageInfo_PinCodesProposal proto.InternalMessageInfo -// UnpinCodesProposal gov proposal content type to unpin a set of code ids in the wasmvm cache. +// UnpinCodesProposal gov proposal content type to unpin a set of code ids in +// the wasmvm cache. type UnpinCodesProposal struct { // Title is a short summary Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty" yaml:"title"` @@ -318,7 +323,7 @@ type UnpinCodesProposal struct { func (m *UnpinCodesProposal) Reset() { *m = UnpinCodesProposal{} } func (*UnpinCodesProposal) ProtoMessage() {} func (*UnpinCodesProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_0a371ed62f288510, []int{6} + return fileDescriptor_6428c760f8f86eed, []int{6} } func (m *UnpinCodesProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -357,56 +362,58 @@ func init() { proto.RegisterType((*UnpinCodesProposal)(nil), "cosmwasm.wasm.v1beta1.UnpinCodesProposal") } -func init() { proto.RegisterFile("x/wasm/types/proposal.proto", fileDescriptor_0a371ed62f288510) } - -var fileDescriptor_0a371ed62f288510 = []byte{ - // 734 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x95, 0x4d, 0x6b, 0xdb, 0x48, - 0x18, 0xc7, 0xad, 0x38, 0x7e, 0xc9, 0xd8, 0xec, 0x7a, 0xb5, 0x4e, 0x56, 0x9b, 0x2c, 0x92, 0x51, - 0x20, 0xf8, 0xb2, 0xd2, 0x26, 0x0b, 0xfb, 0x06, 0x7b, 0xb0, 0xbc, 0x97, 0xc0, 0x1a, 0x82, 0x42, - 0x08, 0xe4, 0x62, 0xc6, 0xd2, 0x44, 0x99, 0xd6, 0x9a, 0x11, 0x9a, 0x71, 0x5d, 0x7f, 0x8b, 0x7e, - 0x80, 0x7e, 0x80, 0xd0, 0x4b, 0xe9, 0xb7, 0xc8, 0x31, 0xc7, 0xf4, 0xa2, 0x36, 0xce, 0xa5, 0x67, - 0x1f, 0x7b, 0x2a, 0x33, 0x23, 0xbb, 0x4e, 0x09, 0x25, 0xd0, 0x17, 0xe8, 0x45, 0xf6, 0xa3, 0xff, - 0x33, 0xcf, 0xff, 0x99, 0xdf, 0x3c, 0xf6, 0x80, 0xad, 0xc7, 0xee, 0x18, 0xb2, 0xd8, 0xe5, 0x93, - 0x04, 0x31, 0x37, 0x49, 0x69, 0x42, 0x19, 0x1c, 0x3a, 0x49, 0x4a, 0x39, 0xd5, 0xd7, 0x03, 0xca, - 0x62, 0x21, 0x3b, 0xf2, 0xf1, 0x68, 0x77, 0x80, 0x38, 0xdc, 0xdd, 0x6c, 0x46, 0x34, 0xa2, 0x32, - 0xc3, 0x15, 0xdf, 0x54, 0xf2, 0xa6, 0x29, 0x92, 0x29, 0x73, 0x07, 0x90, 0x21, 0x37, 0x4f, 0x75, - 0x03, 0x8a, 0x49, 0xae, 0x1b, 0xb7, 0x9c, 0xe4, 0x53, 0x29, 0xf6, 0xf9, 0x0a, 0xf8, 0xe1, 0x90, - 0xd3, 0x14, 0x75, 0x69, 0x88, 0x0e, 0xf2, 0x16, 0xf4, 0x26, 0x28, 0x71, 0xcc, 0x87, 0xc8, 0xd0, - 0x5a, 0x5a, 0x7b, 0xcd, 0x57, 0x81, 0xde, 0x02, 0xb5, 0x10, 0xb1, 0x20, 0xc5, 0x09, 0xc7, 0x94, - 0x18, 0x2b, 0x52, 0x5b, 0x7e, 0xa5, 0xaf, 0x83, 0x72, 0x3a, 0x22, 0x7d, 0xc8, 0x8c, 0xa2, 0x5a, - 0x98, 0x8e, 0x48, 0x87, 0xe9, 0x7f, 0x80, 0xef, 0x84, 0x7d, 0x7f, 0x30, 0xe1, 0xa8, 0x1f, 0xd0, - 0x10, 0x19, 0xab, 0x2d, 0xad, 0x5d, 0xf7, 0x1a, 0xd3, 0xcc, 0xaa, 0x1f, 0x77, 0x0e, 0x7b, 0xde, - 0x84, 0xcb, 0x06, 0xfc, 0xba, 0xc8, 0x9b, 0x47, 0xfa, 0x06, 0x28, 0x33, 0x3a, 0x4a, 0x03, 0x64, - 0x94, 0x64, 0xb9, 0x3c, 0xd2, 0x0d, 0x50, 0x19, 0x8c, 0xf0, 0x30, 0x44, 0xa9, 0x51, 0x96, 0xc2, - 0x3c, 0xd4, 0x4f, 0xc0, 0x06, 0x26, 0x8c, 0x43, 0xc2, 0x31, 0xe4, 0xa8, 0x9f, 0xa0, 0x34, 0xc6, - 0x8c, 0x89, 0x6e, 0x2b, 0x2d, 0xad, 0x5d, 0xdb, 0xdb, 0x76, 0xee, 0xc4, 0xea, 0x74, 0x82, 0x00, - 0x31, 0xd6, 0xa5, 0xe4, 0x14, 0x47, 0xfe, 0xfa, 0x52, 0x89, 0x83, 0x45, 0x05, 0xfb, 0xe5, 0x0a, - 0xd8, 0xda, 0x7f, 0xaf, 0x74, 0x29, 0xe1, 0x29, 0x0c, 0xf8, 0x97, 0x82, 0xd6, 0x04, 0x25, 0x18, - 0xc6, 0x98, 0x48, 0x56, 0x6b, 0xbe, 0x0a, 0xf4, 0x6d, 0x50, 0x11, 0x00, 0xfb, 0x38, 0x94, 0x4c, - 0x56, 0x3d, 0x30, 0xcd, 0xac, 0xb2, 0xa0, 0xb5, 0xff, 0x9f, 0x5f, 0x16, 0xd2, 0x7e, 0x28, 0x96, - 0x0e, 0xe1, 0x00, 0x0d, 0x73, 0x3a, 0x2a, 0xd0, 0xff, 0x04, 0x55, 0x4c, 0x30, 0xef, 0xc7, 0x2c, - 0x92, 0x34, 0xea, 0xde, 0x2f, 0x6f, 0x33, 0xcb, 0x40, 0x24, 0xa0, 0x21, 0x26, 0x91, 0xfb, 0x80, - 0x51, 0xe2, 0xf8, 0x70, 0xdc, 0x43, 0x8c, 0xc1, 0x08, 0xf9, 0x15, 0x91, 0xdd, 0x63, 0x91, 0x0e, - 0x41, 0xe9, 0x74, 0x44, 0x42, 0x66, 0x54, 0x5b, 0xc5, 0x76, 0x6d, 0xef, 0x67, 0x47, 0x4d, 0x9b, - 0x23, 0xa6, 0x6d, 0x41, 0xb0, 0x4b, 0x31, 0xf1, 0x7e, 0xbb, 0xc8, 0xac, 0xc2, 0xb3, 0x57, 0x56, - 0x3b, 0xc2, 0xfc, 0x6c, 0x34, 0x70, 0x02, 0x1a, 0xbb, 0xf9, 0x68, 0xaa, 0x8f, 0x5f, 0x59, 0xf8, - 0x30, 0x9f, 0x3f, 0xb1, 0x80, 0xf9, 0xaa, 0xb2, 0xfd, 0x46, 0x03, 0x3f, 0xf5, 0x70, 0x94, 0x7e, - 0x05, 0xae, 0x9b, 0xa0, 0x1a, 0xe4, 0x16, 0x39, 0xda, 0x45, 0x7c, 0x3f, 0xba, 0xff, 0x82, 0x5a, - 0xac, 0x5a, 0x95, 0x28, 0xcb, 0xf7, 0x40, 0x09, 0xf2, 0x05, 0x3d, 0x16, 0xd9, 0x4f, 0x35, 0xf0, - 0xe3, 0x51, 0x12, 0x42, 0x8e, 0x3a, 0xe2, 0x44, 0x3f, 0x79, 0x9b, 0xbb, 0x60, 0x8d, 0xa0, 0x71, - 0x5f, 0xcd, 0x8a, 0xdc, 0xa9, 0xd7, 0x9c, 0x65, 0x56, 0x63, 0x02, 0xe3, 0xe1, 0x3f, 0xf6, 0x42, - 0xb2, 0xfd, 0x2a, 0x41, 0x63, 0x69, 0xf9, 0x31, 0x04, 0xf6, 0x19, 0xd0, 0xbb, 0x43, 0x04, 0xd3, - 0xcf, 0xd3, 0xdc, 0xb2, 0x53, 0xf1, 0x03, 0xa7, 0xe7, 0x1a, 0x68, 0x1c, 0x60, 0x22, 0xe8, 0xb2, - 0x85, 0xd1, 0xce, 0x2d, 0x23, 0xaf, 0x31, 0xcb, 0xac, 0xba, 0xda, 0x89, 0x7c, 0x6d, 0xcf, 0xad, - 0xff, 0xba, 0xc3, 0xda, 0xdb, 0x98, 0x65, 0x96, 0xae, 0xb2, 0x97, 0x44, 0xfb, 0x76, 0x4b, 0x7f, - 0x8b, 0x96, 0xe4, 0x19, 0x8b, 0xc1, 0x28, 0xb6, 0x57, 0x3d, 0x73, 0x9a, 0x59, 0x15, 0x75, 0xc8, - 0x6c, 0x96, 0x59, 0xdf, 0xab, 0x0a, 0xf3, 0x24, 0xdb, 0xaf, 0xa8, 0x83, 0x67, 0xf6, 0x0b, 0x0d, - 0xe8, 0x47, 0x24, 0xf9, 0x96, 0x7a, 0xf6, 0xfe, 0xbf, 0xb8, 0x36, 0x0b, 0x57, 0xd7, 0x66, 0xe1, - 0x7c, 0x6a, 0x6a, 0x17, 0x53, 0x53, 0xbb, 0x9c, 0x9a, 0xda, 0xeb, 0xa9, 0xa9, 0x3d, 0xb9, 0x31, - 0x0b, 0x97, 0x37, 0x66, 0xe1, 0xea, 0xc6, 0x2c, 0x9c, 0xec, 0x2c, 0xfd, 0x60, 0xbb, 0x94, 0xc5, - 0xc7, 0xe2, 0xb6, 0x10, 0xff, 0x90, 0xa1, 0xbb, 0x7c, 0x75, 0x0c, 0xca, 0xf2, 0xd6, 0xf8, 0xfd, - 0x5d, 0x00, 0x00, 0x00, 0xff, 0xff, 0x11, 0xcc, 0xe0, 0x60, 0xbb, 0x06, 0x00, 0x00, +func init() { + proto.RegisterFile("cosmwasm/wasm/v1beta1/proposal.proto", fileDescriptor_6428c760f8f86eed) +} + +var fileDescriptor_6428c760f8f86eed = []byte{ + // 733 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x55, 0x4d, 0x6b, 0xdb, 0x48, + 0x18, 0xb6, 0xe2, 0xf8, 0x23, 0x63, 0xb3, 0xeb, 0xd5, 0x3a, 0x59, 0x6d, 0x76, 0x91, 0xbc, 0xca, + 0x12, 0x7c, 0x59, 0x79, 0x93, 0x42, 0xbf, 0xa0, 0x07, 0xcb, 0xbd, 0x04, 0x6a, 0x08, 0x0a, 0x21, + 0x90, 0x8b, 0x19, 0x4b, 0x13, 0x65, 0x5a, 0x6b, 0x46, 0x68, 0xc6, 0x75, 0xfd, 0x2f, 0xfa, 0x03, + 0xfa, 0x03, 0x42, 0x2f, 0xa5, 0xff, 0x22, 0xc7, 0x1c, 0xd3, 0x8b, 0xda, 0x38, 0x97, 0x9e, 0x7d, + 0xec, 0xa9, 0xcc, 0x8c, 0xec, 0x3a, 0x25, 0x94, 0x40, 0x3f, 0xa0, 0x17, 0xd9, 0xaf, 0xde, 0xe7, + 0x7d, 0x9f, 0x67, 0x9e, 0xf7, 0x15, 0x03, 0xfe, 0xf5, 0x29, 0x8b, 0x46, 0x90, 0x45, 0x2d, 0xf9, + 0x78, 0xba, 0xd5, 0x47, 0x1c, 0x6e, 0xb5, 0xe2, 0x84, 0xc6, 0x94, 0xc1, 0x81, 0x13, 0x27, 0x94, + 0x53, 0x7d, 0x75, 0x86, 0x72, 0xe4, 0x23, 0x43, 0xad, 0xd7, 0x43, 0x1a, 0x52, 0x89, 0x68, 0x89, + 0x7f, 0x0a, 0xbc, 0x6e, 0x0a, 0x30, 0x65, 0xad, 0x3e, 0x64, 0x68, 0xde, 0xd0, 0xa7, 0x98, 0x64, + 0xf9, 0x7f, 0xae, 0xa7, 0xe4, 0xe3, 0x18, 0x31, 0x05, 0xb1, 0x4f, 0x96, 0xc0, 0x6f, 0x7b, 0x9c, + 0x26, 0xa8, 0x43, 0x03, 0xb4, 0x9b, 0x69, 0xd1, 0xeb, 0xa0, 0xc0, 0x31, 0x1f, 0x20, 0x43, 0x6b, + 0x68, 0xcd, 0x15, 0x4f, 0x05, 0x7a, 0x03, 0x54, 0x02, 0xc4, 0xfc, 0x04, 0xc7, 0x1c, 0x53, 0x62, + 0x2c, 0xc9, 0xdc, 0xe2, 0x2b, 0x7d, 0x15, 0x14, 0x93, 0x21, 0xe9, 0x41, 0x66, 0xe4, 0x55, 0x61, + 0x32, 0x24, 0x6d, 0xa6, 0xdf, 0x06, 0xbf, 0x08, 0x01, 0xbd, 0xfe, 0x98, 0xa3, 0x9e, 0x4f, 0x03, + 0x64, 0x2c, 0x37, 0xb4, 0x66, 0xd5, 0xad, 0x4d, 0x52, 0xab, 0x7a, 0xd0, 0xde, 0xeb, 0xba, 0x63, + 0x2e, 0x05, 0x78, 0x55, 0x81, 0x9b, 0x45, 0xfa, 0x1a, 0x28, 0x32, 0x3a, 0x4c, 0x7c, 0x64, 0x14, + 0x64, 0xbb, 0x2c, 0xd2, 0x0d, 0x50, 0xea, 0x0f, 0xf1, 0x20, 0x40, 0x89, 0x51, 0x94, 0x89, 0x59, + 0xa8, 0x1f, 0x82, 0x35, 0x4c, 0x18, 0x87, 0x84, 0x63, 0xc8, 0x51, 0x2f, 0x46, 0x49, 0x84, 0x19, + 0x13, 0x6a, 0x4b, 0x0d, 0xad, 0x59, 0xd9, 0xde, 0x70, 0xae, 0xf5, 0xd7, 0x69, 0xfb, 0x3e, 0x62, + 0xac, 0x43, 0xc9, 0x11, 0x0e, 0xbd, 0xd5, 0x85, 0x16, 0xbb, 0xf3, 0x0e, 0xf6, 0x9b, 0x25, 0xf0, + 0xd7, 0xce, 0xa7, 0x4c, 0x87, 0x12, 0x9e, 0x40, 0x9f, 0x7f, 0x2f, 0xd3, 0xea, 0xa0, 0x00, 0x83, + 0x08, 0x13, 0xe9, 0xd5, 0x8a, 0xa7, 0x02, 0x7d, 0x03, 0x94, 0x84, 0x81, 0x3d, 0x1c, 0x48, 0x4f, + 0x96, 0x5d, 0x30, 0x49, 0xad, 0xa2, 0x70, 0x6b, 0xe7, 0xa1, 0x57, 0x14, 0xa9, 0x9d, 0x40, 0x94, + 0x0e, 0x60, 0x1f, 0x0d, 0x32, 0x77, 0x54, 0xa0, 0xdf, 0x01, 0x65, 0x4c, 0x30, 0xef, 0x45, 0x2c, + 0x94, 0x6e, 0x54, 0xdd, 0xbf, 0x3f, 0xa4, 0x96, 0x81, 0x88, 0x4f, 0x03, 0x4c, 0xc2, 0xd6, 0x63, + 0x46, 0x89, 0xe3, 0xc1, 0x51, 0x17, 0x31, 0x06, 0x43, 0xe4, 0x95, 0x04, 0xba, 0xcb, 0x42, 0x1d, + 0x82, 0xc2, 0xd1, 0x90, 0x04, 0xcc, 0x28, 0x37, 0xf2, 0xcd, 0xca, 0xf6, 0x9f, 0x8e, 0x5a, 0x3b, + 0x47, 0xac, 0xdd, 0xdc, 0xc1, 0x0e, 0xc5, 0xc4, 0xfd, 0xff, 0x34, 0xb5, 0x72, 0x2f, 0xdf, 0x5a, + 0xcd, 0x10, 0xf3, 0xe3, 0x61, 0xdf, 0xf1, 0x69, 0xd4, 0xca, 0x76, 0x54, 0xfd, 0xfc, 0xc7, 0x82, + 0x27, 0xd9, 0xfe, 0x89, 0x02, 0xe6, 0xa9, 0xce, 0xf6, 0x7b, 0x0d, 0xfc, 0xd1, 0xc5, 0x61, 0xf2, + 0x03, 0x7c, 0x5d, 0x07, 0x65, 0x3f, 0xa3, 0xc8, 0xac, 0x9d, 0xc7, 0x37, 0x73, 0xf7, 0x01, 0xa8, + 0x44, 0x4a, 0xaa, 0xb4, 0xb2, 0x78, 0x03, 0x2b, 0x41, 0x56, 0xd0, 0x65, 0xa1, 0xfd, 0x42, 0x03, + 0xbf, 0xef, 0xc7, 0x01, 0xe4, 0xa8, 0x2d, 0x26, 0xfa, 0xd5, 0xc7, 0xdc, 0x02, 0x2b, 0x04, 0x8d, + 0x7a, 0x6a, 0x57, 0xe4, 0x49, 0xdd, 0xfa, 0x34, 0xb5, 0x6a, 0x63, 0x18, 0x0d, 0xee, 0xdb, 0xf3, + 0x94, 0xed, 0x95, 0x09, 0x1a, 0x49, 0xca, 0x2f, 0x59, 0x60, 0x1f, 0x03, 0xbd, 0x33, 0x40, 0x30, + 0xf9, 0x36, 0xe2, 0x16, 0x99, 0xf2, 0x9f, 0x31, 0xbd, 0xd2, 0x40, 0x6d, 0x17, 0x13, 0xe1, 0x2e, + 0x9b, 0x13, 0x6d, 0x5e, 0x21, 0x72, 0x6b, 0xd3, 0xd4, 0xaa, 0xaa, 0x93, 0xc8, 0xd7, 0xf6, 0x8c, + 0xfa, 0xee, 0x35, 0xd4, 0xee, 0xda, 0x34, 0xb5, 0x74, 0x85, 0x5e, 0x48, 0xda, 0x57, 0x25, 0xdd, + 0x13, 0x92, 0xe4, 0x8c, 0xc5, 0x62, 0xe4, 0x9b, 0xcb, 0xae, 0x39, 0x49, 0xad, 0x92, 0x1a, 0x32, + 0x9b, 0xa6, 0xd6, 0xaf, 0xaa, 0xc3, 0x0c, 0x64, 0x7b, 0x25, 0x35, 0x78, 0x66, 0xbf, 0xd6, 0x80, + 0xbe, 0x4f, 0xe2, 0x9f, 0x49, 0xb3, 0xfb, 0xe8, 0xf4, 0xc2, 0xcc, 0x9d, 0x5f, 0x98, 0xb9, 0x93, + 0x89, 0xa9, 0x9d, 0x4e, 0x4c, 0xed, 0x6c, 0x62, 0x6a, 0xef, 0x26, 0xa6, 0xf6, 0xfc, 0xd2, 0xcc, + 0x9d, 0x5d, 0x9a, 0xb9, 0xf3, 0x4b, 0x33, 0x77, 0xb8, 0xb9, 0xf0, 0xc1, 0x76, 0x28, 0x8b, 0x0e, + 0x66, 0x97, 0x46, 0xd0, 0x7a, 0xa6, 0x2e, 0x0f, 0xf9, 0xd1, 0xf6, 0x8b, 0xf2, 0xd6, 0xb8, 0xf5, + 0x31, 0x00, 0x00, 0xff, 0xff, 0x96, 0x50, 0x86, 0x17, 0xcd, 0x06, 0x00, 0x00, } func (this *StoreCodeProposal) Equal(that interface{}) bool { @@ -1589,10 +1596,7 @@ func (m *StoreCodeProposal) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProposal - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProposal } if (iNdEx + skippy) > l { @@ -1889,10 +1893,7 @@ func (m *InstantiateContractProposal) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProposal - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProposal } if (iNdEx + skippy) > l { @@ -2123,10 +2124,7 @@ func (m *MigrateContractProposal) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProposal - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProposal } if (iNdEx + skippy) > l { @@ -2304,10 +2302,7 @@ func (m *UpdateAdminProposal) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProposal - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProposal } if (iNdEx + skippy) > l { @@ -2453,10 +2448,7 @@ func (m *ClearAdminProposal) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProposal - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProposal } if (iNdEx + skippy) > l { @@ -2646,10 +2638,7 @@ func (m *PinCodesProposal) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProposal - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProposal } if (iNdEx + skippy) > l { @@ -2839,10 +2828,7 @@ func (m *UnpinCodesProposal) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProposal - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProposal } if (iNdEx + skippy) > l { diff --git a/x/wasm/types/proposal.proto b/x/wasm/types/proposal.proto deleted file mode 100644 index 876b1e41e9..0000000000 --- a/x/wasm/types/proposal.proto +++ /dev/null @@ -1,113 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1beta1; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "x/wasm/types/types.proto"; - -option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; -option (gogoproto.goproto_stringer_all) = false; -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.equal_all) = true; - -// StoreCodeProposal gov proposal content type to submit WASM code to the system -message StoreCodeProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // RunAs is the address that is passed to the contract's environment as sender - string run_as = 3; - // WASMByteCode can be raw or gzip compressed - bytes wasm_byte_code = 4 [(gogoproto.customname) = "WASMByteCode"]; - // Source is a valid absolute HTTPS URI to the contract's source code, optional - string source = 5; - // Builder is a valid docker image name with tag, optional - string builder = 6; - // InstantiatePermission to apply on contract creation, optional - AccessConfig instantiate_permission = 7; -} - -// InstantiateContractProposal gov proposal content type to instantiate a contract. -message InstantiateContractProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // RunAs is the address that is passed to the contract's environment as sender - string run_as = 3; - // Admin is an optional address that can execute migrations - string admin = 4; - // CodeID is the reference to the stored WASM code - uint64 code_id = 5 [(gogoproto.customname) = "CodeID"]; - // Label is optional metadata to be stored with a constract instance. - string label = 6; - // InitMsg json encoded message to be passed to the contract on instantiation - bytes init_msg = 7 [(gogoproto.casttype) = "encoding/json.RawMessage"]; - // Funds coins that are transferred to the contract on instantiation - repeated cosmos.base.v1beta1.Coin funds = 8 [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; -} - -// MigrateContractProposal gov proposal content type to migrate a contract. -message MigrateContractProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // RunAs is the address that is passed to the contract's environment as sender - string run_as = 3; - // Contract is the address of the smart contract - string contract = 4; - // CodeID references the new WASM code - uint64 code_id = 5 [(gogoproto.customname) = "CodeID"]; - // MigrateMsg json encoded message to be passed to the contract on migration - bytes migrate_msg = 6 [(gogoproto.casttype) = "encoding/json.RawMessage"]; -} - -// UpdateAdminProposal gov proposal content type to set an admin for a contract. -message UpdateAdminProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // NewAdmin address to be set - string new_admin = 3 [(gogoproto.moretags) = "yaml:\"new_admin\""]; - // Contract is the address of the smart contract - string contract = 4; -} - -// ClearAdminProposal gov proposal content type to clear the admin of a contract. -message ClearAdminProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // Contract is the address of the smart contract - string contract = 3; -} - -// PinCodesProposal gov proposal content type to pin a set of code ids in the wasmvm cache. -message PinCodesProposal { - // Title is a short summary - string title = 1 [(gogoproto.moretags) = "yaml:\"title\""]; - // Description is a human readable text - string description = 2 [(gogoproto.moretags) = "yaml:\"description\""]; - // CodeIDs references the new WASM codes - repeated uint64 code_ids = 3 [ - (gogoproto.customname) = "CodeIDs", - (gogoproto.moretags) = "yaml:\"code_ids\"" - ]; -} - -// UnpinCodesProposal gov proposal content type to unpin a set of code ids in the wasmvm cache. -message UnpinCodesProposal { - // Title is a short summary - string title = 1 [(gogoproto.moretags) = "yaml:\"title\""]; - // Description is a human readable text - string description = 2 [(gogoproto.moretags) = "yaml:\"description\""]; - // CodeIDs references the WASM codes - repeated uint64 code_ids = 3 [ - (gogoproto.customname) = "CodeIDs", - (gogoproto.moretags) = "yaml:\"code_ids\"" - ]; -} diff --git a/x/wasm/types/query.pb.go b/x/wasm/types/query.pb.go index 04e5a8584f..0805f736e3 100644 --- a/x/wasm/types/query.pb.go +++ b/x/wasm/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: x/wasm/types/query.proto +// source: cosmwasm/wasm/v1beta1/query.proto package types @@ -33,7 +33,8 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// QueryContractInfoRequest is the request type for the Query/ContractInfo RPC method +// QueryContractInfoRequest is the request type for the Query/ContractInfo RPC +// method type QueryContractInfoRequest struct { // address is the address of the contract to query Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` @@ -43,7 +44,7 @@ func (m *QueryContractInfoRequest) Reset() { *m = QueryContractInfoReque func (m *QueryContractInfoRequest) String() string { return proto.CompactTextString(m) } func (*QueryContractInfoRequest) ProtoMessage() {} func (*QueryContractInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{0} + return fileDescriptor_e8595715dfdf95d1, []int{0} } func (m *QueryContractInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -72,7 +73,8 @@ func (m *QueryContractInfoRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryContractInfoRequest proto.InternalMessageInfo -// QueryContractInfoResponse is the response type for the Query/ContractInfo RPC method +// QueryContractInfoResponse is the response type for the Query/ContractInfo RPC +// method type QueryContractInfoResponse struct { // address is the address of the contract Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` @@ -83,7 +85,7 @@ func (m *QueryContractInfoResponse) Reset() { *m = QueryContractInfoResp func (m *QueryContractInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryContractInfoResponse) ProtoMessage() {} func (*QueryContractInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{1} + return fileDescriptor_e8595715dfdf95d1, []int{1} } func (m *QueryContractInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -112,7 +114,8 @@ func (m *QueryContractInfoResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryContractInfoResponse proto.InternalMessageInfo -// QueryContractHistoryRequest is the request type for the Query/ContractHistory RPC method +// QueryContractHistoryRequest is the request type for the Query/ContractHistory +// RPC method type QueryContractHistoryRequest struct { // address is the address of the contract to query Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` @@ -124,7 +127,7 @@ func (m *QueryContractHistoryRequest) Reset() { *m = QueryContractHistor func (m *QueryContractHistoryRequest) String() string { return proto.CompactTextString(m) } func (*QueryContractHistoryRequest) ProtoMessage() {} func (*QueryContractHistoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{2} + return fileDescriptor_e8595715dfdf95d1, []int{2} } func (m *QueryContractHistoryRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -153,7 +156,8 @@ func (m *QueryContractHistoryRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryContractHistoryRequest proto.InternalMessageInfo -// QueryContractHistoryResponse is the response type for the Query/ContractHistory RPC method +// QueryContractHistoryResponse is the response type for the +// Query/ContractHistory RPC method type QueryContractHistoryResponse struct { Entries []ContractCodeHistoryEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries"` // pagination defines the pagination in the response. @@ -164,7 +168,7 @@ func (m *QueryContractHistoryResponse) Reset() { *m = QueryContractHisto func (m *QueryContractHistoryResponse) String() string { return proto.CompactTextString(m) } func (*QueryContractHistoryResponse) ProtoMessage() {} func (*QueryContractHistoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{3} + return fileDescriptor_e8595715dfdf95d1, []int{3} } func (m *QueryContractHistoryResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -193,7 +197,8 @@ func (m *QueryContractHistoryResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryContractHistoryResponse proto.InternalMessageInfo -// QueryContractsByCodeRequest is the request type for the Query/ContractsByCode RPC method +// QueryContractsByCodeRequest is the request type for the Query/ContractsByCode +// RPC method type QueryContractsByCodeRequest struct { CodeId uint64 `protobuf:"varint,1,opt,name=code_id,json=codeId,proto3" json:"code_id,omitempty"` // pagination defines an optional pagination for the request. @@ -204,7 +209,7 @@ func (m *QueryContractsByCodeRequest) Reset() { *m = QueryContractsByCod func (m *QueryContractsByCodeRequest) String() string { return proto.CompactTextString(m) } func (*QueryContractsByCodeRequest) ProtoMessage() {} func (*QueryContractsByCodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{4} + return fileDescriptor_e8595715dfdf95d1, []int{4} } func (m *QueryContractsByCodeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -233,7 +238,8 @@ func (m *QueryContractsByCodeRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryContractsByCodeRequest proto.InternalMessageInfo -// ContractInfoWithAddress adds the address (key) to the ContractInfo representation +// ContractInfoWithAddress adds the address (key) to the ContractInfo +// representation type ContractInfoWithAddress struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` *ContractInfo `protobuf:"bytes,2,opt,name=contract_info,json=contractInfo,proto3,embedded=contract_info" json:""` @@ -243,7 +249,7 @@ func (m *ContractInfoWithAddress) Reset() { *m = ContractInfoWithAddress func (m *ContractInfoWithAddress) String() string { return proto.CompactTextString(m) } func (*ContractInfoWithAddress) ProtoMessage() {} func (*ContractInfoWithAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{5} + return fileDescriptor_e8595715dfdf95d1, []int{5} } func (m *ContractInfoWithAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -272,7 +278,8 @@ func (m *ContractInfoWithAddress) XXX_DiscardUnknown() { var xxx_messageInfo_ContractInfoWithAddress proto.InternalMessageInfo -// QueryContractsByCodeResponse is the response type for the Query/ContractsByCode RPC method +// QueryContractsByCodeResponse is the response type for the +// Query/ContractsByCode RPC method type QueryContractsByCodeResponse struct { ContractInfos []ContractInfoWithAddress `protobuf:"bytes,1,rep,name=contract_infos,json=contractInfos,proto3" json:"contract_infos"` // pagination defines the pagination in the response. @@ -283,7 +290,7 @@ func (m *QueryContractsByCodeResponse) Reset() { *m = QueryContractsByCo func (m *QueryContractsByCodeResponse) String() string { return proto.CompactTextString(m) } func (*QueryContractsByCodeResponse) ProtoMessage() {} func (*QueryContractsByCodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{6} + return fileDescriptor_e8595715dfdf95d1, []int{6} } func (m *QueryContractsByCodeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -312,7 +319,8 @@ func (m *QueryContractsByCodeResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryContractsByCodeResponse proto.InternalMessageInfo -// QueryAllContractStateRequest is the request type for the Query/AllContractState RPC method +// QueryAllContractStateRequest is the request type for the +// Query/AllContractState RPC method type QueryAllContractStateRequest struct { // address is the address of the contract Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` @@ -324,7 +332,7 @@ func (m *QueryAllContractStateRequest) Reset() { *m = QueryAllContractSt func (m *QueryAllContractStateRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllContractStateRequest) ProtoMessage() {} func (*QueryAllContractStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{7} + return fileDescriptor_e8595715dfdf95d1, []int{7} } func (m *QueryAllContractStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -353,7 +361,8 @@ func (m *QueryAllContractStateRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryAllContractStateRequest proto.InternalMessageInfo -// QueryAllContractStateResponse is the response type for the Query/AllContractState RPC method +// QueryAllContractStateResponse is the response type for the +// Query/AllContractState RPC method type QueryAllContractStateResponse struct { Models []Model `protobuf:"bytes,1,rep,name=models,proto3" json:"models"` // pagination defines the pagination in the response. @@ -364,7 +373,7 @@ func (m *QueryAllContractStateResponse) Reset() { *m = QueryAllContractS func (m *QueryAllContractStateResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllContractStateResponse) ProtoMessage() {} func (*QueryAllContractStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{8} + return fileDescriptor_e8595715dfdf95d1, []int{8} } func (m *QueryAllContractStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -393,7 +402,8 @@ func (m *QueryAllContractStateResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryAllContractStateResponse proto.InternalMessageInfo -// QueryRawContractStateRequest is the request type for the Query/RawContractState RPC method +// QueryRawContractStateRequest is the request type for the +// Query/RawContractState RPC method type QueryRawContractStateRequest struct { // address is the address of the contract Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` @@ -404,7 +414,7 @@ func (m *QueryRawContractStateRequest) Reset() { *m = QueryRawContractSt func (m *QueryRawContractStateRequest) String() string { return proto.CompactTextString(m) } func (*QueryRawContractStateRequest) ProtoMessage() {} func (*QueryRawContractStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{9} + return fileDescriptor_e8595715dfdf95d1, []int{9} } func (m *QueryRawContractStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -433,7 +443,8 @@ func (m *QueryRawContractStateRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryRawContractStateRequest proto.InternalMessageInfo -// QueryRawContractStateResponse is the response type for the Query/RawContractState RPC method +// QueryRawContractStateResponse is the response type for the +// Query/RawContractState RPC method type QueryRawContractStateResponse struct { // Data contains the raw store data Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` @@ -443,7 +454,7 @@ func (m *QueryRawContractStateResponse) Reset() { *m = QueryRawContractS func (m *QueryRawContractStateResponse) String() string { return proto.CompactTextString(m) } func (*QueryRawContractStateResponse) ProtoMessage() {} func (*QueryRawContractStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{10} + return fileDescriptor_e8595715dfdf95d1, []int{10} } func (m *QueryRawContractStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -472,7 +483,8 @@ func (m *QueryRawContractStateResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryRawContractStateResponse proto.InternalMessageInfo -// QuerySmartContractStateRequest is the request type for the Query/SmartContractState RPC method +// QuerySmartContractStateRequest is the request type for the +// Query/SmartContractState RPC method type QuerySmartContractStateRequest struct { // address is the address of the contract Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` @@ -484,7 +496,7 @@ func (m *QuerySmartContractStateRequest) Reset() { *m = QuerySmartContra func (m *QuerySmartContractStateRequest) String() string { return proto.CompactTextString(m) } func (*QuerySmartContractStateRequest) ProtoMessage() {} func (*QuerySmartContractStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{11} + return fileDescriptor_e8595715dfdf95d1, []int{11} } func (m *QuerySmartContractStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -513,7 +525,8 @@ func (m *QuerySmartContractStateRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QuerySmartContractStateRequest proto.InternalMessageInfo -// QuerySmartContractStateResponse is the response type for the Query/SmartContractState RPC method +// QuerySmartContractStateResponse is the response type for the +// 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"` @@ -523,7 +536,7 @@ func (m *QuerySmartContractStateResponse) Reset() { *m = QuerySmartContr func (m *QuerySmartContractStateResponse) String() string { return proto.CompactTextString(m) } func (*QuerySmartContractStateResponse) ProtoMessage() {} func (*QuerySmartContractStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{12} + return fileDescriptor_e8595715dfdf95d1, []int{12} } func (m *QuerySmartContractStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -561,7 +574,7 @@ func (m *QueryCodeRequest) Reset() { *m = QueryCodeRequest{} } func (m *QueryCodeRequest) String() string { return proto.CompactTextString(m) } func (*QueryCodeRequest) ProtoMessage() {} func (*QueryCodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{13} + return fileDescriptor_e8595715dfdf95d1, []int{13} } func (m *QueryCodeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -603,7 +616,7 @@ func (m *CodeInfoResponse) Reset() { *m = CodeInfoResponse{} } func (m *CodeInfoResponse) String() string { return proto.CompactTextString(m) } func (*CodeInfoResponse) ProtoMessage() {} func (*CodeInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{14} + return fileDescriptor_e8595715dfdf95d1, []int{14} } func (m *CodeInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -642,7 +655,7 @@ func (m *QueryCodeResponse) Reset() { *m = QueryCodeResponse{} } func (m *QueryCodeResponse) String() string { return proto.CompactTextString(m) } func (*QueryCodeResponse) ProtoMessage() {} func (*QueryCodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{15} + return fileDescriptor_e8595715dfdf95d1, []int{15} } func (m *QueryCodeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -681,7 +694,7 @@ func (m *QueryCodesRequest) Reset() { *m = QueryCodesRequest{} } func (m *QueryCodesRequest) String() string { return proto.CompactTextString(m) } func (*QueryCodesRequest) ProtoMessage() {} func (*QueryCodesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{16} + return fileDescriptor_e8595715dfdf95d1, []int{16} } func (m *QueryCodesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -721,7 +734,7 @@ func (m *QueryCodesResponse) Reset() { *m = QueryCodesResponse{} } func (m *QueryCodesResponse) String() string { return proto.CompactTextString(m) } func (*QueryCodesResponse) ProtoMessage() {} func (*QueryCodesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_05d4eea78dee184d, []int{17} + return fileDescriptor_e8595715dfdf95d1, []int{17} } func (m *QueryCodesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -771,80 +784,80 @@ func init() { proto.RegisterType((*QueryCodesResponse)(nil), "cosmwasm.wasm.v1beta1.QueryCodesResponse") } -func init() { proto.RegisterFile("x/wasm/types/query.proto", fileDescriptor_05d4eea78dee184d) } +func init() { proto.RegisterFile("cosmwasm/wasm/v1beta1/query.proto", fileDescriptor_e8595715dfdf95d1) } -var fileDescriptor_05d4eea78dee184d = []byte{ - // 1107 bytes of a gzipped FileDescriptorProto +var fileDescriptor_e8595715dfdf95d1 = []byte{ + // 1105 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x97, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xc7, 0x3d, 0xa9, 0xf3, 0xc3, 0xd3, 0x14, 0xc2, 0xa8, 0xd0, 0xc5, 0xb8, 0xeb, 0x68, 0x41, - 0xa9, 0x5b, 0xa4, 0xdd, 0xfc, 0x2a, 0x82, 0x72, 0xaa, 0x53, 0x20, 0x95, 0x28, 0x3f, 0x36, 0x42, - 0x11, 0xf4, 0x10, 0x8d, 0x77, 0xa7, 0xf6, 0x22, 0x7b, 0x27, 0xdd, 0x99, 0x90, 0x58, 0x51, 0x28, - 0xe2, 0xc2, 0x09, 0x81, 0xc4, 0x91, 0x0b, 0x07, 0x0e, 0xa8, 0xc0, 0xbd, 0x47, 0x0e, 0x1c, 0x72, - 0x8c, 0xc4, 0x85, 0x93, 0x05, 0x0e, 0x42, 0x28, 0x7f, 0x42, 0x4f, 0x68, 0x66, 0x67, 0x93, 0x5d, - 0xc7, 0xeb, 0x75, 0x90, 0x45, 0x2f, 0xd6, 0x8e, 0x77, 0xde, 0x9b, 0xcf, 0xfb, 0xbe, 0x99, 0xf7, - 0x66, 0xa1, 0xb6, 0x63, 0x6d, 0x63, 0xd6, 0xb2, 0x78, 0x7b, 0x93, 0x30, 0xeb, 0xfe, 0x16, 0x09, - 0xda, 0xe6, 0x66, 0x40, 0x39, 0x45, 0xcf, 0x3a, 0x94, 0xb5, 0xc4, 0x3b, 0x53, 0xfe, 0x7c, 0xb2, - 0x50, 0x23, 0x1c, 0x2f, 0x14, 0x2f, 0xd6, 0x69, 0x9d, 0xca, 0x19, 0x96, 0x78, 0x0a, 0x27, 0x17, - 0x93, 0x6e, 0xe4, 0xaf, 0x7a, 0x53, 0xaa, 0x53, 0x5a, 0x6f, 0x12, 0x0b, 0x6f, 0x7a, 0x16, 0xf6, - 0x7d, 0xca, 0x31, 0xf7, 0xa8, 0x1f, 0xbd, 0xbd, 0x26, 0x16, 0xa1, 0xcc, 0xaa, 0x61, 0x46, 0xc2, - 0xd5, 0x2d, 0xb5, 0x90, 0xb5, 0x89, 0xeb, 0x9e, 0x2f, 0x27, 0x87, 0x73, 0x8d, 0x65, 0xa8, 0xbd, - 0x2f, 0x66, 0xac, 0x50, 0x9f, 0x07, 0xd8, 0xe1, 0xb7, 0xfd, 0x7b, 0xd4, 0x26, 0xf7, 0xb7, 0x08, - 0xe3, 0x48, 0x83, 0x93, 0xd8, 0x75, 0x03, 0xc2, 0x98, 0x06, 0x66, 0x41, 0xa5, 0x60, 0x47, 0x43, - 0xe3, 0x2b, 0x00, 0x9f, 0xef, 0x63, 0xc6, 0x36, 0xa9, 0xcf, 0x48, 0xba, 0x1d, 0xb2, 0xe1, 0x05, - 0x47, 0x59, 0x6c, 0x78, 0xfe, 0x3d, 0xaa, 0x8d, 0xcd, 0x82, 0xca, 0xf9, 0xc5, 0x17, 0xcd, 0xbe, - 0xb2, 0x98, 0x71, 0xef, 0xd5, 0xa9, 0x83, 0x4e, 0x19, 0x1c, 0x75, 0xca, 0x39, 0x7b, 0xda, 0x89, - 0xfd, 0x7f, 0x23, 0xff, 0xcf, 0x77, 0x65, 0x60, 0x3c, 0x80, 0x2f, 0x24, 0x80, 0x56, 0x3d, 0xc6, - 0x69, 0xd0, 0xce, 0x0c, 0x05, 0xbd, 0x09, 0xe1, 0x89, 0x28, 0x8a, 0x67, 0xce, 0x0c, 0x15, 0x34, - 0x85, 0x82, 0x66, 0x98, 0xbf, 0x88, 0xe9, 0x3d, 0x5c, 0x27, 0xca, 0xab, 0x1d, 0xb3, 0x34, 0x1e, - 0x01, 0x58, 0xea, 0x4f, 0xa0, 0x54, 0x79, 0x17, 0x4e, 0x12, 0x9f, 0x07, 0x1e, 0x11, 0x08, 0xe7, - 0x2a, 0xe7, 0x17, 0xad, 0x8c, 0xa8, 0x57, 0xa8, 0x4b, 0x94, 0x93, 0x37, 0x7c, 0x1e, 0xb4, 0xab, - 0xf9, 0x7d, 0x11, 0x7d, 0xe4, 0x05, 0xbd, 0xd5, 0x87, 0xfc, 0x4a, 0x26, 0x79, 0x48, 0x93, 0x40, - 0xff, 0xb4, 0x47, 0x3b, 0x56, 0x6d, 0x8b, 0xb5, 0x23, 0xed, 0x2e, 0xc1, 0x49, 0x87, 0xba, 0x64, - 0xc3, 0x73, 0xa5, 0x76, 0x79, 0x7b, 0x42, 0x0c, 0x6f, 0xbb, 0x23, 0x93, 0xee, 0x4b, 0x00, 0x2f, - 0xc5, 0x53, 0xbd, 0xee, 0xf1, 0xc6, 0x4d, 0x95, 0x9e, 0x27, 0xb1, 0x97, 0x7e, 0xed, 0x4d, 0xe5, - 0xb1, 0x20, 0x2a, 0x95, 0x77, 0xe1, 0x53, 0x89, 0xa5, 0xa3, 0x8c, 0x9a, 0x43, 0xac, 0x1d, 0x0b, - 0x4e, 0x25, 0xf4, 0x42, 0x1c, 0x61, 0x84, 0x69, 0xfd, 0x2c, 0x0a, 0xe3, 0x66, 0xb3, 0x19, 0x11, - 0xac, 0x71, 0xcc, 0xc9, 0xff, 0x77, 0x28, 0xbe, 0x07, 0xf0, 0x72, 0x0a, 0x82, 0x92, 0xf2, 0x06, - 0x9c, 0x68, 0x51, 0x97, 0x34, 0x23, 0x09, 0x4b, 0x29, 0x12, 0xde, 0x11, 0x93, 0x94, 0x60, 0xca, - 0x62, 0x74, 0x4a, 0xad, 0x2b, 0xa1, 0x6c, 0xbc, 0x7d, 0x46, 0xa1, 0x2e, 0x43, 0x28, 0xd7, 0xd8, - 0x70, 0x31, 0xc7, 0x12, 0x61, 0xda, 0x2e, 0xc8, 0x7f, 0x6e, 0x61, 0x8e, 0x8d, 0x25, 0x15, 0xfe, - 0x69, 0xc7, 0x2a, 0x7c, 0x04, 0xf3, 0xd2, 0x12, 0x48, 0x4b, 0xf9, 0x6c, 0x7c, 0x08, 0x75, 0x69, - 0xb4, 0xd6, 0xc2, 0x01, 0x1f, 0x2d, 0xcf, 0x1a, 0x2c, 0xa7, 0xba, 0x56, 0x44, 0xf3, 0x71, 0xa2, - 0x6a, 0xe9, 0x71, 0xa7, 0xac, 0x11, 0xdf, 0xa1, 0xae, 0xe7, 0xd7, 0xad, 0x8f, 0x19, 0xf5, 0x4d, - 0x1b, 0x6f, 0xdf, 0x21, 0x8c, 0x09, 0x2d, 0x43, 0xde, 0x97, 0xe1, 0x8c, 0x3a, 0x2d, 0xd9, 0x35, - 0xc3, 0xf8, 0x1b, 0xc0, 0x19, 0x31, 0x31, 0xd1, 0x30, 0xae, 0xf6, 0xcc, 0xae, 0xce, 0x74, 0x3b, - 0xe5, 0x09, 0x39, 0xed, 0xd6, 0x51, 0xa7, 0x3c, 0xe6, 0xb9, 0xc7, 0x35, 0x47, 0x83, 0x93, 0x4e, - 0x40, 0x30, 0xa7, 0x81, 0x8c, 0xae, 0x60, 0x47, 0x43, 0xf4, 0x01, 0x2c, 0x08, 0x9c, 0x8d, 0x06, - 0x66, 0x0d, 0xed, 0x9c, 0xa4, 0x7f, 0xf5, 0x71, 0xa7, 0xbc, 0x5c, 0xf7, 0x78, 0x63, 0xab, 0x66, - 0x3a, 0xb4, 0x65, 0x71, 0xe2, 0xbb, 0x24, 0x68, 0x79, 0x3e, 0x8f, 0x3f, 0x36, 0xbd, 0x1a, 0xb3, - 0x6a, 0x6d, 0x4e, 0x98, 0xb9, 0x4a, 0x76, 0xaa, 0xe2, 0xc1, 0x9e, 0x12, 0xae, 0x56, 0x31, 0x6b, - 0xa0, 0xe7, 0xe0, 0x04, 0xa3, 0x5b, 0x81, 0x43, 0xb4, 0xbc, 0x5c, 0x4f, 0x8d, 0x04, 0x48, 0x6d, - 0xcb, 0x6b, 0xba, 0x24, 0xd0, 0xc6, 0x43, 0x10, 0x35, 0x54, 0x45, 0xe4, 0x0b, 0x00, 0x9f, 0x89, - 0xc9, 0xa2, 0x22, 0x7d, 0x07, 0x16, 0xc2, 0x48, 0x45, 0xc1, 0x02, 0xb1, 0x1d, 0xdb, 0xaf, 0x68, - 0x24, 0x55, 0x8a, 0x15, 0xad, 0x29, 0x47, 0xbd, 0x43, 0x25, 0x95, 0x2d, 0x99, 0xe9, 0xea, 0xd4, - 0x51, 0xa7, 0x2c, 0xc7, 0x61, 0x66, 0x14, 0xc9, 0xdd, 0x18, 0x08, 0x8b, 0x12, 0x94, 0x3c, 0xe1, - 0xe0, 0x3f, 0x9f, 0xf0, 0x1f, 0x01, 0x44, 0x71, 0xef, 0x2a, 0xce, 0xb7, 0x21, 0x3c, 0x8e, 0x33, - 0x3a, 0xda, 0x43, 0x07, 0x1a, 0x9e, 0xf2, 0x42, 0x14, 0xe4, 0xe8, 0x0e, 0xfa, 0xe2, 0x43, 0x08, - 0xc7, 0x25, 0x2d, 0xfa, 0x16, 0xc0, 0xe9, 0x78, 0x59, 0x46, 0x69, 0xdd, 0x38, 0xed, 0x76, 0x54, - 0x9c, 0x1f, 0xde, 0x20, 0x24, 0x31, 0x2a, 0x9f, 0xff, 0xf6, 0xd7, 0x37, 0x63, 0x06, 0x9a, 0x0d, - 0xaf, 0x75, 0xd1, 0x9d, 0x2c, 0x2a, 0xff, 0xd6, 0xae, 0x3a, 0xc5, 0x7b, 0xe8, 0x27, 0x00, 0x9f, - 0xee, 0xb9, 0x47, 0xa0, 0xc5, 0x61, 0xd6, 0x4b, 0x5e, 0x7b, 0x8a, 0x4b, 0x67, 0xb2, 0x51, 0x98, - 0xf3, 0x12, 0xf3, 0x1a, 0xaa, 0x64, 0x61, 0x5a, 0x0d, 0x85, 0xf6, 0x30, 0x86, 0xab, 0x7a, 0xe5, - 0x70, 0xb8, 0xc9, 0x9b, 0xc6, 0x70, 0xb8, 0x3d, 0xcd, 0xd8, 0x30, 0x25, 0x6e, 0x05, 0xcd, 0xf5, - 0xe2, 0xba, 0xc4, 0xda, 0x55, 0x65, 0x65, 0xef, 0x98, 0x9e, 0xa1, 0x9f, 0x01, 0x9c, 0xe9, 0x6d, - 0x47, 0x68, 0xe0, 0xca, 0x29, 0xfd, 0xb3, 0xb8, 0x7c, 0x36, 0xa3, 0x2c, 0xde, 0x53, 0xf2, 0x32, - 0x89, 0xf6, 0x08, 0xc0, 0x99, 0xde, 0xfe, 0x31, 0x98, 0x37, 0xa5, 0x8d, 0x0d, 0xe6, 0x4d, 0x6b, - 0x51, 0xc6, 0x6b, 0x92, 0x77, 0x09, 0x2d, 0x64, 0xf2, 0x06, 0x78, 0xdb, 0xda, 0x3d, 0x69, 0x3f, - 0x7b, 0xe8, 0x17, 0x00, 0xd1, 0xe9, 0x56, 0x83, 0xae, 0x0f, 0xe2, 0x48, 0xed, 0x7a, 0xc5, 0x57, - 0xce, 0x6a, 0xa6, 0x02, 0x78, 0x5d, 0x06, 0x70, 0x1d, 0x2d, 0x65, 0x0b, 0x2e, 0x9c, 0x24, 0x43, - 0x78, 0x00, 0xf3, 0x72, 0x3b, 0x5f, 0x19, 0xbc, 0x35, 0x4f, 0xf6, 0x70, 0x25, 0x7b, 0xa2, 0xe2, - 0x7a, 0x49, 0x72, 0xe9, 0xa8, 0x34, 0x68, 0xe3, 0xa2, 0x1d, 0x38, 0x2e, 0x4b, 0x2b, 0xca, 0x74, - 0x1c, 0xd5, 0xf6, 0xe2, 0xd5, 0x21, 0x66, 0x2a, 0x86, 0xa2, 0x64, 0xb8, 0x88, 0xd0, 0x69, 0x86, - 0xea, 0xea, 0xfe, 0x9f, 0x7a, 0xee, 0x87, 0xae, 0x9e, 0xdb, 0xef, 0xea, 0xe0, 0xa0, 0xab, 0x83, - 0x3f, 0xba, 0x3a, 0xf8, 0xfa, 0x50, 0xcf, 0x1d, 0x1c, 0xea, 0xb9, 0xdf, 0x0f, 0xf5, 0xdc, 0x47, - 0x73, 0xb1, 0xde, 0xba, 0x42, 0x59, 0x6b, 0x5d, 0xf8, 0x10, 0x8e, 0x5c, 0x2b, 0xfe, 0xe9, 0x5a, - 0x9b, 0x90, 0xdf, 0x9a, 0x4b, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x47, 0x8e, 0x3f, 0x56, 0x18, - 0x0f, 0x00, 0x00, + 0x14, 0xc7, 0x3d, 0xa9, 0xe3, 0xc4, 0xd3, 0x14, 0xcc, 0xa8, 0x50, 0x63, 0xdc, 0x75, 0x58, 0x50, + 0xea, 0x16, 0x69, 0x37, 0x89, 0x53, 0x04, 0xe5, 0x54, 0xa7, 0x40, 0x2a, 0x51, 0x7e, 0x6c, 0x84, + 0x22, 0xe8, 0x21, 0x1a, 0xef, 0x4e, 0xed, 0x45, 0xf6, 0x8e, 0xbb, 0x33, 0x26, 0xb1, 0xa2, 0x50, + 0xc4, 0x85, 0x13, 0x02, 0x89, 0x23, 0x17, 0x0e, 0x1c, 0x50, 0x81, 0x7b, 0x8f, 0x1c, 0x38, 0xe4, + 0x18, 0x89, 0x0b, 0x27, 0x0b, 0x1c, 0x84, 0x50, 0xfe, 0x84, 0x9e, 0xd0, 0xce, 0xce, 0x3a, 0xbb, + 0x8e, 0xd7, 0xeb, 0x20, 0x0b, 0x2e, 0xd6, 0x8e, 0xfd, 0xde, 0x9b, 0xcf, 0xfb, 0xbe, 0x99, 0xf7, + 0xd6, 0xf0, 0x79, 0x93, 0xb2, 0xd6, 0x0e, 0x66, 0x2d, 0x5d, 0x7c, 0x7c, 0xbc, 0x52, 0x23, 0x1c, + 0xaf, 0xe8, 0xf7, 0x3b, 0xc4, 0xed, 0x6a, 0x6d, 0x97, 0x72, 0x8a, 0x9e, 0x0e, 0x4c, 0x34, 0xf1, + 0x21, 0x4d, 0x0a, 0x17, 0xeb, 0xb4, 0x4e, 0x85, 0x85, 0xee, 0x3d, 0xf9, 0xc6, 0x85, 0x98, 0x78, + 0xbc, 0xdb, 0x26, 0x4c, 0x9a, 0x14, 0xeb, 0x94, 0xd6, 0x9b, 0x44, 0xc7, 0x6d, 0x5b, 0xc7, 0x8e, + 0x43, 0x39, 0xe6, 0x36, 0x75, 0x82, 0x5f, 0xaf, 0x79, 0x01, 0x28, 0xd3, 0x6b, 0x98, 0x11, 0x1f, + 0x63, 0x10, 0xa4, 0x8d, 0xeb, 0xb6, 0x23, 0x8c, 0x7d, 0x5b, 0x75, 0x0d, 0xe6, 0xdf, 0xf3, 0x2c, + 0xd6, 0xa9, 0xc3, 0x5d, 0x6c, 0xf2, 0xdb, 0xce, 0x3d, 0x6a, 0x90, 0xfb, 0x1d, 0xc2, 0x38, 0xca, + 0xc3, 0x39, 0x6c, 0x59, 0x2e, 0x61, 0x2c, 0x0f, 0x16, 0x41, 0x39, 0x6b, 0x04, 0x4b, 0xf5, 0x4b, + 0x00, 0x9f, 0x1d, 0xe1, 0xc6, 0xda, 0xd4, 0x61, 0x24, 0xde, 0x0f, 0x19, 0xf0, 0x82, 0x29, 0x3d, + 0xb6, 0x6d, 0xe7, 0x1e, 0xcd, 0xcf, 0x2c, 0x82, 0xf2, 0xf9, 0xd5, 0x17, 0xb4, 0x91, 0xfa, 0x68, + 0xe1, 0xe8, 0xd5, 0xf9, 0xc3, 0x5e, 0x09, 0x1c, 0xf7, 0x4a, 0x29, 0x63, 0xc1, 0x0c, 0x7d, 0x7f, + 0x23, 0xfd, 0xf7, 0xb7, 0x25, 0xa0, 0x3e, 0x80, 0xcf, 0x45, 0x80, 0x36, 0x6c, 0xc6, 0xa9, 0xdb, + 0x4d, 0x4c, 0x05, 0xbd, 0x01, 0xe1, 0x89, 0x28, 0x92, 0x67, 0x49, 0xf3, 0x15, 0xd4, 0x3c, 0x05, + 0x35, 0xbf, 0x90, 0x01, 0xd3, 0xbb, 0xb8, 0x4e, 0x64, 0x54, 0x23, 0xe4, 0xa9, 0x3e, 0x02, 0xb0, + 0x38, 0x9a, 0x40, 0xaa, 0xf2, 0x0e, 0x9c, 0x23, 0x0e, 0x77, 0x6d, 0xe2, 0x21, 0x9c, 0x2b, 0x9f, + 0x5f, 0xd5, 0x13, 0xb2, 0x5e, 0xa7, 0x16, 0x91, 0x41, 0x5e, 0x77, 0xb8, 0xdb, 0xad, 0xa6, 0x0f, + 0xbc, 0xec, 0x83, 0x28, 0xe8, 0xcd, 0x11, 0xe4, 0x57, 0x12, 0xc9, 0x7d, 0x9a, 0x08, 0xfa, 0x27, + 0x43, 0xda, 0xb1, 0x6a, 0xd7, 0xdb, 0x3b, 0xd0, 0xee, 0x12, 0x9c, 0x33, 0xa9, 0x45, 0xb6, 0x6d, + 0x4b, 0x68, 0x97, 0x36, 0x32, 0xde, 0xf2, 0xb6, 0x35, 0x35, 0xe9, 0xbe, 0x00, 0xf0, 0x52, 0xb8, + 0xd4, 0x5b, 0x36, 0x6f, 0xdc, 0x94, 0xe5, 0xf9, 0x3f, 0xce, 0xd2, 0x2f, 0xc3, 0xa5, 0x1c, 0x08, + 0x22, 0x4b, 0x79, 0x17, 0x3e, 0x11, 0xd9, 0x3a, 0xa8, 0xa8, 0x36, 0xc1, 0xde, 0xa1, 0xe4, 0x64, + 0x41, 0x2f, 0x84, 0x11, 0xa6, 0x58, 0xd6, 0x4f, 0x83, 0x34, 0x6e, 0x36, 0x9b, 0x01, 0xc1, 0x26, + 0xc7, 0x9c, 0xfc, 0x77, 0x97, 0xe2, 0x3b, 0x00, 0x2f, 0xc7, 0x20, 0x48, 0x29, 0x6f, 0xc0, 0x4c, + 0x8b, 0x5a, 0xa4, 0x19, 0x48, 0x58, 0x8c, 0x91, 0xf0, 0x8e, 0x67, 0x24, 0x05, 0x93, 0x1e, 0xd3, + 0x53, 0x6a, 0x4b, 0x0a, 0x65, 0xe0, 0x9d, 0x33, 0x0a, 0x75, 0x19, 0x42, 0xb1, 0xc7, 0xb6, 0x85, + 0x39, 0x16, 0x08, 0x0b, 0x46, 0x56, 0x7c, 0x73, 0x0b, 0x73, 0xac, 0x56, 0x64, 0xfa, 0xa7, 0x03, + 0xcb, 0xf4, 0x11, 0x4c, 0x0b, 0x4f, 0x20, 0x3c, 0xc5, 0xb3, 0xfa, 0x01, 0x54, 0x84, 0xd3, 0x66, + 0x0b, 0xbb, 0x7c, 0xba, 0x3c, 0x9b, 0xb0, 0x14, 0x1b, 0x5a, 0x12, 0x2d, 0x87, 0x89, 0xaa, 0xc5, + 0xc7, 0xbd, 0x52, 0x9e, 0x38, 0x26, 0xb5, 0x6c, 0xa7, 0xae, 0x7f, 0xc4, 0xa8, 0xa3, 0x19, 0x78, + 0xe7, 0x0e, 0x61, 0xcc, 0xd3, 0xd2, 0xe7, 0x7d, 0x09, 0xe6, 0xe4, 0x6d, 0x49, 0xee, 0x19, 0xea, + 0x5f, 0x00, 0xe6, 0x3c, 0xc3, 0xc8, 0xc0, 0xb8, 0x3a, 0x64, 0x5d, 0xcd, 0xf5, 0x7b, 0xa5, 0x8c, + 0x30, 0xbb, 0x75, 0xdc, 0x2b, 0xcd, 0xd8, 0xd6, 0xa0, 0xe7, 0xe4, 0xe1, 0x9c, 0xe9, 0x12, 0xcc, + 0xa9, 0x2b, 0xb2, 0xcb, 0x1a, 0xc1, 0x12, 0xbd, 0x0f, 0xb3, 0x1e, 0xce, 0x76, 0x03, 0xb3, 0x46, + 0xfe, 0x9c, 0xa0, 0x7f, 0xe5, 0x71, 0xaf, 0xb4, 0x56, 0xb7, 0x79, 0xa3, 0x53, 0xd3, 0x4c, 0xda, + 0xd2, 0x39, 0x71, 0x2c, 0xe2, 0xb6, 0x6c, 0x87, 0x87, 0x1f, 0x9b, 0x76, 0x8d, 0xe9, 0xb5, 0x2e, + 0x27, 0x4c, 0xdb, 0x20, 0xbb, 0x55, 0xef, 0xc1, 0x98, 0xf7, 0x42, 0x6d, 0x60, 0xd6, 0x40, 0xcf, + 0xc0, 0x0c, 0xa3, 0x1d, 0xd7, 0x24, 0xf9, 0xb4, 0xd8, 0x4f, 0xae, 0x3c, 0x90, 0x5a, 0xc7, 0x6e, + 0x5a, 0xc4, 0xcd, 0xcf, 0xfa, 0x20, 0x72, 0x29, 0x9b, 0xc8, 0xe7, 0x00, 0x3e, 0x15, 0x92, 0x45, + 0x66, 0xfa, 0x36, 0xcc, 0xfa, 0x99, 0x7a, 0x0d, 0x0b, 0x84, 0x4e, 0xec, 0xa8, 0xa6, 0x11, 0x55, + 0x29, 0xd4, 0xb4, 0xe6, 0x4d, 0xf9, 0x1b, 0x2a, 0xca, 0x6a, 0x89, 0x4a, 0x57, 0xe7, 0x8f, 0x7b, + 0x25, 0xb1, 0xf6, 0x2b, 0x23, 0x49, 0xee, 0x86, 0x40, 0x58, 0x50, 0xa0, 0xe8, 0x0d, 0x07, 0xff, + 0xfa, 0x86, 0xff, 0x00, 0x20, 0x0a, 0x47, 0x97, 0x79, 0xbe, 0x05, 0xe1, 0x20, 0xcf, 0xe0, 0x6a, + 0x4f, 0x9c, 0xa8, 0x7f, 0xcb, 0xb3, 0x41, 0x92, 0xd3, 0xbb, 0xe8, 0xab, 0x0f, 0x21, 0x9c, 0x15, + 0xb4, 0xe8, 0x1b, 0x00, 0x17, 0xc2, 0x6d, 0x19, 0xc5, 0x4d, 0xe3, 0xb8, 0xb7, 0xa3, 0xc2, 0xf2, + 0xe4, 0x0e, 0x3e, 0x89, 0x5a, 0xfe, 0xec, 0xd7, 0x3f, 0xbf, 0x9e, 0x51, 0xd1, 0x62, 0xf4, 0xc5, + 0x2e, 0x68, 0xff, 0xfa, 0x9e, 0xbc, 0xc5, 0xfb, 0xe8, 0x47, 0x00, 0x9f, 0x1c, 0x7a, 0x8f, 0x40, + 0xab, 0x93, 0xec, 0x17, 0x7d, 0xed, 0x29, 0x54, 0xce, 0xe4, 0x23, 0x31, 0x97, 0x05, 0xe6, 0x35, + 0x54, 0x4e, 0xc2, 0xd4, 0x1b, 0x12, 0xed, 0x61, 0x08, 0x57, 0xce, 0xca, 0xc9, 0x70, 0xa3, 0x6f, + 0x1a, 0x93, 0xe1, 0x0e, 0x0d, 0x63, 0x55, 0x13, 0xb8, 0x65, 0xb4, 0x34, 0x8c, 0x6b, 0x11, 0x7d, + 0x4f, 0xb6, 0x95, 0xfd, 0x01, 0x3d, 0x43, 0x3f, 0x01, 0x98, 0x1b, 0x1e, 0x47, 0x68, 0xec, 0xce, + 0x31, 0xf3, 0xb3, 0xb0, 0x76, 0x36, 0xa7, 0x24, 0xde, 0x53, 0xf2, 0x32, 0x81, 0xf6, 0x08, 0xc0, + 0xdc, 0xf0, 0xfc, 0x18, 0xcf, 0x1b, 0x33, 0xc6, 0xc6, 0xf3, 0xc6, 0x8d, 0x28, 0xf5, 0x55, 0xc1, + 0x5b, 0x41, 0x2b, 0x89, 0xbc, 0x2e, 0xde, 0xd1, 0xf7, 0x4e, 0xc6, 0xcf, 0x3e, 0xfa, 0x19, 0x40, + 0x74, 0x7a, 0xd4, 0xa0, 0xeb, 0xe3, 0x38, 0x62, 0xa7, 0x5e, 0xe1, 0xe5, 0xb3, 0xba, 0xc9, 0x04, + 0x5e, 0x13, 0x09, 0x5c, 0x47, 0x95, 0x64, 0xc1, 0xbd, 0x20, 0xd1, 0x14, 0x1e, 0xc0, 0xb4, 0x38, + 0xce, 0x57, 0xc6, 0x1f, 0xcd, 0x93, 0x33, 0x5c, 0x4e, 0x36, 0x94, 0x5c, 0x2f, 0x0a, 0x2e, 0x05, + 0x15, 0xc7, 0x1d, 0x5c, 0xb4, 0x0b, 0x67, 0x45, 0x6b, 0x45, 0x89, 0x81, 0x83, 0xde, 0x5e, 0xb8, + 0x3a, 0x81, 0xa5, 0x64, 0x28, 0x08, 0x86, 0x8b, 0x08, 0x9d, 0x66, 0xa8, 0x6e, 0x1c, 0xfc, 0xa1, + 0xa4, 0xbe, 0xef, 0x2b, 0xa9, 0x83, 0xbe, 0x02, 0x0e, 0xfb, 0x0a, 0xf8, 0xbd, 0xaf, 0x80, 0xaf, + 0x8e, 0x94, 0xd4, 0xe1, 0x91, 0x92, 0xfa, 0xed, 0x48, 0x49, 0x7d, 0xb8, 0x14, 0x9a, 0xad, 0xeb, + 0x94, 0xb5, 0xb6, 0x82, 0x3f, 0xad, 0x96, 0xbe, 0xeb, 0x07, 0x14, 0x7f, 0x5a, 0x6b, 0x19, 0xf1, + 0x5f, 0xb3, 0xf2, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x56, 0xdc, 0x6b, 0x2a, 0x0f, 0x00, + 0x00, } func (this *QueryContractInfoResponse) Equal(that interface{}) bool { @@ -1310,7 +1323,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "x/wasm/types/query.proto", + Metadata: "cosmwasm/wasm/v1beta1/query.proto", } func (m *QueryContractInfoRequest) Marshal() (dAtA []byte, err error) { @@ -2429,10 +2442,7 @@ func (m *QueryContractInfoRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2550,10 +2560,7 @@ func (m *QueryContractInfoResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2671,10 +2678,7 @@ func (m *QueryContractHistoryRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2794,10 +2798,7 @@ func (m *QueryContractHistoryResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2902,10 +2903,7 @@ func (m *QueryContractsByCodeRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -3023,10 +3021,7 @@ func (m *ContractInfoWithAddress) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -3146,10 +3141,7 @@ func (m *QueryContractsByCodeResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -3267,10 +3259,7 @@ func (m *QueryAllContractStateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -3390,10 +3379,7 @@ func (m *QueryAllContractStateResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -3509,10 +3495,7 @@ func (m *QueryRawContractStateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -3596,10 +3579,7 @@ func (m *QueryRawContractStateResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -3715,10 +3695,7 @@ func (m *QuerySmartContractStateRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -3802,10 +3779,7 @@ func (m *QuerySmartContractStateResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -3874,10 +3848,7 @@ func (m *QueryCodeRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -4076,10 +4047,7 @@ func (m *CodeInfoResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -4199,10 +4167,7 @@ func (m *QueryCodeResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -4288,10 +4253,7 @@ func (m *QueryCodesRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -4411,10 +4373,7 @@ func (m *QueryCodesResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { diff --git a/x/wasm/types/query.pb.gw.go b/x/wasm/types/query.pb.gw.go index 8630e48008..fbde946d49 100644 --- a/x/wasm/types/query.pb.gw.go +++ b/x/wasm/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: x/wasm/types/query.proto +// source: cosmwasm/wasm/v1beta1/query.proto /* Package types is a reverse proxy. @@ -20,7 +20,6 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" ) @@ -31,7 +30,6 @@ var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage -var _ = metadata.Join func request_Query_ContractInfo_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryContractInfoRequest @@ -548,14 +546,12 @@ func local_request_Query_Codes_0(ctx context.Context, marshaler runtime.Marshale // RegisterQueryHandlerServer registers the http handlers for service Query to "mux". // UnaryRPC :call QueryServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +// Note that using this registration option will cause many gRPC library features (such as grpc.SendHeader, etc) to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { mux.Handle("GET", pattern_Query_ContractInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -563,7 +559,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ContractInfo_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -577,8 +572,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ContractHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -586,7 +579,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ContractHistory_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -600,8 +592,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ContractsByCode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -609,7 +599,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ContractsByCode_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -623,8 +612,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_AllContractState_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -632,7 +619,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_AllContractState_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -646,8 +632,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_RawContractState_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -655,7 +639,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_RawContractState_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -669,8 +652,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_SmartContractState_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -678,7 +659,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_SmartContractState_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -692,8 +672,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Code_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -701,7 +679,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Code_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -715,8 +692,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Codes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -724,7 +699,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Codes_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/x/wasm/types/query.proto b/x/wasm/types/query.proto deleted file mode 100644 index d907d92fb3..0000000000 --- a/x/wasm/types/query.proto +++ /dev/null @@ -1,175 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1beta1; - -import "gogoproto/gogo.proto"; -import "x/wasm/types/types.proto"; -import "google/api/annotations.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; - -option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.equal_all) = false; - -// Query provides defines the gRPC querier service -service Query { - // ContractInfo gets the contract meta data - rpc ContractInfo (QueryContractInfoRequest) returns (QueryContractInfoResponse) { - option (google.api.http).get = "/wasm/v1beta1/contract/{address}"; - } - // ContractHistory gets the contract code history - rpc ContractHistory (QueryContractHistoryRequest) returns (QueryContractHistoryResponse) { - option (google.api.http).get = "/wasm/v1beta1/contract/{address}/history"; - } - // ContractsByCode lists all smart contracts for a code id - rpc ContractsByCode (QueryContractsByCodeRequest) returns (QueryContractsByCodeResponse) { - option (google.api.http).get = "/wasm/v1beta1/code/{code_id}/contracts"; - } - // AllContractState gets all raw store data for a single contract - rpc AllContractState (QueryAllContractStateRequest) returns (QueryAllContractStateResponse) { - option (google.api.http).get = "/wasm/v1beta1/contract/{address}/state"; - } - // RawContractState gets single key from the raw store data of a contract - rpc RawContractState (QueryRawContractStateRequest) returns (QueryRawContractStateResponse) { - option (google.api.http).get = "/wasm/v1beta1/contract/{address}/raw/{query_data}"; - } - // SmartContractState get smart query result from the contract - rpc SmartContractState (QuerySmartContractStateRequest) returns (QuerySmartContractStateResponse) { - option (google.api.http).get = "/wasm/v1beta1/contract/{address}/smart/{query_data}"; - } - // Code gets the binary code and metadata for a singe wasm code - rpc Code (QueryCodeRequest) returns (QueryCodeResponse) { - option (google.api.http).get = "/wasm/v1beta1/code/{code_id}"; - } - // Codes gets the metadata for all stored wasm codes - rpc Codes (QueryCodesRequest) returns (QueryCodesResponse) { - option (google.api.http).get = "/wasm/v1beta1/code"; - } -} - -// QueryContractInfoRequest is the request type for the Query/ContractInfo RPC method -message QueryContractInfoRequest { - // address is the address of the contract to query - string address = 1; -} -// QueryContractInfoResponse is the response type for the Query/ContractInfo RPC method -message QueryContractInfoResponse { - option (gogoproto.equal) = true; - - // address is the address of the contract - string address = 1; - ContractInfo contract_info = 2 [(gogoproto.embed) = true, (gogoproto.jsontag) = ""]; -} - -// QueryContractHistoryRequest is the request type for the Query/ContractHistory RPC method -message QueryContractHistoryRequest { - // address is the address of the contract to query - string address = 1; - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -// QueryContractHistoryResponse is the response type for the Query/ContractHistory RPC method -message QueryContractHistoryResponse { - repeated ContractCodeHistoryEntry entries = 1 [(gogoproto.nullable) = false]; - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryContractsByCodeRequest is the request type for the Query/ContractsByCode RPC method -message QueryContractsByCodeRequest { - uint64 code_id = 1; // grpc-gateway_out does not support Go style CodID - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -// ContractInfoWithAddress adds the address (key) to the ContractInfo representation -message ContractInfoWithAddress { - option (gogoproto.equal) = true; - - string address = 1; - ContractInfo contract_info = 2 [(gogoproto.embed) = true, (gogoproto.jsontag) = ""]; -} -// QueryContractsByCodeResponse is the response type for the Query/ContractsByCode RPC method -message QueryContractsByCodeResponse { - repeated ContractInfoWithAddress contract_infos = 1 [(gogoproto.nullable) = false]; - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryAllContractStateRequest is the request type for the Query/AllContractState RPC method -message QueryAllContractStateRequest { - // address is the address of the contract - string address = 1; - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -// QueryAllContractStateResponse is the response type for the Query/AllContractState RPC method -message QueryAllContractStateResponse { - repeated Model models = 1 [(gogoproto.nullable) = false]; - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryRawContractStateRequest is the request type for the Query/RawContractState RPC method -message QueryRawContractStateRequest { - // address is the address of the contract - string address = 1; - bytes query_data = 2; -} - -// QueryRawContractStateResponse is the response type for the Query/RawContractState RPC method -message QueryRawContractStateResponse { - // Data contains the raw store data - bytes data = 1; -} - -// QuerySmartContractStateRequest is the request type for the Query/SmartContractState RPC method -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; -} - -// 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"]; -} - -// QueryCodeRequest is the request type for the Query/Code RPC method -message QueryCodeRequest { - uint64 code_id = 1; // grpc-gateway_out does not support Go style CodID -} - -// CodeInfoResponse contains code meta data from CodeInfo -message CodeInfoResponse { - option (gogoproto.equal) = true; - - uint64 code_id = 1 [(gogoproto.customname) = "CodeID", (gogoproto.jsontag) = "id"]; // id for legacy support - string creator = 2; - bytes data_hash = 3 [(gogoproto.casttype) = "github.com/tendermint/tendermint/libs/bytes.HexBytes"]; - string source = 4; - string builder = 5; -} - -// QueryCodeResponse is the response type for the Query/Code RPC method -message QueryCodeResponse { - option (gogoproto.equal) = true; - CodeInfoResponse code_info = 1 [(gogoproto.embed) = true, (gogoproto.jsontag) = ""]; - bytes data = 2 [(gogoproto.jsontag) = "data"]; -} - -// QueryCodesRequest is the request type for the Query/Codes RPC method -message QueryCodesRequest { - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -// QueryCodesResponse is the response type for the Query/Codes RPC method -message QueryCodesResponse { - repeated CodeInfoResponse code_infos = 1 [(gogoproto.nullable) = false]; - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} diff --git a/x/wasm/types/tx.pb.go b/x/wasm/types/tx.pb.go index 9fb9592410..d9a9cf005e 100644 --- a/x/wasm/types/tx.pb.go +++ b/x/wasm/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: x/wasm/types/tx.proto +// source: cosmwasm/wasm/v1beta1/tx.proto package types @@ -37,11 +37,13 @@ type MsgStoreCode struct { Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` // WASMByteCode can be raw or gzip compressed WASMByteCode []byte `protobuf:"bytes,2,opt,name=wasm_byte_code,json=wasmByteCode,proto3" json:"wasm_byte_code,omitempty"` - // Source is a valid absolute HTTPS URI to the contract's source code, optional + // Source is a valid absolute HTTPS URI to the contract's source code, + // optional Source string `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"` // Builder is a valid docker image name with tag, optional Builder string `protobuf:"bytes,4,opt,name=builder,proto3" json:"builder,omitempty"` - // InstantiatePermission access control to apply on contract creation, optional + // InstantiatePermission access control to apply on contract creation, + // optional InstantiatePermission *AccessConfig `protobuf:"bytes,5,opt,name=instantiate_permission,json=instantiatePermission,proto3" json:"instantiate_permission,omitempty"` } @@ -49,7 +51,7 @@ func (m *MsgStoreCode) Reset() { *m = MsgStoreCode{} } func (m *MsgStoreCode) String() string { return proto.CompactTextString(m) } func (*MsgStoreCode) ProtoMessage() {} func (*MsgStoreCode) Descriptor() ([]byte, []int) { - return fileDescriptor_fdaa78bc8a72122f, []int{0} + return fileDescriptor_b74028d4038589a4, []int{0} } func (m *MsgStoreCode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -88,7 +90,7 @@ func (m *MsgStoreCodeResponse) Reset() { *m = MsgStoreCodeResponse{} } func (m *MsgStoreCodeResponse) String() string { return proto.CompactTextString(m) } func (*MsgStoreCodeResponse) ProtoMessage() {} func (*MsgStoreCodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fdaa78bc8a72122f, []int{1} + return fileDescriptor_b74028d4038589a4, []int{1} } func (m *MsgStoreCodeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -117,7 +119,8 @@ func (m *MsgStoreCodeResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgStoreCodeResponse proto.InternalMessageInfo -// MsgInstantiateContract create a new smart contract instance for the given code id. +// MsgInstantiateContract create a new smart contract instance for the given +// code id. type MsgInstantiateContract struct { // Sender is the that actor that signed the messages Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` @@ -137,7 +140,7 @@ func (m *MsgInstantiateContract) Reset() { *m = MsgInstantiateContract{} func (m *MsgInstantiateContract) String() string { return proto.CompactTextString(m) } func (*MsgInstantiateContract) ProtoMessage() {} func (*MsgInstantiateContract) Descriptor() ([]byte, []int) { - return fileDescriptor_fdaa78bc8a72122f, []int{2} + return fileDescriptor_b74028d4038589a4, []int{2} } func (m *MsgInstantiateContract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -178,7 +181,7 @@ func (m *MsgInstantiateContractResponse) Reset() { *m = MsgInstantiateCo func (m *MsgInstantiateContractResponse) String() string { return proto.CompactTextString(m) } func (*MsgInstantiateContractResponse) ProtoMessage() {} func (*MsgInstantiateContractResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fdaa78bc8a72122f, []int{3} + return fileDescriptor_b74028d4038589a4, []int{3} } func (m *MsgInstantiateContractResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -223,7 +226,7 @@ func (m *MsgExecuteContract) Reset() { *m = MsgExecuteContract{} } func (m *MsgExecuteContract) String() string { return proto.CompactTextString(m) } func (*MsgExecuteContract) ProtoMessage() {} func (*MsgExecuteContract) Descriptor() ([]byte, []int) { - return fileDescriptor_fdaa78bc8a72122f, []int{4} + return fileDescriptor_b74028d4038589a4, []int{4} } func (m *MsgExecuteContract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -262,7 +265,7 @@ func (m *MsgExecuteContractResponse) Reset() { *m = MsgExecuteContractRe func (m *MsgExecuteContractResponse) String() string { return proto.CompactTextString(m) } func (*MsgExecuteContractResponse) ProtoMessage() {} func (*MsgExecuteContractResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fdaa78bc8a72122f, []int{5} + return fileDescriptor_b74028d4038589a4, []int{5} } func (m *MsgExecuteContractResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -307,7 +310,7 @@ func (m *MsgMigrateContract) Reset() { *m = MsgMigrateContract{} } func (m *MsgMigrateContract) String() string { return proto.CompactTextString(m) } func (*MsgMigrateContract) ProtoMessage() {} func (*MsgMigrateContract) Descriptor() ([]byte, []int) { - return fileDescriptor_fdaa78bc8a72122f, []int{6} + return fileDescriptor_b74028d4038589a4, []int{6} } func (m *MsgMigrateContract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -347,7 +350,7 @@ func (m *MsgMigrateContractResponse) Reset() { *m = MsgMigrateContractRe func (m *MsgMigrateContractResponse) String() string { return proto.CompactTextString(m) } func (*MsgMigrateContractResponse) ProtoMessage() {} func (*MsgMigrateContractResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fdaa78bc8a72122f, []int{7} + return fileDescriptor_b74028d4038589a4, []int{7} } func (m *MsgMigrateContractResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -390,7 +393,7 @@ func (m *MsgUpdateAdmin) Reset() { *m = MsgUpdateAdmin{} } func (m *MsgUpdateAdmin) String() string { return proto.CompactTextString(m) } func (*MsgUpdateAdmin) ProtoMessage() {} func (*MsgUpdateAdmin) Descriptor() ([]byte, []int) { - return fileDescriptor_fdaa78bc8a72122f, []int{8} + return fileDescriptor_b74028d4038589a4, []int{8} } func (m *MsgUpdateAdmin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -427,7 +430,7 @@ func (m *MsgUpdateAdminResponse) Reset() { *m = MsgUpdateAdminResponse{} func (m *MsgUpdateAdminResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateAdminResponse) ProtoMessage() {} func (*MsgUpdateAdminResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fdaa78bc8a72122f, []int{9} + return fileDescriptor_b74028d4038589a4, []int{9} } func (m *MsgUpdateAdminResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -468,7 +471,7 @@ func (m *MsgClearAdmin) Reset() { *m = MsgClearAdmin{} } func (m *MsgClearAdmin) String() string { return proto.CompactTextString(m) } func (*MsgClearAdmin) ProtoMessage() {} func (*MsgClearAdmin) Descriptor() ([]byte, []int) { - return fileDescriptor_fdaa78bc8a72122f, []int{10} + return fileDescriptor_b74028d4038589a4, []int{10} } func (m *MsgClearAdmin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -505,7 +508,7 @@ func (m *MsgClearAdminResponse) Reset() { *m = MsgClearAdminResponse{} } func (m *MsgClearAdminResponse) String() string { return proto.CompactTextString(m) } func (*MsgClearAdminResponse) ProtoMessage() {} func (*MsgClearAdminResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_fdaa78bc8a72122f, []int{11} + return fileDescriptor_b74028d4038589a4, []int{11} } func (m *MsgClearAdminResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -549,61 +552,61 @@ func init() { proto.RegisterType((*MsgClearAdminResponse)(nil), "cosmwasm.wasm.v1beta1.MsgClearAdminResponse") } -func init() { proto.RegisterFile("x/wasm/types/tx.proto", fileDescriptor_fdaa78bc8a72122f) } - -var fileDescriptor_fdaa78bc8a72122f = []byte{ - // 804 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x4f, 0x6f, 0xe3, 0x44, - 0x14, 0x8f, 0x9b, 0x7f, 0xcd, 0x4b, 0x28, 0xc8, 0x34, 0xc5, 0x18, 0xe4, 0x44, 0x29, 0xa0, 0x20, - 0xa8, 0xdd, 0x16, 0x01, 0x07, 0xc4, 0xa1, 0x49, 0x39, 0xf4, 0x60, 0x84, 0x5c, 0xa1, 0x4a, 0x95, - 0x50, 0x98, 0xd8, 0x53, 0x63, 0x88, 0x67, 0x22, 0xcf, 0x84, 0xb4, 0xe2, 0x1b, 0x70, 0xe2, 0x0b, - 0xf0, 0x05, 0x10, 0x1f, 0xa4, 0xc7, 0x1e, 0x57, 0x5a, 0x29, 0xbb, 0x9b, 0x5e, 0xf7, 0x13, 0xec, - 0x69, 0x35, 0xb6, 0xe3, 0xb8, 0xd9, 0x38, 0xf2, 0x6a, 0xb5, 0x97, 0x64, 0xde, 0xcc, 0xef, 0xfd, - 0x7e, 0x7e, 0x3f, 0xbd, 0x37, 0x1a, 0x68, 0x5e, 0x1b, 0x53, 0xc4, 0x7c, 0x83, 0xdf, 0x8c, 0x31, - 0x33, 0xf8, 0xb5, 0x3e, 0x0e, 0x28, 0xa7, 0x72, 0xd3, 0xa6, 0xcc, 0x17, 0x07, 0x7a, 0xf8, 0xf3, - 0xe7, 0xd1, 0x10, 0x73, 0x74, 0xa4, 0x6a, 0x62, 0x9b, 0x32, 0x63, 0x88, 0x18, 0x36, 0xe2, 0x4d, - 0xc3, 0xa6, 0x1e, 0x89, 0xd2, 0xd4, 0x5d, 0x97, 0xba, 0x34, 0x5c, 0x1a, 0x62, 0x15, 0xef, 0x2a, - 0x0f, 0x35, 0xc4, 0x6f, 0x74, 0xd2, 0x79, 0x2e, 0x41, 0xc3, 0x64, 0xee, 0x39, 0xa7, 0x01, 0xee, - 0x53, 0x07, 0xcb, 0x7b, 0x50, 0x61, 0x98, 0x38, 0x38, 0x50, 0xa4, 0xb6, 0xd4, 0xad, 0x59, 0x71, - 0x24, 0x7f, 0x03, 0x3b, 0x82, 0x62, 0x30, 0xbc, 0xe1, 0x78, 0x60, 0x53, 0x07, 0x2b, 0x5b, 0x6d, - 0xa9, 0xdb, 0xe8, 0xbd, 0x37, 0x9f, 0xb5, 0x1a, 0x17, 0x27, 0xe7, 0x66, 0xef, 0x86, 0x87, 0x0c, - 0x56, 0x43, 0xe0, 0x16, 0x51, 0xc8, 0x47, 0x27, 0x81, 0x8d, 0x95, 0x62, 0xcc, 0x17, 0x46, 0xb2, - 0x02, 0xd5, 0xe1, 0xc4, 0x1b, 0x09, 0xa1, 0x52, 0x78, 0xb0, 0x08, 0xe5, 0x4b, 0xd8, 0xf3, 0x08, - 0xe3, 0x88, 0x70, 0x0f, 0x71, 0x3c, 0x18, 0xe3, 0xc0, 0xf7, 0x18, 0xf3, 0x28, 0x51, 0xca, 0x6d, - 0xa9, 0x5b, 0x3f, 0xde, 0xd7, 0xd7, 0x5a, 0xa3, 0x9f, 0xd8, 0x36, 0x66, 0xac, 0x4f, 0xc9, 0x95, - 0xe7, 0x5a, 0xcd, 0x14, 0xc5, 0x4f, 0x09, 0x43, 0xe7, 0x3b, 0xd8, 0x4d, 0x57, 0x6b, 0x61, 0x36, - 0xa6, 0x84, 0x61, 0x79, 0x1f, 0xaa, 0xa2, 0xa6, 0x81, 0xe7, 0x84, 0x65, 0x97, 0x7a, 0x30, 0x9f, - 0xb5, 0x2a, 0x02, 0x72, 0x76, 0x6a, 0x55, 0xc4, 0xd1, 0x99, 0xd3, 0xf9, 0x77, 0x0b, 0xf6, 0x4c, - 0xe6, 0x9e, 0x2d, 0x99, 0xfb, 0x94, 0xf0, 0x00, 0xd9, 0x3c, 0xd3, 0xb5, 0x5d, 0x28, 0x23, 0xc7, - 0xf7, 0x48, 0x68, 0x56, 0xcd, 0x8a, 0x82, 0xb4, 0x5a, 0x31, 0x4b, 0x4d, 0xa4, 0x8e, 0xd0, 0x10, - 0x8f, 0x62, 0x7b, 0xa2, 0x40, 0xfe, 0x16, 0xb6, 0x3d, 0xe2, 0xf1, 0x81, 0xcf, 0xdc, 0xd0, 0x8e, - 0x46, 0xef, 0xe3, 0x17, 0xb3, 0x96, 0x82, 0x89, 0x4d, 0x1d, 0x8f, 0xb8, 0xc6, 0xef, 0x8c, 0x12, - 0xdd, 0x42, 0x53, 0x13, 0x33, 0x86, 0x5c, 0x6c, 0x55, 0x05, 0xda, 0x64, 0xae, 0x8c, 0xa0, 0x7c, - 0x35, 0x21, 0x0e, 0x53, 0x2a, 0xed, 0x62, 0xb7, 0x7e, 0xfc, 0xa1, 0x1e, 0x35, 0x92, 0x2e, 0x1a, - 0x29, 0xb1, 0xb0, 0x4f, 0x3d, 0xd2, 0x3b, 0xbc, 0x9d, 0xb5, 0x0a, 0xff, 0x3d, 0x69, 0x75, 0x5d, - 0x8f, 0xff, 0x36, 0x19, 0xea, 0x36, 0xf5, 0x8d, 0xb8, 0xeb, 0xa2, 0xbf, 0x03, 0xe6, 0xfc, 0x11, - 0x37, 0x91, 0x48, 0x60, 0x56, 0xc4, 0xdc, 0xf9, 0x11, 0xb4, 0xf5, 0xf6, 0x24, 0x36, 0x2b, 0x50, - 0x45, 0x8e, 0x13, 0x60, 0xc6, 0x62, 0x9f, 0x16, 0xa1, 0x2c, 0x43, 0xc9, 0x41, 0x1c, 0x45, 0x4d, - 0x65, 0x85, 0xeb, 0xce, 0x63, 0x09, 0x64, 0x93, 0xb9, 0x3f, 0x5c, 0x63, 0x7b, 0x92, 0xc3, 0x6b, - 0x15, 0xb6, 0xed, 0x18, 0x13, 0xdb, 0x9d, 0xc4, 0xb2, 0x0e, 0x45, 0xe1, 0x58, 0x31, 0x87, 0x63, - 0x02, 0xb8, 0x74, 0xab, 0xfc, 0xd6, 0xdc, 0x3a, 0x04, 0xf5, 0xd5, 0xe2, 0x12, 0xa7, 0x16, 0x7e, - 0x48, 0x29, 0x3f, 0xfe, 0x8f, 0xfc, 0x30, 0x3d, 0x37, 0x40, 0x6f, 0xe8, 0x47, 0xae, 0x0e, 0xfc, - 0x1e, 0xea, 0x7e, 0xa4, 0x15, 0xb6, 0x5b, 0x29, 0x87, 0x79, 0x10, 0x27, 0x98, 0xcc, 0x8d, 0x0b, - 0x5c, 0xf9, 0xda, 0x8d, 0x05, 0x22, 0xd8, 0x31, 0x99, 0xfb, 0xf3, 0xd8, 0x41, 0x1c, 0x9f, 0x84, - 0x93, 0x92, 0x55, 0xdb, 0x47, 0x50, 0x23, 0x78, 0x3a, 0x48, 0xcf, 0xd6, 0x36, 0xc1, 0xd3, 0x28, - 0x29, 0x5d, 0x78, 0xf1, 0x61, 0xe1, 0x1d, 0x25, 0x1c, 0xe1, 0x94, 0xc4, 0xe2, 0x83, 0x3a, 0x7d, - 0x78, 0xc7, 0x64, 0x6e, 0x7f, 0x84, 0x51, 0xb0, 0x59, 0x7b, 0x13, 0xfd, 0x07, 0xd0, 0x7c, 0x40, - 0xb2, 0x60, 0x3f, 0xfe, 0xbb, 0x0c, 0x45, 0x31, 0x86, 0xbf, 0x40, 0x6d, 0x79, 0xd7, 0x66, 0xdd, - 0x64, 0xe9, 0x2b, 0x4a, 0xfd, 0x22, 0x07, 0x28, 0x71, 0xf5, 0x2f, 0x78, 0x7f, 0xdd, 0xf5, 0x74, - 0x90, 0xcd, 0xb1, 0x06, 0xae, 0x7e, 0xfd, 0x5a, 0xf0, 0x44, 0x9c, 0xc2, 0xbb, 0xab, 0xb3, 0xfa, - 0x79, 0x36, 0xd3, 0x0a, 0x54, 0x3d, 0xca, 0x0d, 0x4d, 0x0b, 0xae, 0x0e, 0xc3, 0x06, 0xc1, 0x15, - 0xe8, 0x26, 0xc1, 0xac, 0xa6, 0xb5, 0xa1, 0x9e, 0xee, 0xce, 0x4f, 0xb3, 0x19, 0x52, 0x30, 0xf5, - 0x20, 0x17, 0x2c, 0x11, 0xf9, 0x15, 0x20, 0xd5, 0x85, 0x9f, 0x64, 0x27, 0x2f, 0x51, 0xea, 0x97, - 0x79, 0x50, 0x0b, 0x85, 0xde, 0xe9, 0xed, 0x33, 0xad, 0x70, 0x3b, 0xd7, 0xa4, 0xbb, 0xb9, 0x26, - 0x3d, 0x9d, 0x6b, 0xd2, 0x3f, 0xf7, 0x5a, 0xe1, 0xee, 0x5e, 0x2b, 0x3c, 0xba, 0xd7, 0x0a, 0x97, - 0x9f, 0xa5, 0x6e, 0xb2, 0x3e, 0x65, 0xfe, 0x85, 0x78, 0x39, 0x08, 0x56, 0xc7, 0x48, 0x3f, 0x23, - 0x86, 0x95, 0xf0, 0x05, 0xf1, 0xd5, 0xcb, 0x00, 0x00, 0x00, 0xff, 0xff, 0x23, 0x6f, 0xe6, 0xee, - 0xc1, 0x08, 0x00, 0x00, +func init() { proto.RegisterFile("cosmwasm/wasm/v1beta1/tx.proto", fileDescriptor_b74028d4038589a4) } + +var fileDescriptor_b74028d4038589a4 = []byte{ + // 803 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcd, 0x6e, 0xdb, 0x46, + 0x10, 0x16, 0xad, 0x3f, 0x6b, 0xa4, 0xba, 0x05, 0x6b, 0xbb, 0x2c, 0x5b, 0x50, 0xaa, 0xdc, 0x16, + 0x2a, 0x5a, 0x53, 0xb6, 0x8b, 0x36, 0x87, 0x20, 0x07, 0x4b, 0xce, 0xc1, 0x07, 0x06, 0x01, 0x8d, + 0xc0, 0x80, 0x81, 0x40, 0x59, 0x91, 0x6b, 0x86, 0x89, 0xb8, 0x2b, 0x70, 0xa9, 0xc8, 0x46, 0xde, + 0x20, 0xa7, 0xbc, 0x40, 0x5e, 0x20, 0xc8, 0x83, 0xf8, 0xe8, 0x63, 0x80, 0x00, 0x4a, 0x22, 0x5f, + 0xf3, 0x04, 0x39, 0x05, 0x5c, 0xfe, 0x88, 0x56, 0x44, 0x81, 0x41, 0x90, 0x0b, 0xc5, 0xd1, 0x7e, + 0xf3, 0x7d, 0x9c, 0x0f, 0x33, 0x83, 0x05, 0xc5, 0xa0, 0xcc, 0x19, 0x23, 0xe6, 0xb4, 0xf9, 0xe3, + 0xc9, 0x6e, 0x1f, 0x7b, 0x68, 0xb7, 0xed, 0x9d, 0xa9, 0x43, 0x97, 0x7a, 0x54, 0xdc, 0x88, 0xce, + 0x55, 0xfe, 0x08, 0xcf, 0x65, 0x9e, 0x46, 0x59, 0xbb, 0x8f, 0x18, 0x8e, 0x93, 0x0c, 0x6a, 0x93, + 0x20, 0x4d, 0x5e, 0xb7, 0xa8, 0x45, 0xf9, 0x6b, 0xdb, 0x7f, 0x0b, 0xff, 0xfd, 0x2d, 0x45, 0xec, + 0x7c, 0x88, 0x59, 0x00, 0x69, 0x7e, 0x10, 0xa0, 0xa6, 0x31, 0xeb, 0xc8, 0xa3, 0x2e, 0xee, 0x52, + 0x13, 0x8b, 0x9b, 0x50, 0x62, 0x98, 0x98, 0xd8, 0x95, 0x84, 0x86, 0xd0, 0xaa, 0xe8, 0x61, 0x24, + 0xfe, 0x0f, 0x6b, 0x3e, 0x49, 0xaf, 0x7f, 0xee, 0xe1, 0x9e, 0x41, 0x4d, 0x2c, 0xad, 0x34, 0x84, + 0x56, 0xad, 0xf3, 0xc3, 0x74, 0x52, 0xaf, 0x1d, 0xef, 0x1f, 0x69, 0x9d, 0x73, 0x8f, 0x33, 0xe8, + 0x35, 0x1f, 0x17, 0x45, 0x9c, 0x8f, 0x8e, 0x5c, 0x03, 0x4b, 0xf9, 0x90, 0x8f, 0x47, 0xa2, 0x04, + 0xe5, 0xfe, 0xc8, 0x1e, 0xf8, 0x42, 0x05, 0x7e, 0x10, 0x85, 0xe2, 0x09, 0x6c, 0xda, 0x84, 0x79, + 0x88, 0x78, 0x36, 0xf2, 0x70, 0x6f, 0x88, 0x5d, 0xc7, 0x66, 0xcc, 0xa6, 0x44, 0x2a, 0x36, 0x84, + 0x56, 0x75, 0x6f, 0x4b, 0x5d, 0xe8, 0x91, 0xba, 0x6f, 0x18, 0x98, 0xb1, 0x2e, 0x25, 0xa7, 0xb6, + 0xa5, 0x6f, 0x24, 0x28, 0xee, 0xc6, 0x0c, 0xcd, 0x9b, 0xb0, 0x9e, 0xac, 0x56, 0xc7, 0x6c, 0x48, + 0x09, 0xc3, 0xe2, 0x16, 0x94, 0xfd, 0x9a, 0x7a, 0xb6, 0xc9, 0xcb, 0x2e, 0x74, 0x60, 0x3a, 0xa9, + 0x97, 0x7c, 0xc8, 0xe1, 0x81, 0x5e, 0xf2, 0x8f, 0x0e, 0xcd, 0xe6, 0x8b, 0x15, 0xd8, 0xd4, 0x98, + 0x75, 0x38, 0x63, 0xee, 0x52, 0xe2, 0xb9, 0xc8, 0xf0, 0x52, 0x5d, 0x5b, 0x87, 0x22, 0x32, 0x1d, + 0x9b, 0x70, 0xb3, 0x2a, 0x7a, 0x10, 0x24, 0xd5, 0xf2, 0x69, 0x6a, 0x7e, 0xea, 0x00, 0xf5, 0xf1, + 0x20, 0xb4, 0x27, 0x08, 0xc4, 0x1b, 0xb0, 0x6a, 0x13, 0xdb, 0xeb, 0x39, 0xcc, 0xe2, 0x76, 0xd4, + 0x3a, 0xbf, 0x7e, 0x9c, 0xd4, 0x25, 0x4c, 0x0c, 0x6a, 0xda, 0xc4, 0x6a, 0x3f, 0x62, 0x94, 0xa8, + 0x3a, 0x1a, 0x6b, 0x98, 0x31, 0x64, 0x61, 0xbd, 0xec, 0xa3, 0x35, 0x66, 0x89, 0x08, 0x8a, 0xa7, + 0x23, 0x62, 0x32, 0xa9, 0xd4, 0xc8, 0xb7, 0xaa, 0x7b, 0x3f, 0xab, 0x41, 0x47, 0xa9, 0x7e, 0x47, + 0xc5, 0x16, 0x76, 0xa9, 0x4d, 0x3a, 0x3b, 0x17, 0x93, 0x7a, 0xee, 0xe5, 0xdb, 0x7a, 0xcb, 0xb2, + 0xbd, 0x87, 0xa3, 0xbe, 0x6a, 0x50, 0xa7, 0x1d, 0xb6, 0x5f, 0xf0, 0xb3, 0xcd, 0xcc, 0xc7, 0x61, + 0x13, 0xf9, 0x09, 0x4c, 0x0f, 0x98, 0x9b, 0x77, 0x40, 0x59, 0x6c, 0x4f, 0x6c, 0xb3, 0x04, 0x65, + 0x64, 0x9a, 0x2e, 0x66, 0x2c, 0xf4, 0x29, 0x0a, 0x45, 0x11, 0x0a, 0x26, 0xf2, 0x50, 0xd0, 0x54, + 0x3a, 0x7f, 0x6f, 0xbe, 0x11, 0x40, 0xd4, 0x98, 0x75, 0xfb, 0x0c, 0x1b, 0xa3, 0x0c, 0x5e, 0xcb, + 0xb0, 0x6a, 0x84, 0x98, 0xd0, 0xee, 0x38, 0x16, 0x55, 0xc8, 0xfb, 0x8e, 0xe5, 0x33, 0x38, 0xe6, + 0x03, 0x67, 0x6e, 0x15, 0xbf, 0x99, 0x5b, 0x3b, 0x20, 0x7f, 0x5e, 0x5c, 0xec, 0x54, 0xe4, 0x87, + 0x90, 0xf0, 0xe3, 0x55, 0xe0, 0x87, 0x66, 0x5b, 0x2e, 0xfa, 0x4a, 0x3f, 0x32, 0x75, 0xe0, 0x2d, + 0xa8, 0x3a, 0x81, 0x16, 0x6f, 0xb7, 0x42, 0x06, 0xf3, 0x20, 0x4c, 0xd0, 0x98, 0x15, 0x16, 0x38, + 0xf7, 0xb5, 0x4b, 0x0b, 0x44, 0xb0, 0xa6, 0x31, 0xeb, 0xde, 0xd0, 0x44, 0x1e, 0xde, 0xe7, 0x93, + 0x92, 0x56, 0xdb, 0x2f, 0x50, 0x21, 0x78, 0xdc, 0x4b, 0xce, 0xd6, 0x2a, 0xc1, 0xe3, 0x20, 0x29, + 0x59, 0x78, 0xfe, 0x7a, 0xe1, 0x4d, 0x89, 0x8f, 0x70, 0x42, 0x22, 0xfa, 0xa0, 0x66, 0x17, 0xbe, + 0xd3, 0x98, 0xd5, 0x1d, 0x60, 0xe4, 0x2e, 0xd7, 0x5e, 0x46, 0xff, 0x13, 0x6c, 0x5c, 0x23, 0x89, + 0xd8, 0xf7, 0x9e, 0x15, 0x21, 0xef, 0x8f, 0xe1, 0x7d, 0xa8, 0xcc, 0x76, 0x6d, 0xda, 0x26, 0x4b, + 0xae, 0x28, 0xf9, 0xef, 0x0c, 0xa0, 0xd8, 0xd5, 0xa7, 0xf0, 0xe3, 0xa2, 0xf5, 0xb4, 0x9d, 0xce, + 0xb1, 0x00, 0x2e, 0xff, 0xf7, 0x45, 0xf0, 0x58, 0x9c, 0xc2, 0xf7, 0xf3, 0xb3, 0xfa, 0x57, 0x3a, + 0xd3, 0x1c, 0x54, 0xde, 0xcd, 0x0c, 0x4d, 0x0a, 0xce, 0x0f, 0xc3, 0x12, 0xc1, 0x39, 0xe8, 0x32, + 0xc1, 0xb4, 0xa6, 0x35, 0xa0, 0x9a, 0xec, 0xce, 0x3f, 0xd2, 0x19, 0x12, 0x30, 0x79, 0x3b, 0x13, + 0x2c, 0x16, 0x79, 0x00, 0x90, 0xe8, 0xc2, 0xdf, 0xd3, 0x93, 0x67, 0x28, 0xf9, 0x9f, 0x2c, 0xa8, + 0x48, 0xa1, 0x73, 0x70, 0xf1, 0x5e, 0xc9, 0x5d, 0x4c, 0x15, 0xe1, 0x72, 0xaa, 0x08, 0xef, 0xa6, + 0x8a, 0xf0, 0xfc, 0x4a, 0xc9, 0x5d, 0x5e, 0x29, 0xb9, 0xd7, 0x57, 0x4a, 0xee, 0xe4, 0xcf, 0xc4, + 0x26, 0xeb, 0x52, 0xe6, 0x1c, 0x47, 0x17, 0x08, 0xb3, 0x7d, 0x16, 0x5c, 0x24, 0xf8, 0x36, 0xeb, + 0x97, 0xf8, 0x0d, 0xe2, 0xdf, 0x4f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xcb, 0xa6, 0x0b, 0x09, 0xd3, + 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -875,7 +878,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "x/wasm/types/tx.proto", + Metadata: "cosmwasm/wasm/v1beta1/tx.proto", } func (m *MsgStoreCode) Marshal() (dAtA []byte, err error) { @@ -1813,10 +1816,7 @@ func (m *MsgStoreCode) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } if (iNdEx + skippy) > l { @@ -1885,10 +1885,7 @@ func (m *MsgStoreCodeResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } if (iNdEx + skippy) > l { @@ -2121,10 +2118,7 @@ func (m *MsgInstantiateContract) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } if (iNdEx + skippy) > l { @@ -2240,10 +2234,7 @@ func (m *MsgInstantiateContractResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } if (iNdEx + skippy) > l { @@ -2425,10 +2416,7 @@ func (m *MsgExecuteContract) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } if (iNdEx + skippy) > l { @@ -2512,10 +2500,7 @@ func (m *MsgExecuteContractResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } if (iNdEx + skippy) > l { @@ -2682,10 +2667,7 @@ func (m *MsgMigrateContract) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } if (iNdEx + skippy) > l { @@ -2769,10 +2751,7 @@ func (m *MsgMigrateContractResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } if (iNdEx + skippy) > l { @@ -2918,10 +2897,7 @@ func (m *MsgUpdateAdmin) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } if (iNdEx + skippy) > l { @@ -2971,10 +2947,7 @@ func (m *MsgUpdateAdminResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } if (iNdEx + skippy) > l { @@ -3088,10 +3061,7 @@ func (m *MsgClearAdmin) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } if (iNdEx + skippy) > l { @@ -3141,10 +3111,7 @@ func (m *MsgClearAdminResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTx } if (iNdEx + skippy) > l { diff --git a/x/wasm/types/types.pb.go b/x/wasm/types/types.pb.go index eed0b27771..99ab489bb4 100644 --- a/x/wasm/types/types.pb.go +++ b/x/wasm/types/types.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: x/wasm/types/types.proto +// source: cosmwasm/wasm/v1beta1/types.proto package types @@ -55,7 +55,7 @@ var AccessType_value = map[string]int32{ } func (AccessType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8b85390a762df19f, []int{0} + return fileDescriptor_2548aa229a1f29bc, []int{0} } // ContractCodeHistoryOperationType actions that caused a code change @@ -91,7 +91,7 @@ func (x ContractCodeHistoryOperationType) String() string { } func (ContractCodeHistoryOperationType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8b85390a762df19f, []int{1} + return fileDescriptor_2548aa229a1f29bc, []int{1} } // AccessTypeParam @@ -103,7 +103,7 @@ func (m *AccessTypeParam) Reset() { *m = AccessTypeParam{} } func (m *AccessTypeParam) String() string { return proto.CompactTextString(m) } func (*AccessTypeParam) ProtoMessage() {} func (*AccessTypeParam) Descriptor() ([]byte, []int) { - return fileDescriptor_8b85390a762df19f, []int{0} + return fileDescriptor_2548aa229a1f29bc, []int{0} } func (m *AccessTypeParam) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -142,7 +142,7 @@ func (m *AccessConfig) Reset() { *m = AccessConfig{} } func (m *AccessConfig) String() string { return proto.CompactTextString(m) } func (*AccessConfig) ProtoMessage() {} func (*AccessConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_8b85390a762df19f, []int{1} + return fileDescriptor_2548aa229a1f29bc, []int{1} } func (m *AccessConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -181,7 +181,7 @@ type Params struct { func (m *Params) Reset() { *m = Params{} } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_8b85390a762df19f, []int{2} + return fileDescriptor_2548aa229a1f29bc, []int{2} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -216,7 +216,8 @@ type CodeInfo struct { CodeHash []byte `protobuf:"bytes,1,opt,name=code_hash,json=codeHash,proto3" json:"code_hash,omitempty"` // Creator address who initially stored the code Creator string `protobuf:"bytes,2,opt,name=creator,proto3" json:"creator,omitempty"` - // Source is a valid absolute HTTPS URI to the contract's source code, optional + // Source is a valid absolute HTTPS URI to the contract's source code, + // optional Source string `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"` // Builder is a valid docker image name with tag, optional Builder string `protobuf:"bytes,4,opt,name=builder,proto3" json:"builder,omitempty"` @@ -228,7 +229,7 @@ func (m *CodeInfo) Reset() { *m = CodeInfo{} } func (m *CodeInfo) String() string { return proto.CompactTextString(m) } func (*CodeInfo) ProtoMessage() {} func (*CodeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_8b85390a762df19f, []int{3} + return fileDescriptor_2548aa229a1f29bc, []int{3} } func (m *CodeInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -268,7 +269,8 @@ type ContractInfo struct { // Label is optional metadata to be stored with a contract instance. Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"` // Created Tx position when the contract was instantiated. - // This data should kept internal and not be exposed via query results. Just use for sorting + // This data should kept internal and not be exposed via query results. Just + // use for sorting Created *AbsoluteTxPosition `protobuf:"bytes,5,opt,name=created,proto3" json:"created,omitempty"` IBCPortID string `protobuf:"bytes,6,opt,name=ibc_port_id,json=ibcPortId,proto3" json:"ibc_port_id,omitempty"` } @@ -277,7 +279,7 @@ func (m *ContractInfo) Reset() { *m = ContractInfo{} } func (m *ContractInfo) String() string { return proto.CompactTextString(m) } func (*ContractInfo) ProtoMessage() {} func (*ContractInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_8b85390a762df19f, []int{4} + return fileDescriptor_2548aa229a1f29bc, []int{4} } func (m *ContractInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -320,7 +322,7 @@ func (m *ContractCodeHistoryEntry) Reset() { *m = ContractCodeHistoryEnt func (m *ContractCodeHistoryEntry) String() string { return proto.CompactTextString(m) } func (*ContractCodeHistoryEntry) ProtoMessage() {} func (*ContractCodeHistoryEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_8b85390a762df19f, []int{5} + return fileDescriptor_2548aa229a1f29bc, []int{5} } func (m *ContractCodeHistoryEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -349,11 +351,13 @@ func (m *ContractCodeHistoryEntry) XXX_DiscardUnknown() { var xxx_messageInfo_ContractCodeHistoryEntry proto.InternalMessageInfo -// AbsoluteTxPosition is a unique transaction position that allows for global ordering of transactions. +// AbsoluteTxPosition is a unique transaction position that allows for global +// ordering of transactions. type AbsoluteTxPosition struct { // BlockHeight is the block the contract was created at BlockHeight uint64 `protobuf:"varint,1,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` - // TxIndex is a monotonic counter within the block (actual transaction index, or gas consumed) + // TxIndex is a monotonic counter within the block (actual transaction index, + // or gas consumed) TxIndex uint64 `protobuf:"varint,2,opt,name=tx_index,json=txIndex,proto3" json:"tx_index,omitempty"` } @@ -361,7 +365,7 @@ func (m *AbsoluteTxPosition) Reset() { *m = AbsoluteTxPosition{} } func (m *AbsoluteTxPosition) String() string { return proto.CompactTextString(m) } func (*AbsoluteTxPosition) ProtoMessage() {} func (*AbsoluteTxPosition) Descriptor() ([]byte, []int) { - return fileDescriptor_8b85390a762df19f, []int{6} + return fileDescriptor_2548aa229a1f29bc, []int{6} } func (m *AbsoluteTxPosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -402,7 +406,7 @@ func (m *Model) Reset() { *m = Model{} } func (m *Model) String() string { return proto.CompactTextString(m) } func (*Model) ProtoMessage() {} func (*Model) Descriptor() ([]byte, []int) { - return fileDescriptor_8b85390a762df19f, []int{7} + return fileDescriptor_2548aa229a1f29bc, []int{7} } func (m *Model) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -444,80 +448,81 @@ func init() { proto.RegisterType((*Model)(nil), "cosmwasm.wasm.v1beta1.Model") } -func init() { proto.RegisterFile("x/wasm/types/types.proto", fileDescriptor_8b85390a762df19f) } - -var fileDescriptor_8b85390a762df19f = []byte{ - // 1119 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xcd, 0x8f, 0xdb, 0x44, - 0x14, 0x8f, 0x93, 0xec, 0xd7, 0x74, 0x69, 0xd3, 0xa1, 0x4b, 0xd3, 0x50, 0x92, 0xd4, 0xe5, 0x63, - 0xfb, 0x41, 0x42, 0x0b, 0xa2, 0xa8, 0xb7, 0xc4, 0x31, 0x5d, 0x57, 0x6c, 0x12, 0x4d, 0xb2, 0xb4, - 0x8b, 0x84, 0xac, 0xb1, 0x3d, 0x9b, 0x1d, 0x6a, 0x7b, 0x22, 0xcf, 0xa4, 0x4d, 0xfa, 0x17, 0xa0, - 0xe5, 0x82, 0x38, 0x71, 0x20, 0x12, 0x12, 0x08, 0xf5, 0x4f, 0xe9, 0x05, 0xa9, 0x47, 0x4e, 0x11, - 0xa4, 0x42, 0x82, 0xeb, 0x72, 0xeb, 0x09, 0x79, 0x26, 0xab, 0x58, 0xf4, 0x63, 0xc3, 0x25, 0x9a, - 0xf7, 0xe6, 0xfd, 0x7e, 0xef, 0xfd, 0xde, 0xcc, 0x73, 0x06, 0xe4, 0x87, 0xd5, 0x07, 0x98, 0x07, - 0x55, 0x31, 0xea, 0x13, 0xae, 0x7e, 0x2b, 0xfd, 0x88, 0x09, 0x06, 0x37, 0x5c, 0xc6, 0x83, 0x78, - 0xaf, 0x22, 0x7f, 0xee, 0x5f, 0x73, 0x88, 0xc0, 0xd7, 0x0a, 0x67, 0x7a, 0xac, 0xc7, 0x64, 0x44, - 0x35, 0x5e, 0xa9, 0x60, 0xdd, 0x01, 0xa7, 0x6a, 0xae, 0x4b, 0x38, 0xef, 0x8e, 0xfa, 0xa4, 0x8d, - 0x23, 0x1c, 0x40, 0x0b, 0x2c, 0xdd, 0xc7, 0xfe, 0x80, 0xe4, 0xb5, 0xb2, 0xb6, 0x79, 0xf2, 0xfa, - 0x85, 0xca, 0x0b, 0xf9, 0x2a, 0x73, 0x58, 0x3d, 0x77, 0x38, 0x29, 0xad, 0x8f, 0x70, 0xe0, 0xdf, - 0xd4, 0x25, 0x52, 0x47, 0x8a, 0xe1, 0x66, 0xf6, 0xfb, 0x1f, 0x4b, 0x9a, 0xfe, 0x83, 0x06, 0xd6, - 0x55, 0xb4, 0xc1, 0xc2, 0x3d, 0xda, 0x83, 0x77, 0x01, 0xe8, 0x93, 0x28, 0xa0, 0x9c, 0x53, 0x16, - 0x2e, 0x9e, 0x66, 0xe3, 0x70, 0x52, 0x3a, 0xad, 0xd2, 0xcc, 0xe1, 0x3a, 0x4a, 0x70, 0xc1, 0xab, - 0x60, 0x05, 0x7b, 0x5e, 0x44, 0x38, 0xcf, 0xa7, 0xcb, 0xda, 0xe6, 0x5a, 0x1d, 0x1e, 0x4e, 0x4a, - 0x27, 0x15, 0x66, 0xb6, 0xa1, 0xa3, 0xa3, 0x90, 0x59, 0x79, 0x7f, 0xa6, 0xc1, 0xb2, 0x54, 0xce, - 0xa1, 0x00, 0xd0, 0x65, 0x1e, 0xb1, 0x07, 0x7d, 0x9f, 0x61, 0xcf, 0xc6, 0x32, 0xb7, 0x2c, 0xf0, - 0xc4, 0xf5, 0x8b, 0xaf, 0x2c, 0x50, 0x29, 0xab, 0x5f, 0x78, 0x3c, 0x29, 0xa5, 0x0e, 0x27, 0xa5, - 0x73, 0x2a, 0xe5, 0xf3, 0x64, 0x3a, 0xca, 0xc5, 0xce, 0x1d, 0xe9, 0x53, 0x50, 0xf8, 0x9d, 0x06, - 0x8a, 0x34, 0xe4, 0x02, 0x87, 0x82, 0x62, 0x41, 0x6c, 0x8f, 0xec, 0xe1, 0x81, 0x2f, 0xec, 0x44, - 0x8f, 0xd2, 0x8b, 0xf6, 0xe8, 0xd2, 0xe1, 0xa4, 0xf4, 0x8e, 0x4a, 0xfe, 0x6a, 0x4a, 0x1d, 0x9d, - 0x4f, 0x04, 0x34, 0xd4, 0x7e, 0x7b, 0xde, 0xc9, 0xdb, 0x00, 0x06, 0x78, 0x68, 0xc7, 0x79, 0x6c, - 0x29, 0x83, 0xd3, 0x87, 0x24, 0x9f, 0x29, 0x6b, 0x9b, 0xd9, 0xfa, 0x5b, 0x73, 0x85, 0xcf, 0xc7, - 0xe8, 0xe8, 0x54, 0x80, 0x87, 0x77, 0x30, 0x0f, 0x0c, 0xe6, 0x91, 0x0e, 0x7d, 0xa8, 0xae, 0x41, - 0x4a, 0xff, 0x55, 0x03, 0xab, 0xb1, 0xcb, 0x0a, 0xf7, 0x18, 0x7c, 0x13, 0xac, 0x49, 0xc4, 0x3e, - 0xe6, 0xfb, 0xb2, 0xc1, 0xeb, 0x68, 0x35, 0x76, 0x6c, 0x61, 0xbe, 0x0f, 0xf3, 0x60, 0xc5, 0x8d, - 0x08, 0x16, 0x2c, 0x52, 0xa7, 0x88, 0x8e, 0x4c, 0xf8, 0x06, 0x58, 0xe6, 0x6c, 0x10, 0xb9, 0xaa, - 0x92, 0x35, 0x34, 0xb3, 0x62, 0x84, 0x33, 0xa0, 0xbe, 0x47, 0xa2, 0x7c, 0x56, 0x21, 0x66, 0x26, - 0xbc, 0x0b, 0x60, 0xb2, 0x11, 0xae, 0x3c, 0xa7, 0xfc, 0xd2, 0xe2, 0x47, 0x9a, 0x8d, 0x8f, 0x14, - 0x9d, 0x4e, 0x90, 0xa8, 0x0d, 0xfd, 0x1f, 0x0d, 0xac, 0x1b, 0x2c, 0x14, 0x11, 0x76, 0x85, 0xd4, - 0x74, 0x11, 0xac, 0x48, 0x4d, 0xd4, 0x93, 0x8a, 0xb2, 0x75, 0x30, 0x9d, 0x94, 0x96, 0xa5, 0xe4, - 0x06, 0x5a, 0x8e, 0xb7, 0x2c, 0xef, 0x15, 0xda, 0xce, 0x80, 0x25, 0xec, 0x05, 0x34, 0x9c, 0x49, - 0x53, 0x46, 0xec, 0xf5, 0xb1, 0x43, 0xfc, 0x99, 0x2e, 0x65, 0x40, 0x63, 0xc6, 0x42, 0xbc, 0x99, - 0x94, 0x4b, 0x2f, 0x93, 0xe2, 0x70, 0xe6, 0x0f, 0x04, 0xe9, 0x0e, 0xdb, 0x8c, 0x53, 0x41, 0x59, - 0x88, 0x8e, 0x90, 0xf0, 0x7d, 0x70, 0x82, 0x3a, 0xae, 0xdd, 0x67, 0x91, 0x88, 0x6b, 0x5e, 0x96, - 0x03, 0xf3, 0xda, 0x74, 0x52, 0x5a, 0xb3, 0xea, 0x46, 0x9b, 0x45, 0xc2, 0x6a, 0xa0, 0x35, 0xea, - 0xb8, 0x72, 0xe9, 0xdd, 0xcc, 0xfe, 0x15, 0x4f, 0xcb, 0x37, 0x69, 0x90, 0x3f, 0x52, 0x1d, 0x4b, - 0xdb, 0xa2, 0x5c, 0xb0, 0x68, 0x64, 0x86, 0x22, 0x1a, 0xc1, 0x1d, 0xb0, 0xc6, 0xfa, 0x24, 0xc2, - 0x62, 0x3e, 0xd7, 0x37, 0x5e, 0x52, 0xd8, 0x0b, 0x38, 0x5a, 0x47, 0xd0, 0xf8, 0x26, 0xa3, 0x39, - 0x53, 0xb2, 0xb1, 0xe9, 0x97, 0x36, 0xd6, 0x00, 0x2b, 0x83, 0xbe, 0x27, 0x5b, 0x92, 0xf9, 0xdf, - 0x2d, 0x99, 0x21, 0x61, 0x05, 0x64, 0x02, 0xde, 0x93, 0xbd, 0x5e, 0xaf, 0x9f, 0x7f, 0x36, 0x29, - 0xe5, 0x49, 0xe8, 0x32, 0x8f, 0x86, 0xbd, 0xea, 0x57, 0x9c, 0x85, 0x15, 0x84, 0x1f, 0x6c, 0x13, - 0xce, 0x71, 0x8f, 0xa0, 0x38, 0x50, 0x47, 0x00, 0x3e, 0x4f, 0x07, 0x2f, 0x80, 0x75, 0xc7, 0x67, - 0xee, 0x3d, 0x7b, 0x9f, 0xd0, 0xde, 0xbe, 0x50, 0xb7, 0x01, 0x9d, 0x90, 0xbe, 0x2d, 0xe9, 0x82, - 0xe7, 0xc0, 0xaa, 0x18, 0xda, 0x34, 0xf4, 0xc8, 0x50, 0x69, 0x42, 0x2b, 0x62, 0x68, 0xc5, 0xa6, - 0x4e, 0xc1, 0xd2, 0x36, 0xf3, 0x88, 0x0f, 0x6f, 0x83, 0xcc, 0x3d, 0x32, 0x52, 0xd3, 0x51, 0xff, - 0xe4, 0xd9, 0xa4, 0xf4, 0x51, 0x8f, 0x8a, 0xfd, 0x81, 0x53, 0x71, 0x59, 0x50, 0x15, 0x24, 0xf4, - 0xe2, 0x69, 0x0d, 0x45, 0x72, 0xe9, 0x53, 0x87, 0x57, 0x9d, 0x91, 0x20, 0xbc, 0xb2, 0x45, 0x86, - 0xf5, 0x78, 0x81, 0x62, 0x92, 0xf8, 0x1a, 0xa9, 0x8f, 0x7a, 0x5a, 0xce, 0x9a, 0x32, 0x2e, 0xff, - 0xad, 0x01, 0x30, 0xff, 0x78, 0xc0, 0x8f, 0xc1, 0xd9, 0x9a, 0x61, 0x98, 0x9d, 0x8e, 0xdd, 0xdd, - 0x6d, 0x9b, 0xf6, 0x4e, 0xb3, 0xd3, 0x36, 0x0d, 0xeb, 0x53, 0xcb, 0x6c, 0xe4, 0x52, 0x85, 0x73, - 0x07, 0xe3, 0xf2, 0xc6, 0x3c, 0x78, 0x27, 0xe4, 0x7d, 0xe2, 0xd2, 0x3d, 0x4a, 0x3c, 0x78, 0x15, - 0xc0, 0x24, 0xae, 0xd9, 0xaa, 0xb7, 0x1a, 0xbb, 0x39, 0xad, 0x70, 0xe6, 0x60, 0x5c, 0xce, 0xcd, - 0x21, 0x4d, 0xe6, 0x30, 0x6f, 0x04, 0x6f, 0x80, 0x7c, 0x32, 0xba, 0xd5, 0xfc, 0x6c, 0xd7, 0xae, - 0x35, 0x1a, 0xc8, 0xec, 0x74, 0x72, 0xe9, 0xff, 0xa6, 0x69, 0x85, 0xfe, 0xa8, 0xa6, 0x3e, 0xd7, - 0xf0, 0x3a, 0xd8, 0x48, 0x02, 0xcd, 0xcf, 0x4d, 0xb4, 0x2b, 0x33, 0x65, 0x0a, 0x67, 0x0f, 0xc6, - 0xe5, 0xd7, 0xe7, 0x28, 0xf3, 0x3e, 0x89, 0x46, 0x71, 0xb2, 0xc2, 0xea, 0xd7, 0x3f, 0x15, 0x53, - 0x8f, 0x7e, 0x2e, 0xa6, 0x2e, 0xff, 0x92, 0x01, 0xe5, 0xe3, 0x2e, 0x1d, 0x24, 0xe0, 0x03, 0xa3, - 0xd5, 0xec, 0xa2, 0x9a, 0xd1, 0xb5, 0x8d, 0x56, 0xc3, 0xb4, 0xb7, 0xac, 0x4e, 0xb7, 0x85, 0x76, - 0xed, 0x56, 0xdb, 0x44, 0xb5, 0xae, 0xd5, 0x6a, 0xbe, 0xa8, 0x35, 0xd5, 0x83, 0x71, 0xf9, 0xca, - 0x71, 0xdc, 0xc9, 0x86, 0xdd, 0x01, 0x97, 0x16, 0x4a, 0x63, 0x35, 0xad, 0x6e, 0x4e, 0x2b, 0x6c, - 0x1e, 0x8c, 0xcb, 0x6f, 0x1f, 0xc7, 0x6f, 0x85, 0x54, 0xc0, 0x2f, 0xc1, 0xd5, 0x85, 0x88, 0xb7, - 0xad, 0x5b, 0xa8, 0xd6, 0x35, 0x73, 0xe9, 0xc2, 0x95, 0x83, 0x71, 0xf9, 0xbd, 0xe3, 0xb8, 0xb7, - 0x69, 0x2f, 0xc2, 0x82, 0x2c, 0x4c, 0x7f, 0xcb, 0x6c, 0x9a, 0x1d, 0xab, 0x93, 0xcb, 0x2c, 0x46, - 0x7f, 0x8b, 0x84, 0x84, 0x53, 0x5e, 0xc8, 0xc6, 0x87, 0x55, 0xdf, 0x7a, 0xfc, 0x47, 0x31, 0xf5, - 0x68, 0x5a, 0xd4, 0x1e, 0x4f, 0x8b, 0xda, 0x93, 0x69, 0x51, 0xfb, 0x7d, 0x5a, 0xd4, 0xbe, 0x7d, - 0x5a, 0x4c, 0x3d, 0x79, 0x5a, 0x4c, 0xfd, 0xf6, 0xb4, 0x98, 0xfa, 0xe2, 0xdd, 0xc4, 0x1c, 0x18, - 0x8c, 0x07, 0xf1, 0x9f, 0x8d, 0x7c, 0x0d, 0x79, 0xd5, 0xe4, 0xab, 0xc8, 0x59, 0x96, 0x6f, 0x9c, - 0x0f, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xbc, 0x7e, 0xd9, 0x2c, 0x09, 0x00, 0x00, +func init() { proto.RegisterFile("cosmwasm/wasm/v1beta1/types.proto", fileDescriptor_2548aa229a1f29bc) } + +var fileDescriptor_2548aa229a1f29bc = []byte{ + // 1123 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xcd, 0x6f, 0x1b, 0x45, + 0x14, 0xf7, 0xda, 0xce, 0xd7, 0x34, 0xb4, 0xee, 0xd0, 0x50, 0xd7, 0x14, 0xdb, 0xd9, 0xf2, 0x91, + 0x7e, 0x60, 0xd3, 0x82, 0x28, 0xea, 0xcd, 0x5e, 0x2f, 0xcd, 0x56, 0xc4, 0xb6, 0xc6, 0x0e, 0x6d, + 0x90, 0xd0, 0x6a, 0x76, 0x77, 0xe2, 0x0c, 0xdd, 0xdd, 0xb1, 0x76, 0xc6, 0xad, 0xdd, 0xbf, 0x00, + 0x85, 0x0b, 0xe2, 0xc4, 0x81, 0x48, 0x48, 0x20, 0xd4, 0x3f, 0xa5, 0x17, 0xa4, 0x1e, 0x39, 0x59, + 0x90, 0x0a, 0x09, 0xae, 0xe1, 0xd6, 0x13, 0xda, 0x19, 0x5b, 0x5e, 0xd1, 0x36, 0x31, 0x97, 0xd5, + 0xbc, 0x37, 0xef, 0xf7, 0x7b, 0xef, 0xf7, 0x66, 0xde, 0x6a, 0xc0, 0xba, 0xcb, 0x78, 0xf0, 0x10, + 0xf3, 0xa0, 0x2a, 0x3f, 0x0f, 0xae, 0x3b, 0x44, 0xe0, 0xeb, 0x55, 0x31, 0xea, 0x13, 0x5e, 0xe9, + 0x47, 0x4c, 0x30, 0xb8, 0x36, 0x0d, 0xa9, 0xc8, 0xcf, 0x24, 0xa4, 0x70, 0xae, 0xc7, 0x7a, 0x4c, + 0x46, 0x54, 0xe3, 0x95, 0x0a, 0xd6, 0x1d, 0x70, 0xa6, 0xe6, 0xba, 0x84, 0xf3, 0xee, 0xa8, 0x4f, + 0xda, 0x38, 0xc2, 0x01, 0xb4, 0xc0, 0xc2, 0x03, 0xec, 0x0f, 0x48, 0x5e, 0x2b, 0x6b, 0x1b, 0xa7, + 0x6f, 0xac, 0x57, 0x5e, 0xca, 0x57, 0x99, 0xc1, 0xea, 0xb9, 0xa3, 0x71, 0x69, 0x75, 0x84, 0x03, + 0xff, 0x96, 0x2e, 0x91, 0x3a, 0x52, 0x0c, 0xb7, 0xb2, 0xdf, 0xff, 0x58, 0xd2, 0xf4, 0x1f, 0x34, + 0xb0, 0xaa, 0xa2, 0x0d, 0x16, 0xee, 0xd2, 0x1e, 0xbc, 0x07, 0x40, 0x9f, 0x44, 0x01, 0xe5, 0x9c, + 0xb2, 0x70, 0xfe, 0x34, 0x6b, 0x47, 0xe3, 0xd2, 0x59, 0x95, 0x66, 0x06, 0xd7, 0x51, 0x82, 0x0b, + 0x5e, 0x03, 0x4b, 0xd8, 0xf3, 0x22, 0xc2, 0x79, 0x3e, 0x5d, 0xd6, 0x36, 0x56, 0xea, 0xf0, 0x68, + 0x5c, 0x3a, 0xad, 0x30, 0x93, 0x0d, 0x1d, 0x4d, 0x43, 0x26, 0xe5, 0xfd, 0x99, 0x06, 0x8b, 0x52, + 0x39, 0x87, 0x02, 0x40, 0x97, 0x79, 0xc4, 0x1e, 0xf4, 0x7d, 0x86, 0x3d, 0x1b, 0xcb, 0xdc, 0xb2, + 0xc0, 0x53, 0x37, 0x2e, 0x1d, 0x5b, 0xa0, 0x52, 0x56, 0x5f, 0x7f, 0x32, 0x2e, 0xa5, 0x8e, 0xc6, + 0xa5, 0x0b, 0x2a, 0xe5, 0x8b, 0x64, 0x3a, 0xca, 0xc5, 0xce, 0x6d, 0xe9, 0x53, 0x50, 0xf8, 0x9d, + 0x06, 0x8a, 0x34, 0xe4, 0x02, 0x87, 0x82, 0x62, 0x41, 0x6c, 0x8f, 0xec, 0xe2, 0x81, 0x2f, 0xec, + 0x44, 0x8f, 0xd2, 0xf3, 0xf6, 0xe8, 0xf2, 0xd1, 0xb8, 0xf4, 0x8e, 0x4a, 0x7e, 0x3c, 0xa5, 0x8e, + 0x2e, 0x26, 0x02, 0x1a, 0x6a, 0xbf, 0x3d, 0xeb, 0xe4, 0x1d, 0x00, 0x03, 0x3c, 0xb4, 0xe3, 0x3c, + 0xb6, 0x94, 0xc1, 0xe9, 0x23, 0x92, 0xcf, 0x94, 0xb5, 0x8d, 0x6c, 0xfd, 0xad, 0x99, 0xc2, 0x17, + 0x63, 0x74, 0x74, 0x26, 0xc0, 0xc3, 0xbb, 0x98, 0x07, 0x06, 0xf3, 0x48, 0x87, 0x3e, 0x52, 0xd7, + 0x20, 0xa5, 0xff, 0xaa, 0x81, 0xe5, 0xd8, 0x65, 0x85, 0xbb, 0x0c, 0xbe, 0x09, 0x56, 0x24, 0x62, + 0x0f, 0xf3, 0x3d, 0xd9, 0xe0, 0x55, 0xb4, 0x1c, 0x3b, 0x36, 0x31, 0xdf, 0x83, 0x79, 0xb0, 0xe4, + 0x46, 0x04, 0x0b, 0x16, 0xa9, 0x53, 0x44, 0x53, 0x13, 0xbe, 0x01, 0x16, 0x39, 0x1b, 0x44, 0xae, + 0xaa, 0x64, 0x05, 0x4d, 0xac, 0x18, 0xe1, 0x0c, 0xa8, 0xef, 0x91, 0x28, 0x9f, 0x55, 0x88, 0x89, + 0x09, 0xef, 0x01, 0x98, 0x6c, 0x84, 0x2b, 0xcf, 0x29, 0xbf, 0x30, 0xff, 0x91, 0x66, 0xe3, 0x23, + 0x45, 0x67, 0x13, 0x24, 0x6a, 0x43, 0xff, 0x47, 0x03, 0xab, 0x06, 0x0b, 0x45, 0x84, 0x5d, 0x21, + 0x35, 0x5d, 0x02, 0x4b, 0x52, 0x13, 0xf5, 0xa4, 0xa2, 0x6c, 0x1d, 0x1c, 0x8e, 0x4b, 0x8b, 0x52, + 0x72, 0x03, 0x2d, 0xc6, 0x5b, 0x96, 0x77, 0x8c, 0xb6, 0x73, 0x60, 0x01, 0x7b, 0x01, 0x0d, 0x27, + 0xd2, 0x94, 0x11, 0x7b, 0x7d, 0xec, 0x10, 0x7f, 0xa2, 0x4b, 0x19, 0xd0, 0x98, 0xb0, 0x10, 0x6f, + 0x22, 0xe5, 0xf2, 0xab, 0xa4, 0x38, 0x9c, 0xf9, 0x03, 0x41, 0xba, 0xc3, 0x36, 0xe3, 0x54, 0x50, + 0x16, 0xa2, 0x29, 0x12, 0xbe, 0x0f, 0x4e, 0x51, 0xc7, 0xb5, 0xfb, 0x2c, 0x12, 0x71, 0xcd, 0x8b, + 0x72, 0x60, 0x5e, 0x3b, 0x1c, 0x97, 0x56, 0xac, 0xba, 0xd1, 0x66, 0x91, 0xb0, 0x1a, 0x68, 0x85, + 0x3a, 0xae, 0x5c, 0x7a, 0xb7, 0xb2, 0x7f, 0xc5, 0xd3, 0xf2, 0x4d, 0x1a, 0xe4, 0xa7, 0xaa, 0x63, + 0x69, 0x9b, 0x94, 0x0b, 0x16, 0x8d, 0xcc, 0x50, 0x44, 0x23, 0xb8, 0x0d, 0x56, 0x58, 0x9f, 0x44, + 0x58, 0xcc, 0xe6, 0xfa, 0xe6, 0x2b, 0x0a, 0x7b, 0x09, 0x47, 0x6b, 0x0a, 0x8d, 0x6f, 0x32, 0x9a, + 0x31, 0x25, 0x1b, 0x9b, 0x7e, 0x65, 0x63, 0x0d, 0xb0, 0x34, 0xe8, 0x7b, 0xb2, 0x25, 0x99, 0xff, + 0xdd, 0x92, 0x09, 0x12, 0x56, 0x40, 0x26, 0xe0, 0x3d, 0xd9, 0xeb, 0xd5, 0xfa, 0xc5, 0xe7, 0xe3, + 0x52, 0x9e, 0x84, 0x2e, 0xf3, 0x68, 0xd8, 0xab, 0x7e, 0xc5, 0x59, 0x58, 0x41, 0xf8, 0xe1, 0x16, + 0xe1, 0x1c, 0xf7, 0x08, 0x8a, 0x03, 0x75, 0x04, 0xe0, 0x8b, 0x74, 0x70, 0x1d, 0xac, 0x3a, 0x3e, + 0x73, 0xef, 0xdb, 0x7b, 0x84, 0xf6, 0xf6, 0x84, 0xba, 0x0d, 0xe8, 0x94, 0xf4, 0x6d, 0x4a, 0x17, + 0xbc, 0x00, 0x96, 0xc5, 0xd0, 0xa6, 0xa1, 0x47, 0x86, 0x4a, 0x13, 0x5a, 0x12, 0x43, 0x2b, 0x36, + 0x75, 0x0a, 0x16, 0xb6, 0x98, 0x47, 0x7c, 0x78, 0x07, 0x64, 0xee, 0x93, 0x91, 0x9a, 0x8e, 0xfa, + 0x27, 0xcf, 0xc7, 0xa5, 0x8f, 0x7a, 0x54, 0xec, 0x0d, 0x9c, 0x8a, 0xcb, 0x82, 0xaa, 0x20, 0xa1, + 0x17, 0x4f, 0x6b, 0x28, 0x92, 0x4b, 0x9f, 0x3a, 0xbc, 0xea, 0x8c, 0x04, 0xe1, 0x95, 0x4d, 0x32, + 0xac, 0xc7, 0x0b, 0x14, 0x93, 0xc4, 0xd7, 0x48, 0xfd, 0xd4, 0xd3, 0x72, 0xd6, 0x94, 0x71, 0xe5, + 0x6f, 0x0d, 0x80, 0xd9, 0xcf, 0x03, 0x7e, 0x0c, 0xce, 0xd7, 0x0c, 0xc3, 0xec, 0x74, 0xec, 0xee, + 0x4e, 0xdb, 0xb4, 0xb7, 0x9b, 0x9d, 0xb6, 0x69, 0x58, 0x9f, 0x5a, 0x66, 0x23, 0x97, 0x2a, 0x5c, + 0xd8, 0x3f, 0x28, 0xaf, 0xcd, 0x82, 0xb7, 0x43, 0xde, 0x27, 0x2e, 0xdd, 0xa5, 0xc4, 0x83, 0xd7, + 0x00, 0x4c, 0xe2, 0x9a, 0xad, 0x7a, 0xab, 0xb1, 0x93, 0xd3, 0x0a, 0xe7, 0xf6, 0x0f, 0xca, 0xb9, + 0x19, 0xa4, 0xc9, 0x1c, 0xe6, 0x8d, 0xe0, 0x4d, 0x90, 0x4f, 0x46, 0xb7, 0x9a, 0x9f, 0xed, 0xd8, + 0xb5, 0x46, 0x03, 0x99, 0x9d, 0x4e, 0x2e, 0xfd, 0xdf, 0x34, 0xad, 0xd0, 0x1f, 0xd5, 0xd4, 0xef, + 0x1a, 0xde, 0x00, 0x6b, 0x49, 0xa0, 0xf9, 0xb9, 0x89, 0x76, 0x64, 0xa6, 0x4c, 0xe1, 0xfc, 0xfe, + 0x41, 0xf9, 0xf5, 0x19, 0xca, 0x7c, 0x40, 0xa2, 0x51, 0x9c, 0xac, 0xb0, 0xfc, 0xf5, 0x4f, 0xc5, + 0xd4, 0xe3, 0x9f, 0x8b, 0xa9, 0x2b, 0xbf, 0x64, 0x40, 0xf9, 0xa4, 0x4b, 0x07, 0x09, 0xf8, 0xc0, + 0x68, 0x35, 0xbb, 0xa8, 0x66, 0x74, 0x6d, 0xa3, 0xd5, 0x30, 0xed, 0x4d, 0xab, 0xd3, 0x6d, 0xa1, + 0x1d, 0xbb, 0xd5, 0x36, 0x51, 0xad, 0x6b, 0xb5, 0x9a, 0x2f, 0x6b, 0x4d, 0x75, 0xff, 0xa0, 0x7c, + 0xf5, 0x24, 0xee, 0x64, 0xc3, 0xee, 0x82, 0xcb, 0x73, 0xa5, 0xb1, 0x9a, 0x56, 0x37, 0xa7, 0x15, + 0x36, 0xf6, 0x0f, 0xca, 0x6f, 0x9f, 0xc4, 0x6f, 0x85, 0x54, 0xc0, 0x2f, 0xc1, 0xb5, 0xb9, 0x88, + 0xb7, 0xac, 0xdb, 0xa8, 0xd6, 0x35, 0x73, 0xe9, 0xc2, 0xd5, 0xfd, 0x83, 0xf2, 0x7b, 0x27, 0x71, + 0x6f, 0xd1, 0x5e, 0x84, 0x05, 0x99, 0x9b, 0xfe, 0xb6, 0xd9, 0x34, 0x3b, 0x56, 0x27, 0x97, 0x99, + 0x8f, 0xfe, 0x36, 0x09, 0x09, 0xa7, 0xbc, 0x90, 0x8d, 0x0f, 0xab, 0xbe, 0xf9, 0xe4, 0x8f, 0x62, + 0xea, 0xf1, 0x61, 0x51, 0x7b, 0x72, 0x58, 0xd4, 0x9e, 0x1e, 0x16, 0xb5, 0xdf, 0x0f, 0x8b, 0xda, + 0xb7, 0xcf, 0x8a, 0xa9, 0xa7, 0xcf, 0x8a, 0xa9, 0xdf, 0x9e, 0x15, 0x53, 0x5f, 0xbc, 0x9b, 0x98, + 0x03, 0x83, 0xf1, 0xe0, 0xee, 0xf4, 0x3d, 0xe4, 0x55, 0x87, 0xea, 0x5d, 0x24, 0xdf, 0x43, 0xce, + 0xa2, 0x7c, 0xe3, 0x7c, 0xf8, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd8, 0xd8, 0x83, 0x31, 0x35, + 0x09, 0x00, 0x00, } func (this *AccessTypeParam) Equal(that interface{}) bool { @@ -1350,10 +1355,7 @@ func (m *AccessTypeParam) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { @@ -1454,10 +1456,7 @@ func (m *AccessConfig) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { @@ -1578,10 +1577,7 @@ func (m *Params) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { @@ -1794,10 +1790,7 @@ func (m *CodeInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { @@ -2030,10 +2023,7 @@ func (m *ContractInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { @@ -2191,10 +2181,7 @@ func (m *ContractCodeHistoryEntry) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { @@ -2282,10 +2269,7 @@ func (m *AbsoluteTxPosition) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { @@ -2403,10 +2387,7 @@ func (m *Model) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { diff --git a/x/wasm/types/types.proto b/x/wasm/types/types.proto deleted file mode 100644 index 64c538db1f..0000000000 --- a/x/wasm/types/types.proto +++ /dev/null @@ -1,115 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1beta1; - -import "gogoproto/gogo.proto"; - -option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.equal_all) = true; - -// AccessType permission types -enum AccessType { - option (gogoproto.goproto_enum_prefix) = false; - option (gogoproto.goproto_enum_stringer) = false; - // AccessTypeUnspecified placeholder for empty value - ACCESS_TYPE_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "AccessTypeUnspecified"]; - // AccessTypeNobody forbidden - ACCESS_TYPE_NOBODY = 1 [(gogoproto.enumvalue_customname) = "AccessTypeNobody"]; - // AccessTypeOnlyAddress restricted to an address - ACCESS_TYPE_ONLY_ADDRESS = 2 [(gogoproto.enumvalue_customname) = "AccessTypeOnlyAddress"]; - // AccessTypeEverybody unrestricted - ACCESS_TYPE_EVERYBODY = 3 [(gogoproto.enumvalue_customname) = "AccessTypeEverybody"]; -} - -// AccessTypeParam -message AccessTypeParam { - option (gogoproto.goproto_stringer) = true; - AccessType value = 1 [(gogoproto.moretags) = "yaml:\"value\""]; -} - -// AccessConfig access control type. -message AccessConfig { - option (gogoproto.goproto_stringer) = true; - AccessType permission = 1 [(gogoproto.moretags) = "yaml:\"permission\""]; - string address = 2 [(gogoproto.moretags) = "yaml:\"address\""]; -} - -// Params defines the set of wasm parameters. -message Params { - option (gogoproto.goproto_stringer) = false; - AccessConfig code_upload_access = 1 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"code_upload_access\""]; - AccessType instantiate_default_permission = 2 [(gogoproto.moretags) = "yaml:\"instantiate_default_permission\""]; - uint64 max_wasm_code_size = 3 [(gogoproto.moretags) = "yaml:\"max_wasm_code_size\""]; -} - -// CodeInfo is data for the uploaded contract WASM code -message CodeInfo { - // CodeHash is the unique identifier created by wasmvm - bytes code_hash = 1; - // Creator address who initially stored the code - string creator = 2; - // Source is a valid absolute HTTPS URI to the contract's source code, optional - string source = 3; - // Builder is a valid docker image name with tag, optional - string builder = 4; - // InstantiateConfig access control to apply on contract creation, optional - AccessConfig instantiate_config = 5 [(gogoproto.nullable) = false]; -} - -// ContractInfo stores a WASM contract instance -message ContractInfo { - option (gogoproto.equal) = true; - - // CodeID is the reference to the stored Wasm code - uint64 code_id = 1 [(gogoproto.customname) = "CodeID"]; - // Creator address who initially instantiated the contract - string creator = 2; - // Admin is an optional address that can execute migrations - string admin = 3; - // Label is optional metadata to be stored with a contract instance. - string label = 4; - // Created Tx position when the contract was instantiated. - // This data should kept internal and not be exposed via query results. Just use for sorting - AbsoluteTxPosition created = 5; - string ibc_port_id = 6 [(gogoproto.customname) = "IBCPortID"]; -} - -// ContractCodeHistoryOperationType actions that caused a code change -enum ContractCodeHistoryOperationType { - option (gogoproto.goproto_enum_prefix) = false; - // ContractCodeHistoryOperationTypeUnspecified placeholder for empty value - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "ContractCodeHistoryOperationTypeUnspecified"]; - // ContractCodeHistoryOperationTypeInit on chain contract instantiation - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT = 1 [(gogoproto.enumvalue_customname) = "ContractCodeHistoryOperationTypeInit"]; - // ContractCodeHistoryOperationTypeMigrate code migration - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE = 2 [(gogoproto.enumvalue_customname) = "ContractCodeHistoryOperationTypeMigrate"]; - // ContractCodeHistoryOperationTypeGenesis based on genesis data - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS = 3 [(gogoproto.enumvalue_customname) = "ContractCodeHistoryOperationTypeGenesis"]; -} - -// ContractCodeHistoryEntry metadata to a contract. -message ContractCodeHistoryEntry { - ContractCodeHistoryOperationType operation = 1; - // CodeID is the reference to the stored WASM code - 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"]; - -} - -// AbsoluteTxPosition is a unique transaction position that allows for global ordering of transactions. -message AbsoluteTxPosition { - // BlockHeight is the block the contract was created at - uint64 block_height = 1; - // TxIndex is a monotonic counter within the block (actual transaction index, or gas consumed) - uint64 tx_index = 2; -} - -// Model is a struct that holds a KV pair -message Model { - // hex-encode key to read it better (this is often ascii) - bytes key = 1 [(gogoproto.casttype) = "github.com/tendermint/tendermint/libs/bytes.HexBytes"]; - // base64-encode raw value - bytes value = 2; -} From 60e97ff46ae0c2620298fb49e23e10878ef02399 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Mon, 22 Mar 2021 15:52:20 +0100 Subject: [PATCH 11/56] Upgrade cosmos-sdk to v0.42.2 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 8c2d00fef8..957c538c79 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.15 require ( github.com/CosmWasm/wasmvm v0.14.0-beta1 - github.com/cosmos/cosmos-sdk v0.42.1 + github.com/cosmos/cosmos-sdk v0.42.2 github.com/cosmos/iavl v0.15.3 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b github.com/gogo/protobuf v1.3.3 diff --git a/go.sum b/go.sum index 735beba437..615a2bc966 100644 --- a/go.sum +++ b/go.sum @@ -101,8 +101,8 @@ github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cosmos/cosmos-sdk v0.42.1 h1:/0SqvXdxbHBRUFRTLdiL4VYE18DMNXd2ONhC5d90EBQ= -github.com/cosmos/cosmos-sdk v0.42.1/go.mod h1:xiLp1G8mumj82S5KLJGCAyeAlD+7VNomg/aRSJV12yk= +github.com/cosmos/cosmos-sdk v0.42.2 h1:t2jIxV5DGN1ynOwuSIvQUUHr7tAePN1AG5ArM7o8qos= +github.com/cosmos/cosmos-sdk v0.42.2/go.mod h1:xiLp1G8mumj82S5KLJGCAyeAlD+7VNomg/aRSJV12yk= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= From bfe886c7d0e542da3de2c1ca3f5edd7f26037861 Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Mon, 22 Mar 2021 17:47:58 +0100 Subject: [PATCH 12/56] Fix contact address in code of conduct (#470) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix contact address in code of conduct * Update CODE_OF_CONDUCT.md Co-authored-by: Orkun Külçe Co-authored-by: Orkun Külçe --- CODE_OF_CONDUCT.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index a139c5ee03..c0261e7104 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at adrian@tendermint.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello@confio.gmbh. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. From 85173c69d59c066c3d1c95b1d7fad908ead90f15 Mon Sep 17 00:00:00 2001 From: loloicci Date: Tue, 23 Mar 2021 16:18:07 +0900 Subject: [PATCH 13/56] fix a typo in comment --- x/wasm/keeper/keeper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index ef487004bb..ba458e001f 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -26,7 +26,7 @@ import ( // A write at ~3000 gas and ~200us = 10 gas per us (microsecond) cpu/io // Rough timing have 88k gas at 90us, which is equal to 1k sdk gas... (one read) // -// Please not that all gas prices returned to the wasmer engine should have this multiplied +// Please note that all gas prices returned to the wasmer engine should have this multiplied const GasMultiplier uint64 = 100 // MaxGas for a contract is 10 billion wasmer gas (enforced in rust to prevent overflow) From 03bf7b0adf670277fca46a6d4c32c6ca08d4fd5c Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Mon, 22 Mar 2021 16:01:55 +0100 Subject: [PATCH 14/56] Introduce new interfaces for extendability --- app/app.go | 2 +- x/wasm/alias.go | 6 +-- x/wasm/handler.go | 2 +- x/wasm/ibc.go | 12 ++--- x/wasm/keeper/handler_plugin.go | 8 +-- x/wasm/keeper/handler_plugin_test.go | 14 ++--- x/wasm/keeper/keeper.go | 30 +++++++---- x/wasm/keeper/legacy_querier.go | 22 ++++---- x/wasm/keeper/legacy_querier_test.go | 15 ++++-- x/wasm/keeper/msg_server.go | 4 +- x/wasm/keeper/options.go | 4 +- x/wasm/keeper/querier.go | 36 +++++++------ x/wasm/keeper/querier_test.go | 14 ++--- x/wasm/keeper/query_plugins.go | 4 +- x/wasm/keeper/recurse_test.go | 7 +-- x/wasm/keeper/relay_test.go | 10 ++-- x/wasm/module.go | 2 +- x/wasm/types/events.go | 1 - x/wasm/types/exported_keepers.go | 76 ++++++++++++++++++++++++++++ x/wasm/types/keys.go | 4 +- 20 files changed, 184 insertions(+), 89 deletions(-) create mode 100644 x/wasm/types/exported_keepers.go diff --git a/app/app.go b/app/app.go index 32d633330f..bb32d3c531 100644 --- a/app/app.go +++ b/app/app.go @@ -379,7 +379,7 @@ func NewWasmApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b if len(enabledProposals) != 0 { govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.wasmKeeper, enabledProposals)) } - ibcRouter.AddRoute(wasm.ModuleName, wasm.NewIBCHandler(app.wasmKeeper)) + ibcRouter.AddRoute(wasm.ModuleName, wasm.NewIBCHandler(app.wasmKeeper, app.ibcKeeper.ChannelKeeper)) app.ibcKeeper.SetRouter(ibcRouter) app.govKeeper = govkeeper.NewKeeper( diff --git a/x/wasm/alias.go b/x/wasm/alias.go index 50129990a8..59ff271023 100644 --- a/x/wasm/alias.go +++ b/x/wasm/alias.go @@ -1,8 +1,8 @@ // nolint // autogenerated code using github.com/rigelrozanski/multitool // aliases generated for the following subdirectories: -// ALIASGEN: github.com/cosmwasm/wasmd/x/wasm/types -// ALIASGEN: github.com/cosmwasm/wasmd/x/wasm/keeper +// ALIASGEN: github.com/Cosmwasm/wasmd/x/wasm/types +// ALIASGEN: github.com/CosmWasm/wasmd/x/wasm/keeper package wasm import ( @@ -76,7 +76,7 @@ var ( CreateTestInput = keeper.CreateTestInput TestHandler = keeper.TestHandler NewWasmProposalHandler = keeper.NewWasmProposalHandler - NewQuerier = keeper.NewQuerier + NewQuerier = keeper.Querier ContractFromPortID = keeper.ContractFromPortID WithWasmEngine = keeper.WithWasmEngine diff --git a/x/wasm/handler.go b/x/wasm/handler.go index a3190cdd2f..34ae264330 100644 --- a/x/wasm/handler.go +++ b/x/wasm/handler.go @@ -12,7 +12,7 @@ import ( ) // NewHandler returns a handler for "bank" type messages. -func NewHandler(k *Keeper) sdk.Handler { +func NewHandler(k types.MsgOpsKeeper) sdk.Handler { msgServer := keeper.NewMsgServerImpl(k) return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { diff --git a/x/wasm/ibc.go b/x/wasm/ibc.go index 6529aac67a..f9b45d72df 100644 --- a/x/wasm/ibc.go +++ b/x/wasm/ibc.go @@ -1,7 +1,7 @@ package wasm import ( - wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" + types "github.com/CosmWasm/wasmd/x/wasm/types" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -15,12 +15,12 @@ import ( var _ porttypes.IBCModule = IBCHandler{} type IBCHandler struct { - keeper Keeper - channelKeeper wasmTypes.ChannelKeeper + keeper types.IBCContractKeeper + channelKeeper types.ChannelKeeper } -func NewIBCHandler(keeper Keeper) IBCHandler { - return IBCHandler{keeper: keeper, channelKeeper: keeper.ChannelKeeper} +func NewIBCHandler(k types.IBCContractKeeper, ck types.ChannelKeeper) IBCHandler { + return IBCHandler{keeper: k, channelKeeper: ck} } // OnChanOpenInit implements the IBCModule interface @@ -265,7 +265,7 @@ func ValidateChannelParams(channelID string) error { return err } if channelSequence > math.MaxUint32 { - return sdkerrors.Wrapf(wasmTypes.ErrMaxIBCChannels, "channel sequence %d is greater than max allowed transfer channels %d", channelSequence, math.MaxUint32) + return sdkerrors.Wrapf(types.ErrMaxIBCChannels, "channel sequence %d is greater than max allowed transfer channels %d", channelSequence, math.MaxUint32) } return nil } diff --git a/x/wasm/keeper/handler_plugin.go b/x/wasm/keeper/handler_plugin.go index cc8c5b3ccd..daf38339eb 100644 --- a/x/wasm/keeper/handler_plugin.go +++ b/x/wasm/keeper/handler_plugin.go @@ -24,7 +24,7 @@ type SDKMessageHandler struct { encoders msgEncoder } -func NewDefaultMessageHandler(router sdk.Router, channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper, unpacker codectypes.AnyUnpacker, portSource types.ICS20TransferPortSource, customEncoders ...*MessageEncoders) messenger { +func NewDefaultMessageHandler(router sdk.Router, channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper, unpacker codectypes.AnyUnpacker, portSource types.ICS20TransferPortSource, customEncoders ...*MessageEncoders) Messenger { encoders := DefaultEncoders(unpacker, portSource) for _, e := range customEncoders { encoders = encoders.Merge(e) @@ -89,11 +89,11 @@ func (h SDKMessageHandler) handleSdkMessage(ctx sdk.Context, contractAddr sdk.Ad // MessageHandlerChain defines a chain of handlers that are called one by one until it can be handled. type MessageHandlerChain struct { - handlers []messenger + handlers []Messenger } -func NewMessageHandlerChain(first messenger, others ...messenger) *MessageHandlerChain { - r := &MessageHandlerChain{handlers: append([]messenger{first}, others...)} +func NewMessageHandlerChain(first Messenger, others ...Messenger) *MessageHandlerChain { + r := &MessageHandlerChain{handlers: append([]Messenger{first}, others...)} for i := range r.handlers { if r.handlers[i] == nil { panic(fmt.Sprintf("handler must not be nil at position : %d", i)) diff --git a/x/wasm/keeper/handler_plugin_test.go b/x/wasm/keeper/handler_plugin_test.go index f8cbe9c8b5..e46989f0f7 100644 --- a/x/wasm/keeper/handler_plugin_test.go +++ b/x/wasm/keeper/handler_plugin_test.go @@ -33,28 +33,28 @@ func TestMessageHandlerChainDispatch(t *testing.T) { myMsg := wasmvmtypes.CosmosMsg{Custom: []byte(`{}`)} specs := map[string]struct { - handlers []messenger + handlers []Messenger expErr *sdkerrors.Error expEvents []sdk.Event }{ "single handler": { - handlers: []messenger{capturingHandler}, + handlers: []Messenger{capturingHandler}, }, "passed to next handler": { - handlers: []messenger{alwaysUnknownMsgHandler, capturingHandler}, + handlers: []Messenger{alwaysUnknownMsgHandler, capturingHandler}, }, "stops iteration when handled": { - handlers: []messenger{capturingHandler, assertNotCalledHandler}, + handlers: []Messenger{capturingHandler, assertNotCalledHandler}, }, "stops iteration on handler error": { - handlers: []messenger{&wasmtesting.MockMessageHandler{ + handlers: []Messenger{&wasmtesting.MockMessageHandler{ DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { return nil, nil, types.ErrInvalidMsg }}, assertNotCalledHandler}, expErr: types.ErrInvalidMsg, }, "return events when handle": { - handlers: []messenger{&wasmtesting.MockMessageHandler{ + handlers: []Messenger{&wasmtesting.MockMessageHandler{ DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { _, data, _ = capturingHandler.DispatchMsg(ctx, contractAddr, contractIBCPortID, msg) return []sdk.Event{sdk.NewEvent("myEvent", sdk.NewAttribute("foo", "bar"))}, data, nil @@ -63,7 +63,7 @@ func TestMessageHandlerChainDispatch(t *testing.T) { expEvents: []sdk.Event{sdk.NewEvent("myEvent", sdk.NewAttribute("foo", "bar"))}, }, "return error when none can handle": { - handlers: []messenger{alwaysUnknownMsgHandler}, + handlers: []Messenger{alwaysUnknownMsgHandler}, expErr: types.ErrUnknownMsg, }, } diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index ba458e001f..f597eba219 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -51,13 +51,13 @@ type Option interface { } // WasmVMQueryHandler is an extension point for custom query handler implementations -type wasmVMQueryHandler interface { +type WASMVMQueryHandler interface { // HandleQuery executes the requested query HandleQuery(ctx sdk.Context, caller sdk.AccAddress, request wasmvmtypes.QueryRequest) ([]byte, error) } -// messenger is an extension point for custom wasmVM message handling -type messenger interface { +// Messenger is an extension point for custom wasmVM message handling +type Messenger interface { // DispatchMsg encodes the wasmVM message and dispatches it. DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) } @@ -73,12 +73,11 @@ type Keeper struct { cdc codec.Marshaler accountKeeper types.AccountKeeper bank coinTransferrer - ChannelKeeper types.ChannelKeeper portKeeper types.PortKeeper capabilityKeeper types.CapabilityKeeper wasmVM types.WasmerEngine - wasmVMQueryHandler wasmVMQueryHandler - messenger messenger + wasmVMQueryHandler WASMVMQueryHandler + messenger Messenger // queryGasLimit is the max wasmvm gas that can be spent on executing a query with a contract queryGasLimit uint64 authZPolicy AuthorizationPolicy @@ -121,7 +120,6 @@ func NewKeeper( wasmVM: wasmer, accountKeeper: accountKeeper, bank: NewBankCoinTransferrer(bankKeeper), - ChannelKeeper: channelKeeper, portKeeper: portKeeper, capabilityKeeper: capabilityKeeper, messenger: NewDefaultMessageHandler(router, channelKeeper, capabilityKeeper, cdc, portSource), @@ -647,7 +645,7 @@ func (k Keeper) GetContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) return &contract } -func (k Keeper) containsContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) bool { +func (k Keeper) HasContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) bool { store := ctx.KVStore(k.storeKey) return store.Has(types.GetContractAddressKey(contractAddress)) } @@ -1003,7 +1001,7 @@ func (k Keeper) importContract(ctx sdk.Context, contractAddr sdk.AccAddress, c * if !k.containsCodeInfo(ctx, c.CodeID) { return sdkerrors.Wrapf(types.ErrNotFound, "code id: %d", c.CodeID) } - if k.containsContractInfo(ctx, contractAddr) { + if k.HasContractInfo(ctx, contractAddr) { return sdkerrors.Wrapf(types.ErrDuplicate, "contract: %s", contractAddr) } @@ -1039,9 +1037,23 @@ func gasMeter(ctx sdk.Context) MultipliedGasMeter { // Logger returns a module-specific logger. func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return moduleLogger(ctx) +} + +func moduleLogger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) } +// Querier creates a new grpc querier instance +func Querier(k *Keeper) *grpcQuerier { + return NewGrpcQuerier(k.cdc, k.storeKey, k, k.queryGasLimit) +} + +// QueryGasLimit returns the gas limit for smart queries. +func (k Keeper) QueryGasLimit() sdk.Gas { + return k.queryGasLimit +} + // CoinTransferrer replicates the cosmos-sdk behaviour as in // https://github.com/cosmos/cosmos-sdk/blob/v0.41.4/x/bank/keeper/msg_server.go#L26 type CoinTransferrer struct { diff --git a/x/wasm/keeper/legacy_querier.go b/x/wasm/keeper/legacy_querier.go index ac66f2236f..6dc9debdef 100644 --- a/x/wasm/keeper/legacy_querier.go +++ b/x/wasm/keeper/legacy_querier.go @@ -29,7 +29,7 @@ const ( ) // NewLegacyQuerier creates a new querier -func NewLegacyQuerier(keeper *Keeper) sdk.Querier { +func NewLegacyQuerier(keeper types.ViewKeeper, gasLimit sdk.Gas) sdk.Querier { return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { var ( rsp interface{} @@ -41,18 +41,18 @@ func NewLegacyQuerier(keeper *Keeper) sdk.Querier { if err != nil { return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, err.Error()) } - rsp, err = queryContractInfo(ctx, addr, *keeper) + rsp, err = queryContractInfo(ctx, addr, keeper) case QueryListContractByCode: codeID, err := strconv.ParseUint(path[1], 10, 64) if err != nil { return nil, sdkerrors.Wrapf(types.ErrInvalid, "code id: %s", err.Error()) } - rsp, err = queryContractListByCode(ctx, codeID, *keeper) + rsp, err = queryContractListByCode(ctx, codeID, keeper) case QueryGetContractState: if len(path) < 3 { return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "unknown data query endpoint") } - return queryContractState(ctx, path[1], path[2], req.Data, keeper) + return queryContractState(ctx, path[1], path[2], req.Data, gasLimit, keeper) case QueryGetCode: codeID, err := strconv.ParseUint(path[1], 10, 64) if err != nil { @@ -60,13 +60,13 @@ func NewLegacyQuerier(keeper *Keeper) sdk.Querier { } rsp, err = queryCode(ctx, codeID, keeper) case QueryListCode: - rsp, err = queryCodeList(ctx, *keeper) + rsp, err = queryCodeList(ctx, keeper) case QueryContractHistory: contractAddr, err := sdk.AccAddressFromBech32(path[1]) if err != nil { return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, err.Error()) } - rsp, err = queryContractHistory(ctx, contractAddr, *keeper) + rsp, err = queryContractHistory(ctx, contractAddr, keeper) default: return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "unknown data query endpoint") } @@ -84,7 +84,7 @@ func NewLegacyQuerier(keeper *Keeper) sdk.Querier { } } -func queryContractState(ctx sdk.Context, bech, queryMethod string, data []byte, keeper *Keeper) (json.RawMessage, error) { +func queryContractState(ctx sdk.Context, bech, queryMethod string, data []byte, gasLimit sdk.Gas, keeper types.ViewKeeper) (json.RawMessage, error) { contractAddr, err := sdk.AccAddressFromBech32(bech) if err != nil { return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, bech) @@ -108,7 +108,7 @@ func queryContractState(ctx sdk.Context, bech, queryMethod string, data []byte, 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(keeper.queryGasLimit)) + ctx = ctx.WithGasMeter(sdk.NewGasMeter(gasLimit)) // this returns raw bytes (must be base64-encoded) return keeper.QuerySmart(ctx, contractAddr, data) default: @@ -121,7 +121,7 @@ func queryContractState(ctx sdk.Context, bech, queryMethod string, data []byte, return bz, nil } -func queryCodeList(ctx sdk.Context, keeper Keeper) ([]types.CodeInfoResponse, error) { +func queryCodeList(ctx sdk.Context, keeper types.ViewKeeper) ([]types.CodeInfoResponse, error) { var info []types.CodeInfoResponse keeper.IterateCodeInfos(ctx, func(i uint64, res types.CodeInfo) bool { info = append(info, types.CodeInfoResponse{ @@ -136,7 +136,7 @@ func queryCodeList(ctx sdk.Context, keeper Keeper) ([]types.CodeInfoResponse, er return info, nil } -func queryContractHistory(ctx sdk.Context, contractAddr sdk.AccAddress, keeper Keeper) ([]types.ContractCodeHistoryEntry, error) { +func queryContractHistory(ctx sdk.Context, contractAddr sdk.AccAddress, keeper types.ViewKeeper) ([]types.ContractCodeHistoryEntry, error) { history := keeper.GetContractHistory(ctx, contractAddr) // redact response for i := range history { @@ -145,7 +145,7 @@ func queryContractHistory(ctx sdk.Context, contractAddr sdk.AccAddress, keeper K return history, nil } -func queryContractListByCode(ctx sdk.Context, codeID uint64, keeper Keeper) ([]types.ContractInfoWithAddress, error) { +func queryContractListByCode(ctx sdk.Context, codeID uint64, keeper types.ViewKeeper) ([]types.ContractInfoWithAddress, error) { var contracts []types.ContractInfoWithAddress keeper.IterateContractInfo(ctx, func(addr sdk.AccAddress, info types.ContractInfo) bool { if info.CodeID == codeID { diff --git a/x/wasm/keeper/legacy_querier_test.go b/x/wasm/keeper/legacy_querier_test.go index f056189981..35bade2a1f 100644 --- a/x/wasm/keeper/legacy_querier_test.go +++ b/x/wasm/keeper/legacy_querier_test.go @@ -48,7 +48,9 @@ func TestLegacyQueryContractState(t *testing.T) { keeper.importContractState(ctx, addr, contractModel) // this gets us full error, not redacted sdk.Error - q := NewLegacyQuerier(keeper) + var defaultQueryGasLimit sdk.Gas = 3000000 + q := NewLegacyQuerier(keeper, defaultQueryGasLimit) + specs := map[string]struct { srcPath []string srcReq abci.RequestQuery @@ -195,7 +197,9 @@ func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { } // query and check the results are properly sorted - q := NewLegacyQuerier(keeper) + var defaultQueryGasLimit sdk.Gas = 3000000 + q := NewLegacyQuerier(keeper, defaultQueryGasLimit) + query := []string{QueryListContractByCode, fmt.Sprintf("%d", codeID)} data := abci.RequestQuery{} res, err := q(ctx, query, data) @@ -287,7 +291,9 @@ func TestLegacyQueryContractHistory(t *testing.T) { t.Run(msg, func(t *testing.T) { _, _, myContractAddr := keyPubAddr() keeper.appendToContractHistory(ctx, myContractAddr, spec.srcHistory...) - q := NewLegacyQuerier(keeper) + + var defaultQueryGasLimit sdk.Gas = 3000000 + q := NewLegacyQuerier(keeper, defaultQueryGasLimit) queryContractAddr := spec.srcQueryAddr if queryContractAddr == nil { queryContractAddr = myContractAddr @@ -336,7 +342,8 @@ func TestLegacyQueryCodeList(t *testing.T) { wasmCode), ) } - q := NewLegacyQuerier(keeper) + var defaultQueryGasLimit sdk.Gas = 3000000 + q := NewLegacyQuerier(keeper, defaultQueryGasLimit) // when query := []string{QueryListCode} data := abci.RequestQuery{} diff --git a/x/wasm/keeper/msg_server.go b/x/wasm/keeper/msg_server.go index 47ac36a344..50f5d013e7 100644 --- a/x/wasm/keeper/msg_server.go +++ b/x/wasm/keeper/msg_server.go @@ -11,10 +11,10 @@ import ( var _ types.MsgServer = msgServer{} type msgServer struct { - keeper *Keeper + keeper types.MsgOpsKeeper } -func NewMsgServerImpl(k *Keeper) types.MsgServer { +func NewMsgServerImpl(k types.MsgOpsKeeper) types.MsgServer { return &msgServer{keeper: k} } diff --git a/x/wasm/keeper/options.go b/x/wasm/keeper/options.go index 3e399efad3..2501544d52 100644 --- a/x/wasm/keeper/options.go +++ b/x/wasm/keeper/options.go @@ -21,7 +21,7 @@ func WithWasmEngine(x types.WasmerEngine) Option { // WithMessageHandler is an optional constructor parameter to set a custom handler for wasmVM messages. // This option should not be combined with Option `WithMessageEncoders`. -func WithMessageHandler(x messenger) Option { +func WithMessageHandler(x Messenger) Option { return optsFn(func(k *Keeper) { k.messenger = x }) @@ -29,7 +29,7 @@ func WithMessageHandler(x messenger) Option { // WithQueryHandler is an optional constructor parameter to set custom query handler for wasmVM requests. // This option should not be combined with Option `WithQueryPlugins`. -func WithQueryHandler(x wasmVMQueryHandler) Option { +func WithQueryHandler(x WASMVMQueryHandler) Option { return optsFn(func(k *Keeper) { k.wasmVMQueryHandler = x }) diff --git a/x/wasm/keeper/querier.go b/x/wasm/keeper/querier.go index 1ac865b5b1..7423ee2720 100644 --- a/x/wasm/keeper/querier.go +++ b/x/wasm/keeper/querier.go @@ -3,6 +3,7 @@ package keeper import ( "context" "encoding/binary" + "github.com/cosmos/cosmos-sdk/codec" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "runtime/debug" @@ -17,11 +18,14 @@ import ( var _ types.QueryServer = &grpcQuerier{} type grpcQuerier struct { - keeper *Keeper + cdc codec.Marshaler + storeKey sdk.StoreKey + keeper types.ViewKeeper + queryGasLimit sdk.Gas } -func NewQuerier(keeper *Keeper) grpcQuerier { - return grpcQuerier{keeper: keeper} +func NewGrpcQuerier(cdc codec.Marshaler, storeKey sdk.StoreKey, keeper types.ViewKeeper, queryGasLimit sdk.Gas) *grpcQuerier { + return &grpcQuerier{cdc: cdc, storeKey: storeKey, keeper: keeper, queryGasLimit: queryGasLimit} } func (q grpcQuerier) ContractInfo(c context.Context, req *types.QueryContractInfoRequest) (*types.QueryContractInfoResponse, error) { @@ -32,7 +36,7 @@ func (q grpcQuerier) ContractInfo(c context.Context, req *types.QueryContractInf if err != nil { return nil, err } - rsp, err := queryContractInfo(sdk.UnwrapSDKContext(c), contractAddr, *q.keeper) + rsp, err := queryContractInfo(sdk.UnwrapSDKContext(c), contractAddr, q.keeper) switch { case err != nil: return nil, err @@ -57,11 +61,11 @@ func (q grpcQuerier) ContractHistory(c context.Context, req *types.QueryContract ctx := sdk.UnwrapSDKContext(c) r := make([]types.ContractCodeHistoryEntry, 0) - prefixStore := prefix.NewStore(ctx.KVStore(q.keeper.storeKey), types.GetContractCodeHistoryElementPrefix(contractAddr)) + prefixStore := prefix.NewStore(ctx.KVStore(q.storeKey), types.GetContractCodeHistoryElementPrefix(contractAddr)) pageRes, err := query.FilteredPaginate(prefixStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { if accumulate { var e types.ContractCodeHistoryEntry - if err := q.keeper.cdc.UnmarshalBinaryBare(value, &e); err != nil { + if err := q.cdc.UnmarshalBinaryBare(value, &e); err != nil { return false, err } e.Updated = nil // redact @@ -88,7 +92,7 @@ func (q grpcQuerier) ContractsByCode(c context.Context, req *types.QueryContract ctx := sdk.UnwrapSDKContext(c) r := make([]types.ContractInfoWithAddress, 0) - prefixStore := prefix.NewStore(ctx.KVStore(q.keeper.storeKey), types.GetContractByCodeIDSecondaryIndexPrefix(req.CodeId)) + prefixStore := prefix.NewStore(ctx.KVStore(q.storeKey), types.GetContractByCodeIDSecondaryIndexPrefix(req.CodeId)) pageRes, err := query.FilteredPaginate(prefixStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { var contractAddr sdk.AccAddress = key[types.AbsoluteTxPositionLen:] c := q.keeper.GetContractInfo(ctx, contractAddr) @@ -122,12 +126,12 @@ func (q grpcQuerier) AllContractState(c context.Context, req *types.QueryAllCont return nil, err } ctx := sdk.UnwrapSDKContext(c) - if !q.keeper.containsContractInfo(ctx, contractAddr) { + if !q.keeper.HasContractInfo(ctx, contractAddr) { return nil, types.ErrNotFound } r := make([]types.Model, 0) - prefixStore := prefix.NewStore(ctx.KVStore(q.keeper.storeKey), types.GetContractStorePrefix(contractAddr)) + prefixStore := prefix.NewStore(ctx.KVStore(q.storeKey), types.GetContractStorePrefix(contractAddr)) pageRes, err := query.FilteredPaginate(prefixStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { if accumulate { r = append(r, types.Model{ @@ -157,7 +161,7 @@ func (q grpcQuerier) RawContractState(c context.Context, req *types.QueryRawCont return nil, err } - if !q.keeper.containsContractInfo(ctx, contractAddr) { + if !q.keeper.HasContractInfo(ctx, contractAddr) { return nil, types.ErrNotFound } rsp := q.keeper.QueryRaw(ctx, contractAddr, req.QueryData) @@ -172,7 +176,7 @@ func (q grpcQuerier) SmartContractState(c context.Context, req *types.QuerySmart if err != nil { return nil, err } - ctx := sdk.UnwrapSDKContext(c).WithGasMeter(sdk.NewGasMeter(q.keeper.queryGasLimit)) + ctx := sdk.UnwrapSDKContext(c).WithGasMeter(sdk.NewGasMeter(q.queryGasLimit)) // recover from out-of-gas panic defer func() { if r := recover(); r != nil { @@ -186,7 +190,7 @@ func (q grpcQuerier) SmartContractState(c context.Context, req *types.QuerySmart err = sdkerrors.ErrPanic } rsp = nil - q.keeper.Logger(ctx). + moduleLogger(ctx). Debug("smart query contract", "error", "recovering panic", "contract-address", req.Address, @@ -231,11 +235,11 @@ func (q grpcQuerier) Codes(c context.Context, req *types.QueryCodesRequest) (*ty } ctx := sdk.UnwrapSDKContext(c) r := make([]types.CodeInfoResponse, 0) - prefixStore := prefix.NewStore(ctx.KVStore(q.keeper.storeKey), types.CodeKeyPrefix) + prefixStore := prefix.NewStore(ctx.KVStore(q.storeKey), types.CodeKeyPrefix) pageRes, err := query.FilteredPaginate(prefixStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { if accumulate { var c types.CodeInfo - if err := q.keeper.cdc.UnmarshalBinaryBare(value, &c); err != nil { + if err := q.cdc.UnmarshalBinaryBare(value, &c); err != nil { return false, err } r = append(r, types.CodeInfoResponse{ @@ -254,7 +258,7 @@ func (q grpcQuerier) Codes(c context.Context, req *types.QueryCodesRequest) (*ty return &types.QueryCodesResponse{CodeInfos: r, Pagination: pageRes}, nil } -func queryContractInfo(ctx sdk.Context, addr sdk.AccAddress, keeper Keeper) (*types.ContractInfoWithAddress, error) { +func queryContractInfo(ctx sdk.Context, addr sdk.AccAddress, keeper types.ViewKeeper) (*types.ContractInfoWithAddress, error) { info := keeper.GetContractInfo(ctx, addr) if info == nil { return nil, types.ErrNotFound @@ -267,7 +271,7 @@ func queryContractInfo(ctx sdk.Context, addr sdk.AccAddress, keeper Keeper) (*ty }, nil } -func queryCode(ctx sdk.Context, codeID uint64, keeper *Keeper) (*types.QueryCodeResponse, error) { +func queryCode(ctx sdk.Context, codeID uint64, keeper types.ViewKeeper) (*types.QueryCodeResponse, error) { if codeID == 0 { return nil, nil } diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index 1c9c5e2064..8f501bbb8c 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -31,7 +31,7 @@ func TestQueryAllContractState(t *testing.T) { } require.NoError(t, keeper.importContractState(ctx, contractAddr, contractModel)) - q := NewQuerier(keeper) + q := Querier(keeper) specs := map[string]struct { srcQuery *types.QueryAllContractStateRequest expModelContains []types.Model @@ -113,7 +113,7 @@ func TestQuerySmartContractState(t *testing.T) { exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) contractAddr := exampleContract.Contract.String() - q := NewQuerier(keeper) + q := Querier(keeper) specs := map[string]struct { srcAddr sdk.AccAddress srcQuery *types.QuerySmartContractStateRequest @@ -183,7 +183,7 @@ func TestQuerySmartContractPanics(t *testing.T) { return nil, 0, nil }} // when - q := NewQuerier(keepers.WasmKeeper) + q := Querier(keepers.WasmKeeper) got, err := q.SmartContractState(sdk.WrapSDKContext(ctx), &types.QuerySmartContractStateRequest{ Address: contractAddr.String(), }) @@ -205,7 +205,7 @@ func TestQueryRawContractState(t *testing.T) { } require.NoError(t, keeper.importContractState(ctx, exampleContract.Contract, contractModel)) - q := NewQuerier(keeper) + q := Querier(keeper) specs := map[string]struct { srcQuery *types.QueryRawContractStateRequest expData []byte @@ -293,7 +293,7 @@ func TestQueryContractListByCodeOrdering(t *testing.T) { } // query and check the results are properly sorted - q := NewQuerier(keeper) + q := Querier(keeper) res, err := q.ContractsByCode(sdk.WrapSDKContext(ctx), &types.QueryContractsByCodeRequest{CodeId: codeID}) require.NoError(t, err) @@ -434,7 +434,7 @@ func TestQueryContractHistory(t *testing.T) { keeper.appendToContractHistory(xCtx, cAddr, spec.srcHistory...) // when - q := NewQuerier(keeper) + q := Querier(keeper) got, err := q.ContractHistory(sdk.WrapSDKContext(xCtx), &spec.req) // then @@ -509,7 +509,7 @@ func TestQueryCodeList(t *testing.T) { ) } // when - q := NewQuerier(keeper) + q := Querier(keeper) got, err := q.Codes(sdk.WrapSDKContext(xCtx), &spec.req) // then diff --git a/x/wasm/keeper/query_plugins.go b/x/wasm/keeper/query_plugins.go index b1f038359e..f469fdc266 100644 --- a/x/wasm/keeper/query_plugins.go +++ b/x/wasm/keeper/query_plugins.go @@ -16,11 +16,11 @@ import ( type QueryHandler struct { Ctx sdk.Context - Plugins wasmVMQueryHandler + Plugins WASMVMQueryHandler Caller sdk.AccAddress } -func NewQueryHandler(ctx sdk.Context, vmQueryHandler wasmVMQueryHandler, caller sdk.AccAddress) QueryHandler { +func NewQueryHandler(ctx sdk.Context, vmQueryHandler WASMVMQueryHandler, caller sdk.AccAddress) QueryHandler { return QueryHandler{ Ctx: ctx, Plugins: vmQueryHandler, diff --git a/x/wasm/keeper/recurse_test.go b/x/wasm/keeper/recurse_test.go index 92788ae436..b0f45c384b 100644 --- a/x/wasm/keeper/recurse_test.go +++ b/x/wasm/keeper/recurse_test.go @@ -189,9 +189,6 @@ func TestGasOnExternalQuery(t *testing.T) { for name, tc := range cases { t.Run(name, func(t *testing.T) { - // set the external gas limit (normally from config file) - keeper.queryGasLimit = tc.gasLimit - recurse := tc.msg recurse.Contract = contractAddr msg := buildRecurseQuery(t, recurse) @@ -202,12 +199,12 @@ func TestGasOnExternalQuery(t *testing.T) { if tc.expectPanic { require.Panics(t, func() { // this should run out of gas - _, err := NewLegacyQuerier(keeper)(ctx, path, req) + _, err := NewLegacyQuerier(keeper, tc.gasLimit)(ctx, path, req) t.Logf("%v", err) }) } else { // otherwise, make sure we get a good success - _, err := NewLegacyQuerier(keeper)(ctx, path, req) + _, err := NewLegacyQuerier(keeper, tc.gasLimit)(ctx, path, req) require.NoError(t, err) } }) diff --git a/x/wasm/keeper/relay_test.go b/x/wasm/keeper/relay_test.go index 330e948112..889792b79e 100644 --- a/x/wasm/keeper/relay_test.go +++ b/x/wasm/keeper/relay_test.go @@ -82,7 +82,7 @@ func TestOnConnectChannel(t *testing.T) { contractGas sdk.Gas contractResp *wasmvmtypes.IBCBasicResponse contractErr error - overwriteMessenger messenger + overwriteMessenger Messenger expErr bool expContractEventAttrs int expNoEvents bool @@ -192,7 +192,7 @@ func TestOnCloseChannel(t *testing.T) { contractGas sdk.Gas contractResp *wasmvmtypes.IBCBasicResponse contractErr error - overwriteMessenger messenger + overwriteMessenger Messenger expErr bool expContractEventAttrs int expNoEvents bool @@ -302,7 +302,7 @@ func TestOnRecvPacket(t *testing.T) { contractGas sdk.Gas contractResp *wasmvmtypes.IBCReceiveResponse contractErr error - overwriteMessenger messenger + overwriteMessenger Messenger expErr bool expContractEventAttrs int expNoEvents bool @@ -427,7 +427,7 @@ func TestOnAckPacket(t *testing.T) { contractGas sdk.Gas contractResp *wasmvmtypes.IBCBasicResponse contractErr error - overwriteMessenger messenger + overwriteMessenger Messenger expErr bool expContractEventAttrs int expNoEvents bool @@ -538,7 +538,7 @@ func TestOnTimeoutPacket(t *testing.T) { contractGas sdk.Gas contractResp *wasmvmtypes.IBCBasicResponse contractErr error - overwriteMessenger messenger + overwriteMessenger Messenger expErr bool expContractEventAttrs int expNoEvents bool diff --git a/x/wasm/module.go b/x/wasm/module.go index 4a36fb23be..102c69165f 100644 --- a/x/wasm/module.go +++ b/x/wasm/module.go @@ -116,7 +116,7 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { } func (am AppModule) LegacyQuerierHandler(amino *codec.LegacyAmino) sdk.Querier { - return keeper.NewLegacyQuerier(am.keeper) + return keeper.NewLegacyQuerier(am.keeper, am.keeper.QueryGasLimit()) } // RegisterInvariants registers the wasm module invariants. diff --git a/x/wasm/types/events.go b/x/wasm/types/events.go index 2f48e5847c..2ca36b9a72 100644 --- a/x/wasm/types/events.go +++ b/x/wasm/types/events.go @@ -7,6 +7,5 @@ const ( const ( // event attributes AttributeKeyContract = "contract_address" AttributeKeyCodeID = "code_id" - AttributeKeyCodeIDs = "code_ids" AttributeKeySigner = "signer" ) diff --git a/x/wasm/types/exported_keepers.go b/x/wasm/types/exported_keepers.go new file mode 100644 index 0000000000..348ca29a90 --- /dev/null +++ b/x/wasm/types/exported_keepers.go @@ -0,0 +1,76 @@ +package types + +import ( + types2 "github.com/CosmWasm/wasmvm/types" + "github.com/cosmos/cosmos-sdk/types" + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" +) + +// ViewKeeper provides read only operations +type ViewKeeper interface { + GetContractHistory(ctx types.Context, contractAddr types.AccAddress) []ContractCodeHistoryEntry + QuerySmart(ctx types.Context, contractAddr types.AccAddress, req []byte) ([]byte, error) + QueryRaw(ctx types.Context, contractAddress types.AccAddress, key []byte) []byte + GetContractInfo(ctx types.Context, contractAddress types.AccAddress) *ContractInfo + IterateContractInfo(ctx types.Context, cb func(types.AccAddress, ContractInfo) bool) + GetContractState(ctx types.Context, contractAddress types.AccAddress) types.Iterator + GetCodeInfo(ctx types.Context, codeID uint64) *CodeInfo + IterateCodeInfos(ctx types.Context, cb func(uint64, CodeInfo) bool) + GetByteCode(ctx types.Context, codeID uint64) ([]byte, error) + IsPinnedCode(ctx types.Context, codeID uint64) bool + HasContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) bool +} + +// MsgOpsKeeper contains mutable operations that are triggered by messages normally +type MsgOpsKeeper interface { + Create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, source string, builder string, instantiateAccess *AccessConfig) (codeID uint64, err error) + Instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins) (sdk.AccAddress, []byte, error) + Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) (*sdk.Result, error) + Migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte) (*sdk.Result, error) + UpdateContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newAdmin sdk.AccAddress) error + + // ClearContractAdmin sets the admin value on the ContractInfo to nil, to disable further migrations/ updates. + ClearContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress) error + PinCode(ctx sdk.Context, codeID uint64) error + UnpinCode(ctx sdk.Context, codeID uint64) error +} + +// IBCContractKeeper IBC lifecycle event handler +type IBCContractKeeper interface { + OnOpenChannel( + ctx sdk.Context, + contractAddr sdk.AccAddress, + channel types2.IBCChannel, + ) error + OnConnectChannel( + ctx sdk.Context, + contractAddr sdk.AccAddress, + channel types2.IBCChannel, + ) error + OnCloseChannel( + ctx sdk.Context, + contractAddr sdk.AccAddress, + channel types2.IBCChannel, + ) error + OnRecvPacket( + ctx sdk.Context, + contractAddr sdk.AccAddress, + packet types2.IBCPacket, + ) ([]byte, error) + OnAckPacket( + ctx sdk.Context, + contractAddr sdk.AccAddress, + acknowledgement types2.IBCAcknowledgement, + ) error + OnTimeoutPacket( + ctx sdk.Context, + contractAddr sdk.AccAddress, + packet types2.IBCPacket, + ) error + // ClaimCapability allows the transfer module to claim a capability + //that IBC module passes to it + ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error + // AuthenticateCapability wraps the scopedKeeper's AuthenticateCapability function + AuthenticateCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) bool +} diff --git a/x/wasm/types/keys.go b/x/wasm/types/keys.go index e0415ca0d4..ff9bcb68a8 100644 --- a/x/wasm/types/keys.go +++ b/x/wasm/types/keys.go @@ -14,10 +14,10 @@ const ( // TStoreKey is the string transient store representation TStoreKey = "transient_" + ModuleName - // QuerierRoute is the querier route for the staking module + // QuerierRoute is the querier route for the wasm module QuerierRoute = ModuleName - // RouterKey is the msg router key for the staking module + // RouterKey is the msg router key for the wasm module RouterKey = ModuleName ) From 408bba14a5c6d583abe32ffb235a364130136298 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Tue, 23 Mar 2021 15:04:01 +0100 Subject: [PATCH 15/56] Extract contract keeper --- x/wasm/handler.go | 2 +- x/wasm/keeper/bench_test.go | 2 +- x/wasm/keeper/contract_keeper.go | 68 +++++++++++++++ x/wasm/keeper/genesis.go | 4 +- x/wasm/keeper/genesis_test.go | 34 ++++---- x/wasm/keeper/ibc_test.go | 2 +- x/wasm/keeper/keeper.go | 33 +------ x/wasm/keeper/keeper_test.go | 124 +++++++++++++-------------- x/wasm/keeper/legacy_querier_test.go | 8 +- x/wasm/keeper/msg_server.go | 4 +- x/wasm/keeper/proposal_handler.go | 77 +++++++---------- x/wasm/keeper/querier_test.go | 4 +- x/wasm/keeper/reflect_test.go | 20 ++--- x/wasm/keeper/staking_test.go | 63 +++++++------- x/wasm/keeper/submsg_test.go | 22 ++--- x/wasm/keeper/test_common.go | 57 ++++++------ x/wasm/module.go | 4 +- x/wasm/types/exported_keepers.go | 19 +++- x/wasm/types/proposal.go | 14 +-- 19 files changed, 305 insertions(+), 256 deletions(-) create mode 100644 x/wasm/keeper/contract_keeper.go diff --git a/x/wasm/handler.go b/x/wasm/handler.go index 34ae264330..434520d06e 100644 --- a/x/wasm/handler.go +++ b/x/wasm/handler.go @@ -12,7 +12,7 @@ import ( ) // NewHandler returns a handler for "bank" type messages. -func NewHandler(k types.MsgOpsKeeper) sdk.Handler { +func NewHandler(k types.ContractOpsKeeper) sdk.Handler { msgServer := keeper.NewMsgServerImpl(k) return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { diff --git a/x/wasm/keeper/bench_test.go b/x/wasm/keeper/bench_test.go index 341236887a..21b16649eb 100644 --- a/x/wasm/keeper/bench_test.go +++ b/x/wasm/keeper/bench_test.go @@ -43,7 +43,7 @@ func BenchmarkExecution(b *testing.B) { ctx, keepers := createTestInput(b, false, SupportedFeatures, wasmConfig, spec.db()) example := InstantiateHackatomExampleContract(b, ctx, keepers) if spec.pinned { - require.NoError(b, keepers.WasmKeeper.PinCode(ctx, example.CodeID)) + require.NoError(b, keepers.ContractKeeper.PinCode(ctx, example.CodeID)) } b.ResetTimer() for i := 0; i < b.N; i++ { diff --git a/x/wasm/keeper/contract_keeper.go b/x/wasm/keeper/contract_keeper.go new file mode 100644 index 0000000000..4d26831125 --- /dev/null +++ b/x/wasm/keeper/contract_keeper.go @@ -0,0 +1,68 @@ +package keeper + +import ( + "github.com/CosmWasm/wasmd/x/wasm/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var _ types.ContractOpsKeeper = PermissionedKeeper{} + +// decoratedKeeper contains a subset of the wasm keeper that are already or can be guarded by an authorization policy in the future +type decoratedKeeper interface { + create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, source string, builder string, instantiateAccess *types.AccessConfig, authZ AuthorizationPolicy) (codeID uint64, err error) + instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins, authZ AuthorizationPolicy) (sdk.AccAddress, []byte, error) + migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte, authZ AuthorizationPolicy) (*sdk.Result, error) + setContractAdmin(ctx sdk.Context, contractAddress, caller, newAdmin sdk.AccAddress, authZ AuthorizationPolicy) error + pinCode(ctx sdk.Context, codeID uint64) error + unpinCode(ctx sdk.Context, codeID uint64) error + execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) (*sdk.Result, error) +} + +type PermissionedKeeper struct { + authZPolicy AuthorizationPolicy + nested decoratedKeeper +} + +func NewPermissionedKeeper(nested decoratedKeeper, authZPolicy AuthorizationPolicy) *PermissionedKeeper { + return &PermissionedKeeper{authZPolicy: authZPolicy, nested: nested} +} + +func NewGovPermissionKeeper(nested decoratedKeeper) *PermissionedKeeper { + return NewPermissionedKeeper(nested, GovAuthorizationPolicy{}) +} + +func NewDefaultPermissionKeeper(nested decoratedKeeper) *PermissionedKeeper { + return NewPermissionedKeeper(nested, DefaultAuthorizationPolicy{}) +} + +func (p PermissionedKeeper) Create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, source string, builder string, instantiateAccess *types.AccessConfig) (codeID uint64, err error) { + return p.nested.create(ctx, creator, wasmCode, source, builder, instantiateAccess, p.authZPolicy) +} + +func (p PermissionedKeeper) Instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins) (sdk.AccAddress, []byte, error) { + return p.nested.instantiate(ctx, codeID, creator, admin, initMsg, label, deposit, p.authZPolicy) +} + +func (p PermissionedKeeper) Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) (*sdk.Result, error) { + return p.nested.execute(ctx, contractAddress, caller, msg, coins) +} + +func (p PermissionedKeeper) Migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte) (*sdk.Result, error) { + return p.nested.migrate(ctx, contractAddress, caller, newCodeID, msg, p.authZPolicy) +} + +func (p PermissionedKeeper) UpdateContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newAdmin sdk.AccAddress) error { + return p.nested.setContractAdmin(ctx, contractAddress, caller, newAdmin, p.authZPolicy) +} + +func (p PermissionedKeeper) ClearContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress) error { + return p.nested.setContractAdmin(ctx, contractAddress, caller, nil, p.authZPolicy) +} + +func (p PermissionedKeeper) PinCode(ctx sdk.Context, codeID uint64) error { + return p.nested.pinCode(ctx, codeID) +} + +func (p PermissionedKeeper) UnpinCode(ctx sdk.Context, codeID uint64) error { + return p.nested.unpinCode(ctx, codeID) +} diff --git a/x/wasm/keeper/genesis.go b/x/wasm/keeper/genesis.go index 49d71ae8c1..adf362fe52 100644 --- a/x/wasm/keeper/genesis.go +++ b/x/wasm/keeper/genesis.go @@ -16,8 +16,8 @@ type ValidatorSetSource interface { // // CONTRACT: all types of accounts must have been already initialized/created func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, stakingKeeper ValidatorSetSource, msgHandler sdk.Handler) ([]abci.ValidatorUpdate, error) { + contractKeeper := NewGovPermissionKeeper(keeper) keeper.setParams(ctx, data.Params) - var maxCodeID uint64 for i, code := range data.Codes { err := keeper.importCode(ctx, code.CodeID, code.CodeInfo, code.CodeBytes) @@ -28,7 +28,7 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, staki maxCodeID = code.CodeID } if code.Pinned { - if err := keeper.PinCode(ctx, code.CodeID); err != nil { + if err := contractKeeper.PinCode(ctx, code.CodeID); err != nil { return nil, sdkerrors.Wrapf(err, "contract number %d", i) } } diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index 2dc2fa6821..38893cb141 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -35,7 +35,8 @@ import ( const firstCodeID = 1 func TestGenesisExportImport(t *testing.T) { - srcKeeper, srcCtx, srcStoreKeys := setupKeeper(t) + wasmKeeper, srcCtx, srcStoreKeys := setupKeeper(t) + contractKeeper := NewGovPermissionKeeper(wasmKeeper) wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) @@ -43,7 +44,7 @@ func TestGenesisExportImport(t *testing.T) { // store some test data f := fuzz.New().Funcs(ModelFuzzers...) - srcKeeper.setParams(srcCtx, types.DefaultParams()) + wasmKeeper.setParams(srcCtx, types.DefaultParams()) for i := 0; i < 25; i++ { var ( @@ -60,24 +61,24 @@ func TestGenesisExportImport(t *testing.T) { f.Fuzz(&pinned) creatorAddr, err := sdk.AccAddressFromBech32(codeInfo.Creator) require.NoError(t, err) - codeID, err := srcKeeper.Create(srcCtx, creatorAddr, wasmCode, codeInfo.Source, codeInfo.Builder, &codeInfo.InstantiateConfig) + codeID, err := contractKeeper.Create(srcCtx, creatorAddr, wasmCode, codeInfo.Source, codeInfo.Builder, &codeInfo.InstantiateConfig) require.NoError(t, err) if pinned { - srcKeeper.PinCode(srcCtx, codeID) + contractKeeper.PinCode(srcCtx, codeID) } contract.CodeID = codeID - contractAddr := srcKeeper.generateContractAddress(srcCtx, codeID) - srcKeeper.storeContractInfo(srcCtx, contractAddr, &contract) - srcKeeper.appendToContractHistory(srcCtx, contractAddr, history...) - srcKeeper.importContractState(srcCtx, contractAddr, stateModels) + contractAddr := wasmKeeper.generateContractAddress(srcCtx, codeID) + wasmKeeper.storeContractInfo(srcCtx, contractAddr, &contract) + wasmKeeper.appendToContractHistory(srcCtx, contractAddr, history...) + wasmKeeper.importContractState(srcCtx, contractAddr, stateModels) } var wasmParams types.Params f.NilChance(0).Fuzz(&wasmParams) - srcKeeper.setParams(srcCtx, wasmParams) + wasmKeeper.setParams(srcCtx, wasmParams) // export - exportedState := ExportGenesis(srcCtx, srcKeeper) + exportedState := ExportGenesis(srcCtx, wasmKeeper) // order should not matter rand.Shuffle(len(exportedState.Codes), func(i, j int) { exportedState.Codes[i], exportedState.Codes[j] = exportedState.Codes[j], exportedState.Codes[i] @@ -92,10 +93,10 @@ func TestGenesisExportImport(t *testing.T) { require.NoError(t, err) // reset ContractInfo in source DB for comparison with dest DB - srcKeeper.IterateContractInfo(srcCtx, func(address sdk.AccAddress, info wasmTypes.ContractInfo) bool { - srcKeeper.deleteContractSecondIndex(srcCtx, address, &info) + wasmKeeper.IterateContractInfo(srcCtx, func(address sdk.AccAddress, info wasmTypes.ContractInfo) bool { + wasmKeeper.deleteContractSecondIndex(srcCtx, address, &info) info.ResetFromGenesis(srcCtx) - srcKeeper.storeContractInfo(srcCtx, address, &info) + wasmKeeper.storeContractInfo(srcCtx, address, &info) return false }) @@ -105,7 +106,7 @@ func TestGenesisExportImport(t *testing.T) { var importState wasmTypes.GenesisState err = json.Unmarshal(exportedGenesis, &importState) require.NoError(t, err) - InitGenesis(dstCtx, dstKeeper, importState, &StakingKeeperMock{}, TestHandler(dstKeeper)) + InitGenesis(dstCtx, dstKeeper, importState, &StakingKeeperMock{}, TestHandler(contractKeeper)) // compare whole DB for j := range srcStoreKeys { @@ -479,6 +480,7 @@ func TestImportContractWithCodeHistoryReset(t *testing.T) { ] }` keeper, ctx, _ := setupKeeper(t) + contractKeeper := NewGovPermissionKeeper(keeper) wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) @@ -497,7 +499,7 @@ func TestImportContractWithCodeHistoryReset(t *testing.T) { ctx = ctx.WithBlockHeight(0).WithGasMeter(sdk.NewInfiniteGasMeter()) // when - _, err = InitGenesis(ctx, keeper, importState, &StakingKeeperMock{}, TestHandler(keeper)) + _, err = InitGenesis(ctx, keeper, importState, &StakingKeeperMock{}, TestHandler(contractKeeper)) require.NoError(t, err) // verify wasm code @@ -597,7 +599,7 @@ func TestSupportedGenMsgTypes(t *testing.T) { ctx = ctx.WithBlockHeight(0).WithGasMeter(sdk.NewInfiniteGasMeter()) fundAccounts(t, ctx, keepers.AccountKeeper, keepers.BankKeeper, myAddress, sdk.NewCoins(sdk.NewCoin(denom, sdk.NewInt(100)))) // when - _, err = InitGenesis(ctx, keeper, importState, &StakingKeeperMock{}, TestHandler(keeper)) + _, err = InitGenesis(ctx, keeper, importState, &StakingKeeperMock{}, TestHandler(keepers.ContractKeeper)) require.NoError(t, err) // verify code stored diff --git a/x/wasm/keeper/ibc_test.go b/x/wasm/keeper/ibc_test.go index fc94f7ecac..a25c6715a2 100644 --- a/x/wasm/keeper/ibc_test.go +++ b/x/wasm/keeper/ibc_test.go @@ -29,7 +29,7 @@ func TestBindingPortForIBCContractOnInstantiate(t *testing.T) { // create a second contract should give yet another portID (and different address) creator := RandomAccountAddress(t) - addr, _, err := keepers.WasmKeeper.Instantiate(ctx, example.CodeID, creator, nil, initMsgBz, "ibc-reflect-2", nil) + addr, _, err := keepers.ContractKeeper.Instantiate(ctx, example.CodeID, creator, nil, initMsgBz, "ibc-reflect-2", nil) require.NoError(t, err) require.NotEqual(t, example.Contract, addr) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index f597eba219..471c95b913 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -80,7 +80,6 @@ type Keeper struct { messenger Messenger // queryGasLimit is the max wasmvm gas that can be spent on executing a query with a contract queryGasLimit uint64 - authZPolicy AuthorizationPolicy paramSpace paramtypes.Subspace } @@ -124,7 +123,6 @@ func NewKeeper( capabilityKeeper: capabilityKeeper, messenger: NewDefaultMessageHandler(router, channelKeeper, capabilityKeeper, cdc, portSource), queryGasLimit: wasmConfig.SmartQueryGasLimit, - authZPolicy: DefaultAuthorizationPolicy{}, paramSpace: paramSpace, } keeper.wasmVMQueryHandler = DefaultQueryPlugins(bankKeeper, stakingKeeper, distKeeper, channelKeeper, queryRouter, &keeper) @@ -163,11 +161,6 @@ func (k Keeper) setParams(ctx sdk.Context, ps types.Params) { k.paramSpace.SetParamSet(ctx, &ps) } -// Create uploads and compiles a WASM contract, returning a short identifier for the contract -func (k Keeper) Create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, source string, builder string, instantiateAccess *types.AccessConfig) (codeID uint64, err error) { - return k.create(ctx, creator, wasmCode, source, builder, instantiateAccess, k.authZPolicy) -} - func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, source string, builder string, instantiateAccess *types.AccessConfig, authZ AuthorizationPolicy) (codeID uint64, err error) { if !authZ.CanCreateCode(k.getUploadAccessConfig(ctx), creator) { return 0, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "can not create code") @@ -221,11 +214,6 @@ func (k Keeper) importCode(ctx sdk.Context, codeID uint64, codeInfo types.CodeIn return nil } -// Instantiate creates an instance of a WASM contract -func (k Keeper) Instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins) (sdk.AccAddress, []byte, error) { - return k.instantiate(ctx, codeID, creator, admin, initMsg, label, deposit, k.authZPolicy) -} - func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins, authZ AuthorizationPolicy) (sdk.AccAddress, []byte, error) { defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "instantiate") if !k.IsPinnedCode(ctx, codeID) { @@ -321,7 +309,7 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A } // Execute executes the contract instance -func (k Keeper) Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) (*sdk.Result, error) { +func (k Keeper) execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) (*sdk.Result, error) { defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "execute") contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddress) if err != nil { @@ -366,11 +354,6 @@ func (k Keeper) Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller }, nil } -// Migrate allows to upgrade a contract to a new code with data migration. -func (k Keeper) Migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte) (*sdk.Result, error) { - return k.migrate(ctx, contractAddress, caller, newCodeID, msg, k.authZPolicy) -} - func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte, authZ AuthorizationPolicy) (*sdk.Result, error) { defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "migrate") if !k.IsPinnedCode(ctx, newCodeID) { @@ -528,16 +511,6 @@ func (k Keeper) deleteContractSecondIndex(ctx sdk.Context, contractAddress sdk.A ctx.KVStore(k.storeKey).Delete(types.GetContractByCreatedSecondaryIndexKey(contractAddress, contractInfo)) } -// UpdateContractAdmin sets the admin value on the ContractInfo. It must be a valid address (use ClearContractAdmin to remove it) -func (k Keeper) UpdateContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newAdmin sdk.AccAddress) error { - return k.setContractAdmin(ctx, contractAddress, caller, newAdmin, k.authZPolicy) -} - -// ClearContractAdmin sets the admin value on the ContractInfo to nil, to disable further migrations/ updates. -func (k Keeper) ClearContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress) error { - return k.setContractAdmin(ctx, contractAddress, caller, nil, k.authZPolicy) -} - func (k Keeper) setContractAdmin(ctx sdk.Context, contractAddress, caller, newAdmin sdk.AccAddress, authZ AuthorizationPolicy) error { contractInfo := k.GetContractInfo(ctx, contractAddress) if contractInfo == nil { @@ -731,7 +704,7 @@ func (k Keeper) GetByteCode(ctx sdk.Context, codeID uint64) ([]byte, error) { } // PinCode pins the wasm contract in wasmvm cache -func (k Keeper) PinCode(ctx sdk.Context, codeID uint64) error { +func (k Keeper) pinCode(ctx sdk.Context, codeID uint64) error { codeInfo := k.GetCodeInfo(ctx, codeID) if codeInfo == nil { return sdkerrors.Wrap(types.ErrNotFound, "code info") @@ -747,7 +720,7 @@ func (k Keeper) PinCode(ctx sdk.Context, codeID uint64) error { } // UnpinCode removes the wasm contract from wasmvm cache -func (k Keeper) UnpinCode(ctx sdk.Context, codeID uint64) error { +func (k Keeper) unpinCode(ctx sdk.Context, codeID uint64) error { codeInfo := k.GetCodeInfo(ctx, codeID) if codeInfo == nil { return sdkerrors.Wrap(types.ErrNotFound, "code info") diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 85de5c861d..9302fae123 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -26,12 +26,12 @@ const SupportedFeatures = "staking,stargate" func TestNewKeeper(t *testing.T) { _, keepers := CreateTestInput(t, false, SupportedFeatures) - require.NotNil(t, keepers.WasmKeeper) + require.NotNil(t, keepers.ContractKeeper) } func TestCreate(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit) @@ -43,7 +43,7 @@ func TestCreate(t *testing.T) { require.NoError(t, err) require.Equal(t, uint64(1), contractID) // and verify content - storedCode, err := keeper.GetByteCode(ctx, contractID) + storedCode, err := keepers.WasmKeeper.GetByteCode(ctx, contractID) require.NoError(t, err) require.Equal(t, wasmCode, storedCode) } @@ -80,8 +80,8 @@ func TestCreateStoresInstantiatePermission(t *testing.T) { for msg, spec := range specs { t.Run(msg, func(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper - keeper.setParams(ctx, types.Params{ + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper + keepers.WasmKeeper.setParams(ctx, types.Params{ CodeUploadAccess: types.AllowEverybody, InstantiateDefaultPermission: spec.srcPermission, MaxWasmCodeSize: types.DefaultMaxWasmCodeSize, @@ -91,7 +91,7 @@ func TestCreateStoresInstantiatePermission(t *testing.T) { codeID, err := keeper.Create(ctx, myAddr, wasmCode, "https://github.com/CosmWasm/wasmd/blob/master/x/wasm/testdata/escrow.wasm", "any/builder:tag", nil) require.NoError(t, err) - codeInfo := keeper.GetCodeInfo(ctx, codeID) + codeInfo := keepers.WasmKeeper.GetCodeInfo(ctx, codeID) require.NotNil(t, codeInfo) assert.True(t, spec.expInstConf.Equals(codeInfo.InstantiateConfig), "got %#v", codeInfo.InstantiateConfig) }) @@ -100,7 +100,7 @@ func TestCreateStoresInstantiatePermission(t *testing.T) { func TestCreateWithParamPermissions(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.WasmKeeper + accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit) @@ -135,7 +135,7 @@ func TestCreateWithParamPermissions(t *testing.T) { t.Run(msg, func(t *testing.T) { params := types.DefaultParams() params.CodeUploadAccess = spec.srcPermission - keeper.setParams(ctx, params) + keepers.WasmKeeper.setParams(ctx, params) _, err := keeper.Create(ctx, creator, wasmCode, "https://github.com/CosmWasm/wasmd/blob/master/x/wasm/testdata/escrow.wasm", "any/builder:tag", nil) require.True(t, spec.expError.Is(err), err) if spec.expError != nil { @@ -147,7 +147,7 @@ func TestCreateWithParamPermissions(t *testing.T) { func TestCreateDuplicate(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit) @@ -166,17 +166,17 @@ func TestCreateDuplicate(t *testing.T) { require.Equal(t, uint64(2), duplicateID) // and verify both content is proper - storedCode, err := keeper.GetByteCode(ctx, contractID) + storedCode, err := keepers.WasmKeeper.GetByteCode(ctx, contractID) require.NoError(t, err) require.Equal(t, wasmCode, storedCode) - storedCode, err = keeper.GetByteCode(ctx, duplicateID) + storedCode, err = keepers.WasmKeeper.GetByteCode(ctx, duplicateID) require.NoError(t, err) require.Equal(t, wasmCode, storedCode) } func TestCreateWithSimulation(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper ctx = ctx.WithBlockHeader(tmproto.Header{Height: 1}). WithGasMeter(stypes.NewInfiniteGasMeter()) @@ -194,13 +194,13 @@ func TestCreateWithSimulation(t *testing.T) { // then try to create it in non-simulation mode (should not fail) ctx, keepers = CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper = keepers.AccountKeeper, keepers.WasmKeeper + accKeeper, keeper = keepers.AccountKeeper, keepers.ContractKeeper contractID, err = keeper.Create(ctx, creator, wasmCode, "https://github.com/CosmWasm/wasmd/blob/master/x/wasm/testdata/escrow.wasm", "any/builder:tag", nil) require.NoError(t, err) require.Equal(t, uint64(1), contractID) // and verify content - code, err := keeper.GetByteCode(ctx, contractID) + code, err := keepers.WasmKeeper.GetByteCode(ctx, contractID) require.NoError(t, err) require.Equal(t, code, wasmCode) } @@ -232,7 +232,7 @@ func TestIsSimulationMode(t *testing.T) { func TestCreateWithGzippedPayload(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit) @@ -244,7 +244,7 @@ func TestCreateWithGzippedPayload(t *testing.T) { require.NoError(t, err) require.Equal(t, uint64(1), contractID) // and verify content - storedCode, err := keeper.GetByteCode(ctx, contractID) + storedCode, err := keepers.WasmKeeper.GetByteCode(ctx, contractID) require.NoError(t, err) rawCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) @@ -253,7 +253,7 @@ func TestCreateWithGzippedPayload(t *testing.T) { func TestInstantiate(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit) @@ -277,7 +277,7 @@ func TestInstantiate(t *testing.T) { gasBefore := ctx.GasMeter().GasConsumed() // create with no balance is also legal - gotContractAddr, _, err := keeper.Instantiate(ctx, codeID, creator, nil, initMsgBz, "demo contract 1", nil) + gotContractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, initMsgBz, "demo contract 1", nil) require.NoError(t, err) require.Equal(t, "cosmos18vd8fpwxzck93qlwghaj6arh4p7c5n89uzcee5", gotContractAddr.String()) @@ -287,7 +287,7 @@ func TestInstantiate(t *testing.T) { } // ensure it is stored properly - info := keeper.GetContractInfo(ctx, gotContractAddr) + info := keepers.WasmKeeper.GetContractInfo(ctx, gotContractAddr) require.NotNil(t, info) assert.Equal(t, creator.String(), info.Creator) assert.Equal(t, codeID, info.CodeID) @@ -299,7 +299,7 @@ func TestInstantiate(t *testing.T) { Updated: types.NewAbsoluteTxPosition(ctx), Msg: json.RawMessage(initMsgBz), }} - assert.Equal(t, exp, keeper.GetContractHistory(ctx, gotContractAddr)) + assert.Equal(t, exp, keepers.WasmKeeper.GetContractHistory(ctx, gotContractAddr)) } func TestInstantiateWithDeposit(t *testing.T) { @@ -339,7 +339,7 @@ func TestInstantiateWithDeposit(t *testing.T) { for msg, spec := range specs { t.Run(msg, func(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.WasmKeeper + accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.ContractKeeper if spec.fundAddr { fundAccounts(t, ctx, accKeeper, bankKeeper, spec.srcActor, sdk.NewCoins(sdk.NewInt64Coin("denom", 200))) @@ -348,7 +348,7 @@ func TestInstantiateWithDeposit(t *testing.T) { require.NoError(t, err) // when - addr, _, err := keeper.Instantiate(ctx, contractID, spec.srcActor, nil, initMsgBz, "my label", deposit) + addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, spec.srcActor, nil, initMsgBz, "my label", deposit) // then if spec.expError { require.Error(t, err) @@ -409,13 +409,13 @@ func TestInstantiateWithPermissions(t *testing.T) { for msg, spec := range specs { t.Run(msg, func(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.WasmKeeper + accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.ContractKeeper fundAccounts(t, ctx, accKeeper, bankKeeper, spec.srcActor, deposit) contractID, err := keeper.Create(ctx, myAddr, wasmCode, "https://github.com/CosmWasm/wasmd/blob/master/x/wasm/testdata/escrow.wasm", "", &spec.srcPermission) require.NoError(t, err) - _, _, err = keeper.Instantiate(ctx, contractID, spec.srcActor, nil, initMsgBz, "demo contract 1", nil) + _, _, err = keepers.ContractKeeper.Instantiate(ctx, contractID, spec.srcActor, nil, initMsgBz, "demo contract 1", nil) assert.True(t, spec.expError.Is(err), "got %+v", err) }) } @@ -423,7 +423,7 @@ func TestInstantiateWithPermissions(t *testing.T) { func TestInstantiateWithNonExistingCodeID(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, bankKeeper := keepers.AccountKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit) @@ -433,7 +433,7 @@ func TestInstantiateWithNonExistingCodeID(t *testing.T) { require.NoError(t, err) const nonExistingCodeID = 9999 - addr, _, err := keeper.Instantiate(ctx, nonExistingCodeID, creator, nil, initMsgBz, "demo contract 2", nil) + addr, _, err := keepers.ContractKeeper.Instantiate(ctx, nonExistingCodeID, creator, nil, initMsgBz, "demo contract 2", nil) require.True(t, types.ErrNotFound.Is(err), err) require.Nil(t, addr) } @@ -450,14 +450,14 @@ func TestInstantiateWithContractDataResponse(t *testing.T) { } example := StoreRandomContract(t, ctx, keepers, wasmerMock) - _, data, err := keepers.WasmKeeper.Instantiate(ctx, example.CodeID, example.CreatorAddr, nil, nil, "test", nil) + _, data, err := keepers.ContractKeeper.Instantiate(ctx, example.CodeID, example.CreatorAddr, nil, nil, "test", nil) require.NoError(t, err) assert.Equal(t, []byte("my-response-data"), data) } func TestExecute(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) @@ -478,7 +478,7 @@ func TestExecute(t *testing.T) { initMsgBz, err := json.Marshal(initMsg) require.NoError(t, err) - addr, _, err := keeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 3", deposit) + addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 3", deposit) require.NoError(t, err) require.Equal(t, "cosmos18vd8fpwxzck93qlwghaj6arh4p7c5n89uzcee5", addr.String()) @@ -499,7 +499,7 @@ func TestExecute(t *testing.T) { // unauthorized - trialCtx so we don't change state trialCtx := ctx.WithMultiStore(ctx.MultiStore().CacheWrap().(sdk.MultiStore)) - res, err := keeper.Execute(trialCtx, addr, creator, []byte(`{"release":{}}`), nil) + res, err := keepers.ContractKeeper.Execute(trialCtx, addr, creator, []byte(`{"release":{}}`), nil) require.Error(t, err) require.True(t, errors.Is(err, types.ErrExecuteFailed)) require.Equal(t, "Unauthorized: execute wasm contract failed", err.Error()) @@ -508,7 +508,7 @@ func TestExecute(t *testing.T) { start := time.Now() gasBefore := ctx.GasMeter().GasConsumed() - res, err = keeper.Execute(ctx, addr, fred, []byte(`{"release":{}}`), topUp) + res, err = keepers.ContractKeeper.Execute(ctx, addr, fred, []byte(`{"release":{}}`), topUp) diff := time.Now().Sub(start) require.NoError(t, err) require.NotNil(t, res) @@ -593,7 +593,7 @@ func TestExecuteWithDeposit(t *testing.T) { for msg, spec := range specs { t.Run(msg, func(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.WasmKeeper + accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.ContractKeeper if spec.newBankParams != nil { bankKeeper.SetParams(ctx, *spec.newBankParams) } @@ -607,11 +607,11 @@ func TestExecuteWithDeposit(t *testing.T) { initMsgBz, err := json.Marshal(initMsg) require.NoError(t, err) - contractAddr, _, err := keeper.Instantiate(ctx, codeID, spec.srcActor, nil, initMsgBz, "my label", nil) + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, codeID, spec.srcActor, nil, initMsgBz, "my label", nil) require.NoError(t, err) // when - _, err = keeper.Execute(ctx, contractAddr, spec.srcActor, []byte(`{"release":{}}`), deposit) + _, err = keepers.ContractKeeper.Execute(ctx, contractAddr, spec.srcActor, []byte(`{"release":{}}`), deposit) // then if spec.expError { @@ -627,7 +627,7 @@ func TestExecuteWithDeposit(t *testing.T) { func TestExecuteWithNonExistingAddress(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit.Add(deposit...)) @@ -640,7 +640,7 @@ func TestExecuteWithNonExistingAddress(t *testing.T) { func TestExecuteWithPanic(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) @@ -661,11 +661,11 @@ func TestExecuteWithPanic(t *testing.T) { initMsgBz, err := json.Marshal(initMsg) require.NoError(t, err) - addr, _, err := keeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 4", deposit) + addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 4", deposit) require.NoError(t, err) // let's make sure we get a reasonable error, no panic/crash - _, err = keeper.Execute(ctx, addr, fred, []byte(`{"panic":{}}`), topUp) + _, err = keepers.ContractKeeper.Execute(ctx, addr, fred, []byte(`{"panic":{}}`), topUp) require.Error(t, err) require.True(t, errors.Is(err, types.ErrExecuteFailed)) // test with contains as "Display" implementation of the Wasmer "RuntimeError" is different for Mac and Linux @@ -674,7 +674,7 @@ func TestExecuteWithPanic(t *testing.T) { func TestExecuteWithCpuLoop(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) @@ -695,7 +695,7 @@ func TestExecuteWithCpuLoop(t *testing.T) { initMsgBz, err := json.Marshal(initMsg) require.NoError(t, err) - addr, _, err := keeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 5", deposit) + addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 5", deposit) require.NoError(t, err) // make sure we set a limit before calling @@ -712,14 +712,14 @@ func TestExecuteWithCpuLoop(t *testing.T) { }() // this should throw out of gas exception (panic) - _, err = keeper.Execute(ctx, addr, fred, []byte(`{"cpu_loop":{}}`), nil) + _, err = keepers.ContractKeeper.Execute(ctx, addr, fred, []byte(`{"cpu_loop":{}}`), nil) require.True(t, false, "We must panic before this line") } func TestExecuteWithStorageLoop(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) @@ -740,7 +740,7 @@ func TestExecuteWithStorageLoop(t *testing.T) { initMsgBz, err := json.Marshal(initMsg) require.NoError(t, err) - addr, _, err := keeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 6", deposit) + addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 6", deposit) require.NoError(t, err) // make sure we set a limit before calling @@ -757,13 +757,13 @@ func TestExecuteWithStorageLoop(t *testing.T) { }() // this should throw out of gas exception (panic) - _, err = keeper.Execute(ctx, addr, fred, []byte(`{"storage_loop":{}}`), nil) + _, err = keepers.ContractKeeper.Execute(ctx, addr, fred, []byte(`{"storage_loop":{}}`), nil) require.True(t, false, "We must panic before this line") } func TestMigrate(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) @@ -901,7 +901,7 @@ func TestMigrate(t *testing.T) { t.Run(msg, func(t *testing.T) { // given a contract instance ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) - contractAddr, _, err := keeper.Instantiate(ctx, spec.fromCodeID, creator, spec.admin, spec.initMsg, "demo contract", nil) + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, spec.fromCodeID, creator, spec.admin, spec.initMsg, "demo contract", nil) require.NoError(t, err) if spec.overrideContractAddr != nil { contractAddr = spec.overrideContractAddr @@ -914,7 +914,7 @@ func TestMigrate(t *testing.T) { if spec.expErr != nil { return } - cInfo := keeper.GetContractInfo(ctx, contractAddr) + cInfo := keepers.WasmKeeper.GetContractInfo(ctx, contractAddr) assert.Equal(t, spec.toCodeID, cInfo.CodeID) assert.Equal(t, spec.expIBCPort, cInfo.IBCPortID != "", cInfo.IBCPortID) @@ -929,10 +929,10 @@ func TestMigrate(t *testing.T) { Updated: types.NewAbsoluteTxPosition(ctx), Msg: spec.migrateMsg, }} - assert.Equal(t, expHistory, keeper.GetContractHistory(ctx, contractAddr)) + assert.Equal(t, expHistory, keepers.WasmKeeper.GetContractHistory(ctx, contractAddr)) // and verify contract state - raw := keeper.QueryRaw(ctx, contractAddr, []byte("config")) + raw := keepers.WasmKeeper.QueryRaw(ctx, contractAddr, []byte("config")) var stored map[string][]byte require.NoError(t, json.Unmarshal(raw, &stored)) require.Contains(t, stored, "verifier") @@ -956,7 +956,7 @@ func TestMigrateReplacesTheSecondIndex(t *testing.T) { // when do migrate newCodeExample := StoreBurnerExampleContract(t, ctx, keepers) migMsgBz := BurnerExampleInitMsg{Payout: example.CreatorAddr}.GetBytes(t) - _, err := keepers.WasmKeeper.Migrate(ctx, example.Contract, example.CreatorAddr, newCodeExample.CodeID, migMsgBz) + _, err := keepers.ContractKeeper.Migrate(ctx, example.Contract, example.CreatorAddr, newCodeExample.CodeID, migMsgBz) require.NoError(t, err) // then the new index exists newContractInfo := keepers.WasmKeeper.GetContractInfo(ctx, example.Contract) @@ -969,7 +969,7 @@ func TestMigrateReplacesTheSecondIndex(t *testing.T) { func TestMigrateWithDispatchedMessage(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit.Add(deposit...)) @@ -994,7 +994,7 @@ func TestMigrateWithDispatchedMessage(t *testing.T) { initMsgBz := initMsg.GetBytes(t) ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) - contractAddr, _, err := keeper.Instantiate(ctx, originalContractID, creator, fred, initMsgBz, "demo contract", deposit) + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, originalContractID, creator, fred, initMsgBz, "demo contract", deposit) require.NoError(t, err) migMsgBz := BurnerExampleInitMsg{Payout: myPayoutAddr}.GetBytes(t) @@ -1038,7 +1038,7 @@ func TestMigrateWithDispatchedMessage(t *testing.T) { assert.JSONEq(t, expJSONEvts, prettyEvents(t, ctx.EventManager().Events())) // all persistent data cleared - m := keeper.QueryRaw(ctx, contractAddr, []byte("config")) + m := keepers.WasmKeeper.QueryRaw(ctx, contractAddr, []byte("config")) require.Len(t, m, 0) // and all deposit tokens sent to myPayoutAddr @@ -1065,7 +1065,7 @@ type stealFundsMsg struct { func TestSudo(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit.Add(deposit...)) @@ -1084,7 +1084,7 @@ func TestSudo(t *testing.T) { initMsgBz, err := json.Marshal(initMsg) require.NoError(t, err) - addr, _, err := keeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 3", deposit) + addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract 3", deposit) require.NoError(t, err) require.Equal(t, "cosmos18vd8fpwxzck93qlwghaj6arh4p7c5n89uzcee5", addr.String()) @@ -1106,7 +1106,7 @@ func TestSudo(t *testing.T) { sudoMsg, err := json.Marshal(msg) require.NoError(t, err) - res, err := keeper.Sudo(ctx, addr, sudoMsg) + res, err := keepers.WasmKeeper.Sudo(ctx, addr, sudoMsg) require.NoError(t, err) require.NotNil(t, res) @@ -1144,7 +1144,7 @@ func mustMarshal(t *testing.T, r interface{}) []byte { func TestUpdateContractAdmin(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) @@ -1197,7 +1197,7 @@ func TestUpdateContractAdmin(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - addr, _, err := keeper.Instantiate(ctx, originalContractID, creator, spec.instAdmin, initMsgBz, "demo contract", nil) + addr, _, err := keepers.ContractKeeper.Instantiate(ctx, originalContractID, creator, spec.instAdmin, initMsgBz, "demo contract", nil) require.NoError(t, err) if spec.overrideContractAddr != nil { addr = spec.overrideContractAddr @@ -1207,7 +1207,7 @@ func TestUpdateContractAdmin(t *testing.T) { if spec.expErr != nil { return } - cInfo := keeper.GetContractInfo(ctx, addr) + cInfo := keepers.WasmKeeper.GetContractInfo(ctx, addr) assert.Equal(t, spec.newAdmin.String(), cInfo.Admin) }) } @@ -1215,7 +1215,7 @@ func TestUpdateContractAdmin(t *testing.T) { func TestClearContractAdmin(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) @@ -1263,7 +1263,7 @@ func TestClearContractAdmin(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - addr, _, err := keeper.Instantiate(ctx, originalContractID, creator, spec.instAdmin, initMsgBz, "demo contract", nil) + addr, _, err := keepers.ContractKeeper.Instantiate(ctx, originalContractID, creator, spec.instAdmin, initMsgBz, "demo contract", nil) require.NoError(t, err) if spec.overrideContractAddr != nil { addr = spec.overrideContractAddr @@ -1273,7 +1273,7 @@ func TestClearContractAdmin(t *testing.T) { if spec.expErr != nil { return } - cInfo := keeper.GetContractInfo(ctx, addr) + cInfo := keepers.WasmKeeper.GetContractInfo(ctx, addr) assert.Empty(t, cInfo.Admin) }) } diff --git a/x/wasm/keeper/legacy_querier_test.go b/x/wasm/keeper/legacy_querier_test.go index 35bade2a1f..7c366c2672 100644 --- a/x/wasm/keeper/legacy_querier_test.go +++ b/x/wasm/keeper/legacy_querier_test.go @@ -27,7 +27,7 @@ func TestLegacyQueryContractState(t *testing.T) { wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - contractID, err := keeper.Create(ctx, creator, wasmCode, "", "", nil) + contractID, err := keepers.ContractKeeper.Create(ctx, creator, wasmCode, "", "", nil) require.NoError(t, err) _, _, bob := keyPubAddr() @@ -38,7 +38,7 @@ func TestLegacyQueryContractState(t *testing.T) { initMsgBz, err := json.Marshal(initMsg) require.NoError(t, err) - addr, _, err := keeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract to query", deposit) + addr, _, err := keepers.ContractKeeper.Instantiate(ctx, contractID, creator, nil, initMsgBz, "demo contract to query", deposit) require.NoError(t, err) contractModel := []types.Model{ @@ -164,7 +164,7 @@ func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - codeID, err := keeper.Create(ctx, creator, wasmCode, "", "", nil) + codeID, err := keepers.ContractKeeper.Create(ctx, creator, wasmCode, "", "", nil) require.NoError(t, err) _, _, bob := keyPubAddr() @@ -192,7 +192,7 @@ func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { ctx = setBlock(ctx, h) h++ } - _, _, err = keeper.Instantiate(ctx, codeID, creator, nil, initMsgBz, fmt.Sprintf("contract %d", i), topUp) + _, _, err = keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, initMsgBz, fmt.Sprintf("contract %d", i), topUp) require.NoError(t, err) } diff --git a/x/wasm/keeper/msg_server.go b/x/wasm/keeper/msg_server.go index 50f5d013e7..67ed3ee0c8 100644 --- a/x/wasm/keeper/msg_server.go +++ b/x/wasm/keeper/msg_server.go @@ -11,10 +11,10 @@ import ( var _ types.MsgServer = msgServer{} type msgServer struct { - keeper types.MsgOpsKeeper + keeper types.ContractOpsKeeper } -func NewMsgServerImpl(k types.MsgOpsKeeper) types.MsgServer { +func NewMsgServerImpl(k types.ContractOpsKeeper) types.MsgServer { return &msgServer{keeper: k} } diff --git a/x/wasm/keeper/proposal_handler.go b/x/wasm/keeper/proposal_handler.go index adc584a3d5..32b7eb28d7 100644 --- a/x/wasm/keeper/proposal_handler.go +++ b/x/wasm/keeper/proposal_handler.go @@ -2,27 +2,20 @@ package keeper import ( "fmt" - "strconv" - "strings" - "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "strconv" ) -// governing contains a subset of the wasm keeper used by gov processes -type governing interface { - create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, source string, builder string, instantiateAccess *types.AccessConfig, authZ AuthorizationPolicy) (codeID uint64, err error) - instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins, authZ AuthorizationPolicy) (sdk.AccAddress, []byte, error) - migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte, authZ AuthorizationPolicy) (*sdk.Result, error) - setContractAdmin(ctx sdk.Context, contractAddress, caller, newAdmin sdk.AccAddress, authZ AuthorizationPolicy) error - PinCode(ctx sdk.Context, codeID uint64) error - UnpinCode(ctx sdk.Context, codeID uint64) error +// NewWasmProposalHandler creates a new governance Handler for wasm proposals +func NewWasmProposalHandler(k decoratedKeeper, enabledProposalTypes []types.ProposalType) govtypes.Handler { + return NewWasmProposalHandlerX(NewGovPermissionKeeper(k), enabledProposalTypes) } -// NewWasmProposalHandler creates a new governance Handler for wasm proposals -func NewWasmProposalHandler(k governing, enabledProposalTypes []types.ProposalType) govtypes.Handler { +// NewWasmProposalHandlerX creates a new governance Handler for wasm proposals +func NewWasmProposalHandlerX(k types.ContractOpsKeeper, enabledProposalTypes []types.ProposalType) govtypes.Handler { enabledTypes := make(map[string]struct{}, len(enabledProposalTypes)) for i := range enabledProposalTypes { enabledTypes[string(enabledProposalTypes[i])] = struct{}{} @@ -55,7 +48,7 @@ func NewWasmProposalHandler(k governing, enabledProposalTypes []types.ProposalTy } } -func handleStoreCodeProposal(ctx sdk.Context, k governing, p types.StoreCodeProposal) error { +func handleStoreCodeProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.StoreCodeProposal) error { if err := p.ValidateBasic(); err != nil { return err } @@ -64,7 +57,7 @@ func handleStoreCodeProposal(ctx sdk.Context, k governing, p types.StoreCodeProp if err != nil { return sdkerrors.Wrap(err, "run as address") } - codeID, err := k.create(ctx, runAsAddr, p.WASMByteCode, p.Source, p.Builder, p.InstantiatePermission, GovAuthorizationPolicy{}) + codeID, err := k.Create(ctx, runAsAddr, p.WASMByteCode, p.Source, p.Builder, p.InstantiatePermission) if err != nil { return err } @@ -78,7 +71,7 @@ func handleStoreCodeProposal(ctx sdk.Context, k governing, p types.StoreCodeProp return nil } -func handleInstantiateProposal(ctx sdk.Context, k governing, p types.InstantiateContractProposal) error { +func handleInstantiateProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.InstantiateContractProposal) error { if err := p.ValidateBasic(); err != nil { return err } @@ -91,7 +84,7 @@ func handleInstantiateProposal(ctx sdk.Context, k governing, p types.Instantiate return sdkerrors.Wrap(err, "admin") } - contractAddr, _, err := k.instantiate(ctx, p.CodeID, runAsAddr, adminAddr, p.InitMsg, p.Label, p.Funds, GovAuthorizationPolicy{}) + contractAddr, _, err := k.Instantiate(ctx, p.CodeID, runAsAddr, adminAddr, p.InitMsg, p.Label, p.Funds) if err != nil { return err } @@ -106,7 +99,7 @@ func handleInstantiateProposal(ctx sdk.Context, k governing, p types.Instantiate return nil } -func handleMigrateProposal(ctx sdk.Context, k governing, p types.MigrateContractProposal) error { +func handleMigrateProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.MigrateContractProposal) error { if err := p.ValidateBasic(); err != nil { return err } @@ -119,7 +112,7 @@ func handleMigrateProposal(ctx sdk.Context, k governing, p types.MigrateContract if err != nil { return sdkerrors.Wrap(err, "run as address") } - res, err := k.migrate(ctx, contractAddr, runAsAddr, p.CodeID, p.MigrateMsg, GovAuthorizationPolicy{}) + res, err := k.Migrate(ctx, contractAddr, runAsAddr, p.CodeID, p.MigrateMsg) if err != nil { return err } @@ -141,7 +134,7 @@ func handleMigrateProposal(ctx sdk.Context, k governing, p types.MigrateContract return nil } -func handleUpdateAdminProposal(ctx sdk.Context, k governing, p types.UpdateAdminProposal) error { +func handleUpdateAdminProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.UpdateAdminProposal) error { if err := p.ValidateBasic(); err != nil { return err } @@ -154,7 +147,7 @@ func handleUpdateAdminProposal(ctx sdk.Context, k governing, p types.UpdateAdmin return sdkerrors.Wrap(err, "run as address") } - if err := k.setContractAdmin(ctx, contractAddr, nil, newAdminAddr, GovAuthorizationPolicy{}); err != nil { + if err := k.UpdateContractAdmin(ctx, contractAddr, nil, newAdminAddr); err != nil { return err } @@ -167,7 +160,7 @@ func handleUpdateAdminProposal(ctx sdk.Context, k governing, p types.UpdateAdmin return nil } -func handleClearAdminProposal(ctx sdk.Context, k governing, p types.ClearAdminProposal) error { +func handleClearAdminProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.ClearAdminProposal) error { if err := p.ValidateBasic(); err != nil { return err } @@ -176,7 +169,7 @@ func handleClearAdminProposal(ctx sdk.Context, k governing, p types.ClearAdminPr if err != nil { return sdkerrors.Wrap(err, "contract") } - if err := k.setContractAdmin(ctx, contractAddr, nil, nil, GovAuthorizationPolicy{}); err != nil { + if err := k.ClearContractAdmin(ctx, contractAddr, nil); err != nil { return err } ourEvent := sdk.NewEvent( @@ -188,7 +181,7 @@ func handleClearAdminProposal(ctx sdk.Context, k governing, p types.ClearAdminPr return nil } -func handlePinCodesProposal(ctx sdk.Context, k governing, p types.PinCodesProposal) error { +func handlePinCodesProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.PinCodesProposal) error { if err := p.ValidateBasic(); err != nil { return err } @@ -197,21 +190,18 @@ func handlePinCodesProposal(ctx sdk.Context, k governing, p types.PinCodesPropos return sdkerrors.Wrapf(err, "code id: %d", v) } } - s := make([]string, len(p.CodeIDs)) - for i, v := range p.CodeIDs { - s[i] = strconv.FormatUint(v, 10) + for _, v := range p.CodeIDs { + ourEvent := sdk.NewEvent( + types.EventTypePinCode, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyCodeID, strconv.FormatUint(v, 10)), + ) + ctx.EventManager().EmitEvent(ourEvent) } - ourEvent := sdk.NewEvent( - types.EventTypePinCode, - sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), - sdk.NewAttribute(types.AttributeKeyCodeIDs, strings.Join(s, ",")), - ) - ctx.EventManager().EmitEvent(ourEvent) - return nil } -func handleUnpinCodesProposal(ctx sdk.Context, k governing, p types.UnpinCodesProposal) error { +func handleUnpinCodesProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.UnpinCodesProposal) error { if err := p.ValidateBasic(); err != nil { return err } @@ -220,16 +210,13 @@ func handleUnpinCodesProposal(ctx sdk.Context, k governing, p types.UnpinCodesPr return sdkerrors.Wrapf(err, "code id: %d", v) } } - s := make([]string, len(p.CodeIDs)) - for i, v := range p.CodeIDs { - s[i] = strconv.FormatUint(v, 10) + for _, v := range p.CodeIDs { + ourEvent := sdk.NewEvent( + types.EventTypeUnpinCode, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyCodeID, strconv.FormatUint(v, 10)), + ) + ctx.EventManager().EmitEvent(ourEvent) } - ourEvent := sdk.NewEvent( - types.EventTypeUnpinCode, - sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), - sdk.NewAttribute(types.AttributeKeyCodeIDs, strings.Join(s, ",")), - ) - ctx.EventManager().EmitEvent(ourEvent) - return nil } diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index 8f501bbb8c..0a9552cff8 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -260,7 +260,7 @@ func TestQueryContractListByCodeOrdering(t *testing.T) { wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - codeID, err := keeper.Create(ctx, creator, wasmCode, "", "", nil) + codeID, err := keepers.ContractKeeper.Create(ctx, creator, wasmCode, "", "", nil) require.NoError(t, err) _, _, bob := keyPubAddr() @@ -288,7 +288,7 @@ func TestQueryContractListByCodeOrdering(t *testing.T) { ctx = setBlock(ctx, h) h++ } - _, _, err = keeper.Instantiate(ctx, codeID, creator, nil, initMsgBz, fmt.Sprintf("contract %d", i), topUp) + _, _, err = keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, initMsgBz, fmt.Sprintf("contract %d", i), topUp) require.NoError(t, err) } diff --git a/x/wasm/keeper/reflect_test.go b/x/wasm/keeper/reflect_test.go index 3bacea8352..1e60db4c85 100644 --- a/x/wasm/keeper/reflect_test.go +++ b/x/wasm/keeper/reflect_test.go @@ -85,7 +85,7 @@ const ReflectFeatures = "staking,mask,stargate" func TestReflectContractSend(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc))) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit) @@ -167,7 +167,7 @@ func TestReflectContractSend(t *testing.T) { func TestReflectCustomMsg(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) - accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit) @@ -268,13 +268,13 @@ func TestMaskReflectCustomQuery(t *testing.T) { // upload code reflectCode, err := ioutil.ReadFile("./testdata/reflect.wasm") require.NoError(t, err) - codeID, err := keeper.Create(ctx, creator, reflectCode, "", "", nil) + codeID, err := keepers.ContractKeeper.Create(ctx, creator, reflectCode, "", "", nil) require.NoError(t, err) require.Equal(t, uint64(1), codeID) // creator instantiates a contract and gives it tokens contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) - contractAddr, _, err := keeper.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "reflect contract 1", contractStart) + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "reflect contract 1", contractStart) require.NoError(t, err) require.NotEmpty(t, contractAddr) @@ -320,12 +320,12 @@ func TestReflectStargateQuery(t *testing.T) { // upload code reflectCode, err := ioutil.ReadFile("./testdata/reflect.wasm") require.NoError(t, err) - codeID, err := keeper.Create(ctx, creator, reflectCode, "", "", nil) + codeID, err := keepers.ContractKeeper.Create(ctx, creator, reflectCode, "", "", nil) require.NoError(t, err) require.Equal(t, uint64(1), codeID) // creator instantiates a contract and gives it tokens - contractAddr, _, err := keeper.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "reflect contract 1", contractStart) + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "reflect contract 1", contractStart) require.NoError(t, err) require.NotEmpty(t, contractAddr) @@ -395,13 +395,13 @@ func TestMaskReflectWasmQueries(t *testing.T) { // upload reflect code reflectCode, err := ioutil.ReadFile("./testdata/reflect.wasm") require.NoError(t, err) - reflectID, err := keeper.Create(ctx, creator, reflectCode, "", "", nil) + reflectID, err := keepers.ContractKeeper.Create(ctx, creator, reflectCode, "", "", nil) require.NoError(t, err) require.Equal(t, uint64(1), reflectID) // creator instantiates a contract and gives it tokens reflectStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) - reflectAddr, _, err := keeper.Instantiate(ctx, reflectID, creator, nil, []byte("{}"), "reflect contract 2", reflectStart) + reflectAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, reflectID, creator, nil, []byte("{}"), "reflect contract 2", reflectStart) require.NoError(t, err) require.NotEmpty(t, reflectAddr) @@ -467,13 +467,13 @@ func TestWasmRawQueryWithNil(t *testing.T) { // upload reflect code reflectCode, err := ioutil.ReadFile("./testdata/reflect.wasm") require.NoError(t, err) - reflectID, err := keeper.Create(ctx, creator, reflectCode, "", "", nil) + reflectID, err := keepers.ContractKeeper.Create(ctx, creator, reflectCode, "", "", nil) require.NoError(t, err) require.Equal(t, uint64(1), reflectID) // creator instantiates a contract and gives it tokens reflectStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) - reflectAddr, _, err := keeper.Instantiate(ctx, reflectID, creator, nil, []byte("{}"), "reflect contract 2", reflectStart) + reflectAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, reflectID, creator, nil, []byte("{}"), "reflect contract 2", reflectStart) require.NoError(t, err) require.NotEmpty(t, reflectAddr) diff --git a/x/wasm/keeper/staking_test.go b/x/wasm/keeper/staking_test.go index 4cd2006310..b90fed75a4 100644 --- a/x/wasm/keeper/staking_test.go +++ b/x/wasm/keeper/staking_test.go @@ -2,6 +2,7 @@ package keeper import ( "encoding/json" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "io/ioutil" "testing" @@ -91,7 +92,7 @@ type InvestmentResponse struct { func TestInitializeStaking(t *testing.T) { ctx, k := CreateTestInput(t, false, SupportedFeatures) - accKeeper, stakingKeeper, keeper, bankKeeper := k.AccountKeeper, k.StakingKeeper, k.WasmKeeper, k.BankKeeper + accKeeper, stakingKeeper, keeper, bankKeeper := k.AccountKeeper, k.StakingKeeper, k.ContractKeeper, k.BankKeeper valAddr := addValidator(t, ctx, stakingKeeper, accKeeper, bankKeeper, sdk.NewInt64Coin("stake", 1234567)) ctx = nextBlock(ctx, stakingKeeper) @@ -121,7 +122,7 @@ func TestInitializeStaking(t *testing.T) { initBz, err := json.Marshal(&initMsg) require.NoError(t, err) - stakingAddr, _, err := keeper.Instantiate(ctx, stakingID, creator, nil, initBz, "staking derivates - DRV", nil) + stakingAddr, _, err := k.ContractKeeper.Instantiate(ctx, stakingID, creator, nil, initBz, "staking derivates - DRV", nil) require.NoError(t, err) require.NotEmpty(t, stakingAddr) @@ -141,7 +142,7 @@ func TestInitializeStaking(t *testing.T) { badBz, err := json.Marshal(&badInitMsg) require.NoError(t, err) - _, _, err = keeper.Instantiate(ctx, stakingID, creator, nil, badBz, "missing validator", nil) + _, _, err = k.ContractKeeper.Instantiate(ctx, stakingID, creator, nil, badBz, "missing validator", nil) require.Error(t, err) // no changes to bonding shares @@ -154,12 +155,13 @@ type initInfo struct { creator sdk.AccAddress contractAddr sdk.AccAddress - ctx sdk.Context - accKeeper authkeeper.AccountKeeper - stakingKeeper stakingkeeper.Keeper - distKeeper distributionkeeper.Keeper - wasmKeeper Keeper - bankKeeper bankkeeper.Keeper + ctx sdk.Context + accKeeper authkeeper.AccountKeeper + stakingKeeper stakingkeeper.Keeper + distKeeper distributionkeeper.Keeper + wasmKeeper Keeper + contractKeeper wasmtypes.ContractOpsKeeper + bankKeeper bankkeeper.Keeper } func initializeStaking(t *testing.T) initInfo { @@ -186,7 +188,7 @@ func initializeStaking(t *testing.T) initInfo { // upload staking derivates code stakingCode, err := ioutil.ReadFile("./testdata/staking.wasm") require.NoError(t, err) - stakingID, err := keeper.Create(ctx, creator, stakingCode, "", "", nil) + stakingID, err := k.ContractKeeper.Create(ctx, creator, stakingCode, "", "", nil) require.NoError(t, err) require.Equal(t, uint64(1), stakingID) @@ -202,20 +204,21 @@ func initializeStaking(t *testing.T) initInfo { initBz, err := json.Marshal(&initMsg) require.NoError(t, err) - stakingAddr, _, err := keeper.Instantiate(ctx, stakingID, creator, nil, initBz, "staking derivates - DRV", nil) + stakingAddr, _, err := k.ContractKeeper.Instantiate(ctx, stakingID, creator, nil, initBz, "staking derivates - DRV", nil) require.NoError(t, err) require.NotEmpty(t, stakingAddr) return initInfo{ - valAddr: valAddr, - creator: creator, - contractAddr: stakingAddr, - ctx: ctx, - accKeeper: accKeeper, - stakingKeeper: stakingKeeper, - wasmKeeper: *keeper, - distKeeper: k.DistKeeper, - bankKeeper: bankKeeper, + valAddr: valAddr, + creator: creator, + contractAddr: stakingAddr, + ctx: ctx, + accKeeper: accKeeper, + stakingKeeper: stakingKeeper, + wasmKeeper: *keeper, + distKeeper: k.DistKeeper, + bankKeeper: bankKeeper, + contractKeeper: k.ContractKeeper, } } @@ -244,7 +247,7 @@ func TestBonding(t *testing.T) { } bondBz, err := json.Marshal(bond) require.NoError(t, err) - _, err = keeper.Execute(ctx, contractAddr, bob, bondBz, funds) + _, err = initInfo.contractKeeper.Execute(ctx, contractAddr, bob, bondBz, funds) require.NoError(t, err) // check some account values - the money is on neither account (cuz it is bonded) @@ -287,7 +290,7 @@ func TestUnbonding(t *testing.T) { } bondBz, err := json.Marshal(bond) require.NoError(t, err) - _, err = keeper.Execute(ctx, contractAddr, bob, bondBz, funds) + _, err = initInfo.contractKeeper.Execute(ctx, contractAddr, bob, bondBz, funds) require.NoError(t, err) // update height a bit @@ -301,7 +304,7 @@ func TestUnbonding(t *testing.T) { } unbondBz, err := json.Marshal(unbond) require.NoError(t, err) - _, err = keeper.Execute(ctx, contractAddr, bob, unbondBz, nil) + _, err = initInfo.contractKeeper.Execute(ctx, contractAddr, bob, unbondBz, nil) require.NoError(t, err) // check some account values - the money is on neither account (cuz it is bonded) @@ -356,7 +359,7 @@ func TestReinvest(t *testing.T) { } bondBz, err := json.Marshal(bond) require.NoError(t, err) - _, err = keeper.Execute(ctx, contractAddr, bob, bondBz, funds) + _, err = initInfo.contractKeeper.Execute(ctx, contractAddr, bob, bondBz, funds) require.NoError(t, err) // update height a bit to solidify the delegation @@ -370,7 +373,7 @@ func TestReinvest(t *testing.T) { } reinvestBz, err := json.Marshal(reinvest) require.NoError(t, err) - _, err = keeper.Execute(ctx, contractAddr, bob, reinvestBz, nil) + _, err = initInfo.contractKeeper.Execute(ctx, contractAddr, bob, reinvestBz, nil) require.NoError(t, err) // check some account values - the money is on neither account (cuz it is bonded) @@ -424,7 +427,7 @@ func TestQueryStakingInfo(t *testing.T) { } bondBz, err := json.Marshal(bond) require.NoError(t, err) - _, err = keeper.Execute(ctx, contractAddr, bob, bondBz, funds) + _, err = initInfo.contractKeeper.Execute(ctx, contractAddr, bob, bondBz, funds) require.NoError(t, err) // update height a bit to solidify the delegation @@ -442,12 +445,12 @@ func TestQueryStakingInfo(t *testing.T) { // upload mask code maskCode, err := ioutil.ReadFile("./testdata/reflect.wasm") require.NoError(t, err) - maskID, err := keeper.Create(ctx, creator, maskCode, "", "", nil) + maskID, err := initInfo.contractKeeper.Create(ctx, creator, maskCode, "", "", nil) require.NoError(t, err) require.Equal(t, uint64(2), maskID) // creator instantiates a contract and gives it tokens - maskAddr, _, err := keeper.Instantiate(ctx, maskID, creator, nil, []byte("{}"), "mask contract 2", nil) + maskAddr, _, err := initInfo.contractKeeper.Instantiate(ctx, maskID, creator, nil, []byte("{}"), "mask contract 2", nil) require.NoError(t, err) require.NotEmpty(t, maskAddr) @@ -546,7 +549,7 @@ func TestQueryStakingPlugin(t *testing.T) { // STEP 1: take a lot of setup from TestReinvest so we have non-zero info initInfo := initializeStaking(t) ctx, valAddr, contractAddr := initInfo.ctx, initInfo.valAddr, initInfo.contractAddr - keeper, stakingKeeper, accKeeper := initInfo.wasmKeeper, initInfo.stakingKeeper, initInfo.accKeeper + stakingKeeper, accKeeper := initInfo.stakingKeeper, initInfo.accKeeper distKeeper := initInfo.distKeeper // initial checks of bonding state @@ -566,7 +569,7 @@ func TestQueryStakingPlugin(t *testing.T) { } bondBz, err := json.Marshal(bond) require.NoError(t, err) - _, err = keeper.Execute(ctx, contractAddr, bob, bondBz, funds) + _, err = initInfo.contractKeeper.Execute(ctx, contractAddr, bob, bondBz, funds) require.NoError(t, err) // update height a bit to solidify the delegation diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index 086ff45353..bc0fa98ea3 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -30,12 +30,12 @@ func TestDispatchSubMsgSuccessCase(t *testing.T) { // upload code reflectCode, err := ioutil.ReadFile("./testdata/reflect.wasm") require.NoError(t, err) - codeID, err := keeper.Create(ctx, creator, reflectCode, "", "", nil) + codeID, err := keepers.ContractKeeper.Create(ctx, creator, reflectCode, "", "", nil) require.NoError(t, err) require.Equal(t, uint64(1), codeID) // creator instantiates a contract and gives it tokens - contractAddr, _, err := keeper.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "reflect contract 1", contractStart) + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "reflect contract 1", contractStart) require.NoError(t, err) require.NotEmpty(t, contractAddr) @@ -66,7 +66,7 @@ func TestDispatchSubMsgSuccessCase(t *testing.T) { } reflectSendBz, err := json.Marshal(reflectSend) require.NoError(t, err) - _, err = keeper.Execute(ctx, contractAddr, creator, reflectSendBz, nil) + _, err = keepers.ContractKeeper.Execute(ctx, contractAddr, creator, reflectSendBz, nil) require.NoError(t, err) // fred got coins @@ -135,13 +135,13 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { // upload code reflectCode, err := ioutil.ReadFile("./testdata/reflect.wasm") require.NoError(t, err) - reflectID, err := keeper.Create(ctx, uploader, reflectCode, "", "", nil) + reflectID, err := keepers.ContractKeeper.Create(ctx, uploader, reflectCode, "", "", nil) require.NoError(t, err) // create hackatom contract for testing (for infinite loop) hackatomCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - hackatomID, err := keeper.Create(ctx, uploader, hackatomCode, "", "", nil) + hackatomID, err := keepers.ContractKeeper.Create(ctx, uploader, hackatomCode, "", "", nil) require.NoError(t, err) _, _, bob := keyPubAddr() _, _, fred := keyPubAddr() @@ -151,7 +151,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { } initMsgBz, err := json.Marshal(initMsg) require.NoError(t, err) - hackatomAddr, _, err := keeper.Instantiate(ctx, hackatomID, uploader, nil, initMsgBz, "hackatom demo", contractStart) + hackatomAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, hackatomID, uploader, nil, initMsgBz, "hackatom demo", contractStart) require.NoError(t, err) validBankSend := func(contract, emptyAccount string) wasmvmtypes.CosmosMsg { @@ -312,7 +312,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, contractStart) _, _, empty := keyPubAddr() - contractAddr, _, err := keeper.Instantiate(ctx, reflectID, creator, nil, []byte("{}"), fmt.Sprintf("contract %s", name), contractStart) + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, reflectID, creator, nil, []byte("{}"), fmt.Sprintf("contract %s", name), contractStart) require.NoError(t, err) msg := tc.msg(contractAddr.String(), empty.String()) @@ -338,7 +338,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { } } }() - _, err = keeper.Execute(execCtx, contractAddr, creator, reflectSendBz, nil) + _, err = keepers.ContractKeeper.Execute(execCtx, contractAddr, creator, reflectSendBz, nil) if tc.executeError { require.Error(t, err) @@ -398,11 +398,11 @@ func TestDispatchSubMsgEncodeToNoSdkMsg(t *testing.T) { // upload code reflectCode, err := ioutil.ReadFile("./testdata/reflect.wasm") require.NoError(t, err) - codeID, err := keeper.Create(ctx, creator, reflectCode, "", "", nil) + codeID, err := keepers.ContractKeeper.Create(ctx, creator, reflectCode, "", "", nil) require.NoError(t, err) // creator instantiates a contract and gives it tokens - contractAddr, _, err := keeper.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "reflect contract 1", contractStart) + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "reflect contract 1", contractStart) require.NoError(t, err) require.NotEmpty(t, contractAddr) @@ -428,7 +428,7 @@ func TestDispatchSubMsgEncodeToNoSdkMsg(t *testing.T) { } reflectSendBz, err := json.Marshal(reflectSend) require.NoError(t, err) - _, err = keeper.Execute(ctx, contractAddr, creator, reflectSendBz, nil) + _, err = keepers.ContractKeeper.Execute(ctx, contractAddr, creator, reflectSendBz, nil) require.NoError(t, err) // query the reflect state to ensure the result was stored diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index a1cc7cd93c..31c70d1053 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -127,14 +127,15 @@ var TestingStakeParams = stakingtypes.Params{ } type TestKeepers struct { - AccountKeeper authkeeper.AccountKeeper - StakingKeeper stakingkeeper.Keeper - DistKeeper distributionkeeper.Keeper - BankKeeper bankkeeper.Keeper - GovKeeper govkeeper.Keeper - WasmKeeper *Keeper - IBCKeeper *ibckeeper.Keeper - Router *baseapp.Router + AccountKeeper authkeeper.AccountKeeper + StakingKeeper stakingkeeper.Keeper + DistKeeper distributionkeeper.Keeper + BankKeeper bankkeeper.Keeper + GovKeeper govkeeper.Keeper + ContractKeeper types.ContractOpsKeeper + WasmKeeper *Keeper + IBCKeeper *ibckeeper.Keeper + Router *baseapp.Router } // CreateDefaultTestInput common settings for CreateTestInput @@ -303,7 +304,8 @@ func createTestInput( ) keeper.setParams(ctx, types.DefaultParams()) // add wasm handler so we can loop-back (contracts calling contracts) - router.AddRoute(sdk.NewRoute(types.RouterKey, TestHandler(&keeper))) + contractKeeper := NewDefaultPermissionKeeper(&keeper) + router.AddRoute(sdk.NewRoute(types.RouterKey, TestHandler(contractKeeper))) govRouter := govtypes.NewRouter(). AddRoute(govtypes.RouterKey, govtypes.ProposalHandler). @@ -321,20 +323,21 @@ func createTestInput( govKeeper.SetTallyParams(ctx, govtypes.DefaultTallyParams()) keepers := TestKeepers{ - AccountKeeper: authKeeper, - StakingKeeper: stakingKeeper, - DistKeeper: distKeeper, - WasmKeeper: &keeper, - BankKeeper: bankKeeper, - GovKeeper: govKeeper, - IBCKeeper: ibcKeeper, - Router: router, + AccountKeeper: authKeeper, + StakingKeeper: stakingKeeper, + DistKeeper: distKeeper, + ContractKeeper: contractKeeper, + WasmKeeper: &keeper, + BankKeeper: bankKeeper, + GovKeeper: govKeeper, + IBCKeeper: ibcKeeper, + Router: router, } return ctx, keepers } // TestHandler returns a wasm handler for tests (to avoid circular imports) -func TestHandler(k *Keeper) sdk.Handler { +func TestHandler(k types.ContractOpsKeeper) sdk.Handler { return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { ctx = ctx.WithEventManager(sdk.NewEventManager()) switch msg := msg.(type) { @@ -351,7 +354,7 @@ func TestHandler(k *Keeper) sdk.Handler { } } -func handleStoreCode(ctx sdk.Context, k *Keeper, msg *types.MsgStoreCode) (*sdk.Result, error) { +func handleStoreCode(ctx sdk.Context, k types.ContractOpsKeeper, msg *types.MsgStoreCode) (*sdk.Result, error) { senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) if err != nil { return nil, sdkerrors.Wrap(err, "sender") @@ -367,7 +370,7 @@ func handleStoreCode(ctx sdk.Context, k *Keeper, msg *types.MsgStoreCode) (*sdk. }, nil } -func handleInstantiate(ctx sdk.Context, k *Keeper, msg *types.MsgInstantiateContract) (*sdk.Result, error) { +func handleInstantiate(ctx sdk.Context, k types.ContractOpsKeeper, msg *types.MsgInstantiateContract) (*sdk.Result, error) { senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) if err != nil { return nil, sdkerrors.Wrap(err, "sender") @@ -390,7 +393,7 @@ func handleInstantiate(ctx sdk.Context, k *Keeper, msg *types.MsgInstantiateCont }, nil } -func handleExecute(ctx sdk.Context, k *Keeper, msg *types.MsgExecuteContract) (*sdk.Result, error) { +func handleExecute(ctx sdk.Context, k types.ContractOpsKeeper, msg *types.MsgExecuteContract) (*sdk.Result, error) { senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) if err != nil { return nil, sdkerrors.Wrap(err, "sender") @@ -441,7 +444,7 @@ func StoreReflectContract(t TestingT, ctx sdk.Context, keepers TestKeepers) uint require.NoError(t, err) _, _, creatorAddr := keyPubAddr() - codeID, err := keepers.WasmKeeper.Create(ctx, creatorAddr, wasmCode, "", "", nil) + codeID, err := keepers.ContractKeeper.Create(ctx, creatorAddr, wasmCode, "", "", nil) require.NoError(t, err) return codeID } @@ -454,7 +457,7 @@ func StoreExampleContract(t TestingT, ctx sdk.Context, keepers TestKeepers, wasm wasmCode, err := ioutil.ReadFile(wasmFile) require.NoError(t, err) - codeID, err := keepers.WasmKeeper.Create(ctx, creatorAddr, wasmCode, "", "", nil) + codeID, err := keepers.ContractKeeper.Create(ctx, creatorAddr, wasmCode, "", "", nil) require.NoError(t, err) return ExampleContract{anyAmount, creator, creatorAddr, codeID} } @@ -470,7 +473,7 @@ type ExampleContractInstance struct { func SeedNewContractInstance(t TestingT, ctx sdk.Context, keepers TestKeepers, mock types.WasmerEngine) ExampleContractInstance { t.Helper() exampleContract := StoreRandomContract(t, ctx, keepers, mock) - contractAddr, _, err := keepers.WasmKeeper.Instantiate(ctx, exampleContract.CodeID, exampleContract.CreatorAddr, exampleContract.CreatorAddr, []byte(`{}`), "", nil) + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, exampleContract.CodeID, exampleContract.CreatorAddr, exampleContract.CreatorAddr, []byte(`{}`), "", nil) require.NoError(t, err) return ExampleContractInstance{ ExampleContract: exampleContract, @@ -486,7 +489,7 @@ func StoreRandomContract(t TestingT, ctx sdk.Context, keepers TestKeepers, mock fundAccounts(t, ctx, keepers.AccountKeeper, keepers.BankKeeper, creatorAddr, anyAmount) keepers.WasmKeeper.wasmVM = mock wasmCode := append(wasmIdent, rand.Bytes(10)...) - codeID, err := keepers.WasmKeeper.Create(ctx, creatorAddr, wasmCode, "", "", nil) + codeID, err := keepers.ContractKeeper.Create(ctx, creatorAddr, wasmCode, "", "", nil) require.NoError(t, err) exampleContract := ExampleContract{InitialAmount: anyAmount, Creator: creator, CreatorAddr: creatorAddr, CodeID: codeID} return exampleContract @@ -516,7 +519,7 @@ func InstantiateHackatomExampleContract(t TestingT, ctx sdk.Context, keepers Tes initialAmount := sdk.NewCoins(sdk.NewInt64Coin("denom", 100)) adminAddr := contract.CreatorAddr - contractAddr, _, err := keepers.WasmKeeper.Instantiate(ctx, contract.CodeID, contract.CreatorAddr, adminAddr, initMsgBz, "demo contract to query", initialAmount) + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, contract.CodeID, contract.CreatorAddr, adminAddr, initMsgBz, "demo contract to query", initialAmount) require.NoError(t, err) return HackatomExampleInstance{ ExampleContract: contract, @@ -556,7 +559,7 @@ func InstantiateIBCReflectContract(t TestingT, ctx sdk.Context, keepers TestKeep }.GetBytes(t) adminAddr := RandomAccountAddress(t) - contractAddr, _, err := keepers.WasmKeeper.Instantiate(ctx, ibcReflectID, adminAddr, adminAddr, initMsgBz, "ibc-reflect-factory", nil) + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, ibcReflectID, adminAddr, adminAddr, initMsgBz, "ibc-reflect-factory", nil) require.NoError(t, err) return IBCReflectExampleInstance{ Admin: adminAddr, diff --git a/x/wasm/module.go b/x/wasm/module.go index 102c69165f..aa794d2013 100644 --- a/x/wasm/module.go +++ b/x/wasm/module.go @@ -111,7 +111,7 @@ func NewAppModule(cdc codec.Marshaler, keeper *Keeper, validatorSetSource keeper } func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(keeper.NewDefaultPermissionKeeper(am.keeper))) types.RegisterQueryServer(cfg.QueryServer(), NewQuerier(am.keeper)) } @@ -124,7 +124,7 @@ func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) {} // Route returns the message routing key for the wasm module. func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(RouterKey, NewHandler(am.keeper)) + return sdk.NewRoute(RouterKey, NewHandler(keeper.NewDefaultPermissionKeeper(am.keeper))) } // QuerierRoute returns the wasm module's querier route name. diff --git a/x/wasm/types/exported_keepers.go b/x/wasm/types/exported_keepers.go index 348ca29a90..ee63c21904 100644 --- a/x/wasm/types/exported_keepers.go +++ b/x/wasm/types/exported_keepers.go @@ -12,6 +12,7 @@ type ViewKeeper interface { GetContractHistory(ctx types.Context, contractAddr types.AccAddress) []ContractCodeHistoryEntry QuerySmart(ctx types.Context, contractAddr types.AccAddress, req []byte) ([]byte, error) QueryRaw(ctx types.Context, contractAddress types.AccAddress, key []byte) []byte + HasContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) bool GetContractInfo(ctx types.Context, contractAddress types.AccAddress) *ContractInfo IterateContractInfo(ctx types.Context, cb func(types.AccAddress, ContractInfo) bool) GetContractState(ctx types.Context, contractAddress types.AccAddress) types.Iterator @@ -19,20 +20,32 @@ type ViewKeeper interface { IterateCodeInfos(ctx types.Context, cb func(uint64, CodeInfo) bool) GetByteCode(ctx types.Context, codeID uint64) ([]byte, error) IsPinnedCode(ctx types.Context, codeID uint64) bool - HasContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) bool } -// MsgOpsKeeper contains mutable operations that are triggered by messages normally -type MsgOpsKeeper interface { +// ContractOpsKeeper contains mutable operations on a contract. +type ContractOpsKeeper interface { + // Create uploads and compiles a WASM contract, returning a short identifier for the contract Create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, source string, builder string, instantiateAccess *AccessConfig) (codeID uint64, err error) + + // Instantiate creates an instance of a WASM contract Instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins) (sdk.AccAddress, []byte, error) + + // Execute executes the contract instance Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) (*sdk.Result, error) + + // Migrate allows to upgrade a contract to a new code with data migration. Migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte) (*sdk.Result, error) + + // UpdateContractAdmin sets the admin value on the ContractInfo. It must be a valid address (use ClearContractAdmin to remove it) UpdateContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newAdmin sdk.AccAddress) error // ClearContractAdmin sets the admin value on the ContractInfo to nil, to disable further migrations/ updates. ClearContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress) error + + // PinCode pins the wasm contract in wasmvm cache PinCode(ctx sdk.Context, codeID uint64) error + + // UnpinCode removes the wasm contract from wasmvm cache UnpinCode(ctx sdk.Context, codeID uint64) error } diff --git a/x/wasm/types/proposal.go b/x/wasm/types/proposal.go index 57d8c36b1e..21cf84299d 100644 --- a/x/wasm/types/proposal.go +++ b/x/wasm/types/proposal.go @@ -62,13 +62,13 @@ func init() { // register new content types with the sdk govtypes.RegisterProposalType(string(ProposalTypeClearAdmin)) govtypes.RegisterProposalType(string(ProposalTypePinCodes)) govtypes.RegisterProposalType(string(ProposalTypeUnpinCodes)) - govtypes.RegisterProposalTypeCodec(StoreCodeProposal{}, "wasm/StoreCodeProposal") - govtypes.RegisterProposalTypeCodec(InstantiateContractProposal{}, "wasm/InstantiateContractProposal") - govtypes.RegisterProposalTypeCodec(MigrateContractProposal{}, "wasm/MigrateContractProposal") - govtypes.RegisterProposalTypeCodec(UpdateAdminProposal{}, "wasm/UpdateAdminProposal") - govtypes.RegisterProposalTypeCodec(ClearAdminProposal{}, "wasm/ClearAdminProposal") - govtypes.RegisterProposalTypeCodec(PinCodesProposal{}, "wasm/PinCodesProposal") - govtypes.RegisterProposalTypeCodec(UnpinCodesProposal{}, "wasm/UnpinCodesProposal") + govtypes.RegisterProposalTypeCodec(&StoreCodeProposal{}, "wasm/StoreCodeProposal") + govtypes.RegisterProposalTypeCodec(&InstantiateContractProposal{}, "wasm/InstantiateContractProposal") + govtypes.RegisterProposalTypeCodec(&MigrateContractProposal{}, "wasm/MigrateContractProposal") + govtypes.RegisterProposalTypeCodec(&UpdateAdminProposal{}, "wasm/UpdateAdminProposal") + govtypes.RegisterProposalTypeCodec(&ClearAdminProposal{}, "wasm/ClearAdminProposal") + govtypes.RegisterProposalTypeCodec(&PinCodesProposal{}, "wasm/PinCodesProposal") + govtypes.RegisterProposalTypeCodec(&UnpinCodesProposal{}, "wasm/UnpinCodesProposal") } // ProposalRoute returns the routing key of a parameter change proposal. From 55ac19bc7e212742066943e836ccf96b0ebe0daa Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Tue, 23 Mar 2021 18:45:14 +0100 Subject: [PATCH 16/56] Public CoinTransferrer interface --- x/wasm/keeper/keeper.go | 14 +++++++------- x/wasm/keeper/options.go | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 471c95b913..43b4e4be3d 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -62,7 +62,7 @@ type Messenger interface { DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) } -type coinTransferrer interface { +type CoinTransferrer interface { // TransferCoins sends the coin amounts from the source to the destination with rules applied. TransferCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error } @@ -72,7 +72,7 @@ type Keeper struct { storeKey sdk.StoreKey cdc codec.Marshaler accountKeeper types.AccountKeeper - bank coinTransferrer + bank CoinTransferrer portKeeper types.PortKeeper capabilityKeeper types.CapabilityKeeper wasmVM types.WasmerEngine @@ -1027,21 +1027,21 @@ func (k Keeper) QueryGasLimit() sdk.Gas { return k.queryGasLimit } -// CoinTransferrer replicates the cosmos-sdk behaviour as in +// BankCoinTransferrer replicates the cosmos-sdk behaviour as in // https://github.com/cosmos/cosmos-sdk/blob/v0.41.4/x/bank/keeper/msg_server.go#L26 -type CoinTransferrer struct { +type BankCoinTransferrer struct { keeper types.BankKeeper } -func NewBankCoinTransferrer(keeper types.BankKeeper) CoinTransferrer { - return CoinTransferrer{ +func NewBankCoinTransferrer(keeper types.BankKeeper) BankCoinTransferrer { + return BankCoinTransferrer{ keeper: keeper, } } // TransferCoins transfers coins from source to destination account when coin send was enabled for them and the recipient // is not in the blocked address list. -func (c CoinTransferrer) TransferCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error { +func (c BankCoinTransferrer) TransferCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error { if err := c.keeper.SendEnabledCoins(ctx, amt...); err != nil { return err } diff --git a/x/wasm/keeper/options.go b/x/wasm/keeper/options.go index 2501544d52..9486a225ba 100644 --- a/x/wasm/keeper/options.go +++ b/x/wasm/keeper/options.go @@ -69,7 +69,7 @@ func WithMessageEncoders(x *MessageEncoders) Option { } // WithCoinTransferrer is an optional constructor parameter to set a custom coin transferrer -func WithCoinTransferrer(x coinTransferrer) Option { +func WithCoinTransferrer(x CoinTransferrer) Option { return optsFn(func(k *Keeper) { k.bank = x }) From 337611fa4a963fab7e64303d96ec77e07c51f358 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 25 Mar 2021 06:54:47 +0000 Subject: [PATCH 17/56] Bump github.com/rs/zerolog from 1.20.0 to 1.21.0 Bumps [github.com/rs/zerolog](https://github.com/rs/zerolog) from 1.20.0 to 1.21.0. - [Release notes](https://github.com/rs/zerolog/releases) - [Commits](https://github.com/rs/zerolog/compare/v1.20.0...v1.21.0) Signed-off-by: dependabot-preview[bot] --- go.mod | 3 +-- go.sum | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 957c538c79..0f6a517a75 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 github.com/rakyll/statik v0.1.7 - github.com/rs/zerolog v1.20.0 + github.com/rs/zerolog v1.21.0 github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa github.com/spf13/cast v1.3.1 github.com/spf13/cobra v1.1.3 @@ -25,7 +25,6 @@ require ( github.com/tendermint/tendermint v0.34.8 github.com/tendermint/tm-db v0.6.4 golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 // indirect - golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f // indirect golang.org/x/text v0.3.4 // indirect google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f google.golang.org/grpc v1.36.0 diff --git a/go.sum b/go.sum index 615a2bc966..e832c0afad 100644 --- a/go.sum +++ b/go.sum @@ -485,6 +485,7 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.20.0 h1:38k9hgtUBdxFwE34yS8rTHmHBa4eN16E4DJlv177LNs= github.com/rs/zerolog v1.20.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= +github.com/rs/zerolog v1.21.0/go.mod h1:ZPhntP/xmq1nnND05hhpAh2QMhSsA4UN3MGZ6O2J3hM= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= @@ -727,6 +728,7 @@ golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f h1:QdHQnPce6K4XQewki9WNbG5KOROuDzqO3NaYjI1cXJ0= golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -764,6 +766,7 @@ golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From f185de9805f5dae5de2eb8a7d8524a5aa2365ecc Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 25 Mar 2021 06:55:17 +0000 Subject: [PATCH 18/56] Bump github.com/cosmos/cosmos-sdk from 0.42.2 to 0.42.3 Bumps [github.com/cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) from 0.42.2 to 0.42.3. - [Release notes](https://github.com/cosmos/cosmos-sdk/releases) - [Changelog](https://github.com/cosmos/cosmos-sdk/blob/v0.42.3/CHANGELOG.md) - [Commits](https://github.com/cosmos/cosmos-sdk/compare/v0.42.2...v0.42.3) Signed-off-by: dependabot-preview[bot] --- go.mod | 2 +- go.sum | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 68c958e239..877fd7763e 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.15 require ( github.com/CosmWasm/wasmvm v0.14.0-beta1 - github.com/cosmos/cosmos-sdk v0.42.2 + github.com/cosmos/cosmos-sdk v0.42.3 github.com/cosmos/iavl v0.15.3 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b github.com/gogo/protobuf v1.3.3 diff --git a/go.sum b/go.sum index a427c90e62..6d66abcfbd 100644 --- a/go.sum +++ b/go.sum @@ -101,8 +101,8 @@ github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cosmos/cosmos-sdk v0.42.2 h1:t2jIxV5DGN1ynOwuSIvQUUHr7tAePN1AG5ArM7o8qos= -github.com/cosmos/cosmos-sdk v0.42.2/go.mod h1:xiLp1G8mumj82S5KLJGCAyeAlD+7VNomg/aRSJV12yk= +github.com/cosmos/cosmos-sdk v0.42.3 h1:VFYq7spDBBIlygAxwcI79Xh2JuIrG1ZCPKpvqKghIZs= +github.com/cosmos/cosmos-sdk v0.42.3/go.mod h1:xiLp1G8mumj82S5KLJGCAyeAlD+7VNomg/aRSJV12yk= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -204,9 +204,9 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1 h1:jAbXjIeW2ZSW2AwFxlGTDoc2CjI2XujLkV3ArsZFCvc= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -219,8 +219,8 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -486,8 +486,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.20.0 h1:38k9hgtUBdxFwE34yS8rTHmHBa4eN16E4DJlv177LNs= github.com/rs/zerolog v1.20.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= +github.com/rs/zerolog v1.21.0 h1:Q3vdXlfLNT+OftyBHsU0Y445MD+8m8axjKgf2si0QcM= github.com/rs/zerolog v1.21.0/go.mod h1:ZPhntP/xmq1nnND05hhpAh2QMhSsA4UN3MGZ6O2J3hM= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -729,8 +729,7 @@ golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f h1:QdHQnPce6K4XQewki9WNbG5KOROuDzqO3NaYjI1cXJ0= -golang.org/x/sys v0.0.0-20201211090839-8ad439b19e0f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= @@ -816,9 +815,9 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 48df71f87359433324e57474ad84cfb74651644f Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Mon, 29 Mar 2021 13:50:48 +0200 Subject: [PATCH 19/56] Review comment --- x/wasm/handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/wasm/handler.go b/x/wasm/handler.go index 434520d06e..30139fa3be 100644 --- a/x/wasm/handler.go +++ b/x/wasm/handler.go @@ -11,7 +11,7 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -// NewHandler returns a handler for "bank" type messages. +// NewHandler returns a handler for "wasm" type messages. func NewHandler(k types.ContractOpsKeeper) sdk.Handler { msgServer := keeper.NewMsgServerImpl(k) From 5b8e225c3dfeb7266e59cac32709f158a3f5392e Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 30 Mar 2021 07:09:32 +0000 Subject: [PATCH 20/56] Bump github.com/golang/protobuf from 1.5.1 to 1.5.2 Bumps [github.com/golang/protobuf](https://github.com/golang/protobuf) from 1.5.1 to 1.5.2. - [Release notes](https://github.com/golang/protobuf/releases) - [Commits](https://github.com/golang/protobuf/compare/v1.5.1...v1.5.2) Signed-off-by: dependabot-preview[bot] --- go.mod | 2 +- go.sum | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 877fd7763e..a3581d237f 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/cosmos/iavl v0.15.3 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b github.com/gogo/protobuf v1.3.3 - github.com/golang/protobuf v1.5.1 + github.com/golang/protobuf v1.5.2 github.com/google/gofuzz v1.2.0 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 diff --git a/go.sum b/go.sum index 6d66abcfbd..10758cbade 100644 --- a/go.sum +++ b/go.sum @@ -208,6 +208,7 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1 h1:jAbXjIeW2ZSW2AwFxlGTDoc2CjI2XujLkV3ArsZFCvc= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw= From 8109bba8711191db893b3106595e885c094b97c4 Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Wed, 31 Mar 2021 13:24:06 +0200 Subject: [PATCH 21/56] Add extension points to the CLI (#477) * Extract interfaces for genesis state in CLI * Add more godoc * Review feedback --- cmd/wasmd/genwasm.go | 11 +-- x/wasm/client/cli/genesis_msg.go | 105 +++++++++++++++++--------- x/wasm/client/cli/genesis_msg_test.go | 6 +- 3 files changed, 79 insertions(+), 43 deletions(-) diff --git a/cmd/wasmd/genwasm.go b/cmd/wasmd/genwasm.go index 87f05cdf4d..3b3a6acd2c 100644 --- a/cmd/wasmd/genwasm.go +++ b/cmd/wasmd/genwasm.go @@ -14,12 +14,13 @@ func AddGenesisWasmMsgCmd(defaultNodeHome string) *cobra.Command { SuggestionsMinimumDistance: 2, RunE: client.ValidateCmd, } + genesisIO := wasmcli.NewDefaultGenesisIO() txCmd.AddCommand( - wasmcli.GenesisStoreCodeCmd(defaultNodeHome), - wasmcli.GenesisInstantiateContractCmd(defaultNodeHome), - wasmcli.GenesisExecuteContractCmd(defaultNodeHome), - wasmcli.GenesisListContractsCmd(defaultNodeHome), - wasmcli.GenesisListCodesCmd(defaultNodeHome), + wasmcli.GenesisStoreCodeCmd(defaultNodeHome, genesisIO), + wasmcli.GenesisInstantiateContractCmd(defaultNodeHome, genesisIO), + wasmcli.GenesisExecuteContractCmd(defaultNodeHome, genesisIO), + wasmcli.GenesisListContractsCmd(defaultNodeHome, genesisIO), + wasmcli.GenesisListCodesCmd(defaultNodeHome, genesisIO), ) return txCmd diff --git a/x/wasm/client/cli/genesis_msg.go b/x/wasm/client/cli/genesis_msg.go index b881d90372..dcee5acecf 100644 --- a/x/wasm/client/cli/genesis_msg.go +++ b/x/wasm/client/cli/genesis_msg.go @@ -24,9 +24,24 @@ import ( tmtypes "github.com/tendermint/tendermint/types" ) +// GenesisReader reads genesis data. Extension point for custom genesis state readers. +type GenesisReader interface { + ReadWasmGenesis(cmd *cobra.Command) (*GenesisData, error) +} + +// GenesisMutator extension point to modify the wasm module genesis state. +// This gives flexibility to customize the data structure in the genesis file a bit. +type GenesisMutator interface { + // AlterModuleState loads the genesis from the default or set home dir, + // unmarshalls the wasm module section into the object representation + // calls the callback function to modify it + // and marshals the modified state back into the genesis file + AlterWasmModuleState(cmd *cobra.Command, callback func(state *types.GenesisState, appState map[string]json.RawMessage) error) error +} + // GenesisStoreCodeCmd cli command to add a `MsgStoreCode` to the wasm section of the genesis // that is executed on block 0. -func GenesisStoreCodeCmd(defaultNodeHome string) *cobra.Command { +func GenesisStoreCodeCmd(defaultNodeHome string, genesisMutator GenesisMutator) *cobra.Command { cmd := &cobra.Command{ Use: "store [wasm file] --source [source] --builder [builder] --run-as [owner_address_or_key_name]\",", Short: "Upload a wasm binary", @@ -45,7 +60,7 @@ func GenesisStoreCodeCmd(defaultNodeHome string) *cobra.Command { return err } - return alterModuleState(cmd, func(state *types.GenesisState, _ map[string]json.RawMessage) error { + return genesisMutator.AlterWasmModuleState(cmd, func(state *types.GenesisState, _ map[string]json.RawMessage) error { state.GenMsgs = append(state.GenMsgs, types.GenesisState_GenMsgs{ Sum: &types.GenesisState_GenMsgs_StoreCode{StoreCode: &msg}, }) @@ -67,7 +82,7 @@ func GenesisStoreCodeCmd(defaultNodeHome string) *cobra.Command { // GenesisInstantiateContractCmd cli command to add a `MsgInstantiateContract` to the wasm section of the genesis // that is executed on block 0. -func GenesisInstantiateContractCmd(defaultNodeHome string) *cobra.Command { +func GenesisInstantiateContractCmd(defaultNodeHome string, genesisMutator GenesisMutator) *cobra.Command { cmd := &cobra.Command{ Use: "instantiate-contract [code_id_int64] [json_encoded_init_args] --label [text] --run-as [address] --admin [address,optional] --amount [coins,optional]", Short: "Instantiate a wasm contract", @@ -86,7 +101,7 @@ func GenesisInstantiateContractCmd(defaultNodeHome string) *cobra.Command { return err } - return alterModuleState(cmd, func(state *types.GenesisState, appState map[string]json.RawMessage) error { + return genesisMutator.AlterWasmModuleState(cmd, func(state *types.GenesisState, appState map[string]json.RawMessage) error { // simple sanity check that sender has some balance although it may be consumed by appState previous message already switch ok, err := hasAccountBalance(cmd, appState, senderAddr, msg.Funds); { case err != nil: @@ -134,7 +149,7 @@ func GenesisInstantiateContractCmd(defaultNodeHome string) *cobra.Command { // GenesisInstantiateContractCmd cli command to add a `MsgExecuteContract` to the wasm section of the genesis // that is executed on block 0. -func GenesisExecuteContractCmd(defaultNodeHome string) *cobra.Command { +func GenesisExecuteContractCmd(defaultNodeHome string, genesisMutator GenesisMutator) *cobra.Command { cmd := &cobra.Command{ Use: "execute [contract_addr_bech32] [json_encoded_send_args] --run-as [address] --amount [coins,optional]", Short: "Execute a command on a wasm contract", @@ -153,7 +168,7 @@ func GenesisExecuteContractCmd(defaultNodeHome string) *cobra.Command { return err } - return alterModuleState(cmd, func(state *types.GenesisState, appState map[string]json.RawMessage) error { + return genesisMutator.AlterWasmModuleState(cmd, func(state *types.GenesisState, appState map[string]json.RawMessage) error { // simple sanity check that sender has some balance although it may be consumed by appState previous message already switch ok, err := hasAccountBalance(cmd, appState, senderAddr, msg.Funds); { case err != nil: @@ -184,17 +199,17 @@ func GenesisExecuteContractCmd(defaultNodeHome string) *cobra.Command { // GenesisListCodesCmd cli command to list all codes stored in the genesis wasm.code section // as well as from messages that are queued in the wasm.genMsgs section. -func GenesisListCodesCmd(defaultNodeHome string) *cobra.Command { +func GenesisListCodesCmd(defaultNodeHome string, genReader GenesisReader) *cobra.Command { cmd := &cobra.Command{ Use: "list-codes ", Short: "Lists all codes from genesis code dump and queued messages", Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { - g, err := readGenesis(cmd) + g, err := genReader.ReadWasmGenesis(cmd) if err != nil { return err } - all, err := getAllCodes(g.wasmModuleState) + all, err := getAllCodes(g.WasmModuleState) if err != nil { return err } @@ -209,17 +224,17 @@ func GenesisListCodesCmd(defaultNodeHome string) *cobra.Command { // GenesisListContractsCmd cli command to list all contracts stored in the genesis wasm.contract section // as well as from messages that are queued in the wasm.genMsgs section. -func GenesisListContractsCmd(defaultNodeHome string) *cobra.Command { +func GenesisListContractsCmd(defaultNodeHome string, genReader GenesisReader) *cobra.Command { cmd := &cobra.Command{ Use: "list-contracts ", Short: "Lists all contracts from genesis contract dump and queued messages", Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { - g, err := readGenesis(cmd) + g, err := genReader.ReadWasmGenesis(cmd) if err != nil { return err } - state := g.wasmModuleState + state := g.WasmModuleState all := getAllContracts(state) return printJsonOutput(cmd, all) }, @@ -352,15 +367,21 @@ func hasContract(state *types.GenesisState, contractAddr string) bool { return false } -// genesisData contains raw and unmarshalled data from the genesis file -type genesisData struct { - genesisFile string - genDoc *tmtypes.GenesisDoc - appState map[string]json.RawMessage - wasmModuleState *types.GenesisState +// GenesisData contains raw and unmarshalled data from the genesis file +type GenesisData struct { + GenesisFile string + GenDoc *tmtypes.GenesisDoc + AppState map[string]json.RawMessage + WasmModuleState *types.GenesisState +} + +func NewGenesisData(genesisFile string, genDoc *tmtypes.GenesisDoc, appState map[string]json.RawMessage, wasmModuleState *types.GenesisState) *GenesisData { + return &GenesisData{GenesisFile: genesisFile, GenDoc: genDoc, AppState: appState, WasmModuleState: wasmModuleState} } -func readGenesis(cmd *cobra.Command) (*genesisData, error) { +type DefaultGenesisReader struct{} + +func (d DefaultGenesisReader) ReadWasmGenesis(cmd *cobra.Command) (*GenesisData, error) { clientCtx := client.GetClientContextFromCmd(cmd) serverCtx := server.GetServerContextFromCmd(cmd) config := serverCtx.Config @@ -377,44 +398,58 @@ func readGenesis(cmd *cobra.Command) (*genesisData, error) { clientCtx.JSONMarshaler.MustUnmarshalJSON(appState[types.ModuleName], &wasmGenesisState) } - return &genesisData{ - genesisFile: genFile, - genDoc: genDoc, - appState: appState, - wasmModuleState: &wasmGenesisState, - }, nil + return NewGenesisData( + genFile, + genDoc, + appState, + &wasmGenesisState, + ), nil +} + +var _ GenesisReader = DefaultGenesisIO{} +var _ GenesisMutator = DefaultGenesisIO{} + +// DefaultGenesisIO implements both interfaces to read and modify the genesis state for this module. +// This implementation uses the default data structure that is used by the module.go genesis import/ export. +type DefaultGenesisIO struct { + DefaultGenesisReader +} + +// NewDefaultGenesisIO constructor to create a new instance +func NewDefaultGenesisIO() *DefaultGenesisIO { + return &DefaultGenesisIO{DefaultGenesisReader: DefaultGenesisReader{}} } -// alterModuleState loads the genesis from the default or set home dir, +// AlterModuleState loads the genesis from the default or set home dir, // unmarshalls the wasm module section into the object representation // calls the callback function to modify it // and marshals the modified state back into the genesis file -func alterModuleState(cmd *cobra.Command, callback func(state *types.GenesisState, appState map[string]json.RawMessage) error) error { - g, err := readGenesis(cmd) +func (x DefaultGenesisIO) AlterWasmModuleState(cmd *cobra.Command, callback func(state *types.GenesisState, appState map[string]json.RawMessage) error) error { + g, err := x.ReadWasmGenesis(cmd) if err != nil { return err } - if err := callback(g.wasmModuleState, g.appState); err != nil { + if err := callback(g.WasmModuleState, g.AppState); err != nil { return err } // and store update - if err := g.wasmModuleState.ValidateBasic(); err != nil { + if err := g.WasmModuleState.ValidateBasic(); err != nil { return err } clientCtx := client.GetClientContextFromCmd(cmd) - wasmGenStateBz, err := clientCtx.JSONMarshaler.MarshalJSON(g.wasmModuleState) + wasmGenStateBz, err := clientCtx.JSONMarshaler.MarshalJSON(g.WasmModuleState) if err != nil { return sdkerrors.Wrap(err, "marshal wasm genesis state") } - g.appState[types.ModuleName] = wasmGenStateBz - appStateJSON, err := json.Marshal(g.appState) + g.AppState[types.ModuleName] = wasmGenStateBz + appStateJSON, err := json.Marshal(g.AppState) if err != nil { return sdkerrors.Wrap(err, "marshal application genesis state") } - g.genDoc.AppState = appStateJSON - return genutil.ExportGenesisFile(g.genDoc, g.genesisFile) + g.GenDoc.AppState = appStateJSON + return genutil.ExportGenesisFile(g.GenDoc, g.GenesisFile) } // contractSeqValue reads the contract sequence from the genesis or diff --git a/x/wasm/client/cli/genesis_msg_test.go b/x/wasm/client/cli/genesis_msg_test.go index 5f88bf6575..af78717dad 100644 --- a/x/wasm/client/cli/genesis_msg_test.go +++ b/x/wasm/client/cli/genesis_msg_test.go @@ -101,7 +101,7 @@ func TestGenesisStoreCodeCmd(t *testing.T) { homeDir := setupGenesis(t, spec.srcGenesis) // when - cmd := GenesisStoreCodeCmd(homeDir) + cmd := GenesisStoreCodeCmd(homeDir, NewDefaultGenesisIO()) spec.mutator(cmd) err := executeCmdWithContext(t, homeDir, cmd) if spec.expError { @@ -299,7 +299,7 @@ func TestInstantiateContractCmd(t *testing.T) { homeDir := setupGenesis(t, spec.srcGenesis) // when - cmd := GenesisInstantiateContractCmd(homeDir) + cmd := GenesisInstantiateContractCmd(homeDir, NewDefaultGenesisIO()) spec.mutator(cmd) err := executeCmdWithContext(t, homeDir, cmd) if spec.expError { @@ -498,7 +498,7 @@ func TestExecuteContractCmd(t *testing.T) { for msg, spec := range specs { t.Run(msg, func(t *testing.T) { homeDir := setupGenesis(t, spec.srcGenesis) - cmd := GenesisExecuteContractCmd(homeDir) + cmd := GenesisExecuteContractCmd(homeDir, NewDefaultGenesisIO()) spec.mutator(cmd) // when From aefd42ea29744671cfd859ceb5df9ed3a98219a8 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Fri, 9 Apr 2021 09:46:47 +0200 Subject: [PATCH 22/56] Bump cosmos sdk and tendermint versions --- go.mod | 4 ++-- go.sum | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 877fd7763e..e7641ed930 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.15 require ( github.com/CosmWasm/wasmvm v0.14.0-beta1 - github.com/cosmos/cosmos-sdk v0.42.3 + github.com/cosmos/cosmos-sdk v0.42.4 github.com/cosmos/iavl v0.15.3 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b github.com/gogo/protobuf v1.3.3 @@ -22,7 +22,7 @@ require ( github.com/spf13/viper v1.7.1 github.com/stretchr/testify v1.7.0 github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca - github.com/tendermint/tendermint v0.34.8 + github.com/tendermint/tendermint v0.34.9 github.com/tendermint/tm-db v0.6.4 golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 // indirect golang.org/x/text v0.3.4 // indirect diff --git a/go.sum b/go.sum index 6d66abcfbd..96ab2307c9 100644 --- a/go.sum +++ b/go.sum @@ -103,6 +103,8 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/cosmos-sdk v0.42.3 h1:VFYq7spDBBIlygAxwcI79Xh2JuIrG1ZCPKpvqKghIZs= github.com/cosmos/cosmos-sdk v0.42.3/go.mod h1:xiLp1G8mumj82S5KLJGCAyeAlD+7VNomg/aRSJV12yk= +github.com/cosmos/cosmos-sdk v0.42.4 h1:yaD4PyOx0LnyfiWasC5egg1U76lT83GRxjJjupPo7Gk= +github.com/cosmos/cosmos-sdk v0.42.4/go.mod h1:I1Zw1zmU4rA/NITaakTb71pXQnQrWyFBhqo3WSeg0vA= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -227,6 +229,8 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= +github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= @@ -568,6 +572,8 @@ github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ= github.com/tendermint/tendermint v0.34.8 h1:PMWgUx47FrNTsfhxCWzoiIlVAC1SE9+WBlnsF9oQW0I= github.com/tendermint/tendermint v0.34.8/go.mod h1:JVuu3V1ZexOaZG8VJMRl8lnfrGw6hEB2TVnoUwKRbss= +github.com/tendermint/tendermint v0.34.9 h1:9P2MXDEPOcPW0NBcHQ/HDSfvczZm+q5nUUw7AZ6f1Vc= +github.com/tendermint/tendermint v0.34.9/go.mod h1:kl4Z1JwGx1I+u1SXIzMDy7Z3T8LiMeCAOnzNn6AIMT4= github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4= github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI= github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8= From 253624212a8e63a1d8f8413531e6155c3bcfaf66 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 9 Apr 2021 06:56:32 +0000 Subject: [PATCH 23/56] Bump github.com/CosmWasm/wasmvm from 0.14.0-beta1 to 0.14.0-beta2 Bumps [github.com/CosmWasm/wasmvm](https://github.com/CosmWasm/wasmvm) from 0.14.0-beta1 to 0.14.0-beta2. - [Release notes](https://github.com/CosmWasm/wasmvm/releases) - [Changelog](https://github.com/CosmWasm/wasmvm/blob/main/CHANGELOG.md) - [Commits](https://github.com/CosmWasm/wasmvm/compare/v0.14.0-beta1...v0.14.0-beta2) Signed-off-by: dependabot-preview[bot] --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index e7641ed930..22c1736c95 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/CosmWasm/wasmd go 1.15 require ( - github.com/CosmWasm/wasmvm v0.14.0-beta1 + github.com/CosmWasm/wasmvm v0.14.0-beta2 github.com/cosmos/cosmos-sdk v0.42.4 github.com/cosmos/iavl v0.15.3 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b diff --git a/go.sum b/go.sum index 96ab2307c9..4cdc0937a8 100644 --- a/go.sum +++ b/go.sum @@ -19,6 +19,8 @@ github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQ github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/CosmWasm/wasmvm v0.14.0-beta1 h1:ASqXB/2D8CEBmAI/uljRw6eEMbeKXPQtL/wZzKXZGGA= github.com/CosmWasm/wasmvm v0.14.0-beta1/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= +github.com/CosmWasm/wasmvm v0.14.0-beta2 h1:8bLLNaxj796qUwu6UuQDbqpMV9zPpxG3lNZZbswNdOo= +github.com/CosmWasm/wasmvm v0.14.0-beta2/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= From 39856bf0283e263666ff169973d97102d9d32ddf Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Fri, 9 Apr 2021 09:51:01 +0200 Subject: [PATCH 24/56] Deps and contracts to v0.14.0-beta3 --- go.mod | 2 +- go.sum | 2 ++ x/wasm/keeper/testdata/burner.wasm | Bin 147491 -> 148593 bytes x/wasm/keeper/testdata/hackatom.wasm | Bin 207208 -> 204617 bytes x/wasm/keeper/testdata/hackatom.wasm.gzip | Bin 66219 -> 65531 bytes x/wasm/keeper/testdata/ibc_reflect.wasm | Bin 269343 -> 271619 bytes x/wasm/keeper/testdata/ibc_reflect_send.wasm | Bin 279218 -> 282952 bytes x/wasm/keeper/testdata/reflect.wasm | Bin 287608 -> 291178 bytes x/wasm/keeper/testdata/staking.wasm | Bin 256190 -> 260159 bytes 9 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 22c1736c95..52a5abc637 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/CosmWasm/wasmd go 1.15 require ( - github.com/CosmWasm/wasmvm v0.14.0-beta2 + github.com/CosmWasm/wasmvm v0.14.0-beta3 github.com/cosmos/cosmos-sdk v0.42.4 github.com/cosmos/iavl v0.15.3 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b diff --git a/go.sum b/go.sum index 4cdc0937a8..1985319cef 100644 --- a/go.sum +++ b/go.sum @@ -21,6 +21,8 @@ github.com/CosmWasm/wasmvm v0.14.0-beta1 h1:ASqXB/2D8CEBmAI/uljRw6eEMbeKXPQtL/wZ github.com/CosmWasm/wasmvm v0.14.0-beta1/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= github.com/CosmWasm/wasmvm v0.14.0-beta2 h1:8bLLNaxj796qUwu6UuQDbqpMV9zPpxG3lNZZbswNdOo= github.com/CosmWasm/wasmvm v0.14.0-beta2/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= +github.com/CosmWasm/wasmvm v0.14.0-beta3 h1:HN1+HrC2kgO/V4voGdOWrN1sdUoTnSoLuSrBXbDVnbY= +github.com/CosmWasm/wasmvm v0.14.0-beta3/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= diff --git a/x/wasm/keeper/testdata/burner.wasm b/x/wasm/keeper/testdata/burner.wasm index 8a16e6eab7677b79a087846baf1503eb7fe7daac..356bdcea2142f3835e8507d608520b0305eb5fb0 100644 GIT binary patch literal 148593 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 z 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

-Z^8 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 literal 147491 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

  • xt_F39!re9Hg-p46WC}kESotxN-etF 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 ZVNRR z()h|S3m?gIQn=a_ICK~&JwI3pY-t}S`WN{bwsU;H;J?fd@-2l;e$Z6RT^!7#HQ(=^ z>C<1f=r3sUH)s4DAO$A`nXr`MOYlL?XMZ*H!V|+2gOfNn#m^Tw*|EuA9PSR<{9PQ- z-sI=Pe`NSTnpb;4A=e!E?X%Czw3E*I3!7Rvl!yXh51D`w_7;NRuF#+1=ha;pe74um zdj4Oxdf}V=jggld47`lbQNWi6NOfR8A;|h~59S^S zg1^+~Y>JR`ni%&PLBW4UNb^yEO1uF3`I9n#5PIF2Wd(nxe_Ym|MJuzdg)9`B@$$oYZ{y^F F{})`X*!%zh literal 207208 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
    &2 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 diff --git a/x/wasm/keeper/testdata/hackatom.wasm.gzip b/x/wasm/keeper/testdata/hackatom.wasm.gzip index 33c0ab925081d99c69f6098a89cfa4179fe16f83..116a90fc8b2c5e6d89b3c334a82448c16644d439 100644 GIT binary patch literal 65531 zcmV(}K+wM*iwFq9PIO=Z188AmYhiS6Z7z3Vb8P_ZTYZdOM|GbwGxy`Y``-Gly-qf9 zg6?}*>TdC>n_%zSA(eLAtnENllF*j)AMA~H6Yul)+72;|_8AIEfCL4awiH4?2q?59 z)JaU6wk~xLDrpI@AS<}UMOIr-R6vSQR25ZGdp_pgcX#(~vN0$!mDkyQ_uV^l=KRi_ z^P4kgZq&q~y`YqW2jP+(y4{90{Z%_mo3H6Z?EwD8ueQzKgSLDszCF7mZu=i4EwH6D z@e;5}m^X-urubx*WX<9aew$^9H2y62o23u^6R4S~eRo8Yw{D-AnwV4peT(tiyJw~k zPbr|U6@IvP{~c4x()aqr>7ll2sjYFk1wn&Vz)~Ka_G!BGvq0^rRL2&`fh)fuo z>WXUBgaPn)v7*Mtg8ZO@2qO(i$*>lJ3Vah97EGl=+Nl66tU^s832aE+R3JYrLdiG9 zBcSk@z>p4xa2XPy&=wJ@8sI+@tW>LOd{-sdwH{V<5NK3NkpR=zfu?n@4d4K@+kpYq z8(wDG;Eo+TrINOCb02)V^BLU(Nw^msY38U__Rx{Z{p#jqdf%bL6Z;NNlPA3+n!0mp z=MlX6jeuuN{bsax`t})m_FM79o;~|_(&fjXIyqH*`#o4Sz3=eU%xx1pr^o>gP4C~g zeS>-ss@u1te@<+l+Baz+*}i?()WiYwlS5NRSH6tqagfZe-mre)myW#YKDhdu@Cp4{ zc=J^oe;@t;{t!M6e*~X^Pr^g+Dfnaf6Zlhj>-E3-mTNaX44;8->R%q(bL;*)_8mO* z<^vnn?`=P(2i|n`#(UsyIQs58Z`<^M-nC=s_KC^qsn)wT{5fp=Jp2U=ZTO`Air(-n zZ2Sg%9frOS8=r@Nf$zd|a0dPpeh5E;AH$~az!2WPM}JV?_5ppj{xkh4{j~n5epqjO z4nCug>&NxC^b`6?eL~OaZ|mw;k0;OSAI1>0->BU1?q;x7=`s43!H}}!mahi1YDNP( zZrUtzwuN7}+OZ7ps76?WB(n}$%`mgq*EL-qZpK-d;qTklG((4KS(G(rDs_Sdjejht+b9G12k~MX2F17+X(3+bHIvZA;}=s zNQ@#Oal^7^<8@uL_?d+*x9%E+&-f`SJfhQfI{SXaFVfdkkuW6=o_?qB{G=i?_ghe$Yg0D~_!^dw~v0Z zr7JxWlepp5TD2lUc%u8m0J_Z#qfri^B`^qoy^eom7Pz0K2Yd$--Odb6SU^_S8K56r zjyQDsPSOA$*{13GD98-mOm9h~fk+m$4UIw501Y0K4Xy}2O+xahXT)rGGhB)hV`7US zi#u!)lgT4-2_RPrh!F#Fr3$)Ig!t*;T$hfEEIY(xS`FOs21Lfi;gEl-CSpPmk5e%hT5mj@6oFn~-F z46wNnU;)gNL4-1d41(Pmb72Rd$$}PwVt^3=3=kgvB0%(V@^l0kpu}itfKfMq!TA96 zOt1(e`nO3>>&v-?kN>Phd)gz#Kq!z3?NQ5yp@0j7_5z|kBS<3>z6hyV8mSSadO1i< z38|)@#I`w7T_DwrRMA9~IFF_!=RCcL^Fl_QS^p;{f}_!y_G>w-g;_YL?WjpTs}Wf* zV6|}2qy?+#1(X&dr81>OUbROqvc*NVxX2d2sBD25O#1g1iQ*zrTqKH%MDZ$VMSAje zA&MtDL}8aAijd;SWMLvbn6ijFkp5gE@2+%MLCSG4tT-5`0bYwTG`RB>0-)EBsu{8)dY@8eo3xF%Ic z3(i2*=5dBy%o+BTIK$?gfl(lZl|3OlA>2IddcY@35ETnRCQ z`UVjVQu(NnX-+Gzoh((@;Rbq&S8h&8h0S`Y#=V3S?E;M1w3YU}M&Y7Q!Dmw6p>U_X zrU>_7ATR!D3U@Ro@fnxqLYmmjb}!8ta))gaMX0xEVW_fm1I-v~v5g)MNNtW0p-&h$ z%=4^Cp>+*Q9|PhOfmDb{IVsbTwp^aVA(7MqUyfr^3;1bHY9=SO*MJf(M3g|(%_y4- zQ5NWYXxqFL*wmic$|yssr0b%Ru4#$qN;)pRwEQAUombMAKxw<7)aQ%R$M+(js8EUC z^a6SdN{IqO(z#GEfcBi`f$M~;)B;>xaKK5uy6I9_4i;rY#!DythBLDnM$G_fg!-)~ zb{)~zGGVO8#vA!+0I#mY&$9&z>_aHr>AO!63U0L#Tirr_#Ro0qOS&E_r7mi@sSBT-vW!sH zjef~q`tT#joMU9J-Ow=YG)N0gZC1V>pDKv7HTUt7@W_8r4c}qvNv~(Cb4{o6UqW+QFf#FeC z37vDYGsqk`wKe@~o-8^!O=>8Gf)CRBAvw1KQd&MfZvOHZP&2kQdJJ2-8Hw1`Y06P@;r%3>f@w%y z*5G{ZV8fa*UHn6rK};C%>o@~(FRLw__uQK}mMX!|=-5 z%Q1z5E9{t6@u#ufZti2a5GU!S`0ZKc57~K%_AWM{uR{&-V@zPjTpPiT-+vH0hRf@S zbCqUwLR_Uh1HUF&ZJa~Bh7v2aYLZp(30}vwN+JV1Lz>0Q9-vYSrK3#76CnMV0I-v9 ziWI!MvwbK6No3XVL4^~cI$p7=Sm}lk|2)KD@QtvauWe<$LO$qAJ#uvg zhLc>OFRhfTzE)P3E1czOL06$%VQ|&(3T?51q>BrIYi<=E!5c5Dt##v8;Y?B`f;!}` zf+2mdjx%HZvmsTHjy-b2I~T%_(i4pRM&Xnj8vHiFHnHz@WNx&J#Ct+7s&M~~XUkg* zl!>5lLkpSzZryuYJ)t)Ic3$Gz4uf}4sm=fO&;RtbA3XZqCw`)CUc>7UK0+4C9rroC zhSy=dJBxR{SMuE?OG@u(7_x=gQjf6}?C#Mf;&@1S*f3Uc%qiD`A?p}el{{9wNA`E~ zNUm?;yXW#@D~UKgMog_%N4*<0 z;((G_>WIHOUWa*M-c|KvQJhCVFDxtPVX1bF}Y2xUCWu?>qGTy}h>bc2$IK{JM5h&orupfA!^G5K8$ z&@R{TXlN^nC{E|{J+vOxHB#e#+Cx)G6dSJPt#sCsWC~N@Y|%cQ$WpfI=4aZfciX5V z5x(NySTfS#JhP&d)eK02)F<%Hou3ij|B?THM)*fvlnV4(#c#5424;$dMvMDfzLMn; zh4j!%Zb+Fx3mt7`@ahCz_4}ySxcUz8%YhnQQ??ekC#f}fpM~ouWoRL9DT0xF)6#iC z4rFCEJceuEP$#;hQap_F3w@#Ug+6(=57Kuw!|}SMHvlQYKCN-MQie<-ML3T})S#TD zE5kb{(I71}nAb6oij3s;G}eb?U*$J{w698Dh{2K_kAXKNP958_l%%5lHu|lOeB0DC z?z8Py&l>}N(|+k63lzl0y{pxe1f4h9X{#Zo|0^JQaWPMohB3tb>$cz@%!X&i9nJZ_ zs;z7IB}KQIFva=&6%ugb^9jd20~v`x(j>6Clo&4Y`wYz+0}qn=4HpVrMcF^ju=kGv zYKIBGrd<`iFo{jpVdHDmr0k-1=r->Ji4--no})IqBs0=Pefamki#i)s=wI|?cO!}2 z!+WtIHBEb+)d>wkfkE3v>f8)E9S6;gqimhkTe;FtV*+Ks=%MbV@(_c1j~Bm-mcA_= z(}l&xT8Y47-%X?W&F})V^?0*+&*6?^MMvv9aSb=i?Mjfc!m17Tyei_4rF#4JckJ7r z+xLoBw(qaKF7}1OzK_2q``YE$*A({EuVz&~5=hHdO$)2`mPn0-dZUWo%xa=FgMLxv zye3%$DKBhh3-ytuGBZ9?H=It3o~v^`MPpV->`hd~Zw+Uv#6Lm7KW0QC{TL9_{GA3v zOf%NXPwnwh`>o810ln^=Y2sL>M5>rlsf{-8NQoe4m}zEdiHhZPx({#Ss8`TgA#ygY zXO>SmX^pe)+We%GmZx=iLzbrjZq(1qnZ*s6tWFjK9Tz8zDw(SSf^4}wNaoo=6OZQG zH7hHGw5H;rKk0FO*Gsl$n~L}UQZJ!P#rc%QT#1TWzU<n0p*RLW(J`TzWmHI$-9=!+f|E_gt#hc{xlk>$%oG(&&O62FDL zvs3LjDg#$hOid~s$D!r^;eACx;Uu*3;^0%zIrupNl0_dUbytkndpY;5^(G?08-Ys; zC?W4IDfe;6HxofoT`h}UQDo9}5?t#dSc(egDTqUj4q$Md?tM%$=JiFrU|4Dcc!ew1 zN_o1rB}p_VyLsh6gh*?yXHufM6 z=v^yxztifmN^8)Gn|1Vmym$;$Dj;uh;AXRkw*UYBy}x<*kuRKi{3Uf0K9c=^#0CfV zhQsa+N1WQmWdw83!EQeHq{5nv5XT0ykdkz&AXEz<^tbz$=Ywn{Z;mH{_s8=bMC=lH zyA<7}+s2OFH>a}oQ&j`v^W<{Rp;9A46+h@(8tQtRUoK8J*Ydh&QQjS9Pm$hv@HM z?=MAE%rkpgC!*rQTBK~;iKxKqslA@o>lx0ED3Y*f;zIVLsB|ZAceQ#Vu*w>%ZQ|~7 zv~YT}Q+P#46Bu51Ve*2R_)FjZ;^)IHbXQYbdcDURT-qWULv1+}=RWYYAN=?`C;o#% z5d(>`0n4EnxhoI5D>)Ra_$8uH>@g;Y{J{#Tq^qhLR&6yYt5dJAf84atKl(eQ4eXiiFUeVGc;CGd8z|sE5-M!vOMor{ZjhrD$ja(t5M!6DdiU?pt@aOS)PB= zFXf-E^0b$CDaz}kEPa9TZmyd$33*3eCJB-6CgON=>_$?^ngd*^bDuxsed#p!bEhOT zI1A07c)jK%$a@%1ffTq-@GFQTI0Shbaa(OgQn>16Wlv;*Ud^t4+v(1aQ~$WfKdwq~ zwj(5my-1E!K9|GHVMo^|a}Ma(V_xhVcUJ6iGPj3213sB#lbrS@nPXFkXfgHW9ZPea zk0j-)ohhltcBj69Ka`85<`>A>kIqknaIYh_SO!G4DXnGm*TkEtC{bIOR4vz+FlDKf z`BQ9n5*FrA3vGzYyBxs0;L{07HFqsaW2fh5v3_AYr}C9;NKNv|DeVurgqp8odG>mX z7pWRGFY>qPZ2-<)>E^s+x`?^DM^>?(1sQA9$ylR;iRV;@yl?C*TsO&U4uxG8EG=8= z^(B{<#p$Gb@Vz)G(Q-50TAFwuVQ0|^i^C#$ZIxdn$`#*MT6N^K==#p8W0qQV(k1e^ zd8Z3e%V$SiUQ1oH)wUf3sI$lUoOWt!g5h2n&m!EV0;g+a&k8o?H%7`W8$Dd? zhVBteGx)Pca8QmAKlE#ekn~m9rK=l+GLiEL6dU&XhIQYtmK$3RVG2&H(aKt6zYfOIFD(1==6c6h;k-oBAf7sS;!qr zbB5{6*jbQ8=nRzR3uwMX;2aCg!9sDWa@JeAyuQhc*0In~4zbec9HZifT{oaW34$`g z4JCu}hv43+mUbsr&->8#?nNK!7ezbAC(powJ@^7~59&aZP_H)@78zqd4oS^R1#x((#71(xc>RFE1d zN>hVPjKvy$zsTS5+^5_CDv#oS8Fo@7&}jx%p^&W{h&{3lOv>F%Ko@KGQa~ zyjJXcRv-UIOB-n?C2c{ifrL}1Vd0|e!(SHrS8bv_qj`-8CISbE6{2bnfJ z7vKan*l=XjrBqmOY7|MuiX_2ZPRAopnN*@oUJjtvWuRlyec_p-#WP2X%S;u@kUg@_ zzhF!s86S0l0Mxm@xzQ8*;xX_baf01kf*%HocSy5a1=jRcC^RQA6xq0q)I^0eUSb44 z7N2L{!KuH4)9H3FwlDT^W$k8&Mit{F$8x;g_+kDOO`;}}5={Pyla#iKf6OgrHSdF* zl*z0MIq5{No5}HBHRqFHY+DFfX^%S=hiX{}OFKEhQo}9AmzJ(y z8SYSJwgug@Wd)~WrjgDZ5Ed<3s7OpdZjVTW=BB?wf zwq6r@n4Xs76M?}+?O~Ba2?)zO6+vM~It#a6Em4_}NU6zT07Fd#?L|O%Y)JYyzYsVG z0S36^D%SHufK)NB;GY#Iepbxvt$iAjr*sPfyhtq00(Hbou~5KguvI>Tm800}iDCd( zFv@0?p~ooKgfzfN6bce8e5k#IMm-NCc3>;RYw7!n`QF4K&fKHWyTPYBOegr9-cGYH zMTh2S-I=2Kh5-x)U*SV&B1mo1e=Pkg=|ANDg|053vBjKmszHsEwooYRXs#A8y9(_2 zj9FsnKCZ(pGR6*ioYC_{$1*){nc~Rl3pq;LF z4dY9(k)&6_m)%NcwoA#>b}B)c`<39#4ke)tA#XP!&BQ|x8|b+%Xh?{+AgBS}mKuuo z4S+-s^i|=MVVjCtYf=w41?2p~h2agIMSQFiWn;ujI*a*YezxdA+D?lfY*!~#dl9RL zPUXFZw+cY(ukSP~7)`UQ%}xyqr0^DK)L)=cyFiX?u+h>@ddQo!3~7h*7k-hqpy2+p z4pp-bky(d^`1>TX*sO1f`3fWBJ|>YZ z-VToxl`Vo)p|TWiDhl*+3EzNHGAxj0E;$#X(OhanbxBdy;;Cyq*VZ_|JQm}FCC*ccyc;f4$AGCv5v{F`OkLo%Xo;Sr>7uf|w zU~F|;A29L}Uwj09IW{T+vWwovW;N@{_Tug!>zlqv=*4oDe@JW-LP8(@kac%E;*t-T z&Ln<;R&D64JCKGXnt}J_kN*mrIb4tR_q=)4aH;9dd*kU6Z zQpXw@*;OE)T<-!`aXae?OP$9txm{!MaT6h8>x&cy~-z_n)Qk0JWK2Sj`6hG zqLt`g=Xc%f{H}YQ-?ccu=Y}fdj(8_aES(n1W7Hc<7p+9n&QyGR#Yy_z&wQssCzOFSv+u{15CndKt-eYUCu^Ag!PV>$4iDo|!^Dp& zFBmuyF^Q2qaj9H1PMTQ9k>J+WcZe#W^JS%-wRC0J!k36RZHBPKhKMBnI_DhL#%~^> zq%tJ>??2v4K-b7X$%EsQhbL62(Z>nzjw;!S$JKurU@mh8dfCZGX|F65QkOBTK{gu( zf~%(kAh?NvixA{T*bllNg!+f1?KMK7sO>t7bdTe#FLBPn1O(zCl4ikVAj(3QR4Q^w zr6Lc+F|r5^2x9I9am55t41#p*gE^Wtm@761^mI9x7}%i;XZEuX0o!mqGMkyIbAP6a zk8xeznE^8`CW=XI$kQu&W}CWXVUZ-0LT>1|FPT&{i`hnlW*a^Sv!$^;Kt%k)AXpiI z?pM3{+wXJ9XnZK7gQ1{%p`gDFp)h@REn+|s4rQ2JR9J-Lskc7dOE}atgyXOhE0mB1 z8R_G2wnDf-jev9_xJitMN5!<5N^kf%92#4iP?RAd+e65Y09l_E(gE8o%1pL8&Mkl1 z?Z!=1g}$9o-d?LtyVnX}A2YTD3-lqA{zo7_}9ZUlkwkVzwE4I&o4 zsfA{cr6S2WNH>%v#E_smRf7)C4^Ak7S_E)49DR!Tq@tYOFA;zxH0)%$^nM<|q=^9l zODw?PaS@jRcF-uqhYY|D7=T4$o^J@isy==~dzG|nIJod@OO(hjPcSJ@uqS_ERVLV= z2{vXs!N!0IHfEk+Ja~eV1!lkmtBv`om&UL>H7yBkFabkm{FxD%X~@h>=03X08iO;YH8h`L?9P^>j>D{X9_XQ> z`0x=|K2;iNt>ZL+s)7%uo;@?;0`}`Cw00VUhBp8T9;)qkCS?=&}iy05v;WVzgv8%fCcX0RChm6(7 z@OopNC4QgIf(GoKi3aRE6Bfa(;@T`}z_;6^ zPDcZhD|%*@AUCDIBWh@9b~~arU`Nzu-VtX#vx%>M{KJ3$OJDw*_kD?pfSF=4fx7esthbJP5YB(dJ zwH~>IPeL^Z^9_mBMv^RMHtWVCW#iCccyFM?DLxuc*s^9))%VpS_;xm^PG>s)Pir|& zdTpl3x1r5+;)@^ulVAJgC;s+5|IEbEpLX(})l}T##8=i-EQifupQ-q<=}g6sDseb8 zrsBj*L#&%521MJ~lN$bi$=Y^O*oo5+&L<{|E*F?hxWZ{?Xxu9?%d9D3q|6dni4&14 zm^t-9J?VjZwU;#|y{u`fpEVsetm%khO;gHNVP)1dNkHR~sHn5bg6*#M{ zrNSr%k?~$}^D&RBcszySo#1R6`A$&`6k^q(ZG@DZFPDIvmZ-Rht&f%0?NP-dtHGs< zo0b1Z#=qSsI$JVc@1g_|Fcr{B_*o9l&2n_(E(uOQT3{! zltR@BGDOu;$z<%NF2ZouTCxwiUiImED0CgZIi1uHmC)H4644h6x;{j39~z)9_R@83 zVrT$eAM$}7_nrR5=JYS|As&jIAvGZZ%wkaYQ1@`q86elC=0m;J z!B%nQcwDhtvhjpD8FcdxAatCTQyk;mcitPn2ZyDYDd7- z`aGvGej5{xdQo4Y%y^Zin5moiVoJjIkJyYQ0uDZlxtZ zgHUSr62!O)S9Cd>RRj4}pBVi}(BrUsU^=%rcq&({t!33fw`92biXU{dej0Z~B?bCI zDfpqlggI&fDdn(!YQX-Sl{=yuw03H+JE9usj;N&ehbonLLH#cA*qq+S({n|{XpS)9 zPI}B<0jyqAs^pzKhrN>p%5-b0Ap27+G7NI=-YM*bZBV<*>}BVmC5(Ktnlyg&S!-PT zBNw~a^drBfX!}G7gTib2n;z)czTEhV0uTM~m-l;%4*b4lmWMaVSgDB?7Dq&szDz5QPheEXR|pj-I4pHe-3?k81`pZf{b>*vl%KXPT9)+eZVG19iWCIOL<`>}@OWdWES9u40T0`^) zC4&XnMNwRdtG1!Ik~WEFm6`ltaA+SK`kVoWW^m{N9Gt|a)myE}rbG@6yjBka7h^S3 zDF-n<5Ml;iwm4LOce?2Av;frrsHs~RgVknwhPs8b1E}r+sGb?1x(raR?i81*J2B9N z!UqywfCs_7_V>{CP^Wc^z<;VrAQ)MXHOe(GM%?f3_(l;`9y z=RfHKEDC~P2&*`20Ou+(r9{l3>*`=hX0xY^b@MO7wo$V&glF7=Ye*soN6w;!RUC0M zhQuaITJKjy{uQ17<-MG9^-O0TKi4ylpYhD&K{JnvnSbQ$);ua^erajumuFtaoM$q1 z^zi)P@+PypOQp|7jb-CjN*gyCuyJGAxRJMUebrd1 zqDx6sDWX|1$#fasZ|=b~F*=?WhxXyK=2-)>Xz0DRp|NMy5G(R$ij2`9WaNBLr~OnL z(k3=C25_l#_~k<8XFwF?BT95`A&O!|iTE_nc_sR@bhC5DB5MMTjgO)~%bKYu8(B$o za7Ec!@UhBi`Pi&x*;7E*O_ad?@q69j4dP$&zqr>qDYE@2V(x}1#l7~jxX)fz6w^KD zr(QCWnMu0R;g_~e8R)T&K}GC4>$PaE5Ts3_I()WQvdm|k4_L;H> z&D59nC$5)E!-vZazj!6Jy2h7Zu=P}*aK$uQ$<|X?88wroTFtOBYLIX>XzQu|m9e%j ztc-HPl`>YaNa}MIMaBx@%I1YZHlV^bW;7>X$l|i02chSsbcMavJ3E5x8rs2jd|8mQVG)BUyIGLOx0eyyS1z9$lr2x~pSGJk zQRC0fnw>fBPY6{)7D878Iq zKEM-!f5v{jnW7|Rd>CUD7O7#K&M<91~jKl}Y}p{GyUK!!qn``fePWL{-e1<&0G= z#`u;DhuiYb9e8Y#w5l%=*I4f!*p}(3Q7z zbA0yr(r(CI7%sCPU!G$T3(X+|W;^JYUc)O0k1 zw}})!7)&~Ti{nO~A?f(w-RxiZ9FY!ZV|d1-gKYz0tMM(Q8qZ+xsyz4)oYmmZg7lo0 z@Wejh3C}6Q6BlOnSrMLrj?ZKGc)9pJXC=SqF*&znJC1dGZuoA`M}wX|$B7sj5%R>( z5h{E%kZF2O&%MdLPxdDFKGB!l`x;5^9Xg9kSUBDXJiRjcoJM_>d1hJ?VtelQNvA?H zEqUKp{M_J^s>jVbGBQ!di-C{HWbMuZ6Eik@KP)wPZ2pYIqi2Y zOURfsR*>LPA;HcCRy>Jabc*sbcd8!7qCkL#wzO&Z=D~EVxh?0&}*o9?}tyDj*_nOiv*1&(jh1uXpVxNfyxzt$hnXvwxDS64J zZ8mdzMM~+usmEAUClyPuU!Bz0hVgPyo)lNMJ}DyUY<*I_I^deYvD6F(ipNr+G%D(o z#!{cu)KNx!b5lTS3aTO8xopAaVp=UJBi1stN;TIijcl#bs#mKNq$0pb*mKYoD~$&g zD^-$IOe!0m2<+szX6TcqX6Q*22ct?gI;*mx373B10xC-C`sq+?@=`!0HY}2> zDa3|FW@uQUfQsU@LFw8o?XMJi!Y_5^FsUXZD-9v!B1hsVSxiO>jPl^!W`0fwUzfqx zL2fEic%oEz2Aor(*OXr;4QW#pmkq7vbKC5wEwM0tWkaJuWkcOfv*Z9kY|4h-A$1$K z%7kwbP~9X)KQ{>BRjz?D@+h>ZW z%eYXhlB4Rpa$un;2e#8Jm=bJj;;3mSN2E8o&Y~A#$LCypzGiJH(TO)VFqU~}XtQPmOog_mTT9G`(DT%B<#P;YWK(Ve|Kw;SkJb%nm1KOmMN zWl@=KNResD=0o^_dHLgkl*6Hnd^Os2>$$=W4fDGirDWJ&<>mN`Ix^x-KgkV0T#T4& zl!p018Z`?#kQDO$?urkQ_o|iQ4TINed$CqYX+mbHPS_bSKeQ{=KclO?2^|m06DqO! zp(s!~;Zlddds{L`wpmd#$8I7#ugXgB^Qyq2dM4jjyzeXWeI<2Y$KKZ-q|MXFdm72p z$d;siHmE-r{z`jF((-nG(;q%PWxGJ=hs;3I=sopBI zC;O_<-cW?Wvb(oHmXziKs>Ar%Fk?Kah#(r*5vsaX zxl>tCc3?C2E5&{0N%nqR+~>l`_I^~{k0k8OJ_(8^Md>)Bq@q3}P?ewJxOvv!>Eb&r ze^kyB%=KA zYZKg!(aWeh$_^Hi4)xYx<&}jaMvI-MHI+JZx66Ml)M9tr<)_`L#EH{!4HF&98kkNSDzTqa|-`=%}RuFSbP)(a{34 z)~fZwzL(8I&iByGr|u(aAqds_f(p{-yO)Edz{96@f*mCE>jIHLKfyP!|6dTKZ&C8P zvCV8_?Cjt_c`91?vaa#hab?#uSj`f;G4+eMF_wvmqxC*5II+wsxb{8yaEyM{41zFV z7%7Zlip#zwMN3vQO;e|W-s-8Nf26&O_iBGzMY64aJyhW~L$cP&7Km8Dkb*T_qz*V_G6( z%F1IJ>lxCxPY;**^l*44a+tm~;pOS&EnyHUEgwp;nt;9Iq=`l^F&=gBSmJ@33(Bkh z%AKKKxzodfE+AN6*Q!?K~rEk*LY2`V7_7af-8#=m&h-iFXh<_Gc$9!}hPHn4EzKzSn zhXorjA2bHxcjC`-Fx|4?8!HpdGxyASAi}iV`4jswWxTg4t$p>jOkI2oT{}0>UM2GbaxY7RC7kH3&OS>ruUk z-|tw-4dJO)(947LCqxv@j22`D81Z<@`cJE@9~t!rXGxJM1I+ry1DdBqQsnEkOYp=M zi;b9T03Q1Q*AC#ZC`=k4uL#IZ@q!BCc?TCSh`7A5q(m9Bg^O_xFiL-9MlC*V$rTqJ zCU{2{hKNLp+OY)h8hFR2gLm8m?--@$bsw-L7C2&X5Ud~60_>BdbH+6g{6i$Q4WAgPdi@E)mM8O#CFPZQs;ZJzs9M^GuHOVYxp2(Jr5q*yBtV z&q-lXMWlila3lUzBZT_V?odQ)6RN&)_hEiTm(!cpa0o09kHhN7QYl{^Srv85$~?jJ)cEU|`P zEKy1X&eZ{|XpaO2mpNP~7i$=h8KF8)GBU5CUs}Rs*ivn?kUXyoL<=$dEA5frDr4AQ zC9y@VU(jN=92bsEzm|E-T9#0IMmfEzn5)CTh6ih7yK8xtJ!^SzaWd(9BOz!Fu&1_h>GeguF#ACNM zWe#YWt49)!7#GAo-*jq~#2sN_o7E?3*b z^)(x0yR6y3cieVa?zYQC1GY=C5A+&uyA+l^oQJl)TL=oh)DX%Y6z3NrC9lxlp7}Ga z!fiewPrNNtP-1_B5Jje?;tdkzpAr`k-V%|wBMLlsd&A!t0dEZcsoIQq)DWu{uO!XTLV`{RH0^*{XLC*OB6cp0CT$m#*h z@>9P!1>b)93RpiG;Q>2fZbt_x9zc~>CgL!xW#G6d;fCEh5i3c$rKpCB^ zI}Dj@;3q3AOw``U1O34Qc)ZIJYf2Yfk_&NHAc(zPpBaKYYiPlJL}J2L`6qwTKxM6X zenIj+fqSa;gMtt9giv@m#H4N7@5AEz(0(sqb2ug`lAQqGaHy6DsyVbecXrXGgLcuS z&+;yMpPFtL(HpPn4pjpc(f>4~?VEO)?IEXgvN8VU;~)Fu&+q@ld%j8=L)%@$$h-ru zHytt;j*ZX^`^UQ0g9Tsyd5#O4Ky=NUY|&KsAP)LBB#0#Yh-PS4|nk z5NR;*^r*5n*-7vxK@zG)rw*4o)^CVy#5iR(=Tk58bIa>iq=6T#pByG zx)3*uc4Yu1jK}pplP#Qn?uT=SH=qVmr3rFoW;m!p*DxA=%w8lhoFd$v-F)Y;cV`dZ zDat$0P%osOxNe>4p7EO<;$yFDU2MEWlH$vn=$#c-NU;uUxH&Fv2i-K}Uav-7644u5 z87r_1t>py(TPW=vn-fL@zVYI*n38L(B;!{d10CZs6xmSzb}VZJx0cX?)w1TeZjDp} z_DV>^WXo;^&J-(fzFb79*!ac!rtKJhC+6v6<)?X-$k&f`DmbFAk7S0ihSR^s!ayzbyxb)nv_ zTyt^$fFPRfEY5d%H#jf#{q9E3s`L+{FoRdc(?X2?tP4ffejJGXn4pocVRqvGkSu(X zU6hr;05-6R*I8|vq~%HcPg$Q3EB-EVv^PVgm9dR>k`r$D6N&s<+J!t1QWcpYIS@J* z5qa3K4_l>&m`bCqti0U`m_@}~*@JPk+YUlGk)3V&z5uNZT7MsHEO*K|7(JJ5vY zWGz^m1?7_mQJ%(RB)T{~kdd%n#U4M}o>vvlKZ7x=?qgQ5*r|_M4eKi~c|TTIR@3RfNCgE4TXeY<1&pXjF2%h_!Gzc)4KH-->KN}N&{MMtYE37c3@iI zC~)-l_(ud4u?piw%=AY%C*+S0zuskZRQc~0L@N?|zIZ{wtq_LSh$u#9E^Nb$_V;4* z7#FFMZ(+sx7S44mKgaVejF^;M#5ITDBMSD#hJ)68DVW!((BCKNZ`1Inh(i&PnEWaF zJLK*j+ObK_1Q!Pro@uV9=t!(JjLRPKVH zQLz_*!x}(AMh`JUh!AI7O{^qg-0drwokX13f!8uS*m~ACKr_6Hnar+&SYcq|y@>vo z%S;mSq>D_PRP6SE3zOmxmKOttiJUktU|jgY6%Z~QUXiEMI>xP$6%nyFvTnZ>50(xI zBlrdq-_II`<-&(JHZ}>L%8olKn>lhi*5y~G`lzd+xOUQkKWUG&j#|<>Hh}JC_Tkd< zzD#I++Ni~4|@*>)O5}7*a1 zocVk;g1uI5Jc})nxDy)^b(X6!<61bvEw-(|y0G>!(pjubP^?VBE_O0K{opd)GW1k$ z=v1aJqA&n@K!v~k|7DynrNZ8u$bwX1xmpTQ@X1OZIJE)=TstungmJx_3$sB~oaCIi z6{i(ITs%c&i?jM&uf_`fh~kcp;D~Wje(%QbBls5H zlNFGI0e;UFj-|%MC|)|+w7whV!Ye2|)B0`$LL%%mfP7I_23XYqEFJ)`ssUJ1 z0$AMuEbReUqaR?2qxPu>y85{fFnVE+;*s#+%u7G7EG#n?3q}d~LJyXSfu(wGV5z=s zU^(BxG7qhAg#0*`AYo&7YSRTdGK&P?}sGtb6~jLozMQAmxNZW|O~Jw|sNU@!J)#OWT``=0K7K{`%R}Sc z+A4XlRMkopmi;9 zg5CT=>q1OnDw?W@x{A&59G(;Q>%moD53c%puos>attD1%^9Ve(sl_!?LZ!+*ir>%FlTMEBu_}_IJdPe?YZ| zvbh-_)m2IEnafu1vIs2B3qxzOIWqns9)E3ZHZ0dQBaUVxaxK<{7X6Y4pKm2R*E$VK zug#hS--YaQ*;t6}Akl6#VK=#@T@+Y0I56T2S&74t(G`|B3_FFS=BUR!rzOn6uYaE@ z7g1p{;{`Hfh&~wpa{5DKUq*jw@QbQs^M8=#pscwNR zqqZ+HtGLCCVzulbwo@1q0e1kJym|Q++`Sa=fM*!*v5A5+nV%C8mtd_pGR+cX0*;hd zm|WGG@{3K$6_`@Msv&D-oXH zjW6qa(3BglOzbw&%M(f}`5aKEg+#Ll5>4gJy=ms2%GAbK^qBa0>g52RF0gBom6Ew; zEaP;?+vej033gv*fQTfpyfm|MLj{~5&IIjA)h(!n5FBBhb;=8qMUiq1db&`qHEu)-pt)hT67EW$Gb5n4)aM9aEXfwCg1k#jsTb)R=* ziIK+54F>hYN_d+S-08tNxjkv`!C}2AX8ivi7`shbYTcs-imkiNqO`7{Pp`xQz?z_= z@@<5;`5db>HAP7}w$o7n4qrUF)9ntGAKBTrRi=?FPbd*Be~}hwj~-yq*Pdt@I?*z8 z2K_l{9`Vp346SVBrG?+_=?de{zu^qj37pgdI}Teo#HZrqknelz6j+cs|| z^3WJbTgw^NvU~RSv)fzpgZGoL{sObppTx!eZ?JyMXZYchXYt|VxY+)S=0o0aKX(=_ z>~bxPoMj7pT?~Ge1n$0@!pe}kw_G1!WPy##sKBe!PP#Dw%JtCxk`gachLHmC$?x+cMXNN}d6EuPx zSe-A)pCH=VdLw~s5+3kubzalu0A!Ab)h@OuY!32gI@GDQK^WoMOR9%>gPSRSWLQEr&YD^(9&xNt>DZfiw$a$t2WIA0Z0rE z>QvSnQA-t+kJA8=IFoUe98S&(Q=Q%_q0oWkcOoRMs z`X7;z;9^{Ai6YThl|a%lvQ;3Egjv+bZEf+B?ZU08BIkzN#OXWgwz|F+F=)q746j!U%$ ztpc4|U!B6TVa_oN=EO&+K68o;bGq7DQW|myC_ANT9mYGut=GdRxf=2D&n?)xkeWCQ z2kDX`@IgNKC0^9VAuX{wQeCU<3Q(WnM_j-4mr8!nQrB8XRhEe2QkOqN@+X>*v_{mJ z?#lZ#CXUvzw@A@wJ*x7|GET-F&U?f>k~kV$U5(XIY^H{rW<%y8TuU6jVE1{}j_Dr^ z5!(nOn^IH*_PS_d5BOL_8V?dz@%i#T9>ytW5#_^J(p>gvGeI6HM7aoJsGO)CR06m| z07!${X_}*}ePOqqHs+>sOxsbC`6L2^o}@3bl!mlIZ^utkj`vX?S!0FXi@!uTxX+`Z z-)DX(M9~iiFS@jTf`6dgDcA0>tG8i5d$dT<5p-Gl?|$vii#l2f1t7vcK44bRWY6U) zihF6CdqO@}Cb+OjxFSk`*^86zTI&&iZ$UC0yAVt_=5ua-4c76mm>I z9}Ww89C50u(sBR3kQIEMfBxG)PcvU&c2-+}4;yF;x3mfQi1LHlSlFmNZLD!LbZu;? z3^c*Zy}E5ibTkx?8T$EXSh&n!@8iK7-v0Q@x!dMota}w7ejf_O#cYp2?N}(7yjz|g z4TTQv=f#;SKr#`QwmkOtcM`X#Iy`AsWrCeh^jEvIZsed`Yc>ecYwc9U!XZ;4zhpBd zn)SK3S(8nPpNXs#2Ia4*J4)CWve$;}RisKZI}WK5Ba((hmI!RkOwwjZjF2Ib z2UOubEenYmy+_Gv37^o+C$Or-`#Hd;CR{5qsL88Y2TL6l^cqb|%^gr@`gtC>HuAp% zxj=42hd>6g%Ad=wh=JMyr9>jE=H@K|2|;QxJ&cS;js-=Lb5N@NdHDwUh5;U?QiBsZ z5K#+`@7L1#KGQi3A}(-W^}7y3_jQ>D>vmcu(_jp(S?u+7W3Nvn(_s0{cFYBG9Yw7n zI7^6I>J!A&5X1uTz?30F$6#(}-;)xJi&qd`v#AD4upgTp?6HLNip4+O*sMpK86S6= z6l;^1bfWaLCQ$;BjSeN6#Va&_x)n;y3Wa8cRR0Q97>=^l;GNo<;H1Ac;X&3cVAUK5 ztA|73N(8gf)U^|~CQ{)LhE;+?&`{^{-NT^_X)2T<(W8nWCBCk;78&Nk>xHn>{BY>N zF2q;nMjzJsLmN#CkN}H0>20z?AL01@71W~$MN?tls6oyc+Br9hKrV)MAh{PotyoTO znk=j=yh-gcJ^-(jCDq+(prp!#oijLIs3Un(k`6WsR$`3(mQS)r+yS=q3ufW^aDjhQ z1*?3x;E#tKe*`bJY_;Gy7Hva=3pLZpYR`-4Kxitg!6a(VlUL|#1e7laxDW(5NLXuq zL_GruNgOfvYAe;S_$`tdD?6;8XQ9jQ8oTrn9Kyd)(nnMYa8(ZBujDwtLkNFGoAePJ z!oP=;St)NL+gSe4NT*f2WSp}A1S6t0Wq}?1b}89QJC)7c9E&fv%iP=((!a3L_744) znpA<}VmIJitnguO^_#&YL^YMX08;E8-E~5vU(v4>;uALra>|F?f^!*iiXpe4ae zXPTK76UC%9%Es#Jyd2f+sdHXhR?xlX>3SzYYrTs)92rq zELmAC6e@$EpnIX9zYU>~zwODs`P!rxLVIvVr&^=<6>@%p0W^oC_ zA4Zu6)uTT2+13%56Ce7R%stE0bSz zI^7CCM=(=jCv!66YZYSr~33xRaQ(7SZ3-HGk%Hf*GKYN*hn~)RU zHWgz6nZfK*HD;F>R-c-G$fGzVcM+F_L#4Xl2(}dqI#m&L(9xmLXr~^(#$~~;&)oVT zmBEcfQYmDQY9VmMSwpOIDPqA`rcXTM%he^@%gg=UoFDl`HUx`UG4w3kNRF0mBv(V= zd%0}iW7BQlqrDcA-Nr(4tZX5Htzf6IN9ROlQcy>n=^NS;j!bdLd@iU7(KeN2jZqW7&%W_f0$wi5iimHJHop&Wo^-(cG9u2!jW#N@yp^x&e4Xto}zo8bb?`GU$rg5R(MZ}mBkYQ&* zJ<6st261->wLcgTB9kSZX;HO2m;+iG2<>3@Idd%r!yJnTK^&~*IG1vqOOC~uLdk|Z z#QVF5>t(osig+o|BQG}C?LHpe06=ap07;m#-&k`!K<V}uZ2G}4|ABV7UzJclDJ~DN7hTL4GGQNFb zCpCz)pNVM71N4%b3kzE<0KUb&y|sAR98n+?S(OP)eE@-}IRX<8P`rAwA6S}_6f`9f z!oeJl(@L@4e7SJoOS5NRVGgHPm?g#TX*EB6?rVOUOK?169ao+EGgVxti)w!?T zx!Ka#U}5!j+`r#7la4#RhO2!IH#nDJV2gPrUUJ8o)ZCrQgk`o~YYB+55+?rcRwzfu zV{kfx6=r9t3J;QG2TIgLtW#47J7A-BR*2XGmEzQJar=5nzJ9J%V#lTaeN|$a#HB7a z_41MoI-PhL<;O!Q;%0M!PA$=M#SLRh+hk|RuM)K0247dUKg-X3;)=OLbw==ar)n*+ z$#^ad_o)f>BN6iQ?9^OX!MQh6b9`sYyEDmmiufeXV|ReWvQtVD(VnEg6XNQMynCl0 zy&l9b;;H*J-#f^HnEXD$o~8Kpc;HtQxGJ+11+L`x_Tigr(6x5SUypJQP)=I#7*|6* z>2QgMb;7ixxDgD6b%zSsZTQ;+*Tm?o%CL*1U@s!_&tGpdgmp z1fX#8!~IImGv(8FDZiyovvsk2$?2i!Gl?BS%lW)Znvr?A$*By>_t$Ko+mh36O)>o3 z9s6=}vZi#n3Qau3O{^kOj?+TE7?tsAs{>x^MAjL{%869Q)QmD;difZ)_4+);N156w~HNqg5`5R|6tq03fZ2%OshYS&bJdEH9K4mdLzQkxa@2 zm7@6EjIbBDwGpV(91(-YNb2DF9v`mU@=Q$)Ig?Gw`3mB#?8Srn&1@kHjfIRu&_hEO z5|bAogL7967P1;!$Qo<2h8V|2>MzPNJcS@gQHO4l8a-J zizH9!vcU=CpXHXl84mFb^N6sLlyuyLr>}BO9nGGNfur|-|8*&xPPEkh1x-6nSl4=k z5}MNqCJenj1bNR~AUI|USqm*@w^IDrbuH5-DYiMn<37crG&E|^1vSsu* z8|gMIOppV1xDDe=uaV(H`fzui;5$3LJCF079o`+`3X{bhjN+8x3NmAa z_8Aeg4=9V!gpc1#G@&*-n!w7KNwsWp-~xS7=@H3i`J|3B`C5upcwI0-OQGgy&-J3X zn-ut*a1uba30Lv=pptPMFyq*-Bs=at6I&7%%>Z*HU$7wu)%>TrLy^)Xo22<&Im~iq z!hfw7vtUDak@L$Hd0Y%LUF3rQ!uo=4NWC=L?UiHs#JnX>Nnhs zh4PjFJT^%hbjSc&0dSCU{q&y*{_TE4o9lLj9W-u?1URggZCcpwPn*h3J@_A8MT z_Tl)yF8qLC)@Y>sr=B{vFSKBVz^rYo=roH!RM527tZ{8}ereRaG-M`L2hMolZ5k(} z5<{9LY(yxKjZ9Kg>jEDOPB&a5l<=d}JZhLn6_J?)2*0Dmno6X!fcXLC4@b5inlfN# zvJ=S)#7uU?I8uR1Zp9&4&qZ!IFJ>S=7PxsI3yOJTb=^u;Wu;>IgQU}t&J$ZqQ&Lvj z48SO+DO;|n3;1jhd9DlC=&1`h)a%O>$z;E zMa(}XV*b9VKgSonxA$L(L+*r*=(V4t( zez6Rs(~n7E-PZXMP%)`(K6k8vF2O%2!M<;B|88)P&J^w(mNZ0nb`dD&iQ=wAQxEg| z1z-yqJ{lP{#`SjH9+9Eqij??8Qg2==#B-U4$xw87RFzoe9G}@DNO!*9X~1%aUw@Y? zFFz@c&-CI&ZCf}V$ql_y4WZFJS@g2aUdWk*)uy&rAU=`h#ZUNS5jAM1B?XyPI3r=2 zwDscpteoq!hD}vD*Jr*AWV{(RxYQWWisJBX9+H;g@YSZ->G@H~ioKu!Yb-+&9|(bL zBzQ+tsUf(VwVOt2T9D)W*|q>~Y>=B_%BAV)yLMn8q2$eu7O6vO_{iE9jn$yhGaauZ zkq_*HQe3`h_`ox3h>P>WE8XgCw53En8j}rnn5KSka>~>(co^)=UF`t15IW&DBvT8a zC+^-;)Z$|K-X!=mX`CnUcVvY=ioZ=3 z1VSjKyEW4S{_K#>Y{~6IvM~JLqx|0!B)eV)lPT5be$rI(u+J||hHU@3V>PQk5<37fLJChi9X9wT8UzZx&u7y-`YGgw?_k;y$Jb+(A zj&vUINavo=lGa(0&V#+AQ#;bRuS`1klt?F`Ix^kMz78Gtf)-sd+Hoivw7Y`%9=j`~ z*H-QdJqGqlIKT9U5p%#StJRBa`0V|-8nah-B8S2p?4_X;Zr4J~R1u({BtSt+wf9y* zunJXKv!L&3$$Z0*IN(tL1sR+XZtfU@mVLd$P@C;qGAS{?Y(|!>3UzkzC3leS8fdLZ zF%I&(2scWp>3?J~Q%%;6BTFlx9cu~ckBltov}346Ryz*mw32&>V;!fxt-q`pi5gfU zq+_!rqzt+#J`eaECQneT3J0h#OBjdO6q~@3!W0X-#+}iWDzYHm!FDZZHEB5^LwlhG zCe&gB-&6>j8EbhBxI7QvT4HY1%x5M9z=5+#?Nl8Y%~p02N!C3SA~_Phj4^ z3(+%tNy>-Hr}Loio+nh8xve&0GYD1t0>f_E`_SlV%=qRJpJRR3G;@KlvjHOUq@IOH zyhgZ{N7fH3N7tuRLD-KfCg+y0V{T`ljL=v}=^a^{%@?It6j<1{?ZWc)tcALZtq1CUw1PeQgXZL$a z8H6PS%n}MIjrd!~Z6x0QqA<#??>KnSKEYZujzDuZ56&}-2k^XA08EN^2v;Unyw6%k zwI*ij(JI~|y0hZFt5@+BF|n+8zwyO-o+#csD^~Hw3B6IgPlQhKJ{3B}`*_4U#j&u{ z!r$YeuX!Jjtmb_vVo544=5T=ToQjG&`}oeusHAzHh-kw^g6_v+LHDDvh$#`Gw=06~ zk41cMdxh>Dlix>U`h7As@=1a3dqaosMj$#CS%K(e>?9eIf-J)C=ly&vE+PEU*fgb# zo=M}e63lKpIZyxIX{T4#zcIlbkpM^Z?>gqeeX(}9gMrotYuPDx(ZjCT91>G!^1{Mm zHBN+`dH8!WwEFk)$O@B(B47W;Dg>n!=o{R>EA*o?hkjsf7*9sVTA{37{)F6N-TOo& z=_wzNNK5D8;_6h`S-{&n5*>Uu_e~Fln*@c{ygQVG=$TSU6mS1ZNRp%+wUb0iY%H(0 z*@ssef0x@zxa?G0prj`voRrhY#p2Nfh=~v`L}H}n@x#6DHaTphmp_99DbiS#xiS`? zUSY-?8BF47bDkjikclv|bJuH0s3jK+^o**JaCe5z^uR~Abn6YFvpw*ws!U=Be{R5qogYpL{D$%S?y!xLEoxIc_Ts4JxJrvLK^tR2?2HMVc{O&%1WCjy zgMeOIF+)G43v&uAE0h{7c zU(%eL&$Wwv!W-EM?eqo<)GuhOIPjfHffyB|I6M)Fq;?{*%iq?;7B?j)wJABNq~s*? zQIegQ#hv6-Ev84)v_lgkpIQ7ck__lTXUup%ui$N$Np1?XGbfepO6`dGDs;`@a|h17 zSY-FXaRZ2)#W+G+ZE#(ibCBWG-xAmmFAP4%ulz%lx3+H11GhCg3Qj3>^>~yIWpttZ zt-_1S+eM~)%q*sC%wyWaY_Wd*t@bcmIm|w)3(S6$)ig1#jO(Mi6T1eFXz^j7pC8lg z=|X6&`_NhmS}TLr+C%HA(LD`X(`76pfNdi-$TQ`k^@q7BDM|*dA z$nyq_Ht-4Wbi_AAnkL53x*@#Aw+Z~3yL7%yBJ(C@QailvUTbi5)QZovT=`z91i4@U zrphWx_{bUHcVZ>>s$tyBa%3DafXi%0=G73*ejtul7{@DU?UX8JbV_+RF3a>aRp5B! zz<>cK2FFht(mepzE53|Y;TF8L;EFJLY_d{B7F;eXg^>FawU5Pb)_=3eN@0iPll_au zC@_1nU*$EtxOWZ5W?I8)LDNapYrVw0P%BHQ11NVUbTL=$Q6Y5Lpo!0Km<$Z&H%y^U zDtGG6{N^i4Ht9)a_>G2h7;JyMrcK_jaqoU*!RUnY8ORCM$3VWI1~QQ2s$d|GbI_zH zdo*|DL?gqMl<{%|J5pyQ997D~QN>9UoYUFh@ljRm%s*FW%td%#98m@NIwI{2=b`Md zk15_o4IK1LBOFD%!y;?$u_K%EcbI0de%RY#`Z*Sk^s^)!g=Z=ph4%Q?7mnUe&JsCy zddRs`+8eT5@C|~TsYE884mo#tBiqrBoUi>)gPfB+$a%Lx&dC{(v&Jkm@R9S5KHPlG zK-4@L6sWnCF%w>;Aty~MA?6JQUf%fZq9r@5n#I4Sz{+dS4k?crFd%m)nz@==Y~tsS zGuqX`DNm1*N4-&9*@uxo@}C7Ej|63eTqpQ==}hRz^5L2djyA0Ea8Y!Y+{4At;o_r6LVqWIYcC(nm(A>?931kn%k_q>vJn{XJ^^4%~Mup!5 z?DGKQ!|op1JM6u&12%a8Co1_??B#LVgV{Y!b2$-nsSNY+aURl>UUSFz&J*Rv9*@MP z4jcO^V`D!V7dG@s*w}}hjeXLyv7d~s4Sx1E_U)Bk8#@Du?cArzHujS}HuiCSG`8*< zz+Q9M@kr=9XdphnaL{--^c^$~hMt3l=~HNvbJ;i^nLc^!d&!Jm$%PUnGFCbTrmf05WzkCdBpY-< zbNn1T9y^W$8XVuw_2X)guel*7!b4|yBHUb?HSLM;ka3H%#Vt&rl=Zbvi&NiIp*!_` zD(pECK2bb-A}pN^imFmpS-8JO>8cR$YeK^3itD@_ zY-*dWWJFx}@xnZrfDA!`gQr3X4(7NcJS>G?9#YetXX5Gml^-fB=a(jCY-ea9eI-DE zE;~u<5(yz_b2u&RzY^yoUW;<@8b~PE{hC@PLL75zY#^?f#%u)D4sGS4(9E6Pl8~>> ze5g4W=!PM!gD^F*4mOa@vw^T0s!KKyzEz4~lhEOP9BPD@_v8CcygGOUsFrf(9?iy) z)QcWAMv(-+--;-=xE=MnM~lE<49&}=fSDN9V~HG=q)vrl9gcYcI);Xo${=@}j?s~` zkZ87$aIk;FMuhCpHbH!A0p!y;{sT$xE)OiQ-_rwZUM>?1WWB^H7WNW_xYM_)YG-0; z;kPlb3<-2=54A@T+=n!_VyTiO*)A5b&TkKMEFwps?C>V)8C(Lk&H4rxzLOR>n3^EO z-CDw!c4-;*PHiy`H7+qzLCZR~V3w!Ou9kJDsomL?IuIOz7+QeBn-W=xa+TjjxEuue zzkd2-pR8O=ca3wT@FCyFvR?MFtZ>shVExH83+Kv)-7VeGmm26m%y8Gj^D3AkTIcM{r%R?sNWicnEIUqOr8<3q+Lr~ zWIY`jsJo~>c~$rXh-PQ5akM5`M@a-Rv5L79*^URPo4F5C2aaMLW6a`czGDh)Ud*{I z9(S>eXx0ttG3@5LjkcV$`#zAcy}OmrIBWglaLR%df)KticpdN1*K2cbZAoG$SS;J- zew`0xfn-*2B(eY>Q!O^0C1O0&zVR&JCGw4De8q~`RW=+t4vyGEfK4Y}Qa$DDAx1Yt< zjr+H5EFrWGOKhiOvs+>;P*p;ZvG?t$X!FO;-f~=F&&h^I8mFCFhH}3av2F*h=aQJG z`-fI7=DTn@x;Su6Y+&;)Edk9t4Qm2n7s@N+T~rMB^t39rxOBweQqE6d7!7R#7}Q(p z_kk99Dyuw{MS{F@Wpk|AAY48YS!Yd=DTS@1w3ic?d&Lr)7xUnjGp$+Gu_$d#qnu=g zv)pg8a+28`RiQ3bLtUaWb%_R2m+@lHh*`8EiB!UZd(9x;Bn9R~PQ0m@{3KS2%nI?Y zEuH~9XNWVoO_*iI?>2YUnMoOYwJU02(krZOMmD7avd8rA=3Qntdl*xd2zOu@6Je|% zcBa2Is|HJqV@TC@-?JmDvu37MZ$~CT`>1HNjG(qni=at?ppipR_if_vGm=R7up9|r z;-tulz&b@xP!!fj$~wX5gGfCLyxvU9RW%t8O-_?zp`X*_s3Z#+6K(7fFE&ndq?|RM z8ePrlZM)e`zm!RY{n=tUTjZcwu4rZ|swZb;Zxi+L9(ac!n&Zw-L35(*DY|qQ8g!dX)Ggl0hkJ0xNMTy^ z@-#@6ztTzvE?JOCr78o8Hn$_+oPy-YMj3}yMyxXrhvvqiP!NFYH3q2H7)n(}uF04M zT#GRQeq6Q~!aEI!_afqfwBYJaXXApon3sVY#v7@iHL}f`IX7kPC5(#RdqN9|Jz;nZ zH}Y^OnLZAMGH5yVMOtBzeuVVE92m8}LxAnLK#7bT2`ve^q{+vYG{r7S5nMJ|+UCN} zQ=ubb2vzwtQH9KfS%_MOwBj7hoQS=#!LJ2=DSJS4TR*}*sBrwf2=Kwox zU>!6w7L$0v-YUW~4sjr@aRX~Nx0R*6T$aMC(xJS=C6mvzNKkXEFHSDA6=}aQU(b=V zk)7^r#AT|{MWz~a3 znjA<+wav#v%+)a2Cxl&Y4-LD_SO#7}TOAy=lmqF99FJX7q(r?^kkN8jo1R8FWyYi-Nz$D;gR#QM}Y_p{st zhe)GEvK8Ctg=_{QJs6*yQe8g9kyOTGHZj^p)w`cH zxnX&7K%23;9k3g&97chLf`-$h-CC^EJ3Q@XpV_H`rw(YO$h9tK2X{gdY&b>GY;2c@$g13IqCaJmw%bj?`$jf$ z;G2+Swb&S(CXI>mDU+x3lCwiA!b$d5|SzK|W9(S(uXg^#);E)G_gC?N{Tk1@R zTPT*gz_ZkWnWcb`%BoG_Bu1J--hPwlms8S}6P*T<=#-b^i?3yGDiISF8_LrZLDkWn zArVoHUE-7#aOVs0!4_;UAbQDZB8P-_Hw~#qn#hxCAcZ=48WD*p)Ec3?9)UVom>~|R zf<&?JhE1Cx)0sVu!dOU1s;|w4d;FJLCI2O>C){7o6?tb-e8%z+&R1cvh>>3;$ftTU zMLwwjX^YHs0tF1&d4Kh!tl>(dBo z6N%WSuefenF&!oV=`y9TJgp5KwN$E!WS#*)83O>8_T_yqn}-R1mOlX}1)g=%`hp75 z=ed_TdkF@Th&OR0&YN_z^}m8NHIP!RSEOH7?jzFR%4z;BhvP-sFjUoH6j!PNKtlsK z`VjSAZ~dMYl*Y=f(4^qypWp}dqtVSDr{Ar&5W=^9L$gFnAO8CLnDu->Ged#n=>cx( z1Dq`kH(rl7hHxX28*lz?x-o(qq1@Pk8}o5P%Z;agmu}3(4KutaF^W;TL6@z4T7(0_ zh#&IjE6C4=ko^4*aYpA4Xd%rF-ljB#DNNx(&8^r*mb))i>yVc9ZynJ@5mf8__WBWA zajJBh;9g zoj`i5Xm-~jX}0*Ha+)tD`@V=z^Tmnx^?nhZ=8K2l)%!(wnlJYBeW6eD#Z=#@)ahp4 z+ed1Vu~_e|=`ZNP>)l5kp0zbT9c=occ{HP|s|-wi?Klj;h4GK%cRldW}4Ve=4D^U29*ot$pwFWE%zZeAVC;j6}N z`Egve_^NW7dpv@)A6A92H|O%zoZIq~1HW-i7L7!%7I4x*jUraw`J_XDw=^i`)vux$K1(p05x5kY^#W7VB0#Y>Ds8?Y-5SU7G~7+NQ_t*l_-=L zrW{BI9P^z8tfQA;Fk)vtWnjQC&Lwo-o|7Vy3df|J05;)s(1gpfWNh8&wtie(5|@(7 zoBo8*^sFr0MLa?3s#VzQTT=egS?iTipfw7a?%mBsssuJF(|9_^A`uXbdZpg(F)a0X z;Az$-P8X`h5*I(nVr!V6_!Z$sVZI!UG-PW8_*Dq-Wnws4F5!yf{5WB;Fw9>BY{w0V zb*uOnL{a2Je5{m={Bi`uF&Dg)--1ARHR4YLGc8UGK=X>$hWo|5yLx0pURdgp&k>cq#h|0tm4HAqEh% z{37YU&c6g4asIFYM=aooVHUawn-)Nb>9zm|zm~I@AH$NC(IuY&#Q@VPew;8YVu0y# zzCqIk1n?6OxQhNhVc~@D^vmgv!0Bp!>j*x$fqpz{0Tm+xpadwsGZ0WQQCkP7_`-0N z2dEek7X+yHMnZj$2G%nG8LpWX|TjWlq517*mNQyXv-w1R6@nn^Mi<^#X<-! zxZ)ENg+MVj6>=x<5;@TJXpQyeytgI^BZ!dvSH*`)kvUY7nv0=zVGfNl3~e?v%>?dL zDKw`_%AP8T7qoN94*5`taClrxDBJSF4|tgn)p3{JAvEb7LOCSjL=N*VZi=eMt~YRh zoZA-S4?4*OZ%xJYhO3F5IP0k?YAj@b+8&FW~E+YIf^uW7d{*_M=EZNkvXfj!vv9)Q$tySNli;&0zV+ECxSMU%A(CGIFa~O zT&-(Dt{@8lbmiJlQS6a z@Qp*H_#}c0FWzL3`bL~<%}d$!0r(Qh$DPgXf^;29f0-ez^cq4djZy#1FIabdn;t1D&uBi zD5K^{p9~6@!kdID-oU5pT*6X@kCdkfy9)V?PsTaVj#Ea=0}^<*V{;5soVk<;BcHxx z9K%SYMvjZj^!T}$04`oED#Vmd|4ggUw;_5QMdqG3I%KzQtrHfGNuQF0*UY0Lk3|)X z$1y9PQw2qk5T771!D(ursOEFsb|~&eZY_&@)zV%tbeixSzF#Dx_$ah=W!Su}6xx&>|(piqwK#%98qnXq>x z*JpIn`D?mE&8Q;((?O-8fE4-9<1nk$`fCk=Mdfd|mrWeuPDU1a@(;?P7v5u8Mdc@P zZZnKmLyKmSk`SM?@OBk|tS6Xnz zHYz@pR^k}p>OHMQekMX*WNA7@g6F zX;yN=W_14SneE?+yC)|nkE@l>?$*6`;MToYwk~%$<>X7i4kX?Ha|TemIeuNutmiT) zb!!J$Kq$jw^`yU6*yC?EwZfqByC)d zzb-0P!pu;wbX@I1y~YvYQYj%AbEG5$UTO$04~qE<*jLEz75(B~(%Yn(1gH|e#L9!kv6(1O@~HJ=7&L4rAwE>rtE1e~a7w}t-iE2@3(wPYx7F`5 zAW!uCKZkAxmmvV9es4KGC3EW>V zr$0owF2xgC(un@R?(h@zca`zcPG}X|L-?~C{%q9WTB12a*|3<)hDfn!;EcN3`YWAP zyO0$EMA%pJNB?$;jhB@k)=}NmNrx(d(jieM0%toVvNEAiK^Q4Wu*0Z5-KCvLLg5cw z%=ap|ByIN+Ts<_A+?QzyubYp=81=SE1kH7r8|^ghg+9_ZWa$Q!X=1OS6nUsxS$Y{K z5`kJx5^IfiQm2~L))APi^jfo-HSAW-yT$zlxF4Zy)os@}0-xT{-Wy}?4eh-VdT%UrZ-m|(k@vaS%uBOoHq`CR$rempbYC`qV)cF7 zv$2U6(0>&aY)9-JFxVvh{_U+qO651r~*sL1ujBekW z% zaQ~XXv#ZwaTaP)kmgm}Pv|!;ktI^__#HH03K@t;sHsU?At1-tso8vvRt1;I+o9jKZ zt1)Vxje5`QYRogw=6TQTYRos!=6lcVYAi6%7I@FxYJ_$*;?im~&bieX^HyVQz-lZs zvs^e}H5Qp?iw3O5V)JbAfYn%Ho-G-$8t0j3=M7km^UbsK2du^g=Gg^juo`pDwbjV# z`JG@l^~*@_Zqjzb9Uj$6a@hgez5v9c;X?^}9$Qa7wDF0ryISXosVMBT8m zxWvk;U}f%&uongRjnI1|>O};8Bl6yed(na4h`l!|y-2}tRJ=E;{is225Gx}Ut6D~n zQDJ508hS*KjN&Z1tXV~(x-4uHI-ssQWR@UpjHLPGFO#aYB!BYPr-IfS;fZZ-?0U1k zag-kA?fl@Id)_$Qd*kum8&CGOvFk1F#%^iUcFR)i&+(JD(vuhDlW(IZdz=?ETr{_% zxm~y-$tvILt~jX3T{UUtwxgfjxFW=rEBTHXVwE<2vyBw8IkIspNWQRkZ$K2@L&(Pb zP9e;0DVX+~&07diroKjvYTvq=T$ zv)!V9b?RzvR@=}X#g}N5T|DdE&Ik^_=VT-6NUVetI8sDHh@58xT^LJ8a=nQ?)QO#s z@LPHC!;3lHF?O#4mQGCmTL2uLL$IMHv*xAr1g|%dmJEJ@)Q=`nouDicn@wt@*~nUX z{bEGQlQ8YJIrlZf*^<{0QuT<|Et2u_ZCkQ=EWBp(sQ`gMe!mH7yOsacP5BRQdg#7v zY&*eM5fU~D8Rrn8noDZVa@;sFpzX52Cn&=#%1PG?9~0(oudzPDT?s zaZK{vZx#27gnnmyRLXivzK8C&ewh$qB5B0wL<@QZGVV=eqzz1r)6^%Hr!)?Q!m(r7 z!uzg_MDI&UT}q)YwG|C?!NjWed|D-yr587es$%1hW%GBun0DO!i97Bj%_Ic?QX&V* zot*{Q!mF4RH>90)i`xw@dzQ5f93xR-ScQlI)2G!vfGZQ3?GqZHZ4|reEj`<8`<|X{ zws%j@8wY!D9C&NbC+-H#s*z9O>KE zGTNk~|C*UxuIT?Bbyt>({hFN|wSQSN%t`akpX`0>;9Ck1=zOn*5T=nIcJ!v;chwTF z3c+C=*l1|FSj-2C?n5Fuc}V}a>jAqS1%IrTcpJSnU5k6Y79+Gss$hPw)MDhdxWu&> zP1oXKuf-TG(x3d%Qj4+I;(4ycc)AuJ_gbu=#R~o3lcg3bUW@0u7Aw=j@z;wMt7wrp zcfRY_{T8cUix)7`z&cemNTaw#?BR@eqA>abulKqRY9wG0wZmp_FJN-efiOb6-w6YY zSQuE$!oU(12F_z);CvPaE-=Etv}}JO+wlWLT&lC?{y!K5yt~>`ub>ms5cAt15!&HD z>JWJTgYXK-Ls%c@PfXr*4`w~QHXD-AG)c9cWY~K5WDB;#iG?jhtC#|Z%bCoMbL?D_ ze-Be&`mtt%rNGPCjbjkuwk|C`opvrQiE(LJ+f>$7BbnBxrQvLx!*ZxMw8B{d#gLU? zS=pXtg43we3&TtK*SKEZ7S}!$W50-N2(ZQ2wwfCosxhyQ;XP|f&RphubR*`)9{aH} z_Fw!+I&tfx&NYM{NVXGH@z{2G6SZPO3BzjrgX+Nk3uy;#Z>sf&#;lCrf1sVsI22=J zQXC2z$NWrETx@?k!Rz_?LHg7B|ExTvjJPF7VhxTDz~?Rb(~x7}B>xk(?) zKH=Mhes{dX^qcw73TBw5>s5Z&e8SE-6vy=vSd2qn7nq(s%l@-7xZ``zZgAQSP8WmI zGB|yjg?RYP7J^S$Ufko|zN%<$k7>^P#yY)bF0{)Y$^azAXd>4hyY!mq66?w@@K82* zgbzTDYgI94mem3o>1nvNQz6PHg-1#5PO=L7$Hbr%?7|R3rT|T$XI#_MN_DtKh)RWc zf-+&RQ9ia62FtBEn8K#b_%e8Vk)nlfnJQVL z0u|+#IV($DLUy?ZbEj^y)0>Rqb$S}wA|BGxJzSn>pJZOkhs+Bv3?AabsqYGroSCco z9tdrW?(>8FAU{2_4GNq$lw^zqpAZ;o-%W&^@P`U8M(k#Pc#1#sN;wTI_OAfMSHcCa6O&PFZDLUy_-=$j(naUylN(zBJta(@mq!{!e z-SJE9ay8_&q%?CGWZ2!kl(!6DuJqMO#b+k%OM9zaVR2IpY>q1~yU(k!yH6MOz}~5a zeAJ>f4qWf?z;%g*wD=4;jIS7=M_F}kb2O`g(2v>*#SK@tZ;y5ruHR~^m!ZB6K3X6j zE#Q(mxG`UD%oo7rD8N-|H%V!gf#vT-*Hhl@ zfn~S$%8?E6ivEf&>X8i`r?)gaz0H+;pd~gpvBZ_N&4dr4vzV7SZa2AvruHk69xW)_pZk<8UYk`!>8(KNo#0v!alL z+}XW1qtvW()_e$T@xJZt5jS8(lr4h&IYlLT$wO^xI_sjG<;SG*qc-SuY%aFF7{tZQijHq#q* zkp(kFNQQ}`Ot@TE*xF>k=8{(30&*O8xJ+j(Ks zvEf1o4f*%DPa>{sM$G``C4GfU6IZyDC5^<6K$>+g#ys>(E=~`ZUE~V?LFI^k(pMi8;lTyEDE?qMs?e>;t zx9X9uYoh$9vUFYhwvw*nvUFW3N!MO2Iwn?cP$Eq1RIc7lb!}FYdN(ybyf74t_sfpb zF5J;iv0givVoiD!Yr9aaQ&OIOQgwzriX{!-QIM?H%tW#3Lb2+zqF6&R6x8|}GV6a! zL9jLz^eS2Fkn`7ooXKoy1CX;W)TVxxyqj}x)=WM_YAkV$AwH@A{SA)(-DoE7J_I4m zAvLEUhKUeE?{QQ-o-dCrX+$DRM;1-^!YrpwE!J2rJS}NF?!o_>KFWA)i7*ZoyKbnT zFb>Z|7>B1JjJmgaVVwVTcPI+9R;GSoR77rg^$R%->sLSiC-?m8pM3KDp9_A3ix>`L zYxfp0to9Z$9F`ucRV_$qTW?l;I%sask`5LKHsp~&tU_T39YhA}_S0kDGF z$BSi%r(1^RG{Rk65I@ZU85N?BAb?!=jtJloL}rfwRxAOGgaAsiM&i-|cf# zlioc#TLzL6|EOESYJukoeLWO46j}?ecF1tGgNCc2*fXTc{ic93DKtrWWwt9HCCk{` z3pV+XAGOS*)QZdC9Wjl)Nkpn50AqSyp|6|7D573um>vO6$EEAcrR%<6Jmk1f-O1zw zxli5h@uLR0ESLEaVKP@b9+N`iXC9OA_AxvsD6^cDh2)^nV=na&wZe$H&SN(f$8Oea zaNOpHnAxmiUbDur8a!E55dZI=-sC(3i%H5XCUF~Od9k&Y7oEIlAcxs5adv0GVT3OW zaGo)Tkp+;(#(f4e?ikF4GclME`F>;?2Gf$qEyG}pS>mi2Ol4XIQ(*>EksPxQ`ePn{ zi5OoN7KAN&R`^RaEB+D&Gq9Jta^Tf=8*q81oFxpNRmPH@J!45Fz|(=h)yG#xo=d)x zoH1W1fL>-P=JxDaN?qpuT(Ok&Y*|V=E0$6nz*6Gpf~CY~#Zn@1!zyuvT6zdQNDW(pryPGSl)%-ryGsqG#CJ zuu$w_cVkFy3{BfaQ<`W_`$9urXt*W|u3&Byiij~o*BG6`tm>Pi+4&lF?J5DZ)~>KA zx-nY@9Zjn(3emNO-)3R>tvm$3fAkImFl@eQTf=(+l~(y>%`ZzGMU#oq9ADHkZ4^yZ zcQU5m8cccB%y(iq&~xfN(=Mhq0bH3zTW1mHLPJQR_22>P6EjHgA3!1@ay|l=m+H9E@boHEx)*p`swfMupj;wZFF-rS8h zLB_b)q)Df>PfAEKVb~E$2KW2Tw%!?XtSs;Td~}`c{ik%NYND7YIiTE@+Ra=n_7XF5 zb|BO?QhQBy8|f!ET08u~rfmf#?Y;9PKTO?vx z>0B>U9?Ebr^xh%d704cp><~DmU?6$yOOP$W3(J?tpGbzvi_%iuAAd*#x$jN+X!m-UYO(BeV|*t7R4mtNqh%CS}1PcJI`^dk1tgF9~s@}#q#EDJWR zP~m}$!!k^k9T{i9i?a9J{h?O<5O*+VpbE?*fqBGG%rhQk2)}80le4SniHw~jd3c)r z5?fIx6k&*0CPwxI_GXloiDzD!NB^Bx#%{n^HehTvAeXL@%Cw;m`DifYvtIJjyB59I zzaEzHpWUxb%Fwo+?b>`Im}YT45%jH2{7hEo$#3h``9vS}Ki%@|D`+M2pFsq@fH;yn z#NrptiBq(2MtRQMI|SEEw>s)n_k9p=IV(lMsiP zpXAO7{*Gqm z=V9w~46uNg8VIj`crY~h2)dy^?2+Uhps2G+KX(E3Bt3*f|au^ZcluyUt zgf^~Q?YIoZNT3)A6l3|4gyaf|-}2=+i5m1LYga98#+MNwp2!~%=jwFuhkg>ZYMshJ z_*b4W{P&z4{Dp3g>!nUB3(cKTh+>k<%G?1nN{nW^oJIb#6$R@;=ieOZP*@?-m-fnn z)A2qUb82WwAwrJ}j{t5|%z&{QTCZ1z&4`f*9D*0t#BM20mr9(;T`xE3u+6pP!p6n8 z=owcsYYZ>tN8_A4Smi5`t_n9E4LJG?KRIRa^(eFy_&oI{WJ+hP@dkd46I|UvKOVR7 zY6|C@&>2x%97nVYhX~BQxfQV0OFPw-;SDCYRm(+4Rb5^yJwQ{8opKinevi9!SEP_d zEA4xVK67zb%-u)39e?okupWsra`iD z)SApay^QFGv6m<#`zZI+%s8@y{4}Hdfl_%RsGR#AVqcBE;#XXasHgZ<|JVERb+iBL z#|C`;nRsyds~!R~O+60k?C`s&v&MjuMo00WB0V2_7nd|*BN+zx?kS{2ocWuF-!0$N zYy6k|8fZN-B3<54=xahNJm4{>(`z7fy*@;9c0*{@Fb&D(eYSznc` z)(qn?#i=F_OoJ2mpGBJn&rZB+nsNH;e^T%)EtTtf{;VtfJ*ZAo;_m=5HU>qBzZbZd z1H}I2N2esKJne3gAm2SDv3^18H|X_+{OO=_T)mn84n1p`{tiu>>F*y;Q;KT(|8wME z)RBX<(Ht6Xjm()lYQkb^WQdW3s)m@UQLOq$KFEQSc?bTmI)A6RT!=6boxjdpF5w`p z{Hwn&my2QGr>$fzFKBR~&xg$Acfq)?^Lx$ZI86CE|I>%%awSacI)BhyJ`ZMloqzcQ za=A*%0KLy$av`7Bn#&hRDW0$Vo?MPeF`dtv%V8;p^VjCGAth@*@OyU5Ty$oSyX1VK zfBt^C{47*5|t`U1-pJBkyoWL%X+BrW1($3HZMNXn@Xn@Gx6sBjx3QpUuN2^|kEGh7kz zsQDad)12q<_HHN27hHx@*sb{+Cnuv#Fwif;CPQC#G#uWU&x1OY{w|_lb5kr7UBuFb zereMLth+pn@F>XV@S8d_833uvp`|1VSLy$I|L5Nd;e6EQZNsxRTG1t(me!_xj^rVc zr*(FtVW-dIeKqJ=oP{rKa>{x$9t{vw1q9Us1W549X+T2J6JkIBIUIVS-FJg}{S>>{ z2b_X>*w!~qKc-Y{7A3L}V*|04*BEqh0Xn3hW57v9jEVtV6w&|p{?ES^>a+)F5vS;J z9aY$CKzZQNy`VF76j*K?fMOp(mV#MMg(edF6TvjTCkVoj{=fHs18$lB>F_j@>R)T5 z+nZqyUmH^mkJJt#sXW0@CRlYFsFqdR3H!=y%aTkoImY>8?23c(9vy-$HV`WGbXb{3 zzyuC&pFLyD+cR1S*+=yjj`_ZMYIsC{vD(Wy%y` zq*WSHJ29a(I5VyiwkH^5Ezj0*%BhIx^`PmRT24G;5l(S2T$HT-og?*Bwll=!|c0_2npk zi@l`9ZH&QpVO>`aL!v z!AxsUD~Gw17P*Gn9#;j6y#JLhPWL}~S?2Eu3lw-i1J{CNxb!~=&k z?^`;gDl$M~NO^)GMduP0|wVZ%K}Du>$VOkcc<=%snG3$l-7I-I6{}8fOYoF1mUPlJ7cDu z=*-%QTss`?k!*$CXzOP2Y{{don>$tU8QpBd9he|h^U0IpCelxl50U9DICzdMDEZUx z3z0_+xerylk*Ri*O9>TUz$VLd4sQPDqsc=d*jyqvo95=xJ9$F%8^gGysqz%a>r3K-V2o&tt7 zpwWgrxlkpgChy7Co0Z6{AkT9Ck9J5sA9V6F0ETB6KcQAZ__auKRce zOt2mZ+#HV&1VJqijcsE!+}5m3q5z0r{V>U$fuRgxYTkQ&dUzv{nSo2t?221Hp|wxpERM6>z}*>wnxP@4 zqE97@P0BNj2M%%NP<@aAu1Y7t`bwg_`QW7GEa)XKjfy+bMgV&v6`>+Gv7Ty5fD2wo z#BRWv|Eo!Xw(3RHt31bHS?7at`qDh`)YHYH5^ym+UnfGn0a>=JvO0k2I|P?l1+)0J zT#np}-WG9p87G;97a~GP=~6yK?UVEyN{TyWMnjTsk@3kDT$TKEhBsm$5tw2ido1Ss zb5UQZh+>cRm0S&_%wHw1fL&ZLiJnn zWcG!lT}&(tiUS4i&++Gf=_g4y(a2E`yc~*aXzia#^%h{-Ryv7HxUTYh@N~xh&dvv1m(W(XwZ@XqD*}tzs69 z3&sE2cdNu~tk}1X$`@7kxZ=J$iO&e?GC_qZ5S+C#0$@-Kg8mU;>I9fN1EvmDb1iE? z7Mo*-&0P8!6`&n9$G~Qi@wf^!0VZ~}(PCgTXGe6{Tz7zpe84c5g2G6{F`fh@H+J(5 zaHN`5neGyb@(9?X%4D6LvcfLs+lR0v#_VMQ@@5AAotO4$gijKJf#@MeQ>h;33` zg$(Mh)VqaBlOob0zhDz*(vjRF$JII}!IiwSb#u|u8q*R-pw$hRg$ey7n-G%5gKcx> z1kE4TNbWz$O<`9w{HC^HsvI>%vR+_U2_upAa4Ikd`9Dtvn^2c&>t_0RfRPwh?->pu zqx_EU(BdersA{4H{14TIBUo7(HK1w2uu+xOVaslY;sEqWt!sk2Lg%dUtE6+*ff!ED z8{#Xgb2j+OQv;i%b0Q*0P_=}mA?#m~92gLmF0fe2RJU*Y_F<`#+T#OJH1tpuh#BI~ zn4qb_&%|J*>{>JTQO3*#jfK;Vc#c2f`RBlh=kSQW4Ic4a*t`dixbBa5&N(pRI*)h`cHrO z&VdmpJmL{p%z4CNdBhb71y@F*Y>C=J906Q`MqHs0S9rt~tF{anaX4tim7Wn-WW-@< z#3GD{nWQQptgt}RntsHQKjPtYV8juRcvy}A3ZB!nT!t-`4Y5@EFAVdQwN3UhCC9T0 zE)}J$J^~;#{i=~RqbmyFDADZ*AR#LHR7BQ<6}i@jfR$;0Q<)6{&K5YLRW~`AF6@&r z*FT3`$w{PeE0PmmMpoP)o?n)-Ot?x?R=F$AkieLbo&%U5lTA6lA|~>G|D#M~`Tv{8 zxik->41{@f8;xf9W@>jOw&)(UZt;JZ84hEDG`CRZR_CcPov0cERxh21yvar$S5`h( zuAc*3S#--fClSL$z8cu6Ri4SzYUj+;Ci0}4TKG(+Ryk*;RuSQXCh}P~HT_Jc7N0Xyiyb}e*qNzkGPCHMnOP4x z#MDwV8_2kkoS4+5o=nfAIG7<4ALwWun|oOlMyMT1t!s|!z@+q9SQmA_bup9~>OqW7 zdsDLpS6wo=YP){c+UgcfEQ}IT$6M3QM~z)6+%ZLSi3B8OGF z7dBt|$9MmIWrcTMRam3>Gzlked}!6=04@ga2UYqD+MP^B#lfuZJCzJAT&!m>j&Jw` z4@FP=cY$_x`j+gTF=waOfJ;=sB{D|(mKf52v(=|uvaUnub9KOj85e#Y>4eWeT!-=90-L!B~QY!L`Z&M^)xV(}0{ ziL8Ffxj4-+X7t2A&50aT0&@fh;W_fo-(op`tCY^)Dh?{Kg9>L%L>g*NR|ZYz>*aH6 z@%gaZf;#|Vl;|EA5i+K%3|o4QzXsDmK^rJ&sZtitL|o4l3i|A!pcx7rgh$PDhKWf0 zZ;We>mYyKiFql@CPxoX0bU&VMzQH**Ura}Kfw%N!+%NWoj}ocb1_<=XV%|+(9M;LU z@UCgjY*fB@9oMXbi%|ZPI6P&~I6m-7@#H#x`LldiaJO~FP3=*)WSBA1?PuX&M?V=qI<}cY)ys7P*eqqyQsh)Xf zc;W>;UxoN;cw)Tgb|kkuJ-4BdqD@y8wds{bZMw3kO)iVt8G4ZD!2H`vEmYA$C2y7Q z#xnNd?GsCSdW5GR7gwDQK($!|sD4%eN(Td|F&IEizI_HD>Ywot4|4$Mh6jSKB>-wn z3!sr%18B}!0ch@E0F4d?(EMkNK???gVcxVDG$sI=GcAA?&Kf|A&I&+_2LouyU;v%> z%rWTv=`iSm0iZ+P{{(C>$?7j<4Fdkk;VqqXL#GDnr4g~kMZ<~y*Hb2Ns1ptX7iD$4 z0&n05qCgc2A+)6?9FD8qPQwzon5#eM`Zn8dLr70-N_HpSkQzeusLieU@=Z(x&I zWN5l~Xn{AhVmM*ZG!Mt`yp8na(rmu-qeZ>&FyG^@xNeNQ!kbg2H;=k227BqdlclT4 zKeC18&1&xaBeRkX=_;LYKth? ztPLF0gF@=F0DdoO!;scR&1fSwYdj>msw)1AreyN6ZvGeYcp?-B#sf#JW8`1pwTe7qSG28hJ?4-J zIW`^*9NK7yHE8Sbz_vOT^EfF=(%-H!12fIaT*n1((Clt$Hdn~PEzfAw>j&eEX-ZH~_2OMWNNTEXr3S*K6CohEKI`BoFRGPs0Xu!VZ0hBL7<%xY*P%D1xbfFHeP7*e|j!EgMWf#DP5N5;leYgeDbkuQ`JFZH{?|9$e{K;J;bYp3fO`W;aS;8}K z(SKVQON+cD-fIs>*h zGi3I|5Skc5(;Gt54WTJRNHKtxfZncoKj?S=)tje&rrVi24Yp&=8a(r*v&8i|So2yo z_jDk?`*&ZrOYt^iY;Vj0+sAnbA%+loLkQgvLK(scu)TIV(0}mfKl)b9GoKdQW#-Ff ziS6?U(FtAVo(|-H@b!1^LzIod_Qq+jeK)v0Y|< z(JZljv0yup$OCzTjuY-Uk&eIl_y2a^9pL1G?F(mt?W<;q?M<}aQlwzq)oA&?C?)1dDY`o4yaYus_ofc&#x zzW>f{XCaVs?xqfjb@T@_4>tiJ&j)VKW!&VMkC8-4|5-?P#_}Qh?`Suh16&#gE;WS} z-?jw{jdN_gm+FiDS=)o98e#V^cOG`qfworf#Fu@7T2Pe&i3{ zv&RsZEW*4anK5m6;6$0;fJZLE2o~`O7V!v(WiN)5FpLe_lnsgzATk^MFUUr@|1ky| z^}m4oUm*Q|`PkksOaFCrR_D&@JnuSt% zjZwb~riJ%!zVeExkzQZe;x2=gA288f!`ZaD&6HU}e^!y}l( zBOrDi1CxeNUybwt>tyVyTa=|7~WsJ|BpUQ@=G0RV2XLCJmX0I z+q2~eaM?VJU>=WP9*=;?iv}hQ1CyGJNjw6AdmVT_hx*67EA;ss^goCDpCkPr`Lp{c zf13LrL1!b}*$B^j1P2FZ-t*DxeC~BV_ew;i0XjX5jo6fph+gLc6Y7M71n)UB!26G$ z{@lM&zeBL!j>!HV;dukwd$$|`E?bNdEanj`<`K+C*e0RRFfggfn8YI>xDNr}=Fz<8 zQ2%r2^Lglh9``>_`v2!&o_yb(-2Z%ZHlI72&-0#7;~z2eZlc#F_uAxMiKNg*nu}iN za<6lx*M-1@6!V5vcAkNEihfh>H#PHq+nXOEad8fHoz34wjK5BQKvRY`VV{+^92f`n z-{SsT+&>YQ1b8$IJZdr?asN#*Mb81;Q|^D>K)C<;N8h=E(R>d2n!|m~;c3qyu+69M z7PH7h-41iN!`v-V6xv4%(d|O+cA<3J%J}4IgwThk4Qxqymn;G*&0|#JZvWvg_P&*b z)p6?o9?ZT|pxZnF`^dClzxPd#{k~>2pNG!oacA>* z-tz!9Gw&+;t#ZFr?w2Uag2C*Y(R{vu8~u(91oxqjJaLlxoewmhhj~ZzXL>Z(=wEaH zn)@f(GIuch9s!!qKONkk`sBO65KWKf^US;(=(oZBHn?A+D2oQO?-c#cIUT&;_^Zc% zC7wN+hv+}#{zLAcXv@NZ%)5l<)5HDI&%bkD<@9(yihf7A-%;*2oR)p_Ir6;I!TSSm z+V?xv+2eVF{uAy$v100A<~>V1|LtG=`Cqu>^myJU9w*bX@7dw`y?=Y;jjx$Kp4ZTS zjr*@zF?lfao+X~Y_0OMv(@&iq&-=vV+O+I@c6k2Bk9=Y3r)H1mbJ71??tiWolLs^J zS>pN0U;6D|yz}&U-X|Q-otAyi4$t5I_IH2a&e`MnLiE3o`(J3qlT*KWkD5K6 zp8@~2cpiChkI;X_{YTROFa7Kr|3vz)ptA~hR^fS9JUkznJqIUv&jFszF;Z?iP(0po z>{DM6xrI1B=3U_#$MWAkQ&T#74sP+hYS1+rXwrVk{^}~R6}VX=WzdXr2h)w9+UP!oV+@Nnd#4V{qtiaH^l?ZEi@#fmQ2IH=cC{G z-0ytpcQMu>h8mhszoQ1;{f5PV{=4^oxMB_vqD@5HLiz(UQ#=sQ2l4L_(92=$&8F;4 z;otWBpqeGl%+wF}FWvjWy(BjgsyEPCgF9>Ryn!e&eORA{f73=LA#Hp=rx{x2ZP&@}ve4yG6CJ|DHdHf5Xxu_!fI`kI{e3{m0V(zdil+dtU<^#h|l;kP&5Q8vb1w#J}eP-VIug z4ocN2C%fZ>G7@_}&`;WMP!SaRd7|yef zS(#e|^qI%#!@d9OAASB`f0_?2n#S0?fG1f#AI2$fF9T=x-8XGX&ol})t{t#j=(fe( zwxrvye&r8;=T4jmw_}>o1>N=q1gdto-KIf&N4NbQIL!t9XrD(tpWkhtPpxI$c19S~ z>9#u=Dq?k1w)7H{DzdXeFQGpfd@6$Me0XUD*?B8;i~f8EvdRZpTdF`@ApS1!RZn+^ zI@+f0VwVCgWco+|_b|9l6g3R2(+dh$Oa+{M2<{xMKS$6+9&J zNs08pmyx*MaWbhu>OLvm8qR zjhBE{q3k+K*Q@T^PXG1YWaE;XEH0gYYwY>A#?HSrX8+dhD>=x@j)bR=Y6)`Jb(04&b6Y~C4-+o{wd><@zGE+cO6yMDT}&U!^@sWn-SO(imQqw%2VTd zjQ}|oAah%s{9Ak7?b*+vH(Xe(%;8n5xS6dbe7jdMbawyOn?-sC-v(3st@DS5g66yu&1&oUKM0xN4+{yI4Zo z%v~%c667wH(dxU4i@FFlF&8iHqVBr60G4QX_2}PCu^*eh92Y@1f6U&%)5qw>nLj3fkp9_&FgbOdhZJv9=tw?T-b)_%d ziUm~E<>j5qgPj1!c!76}7r0}*fRFK3a70Nst2eo-^sL@&0kdZHCR`dTGG?U2oXsbZ zyxW+~yA64FbT;pf%DYQu^X?M%$Xptvuj`H93|u}z;~d$EHXtA9h7KncluCCJoEIUI z#zeQql38A}f7!r*q`^U)u>^4jGX`-+62z&!AWmB<&n3GKm$0-yO%$aY=a^mINjHP#7uYX>S=Q=emuInt~GWapdgL@cec$ zX&f?_ar|1h^;ae}_fjI+=}(B4Z)Phc3erYG!MHA`P74x9=4Mocn@~sW| zsQKG6e@{LA)7|{`P5IBz8j=Viw{yLfW`Z5JZZYleEa0@>d5brdednhM%P z=;#gn`2Q+PZ2*->{FzO*Ru;o(cmE6Dv41|zL`l(?yd%F#lzyzOTapmAwV{(15xNAVC)G=_3e$nB9p&5a`!KsOEB4MH zx(t8K+d6R`O6{UJ-?k-JM3u2D;Z}NK7kwe**9Om1^Y`OshpYXdMFR9)S$O*<0|-;2 zQ`}-Dq#@ke`d4CLm`Vuh5aqjG%OiOy37Ijv#=hIy`m#dQ{nkyblj;TnR(S-5_+n9d zM_?yLaY_0``31#?Y>20c7$R=`Gq^w@@{;6oepVj6o0<+8J-c+@b-H$87|_v1o{q(mGrL60iY$ zXdUgU#ckknh@P=@ygbkaXeHAE-RP?vQU}0##bT6_!#xlMf?w3T*C3%htyotB_NoGVV-IH`$)Gk$fv^NiMpy}#XM|Of@D8%6LD*RSD8q}; z;c@iOB)*A^$)T*5Std}ibsd>FdH^UK1kz%P@oc9U^AsJ_l!RcFra5?%@`QPl4w$pI zNtNBCs%Mj`L7S9IQ`qUN@@i5ib|9Kpl?Ex3V?j$MZrb6(;@q}`;?OSs8V4X?&RU3o zmfks-#CBx9&ut(IXsdahMzgyZ%}Y7^ame}1dAP*Z0>dyz&0otvlP<(P`q|p9vlI;^ z5M@$GHjR8QMwvp=tn+Vr-tF-C_hBUaT%T-bxNI>81L6PjJ@SY~vY&pn14fm5be3G) z)M8HnR$!h}wh`J9L@ux3N*%b#`*Pxu$7aPfq>c+$U^ z{68O-JGgl2KJQ`&o;+nPw)+=5ae+IyxZl6njf?xu#U5PjG8eo2C;M>mfVp_Uf9(J+ z_L_^m{%ePDvEN+m_g|aB#X)m%(0}a+E*>@)5Bskj#l>NBaoB(D7%m<$7mxU_9mmC^ z=HgNRwG+5_%v?O?zjhKAkDH6f{nt+6;t6x{g#X&)4y=N?c+!7u2cA4-E}r^7-fKJY zWcv=YSpIAG`%i?j3GiqwIJS879u?00w07F+wv`CJz7J00A&6zzh+bK~v?e zjky>orTRfSR!%RZMNAn&qicFM8SVkoNV-^oYJPODd=APV4!j! z5u!#p(3m%r0~R={GLkAQ2i}CKXA-&W4H6&?@Y^*XIT&a)QO=3O)-FQ?sAI7t32@Ln zo^`4QSv#!_`HjTMOM4(wY>TqGYOT9&ai@u{hj0oc0t{n*MeruHm>*lr*Oo>oV;&$e z2;U9MzN%nfg&Q21=v3SW8wP}iku#v!U^9>+dJ`Lrw->e8zrlFKr(_RZNB|qjh9K%3 zluHQofKL7_O-+!d25hMb($q40AcQ`TBO?*5j4ur~m4IKwQVViN3Pm{WSXtC;*|Iolsq<D&Kq~en1Y?vJ5sPK-7`-Wwo+Z`)xC2~f9lRdjt z@i=`*pf*8tk(!pWhcNJHW8hJRfk)+)Ouq`LG>w5rI|Gki!Knu9# zP>|O;9FngjBtOoqVLLfYUC&?)%$*Dn-oR#?vDm8Gw^%=DROvH3&!SGVL#X`|GOTcAq#CybX7A=PqwBrO} zLPy;#a;OaZ+QN5y{OZVYG9J)Fg}do!D}yo~rsIGCUCaqQMkI3qs^Ek6l+_(^E_ zi6(v``}ME^);6PV5Qqtmi)LUpy3A~5pU3BM6{LGjWmNOJnbWAGOxC7C7z-goI#9?q z4zoKU)XC#hLKd5RtR8f{GiaHymP09%CHAS$Oo`$*4w7Xv1BpwE%f+Me69Zoh1C>5d z!Nd@0XfLovPSjNHRMv88wJKK* z&#D_pE4roIsYyoC8ucmiJ+h~5?cx%EWAmrAfx^XY11Cuh%4$3`XKI;=c-cf+!4Q#G z8aqXD)B0oYSRD!}^%QG2ZTaypD8w4uKc7~f8pv6`9aW4hRpbF;a+P&WB;Sqv_OFm6 zsu0&B(QvDNH(yhda68KH+Jq|B?tqh)AN8msvpFKWIiwOb4(*AwBN;pv4zNey4AzPM zY=Czgs=^!XS;$Jw<~;611IS9%Co7TFcp`f)&SWL_&JPqRp8vw$1E+=F?gB+X|&C+R{rF@mOpH} zoY)F3jUOIcNbiNU)4UQ!+wxQQn%%B&;(!!ZsYjz#S7(cxmq*$PR0c40WSGEB52XY0fw|2ub~816zq zeaxMmkC1KGFfb9r!8kZappgdJA`Nt;sB5O6G>|M}a=y{}HcUb{kp+M{v4=WAzVoww z4mcVzmrnh(Dnkvh;`Gp*cV8KeU?!M_JunM>n1!c-S$L)}iyX|PdhWQ%W9`o`^5(bJ zB+Uckmf5&Gc?7ehfSE1+&NDHl=gu zXTA`RZ^Mb;1s5--r(#yUV-pt)cz!@~?k0Nf9;i)eY95g6l|Ij!m7)Bp&AHxe#$x=~ zA|Zq6`69T7(>!i?k2wutVHL@gsJ7{M@M<_-H1M6O%-;Onz<+5$oSOMHFhBS6w)8ula~-T&>awQsuY%7W#CG^TNofUEMDQT}e)K{5|7~kT#|whrj=^YDv!MrG%N@iQztA6V~CTUlBbl81!@bz63RCf~r4Q((w`qLRQqC^-ch z$3F4y^IZdKQtV=?i_0957S$4PD&$&Ws6FgDJg>jFf|J(cbHW@JO$sdlST8C|ejV7=fk!1B_oeDd|D$jA(ZfrRW z41}$PA{d1|01kTq96A7p4#1%RSX`2&_&|P`2AF>@Kgti{_fA0cZPfi&s;X)jBp}M1 z8s^wH;FKN|@zEZ4 zKH3`0o?W#wJXkJuLP9A&6e7=;EwpnHtt0(ePJ0vmp*B>74N^q-9@T^|)wQC0VSmD@ zoWxDBXLrSM8^55mLLJj(QWDc}V;*iitKn9P;l{HVEJ5WAVEQ&K2E6c!XWss z0rsKp=AWf&Nu-_1nztYonKd87n#)R8m~+t2WxN8>23h6m73_jn?TU#Tza(VHOc;_| z!t0aJgcF`{GHAkF_G-}LB;IV@99PMV?aIhhITbc73iPaKn;^=DTwlhLmtBZh#)Z?^ z>HwNP`*B6H8CL}yiyQ82DGr7UH)>WmNIuaVjyVSoZ(@SGdx799p^z7cWGa3;dK^~*HPOC9GG>O5-lK!^FB&#|6L9jKK8FDSG; z6mF7r7%Ad}hR%NAPdzcizuGKJE>cUM(iBxK{>YtG6VxtzIRKWMX|E^b=CiLSit z4we#2P8Hia_+%#PRAF1La$0NHf0hLS(fVya+(hR8r`4u*jdY?=>{da$o-wvnpC3Rz zqRT2u6GSNy>l#Ux>zV<-U6Hp_dAovy^z?Qr)dtMlC-JttyDbl5env=aUQX$aIS5HQ z8Enexd1LEll$Y7Mc{ANQjDuDth8y4o5)%z0nL6QpjFIvwUbKvhFkm7w0cu{(r;^+h zI?}K^Mluy@J7we7CT|*vd{B`OAl#t}haI52Ez{uN?doPwm|{l7n{FzRKM7{H@mlyt zT)cU$@du^tbA<#ec4-RvnoIfUu+1f)G)^})Z)f^J_Zza_!ne7Bh{YqtXP`6~3}H$^ zlD(wcj_i?E41hsu%OWv3Rjyz=_L+Umg_YX21s(>^paTDc$Og;itd|mNuahbxgD=b3+;(El@iUs~$$xBLv z>m@J~>7c0=ag7qu+m^_&-x&M6O54_`2s@Lq?GjGqINJ7FL~dXmNTca{6Oo}$22$yP z>kK2iFUTwly-H;2{BD$`W9`3P%O`a^VNd#mg)N$MB|`xgtoVmuBFmC?726o7&5rjd z|3YgGc8_F0gvCnYoMU(=jnW?`U~vutTv-hA6*F1O_kD%rSlk&a4lqb$;F6i@vdwGd zO!6|$_paAsj*N`>@luvBwTFly&dqst8FVwebjf0Ff@E{CLv?{Zg&gU9AK)z-*3vF( znwVMzJc#`!vhd=p(#C0a+Rz5sdD!Fh#o?fvhho`7-07DC`Tc0|8+8FLqFYD50s_07 zeu2PVPVL0`k)Vsf-bc8pp8O#(O*Z3-cReiKNd+`n>IDukGdXYwFNwCvF02YM zc*!P0GmvJy9GE6fn$Q5I(zXelqgL^G)qY1atQT}JU^+{kp5#j>2o?Q(*zW4RJu ztLYc_2DiAf%o#5!!Qt`G!&09`Vy2H-u4RV)eZ2x#VV)Av~hY_EVz8hfuuGX70rx@6UtMlyDmpU_R%3R;Cqx|XRa{9o`NW-`o}2zQZdf@4`*v{hs91{PVCND-!SQxfPx z9ZY1e#dvJ-MV$E6a|bWF&!Qfe{|PjE5QJNiRTkkP`B&k|!SN&fEpfIsYavR)s@WSU zlF%%##YVYBZCX@Ci^{a9(IVFy*CIaG0j-);=nS{Yd4#cw(AUIZNskrb4Q?H%?#SND zcXow4i=~$9oIq9Melk|umI~;YS%hgH;75A_Z(th@guk}%kJ-i*xj~xPW{fjrb_HiE z&4&p+<4pR;ne>j61KDEu3&*Ib!f%2b0x-@{?R|vkC0o%Yl!`7}U3p+F;rE2eZ`Q1U zFEKVxHO>`eiqc3zLcG#QkA2?kO=~@D8jC2}GM2<)7s#yA{iZ1Kq$;Y;N^PM|n71~$ zFn=(PkZr8p{ON$RQ*NR+mLqZh-vrRQ>+2Rv#oKL+?Rj)thh6Z{HUb{+R!DxL^8H_+ zJ*=fAdcr3ot#`44W3Ym#$tD(er|og&YR?odA@)B@GMl!eTs${+ZGEd*A+fpNqQr zo)f|vhy`A#aTdm`XF(U6nC>J*Na#goW+3;A^K|Lf;w4I%6a z6Mth7#5N&nnD6`tV-jGoVHq>7aj_^cbzm08CVu8!BkW9Mw=tN_q>>H=4@8=1h@75? zo-isx52SWm-zv^u+|B>l$Rk`AD$XDH2id_fkK`g=t>s;jdqnJ5Ra(I@D`kw@b0p(J z1n{J92~})lj|%VRZO|M;Yg2eWYd!p3eh6z9xsRES%OaTuOWCA?{czLB4X`FYOmJxZ zl34xtkjO%Vw4Fvo1iE~`87|7IR+D32l!(Pyj=*J&5+xDYA~wvOzzmo_VmtW&d=pBi zd|@}ga}z=_LdjGTW>Ux*PAPd{5+6B`Tr3A!4#eC#lDECIsj+sdEdZl?tYC1gG|xR2 zewY8;u6;*?EieNiLEh8f`1ew&2V} zZ27zZwi(Sn)3DnIiwsF|WJHep$DsE(njGYx2lmqkBXXJ&^J4X zCFw_`)>?7)BfZfO64RmeFz!UIkC+X(AY5bl7o_p1O!*g?gHtw!fb@qx=?~#%GA8nA zXh?qq(qF-!7PL0lx0v*YsPYCuvI5c{8V8jzN6ePz?8gM+p)GY^B*u0_-a|*;StyZV zGkO0fkoOqmop!?Fo;mP(i)W^xK&ykqxhHhxV2%m&FDbKl)+bxM{gU+Y z?Xt44JVx6}>)VT#N(LWiQR)^IFtA)V2G=!t{L@ zy7 zyxrSt$hUdmUdMMCmr0oQ&G^yp>6*zoV$`&;P2458mvbK@ut-+$yy+a`k6-)K2~#e={2%x`|; ziw}P6|NKi}9~>q9O%42H%?5tZ|H+Yn#|*Jt{;tAbh#wb**_}8izv`hok@DrjaLt`? zq^3)jjE>2N3Qw-QGgEZGczxmrcfj3yLf=Q-{@{-7DV`9;IDX)LZ+YJX|2LS}#=Tz{ zwzA+(YV32Y+TO3at^HbL;q6yKDapSUbo1q)t@o?^rY`(_apWj)q!yo#_6c&di!AJL zgg&Sz8ftG(nfvN0?(FkkXWL9?S@a<3!mESzVz9cOjW>KG5XhUz2ZL6-`SUUjg%=wF zN^bg|SXH;>|AnoyLZfTB+SG{`x9bvm4KsC(c%2u2r{xrY1U3YHRkOHsd{mXg7o77E z9?PLS>WZ~Z(2;mgiIY~H8OHBwKGkvIPnAq^o0T6sF}ao}#ugEg>Pvba3yH)d+eRPE z{7+*(W}+rZBqARxoQm(lW1C;Q-%zq*dXAEI!V}uSD$ONmhaFM_>@H zF^6cJzi8ljR*>fGNiL0P)0mRR6pra^V=VmJ=G4s11>)Pv?}V9sMR>X#-Be45V^H0y zXu2wiW{Yz%iPa0TRNz`;_axgx>_a*j*j*sUspakh*IjWI7x$dS*`qjauOut{n<_bK zYT$gs9C%qz$s&tlgWbGwl5hnptA)ScP{~uW(d+ft%tPak#1FZlTw;^GMw%t3LHC}R zl)U$bOD>juow>0Ty+_c6Bo1M(bFBEWUZ29Va46hMOrh7I(0QV=MJWA->hp!21)PIt z3(mnT;T$}RaQ316EO~AY0`!l$Fb(mn?=k0c(%W+Tf#1HZHy`%4`@`^LP)x@!VU@(3 zW4o=>5`7@eTu=?a0V6|?C|(|7;D#8uAv5rN^_)j>^sC8PAhzP9r(pXk>?sQF({bh=I5MXF29 z9{7yqokFo>7{VT}jK3@-MdFmiv)T=|kW~z+#!qof;bUBJ8-YU(tx}xTFE%b5b>lX} zXSWf3t%-n{n;vN4{4U_;gEta+Be8EJ{u`QEtdzn<6td%LY!Ea#7(!xj$NtHf z^uVFpu)Ni14qz9I3wJq?q#{4WfhW%lO=LSnKc#0e$s$38<}*a1_tQ_m{+fGuqRY)Z z^Z$!{i`Cx8nSK0qJf;;{p8pLp_6$8p`iFbhEgHMvIu_3E)2x%Kx0qd8r?a?kYpARTWs$Z-#pH$Yol~m=GlmkQF z@J*Zo*ysVvx>tC}`Eu`S}PIes|1Xqvx{?9A8Y?FXr9Wj*O(qzEPQ$ z^pzLjysX?ftyi$AZBl&e(xZ8|vElw=_5xBH_}uQ@G5-gS*|hxIx_pEk$PvNC9NQn} zhbBK9z#NQlBz;*^^%;cOXts&v;|ubsZ`yc)m>SNHx=R{ve%xNYuRAOTVbicoTvA-Q&U7et2_ai?gN@E+;wh6G?dz>`nXrJEGeo7-`mQKQwILq!1Ri zPa4KuXv;AFfSA7=z)8OOJ_$g8-+!OPs60ecqd+|85k8B^rZ(gYs2Du>yF78FpEp+q z@n$gLfF6|@G}!Lf`yXW6kwTjJahO#e>_i?v4wxSY-M){AA4klOD;__tc>Ear*ZW9L zYH8Ia{k>f?$I%FZD*X(Xz|)r0F=HZCdki;CH@j1G=eZV%!WoF$iI!i^CrraL6N=g7 zm!^z=oA`u@0>G{*I0YZ)8{)GM4Iw}LcZ7+*%%odaWbrj0c+z8(z?R|>a8z^$r10&= z-tMFGu=iq@$7YvTME*|lZ4g+isknM&?Yh8Ozk#89=>MSaRvDsp73~(kow5m(a}*smnHdFK%we7;KF_;CZmkiaR|P zdmS<2Mm%^%mA)DAoOTj;Xp3kK6Ihs^3}lSUsqKdLC&MPjD`*U2D5kNY9GkqYd&U{1 z#Tfg#x2DBrWF`}u$;5q=(WbspP^>RlNRmYx@^Di#X3?d3MKiDm;h`LabHunk-o~lA zoNiawvGp=y$eB+dSP~PcN+>G5#q>YvAFcIkk7&C(tRq;+?X!7N~tS}8Y&`}B-0Yy9bXg}cgMf3sd}FPH2D7{0#w^jrYgJ0vjV$~U2Ut~ z4*Wzqb+emN4zpO~KChQ|jnbhoA4o_V&H>fp5Wi~9EV6im1l5z`z*QUOvuisdyFg}Q z4nchD=ceGw?!i-z{?;`UX}H#y2lx_$)-!(YHh7(PV+HRyqD}=tjS)ic{n~dWq%mW#c?a*B*F2EJlJ^9Tp=~x#X=Jz0aHLKB<$xb z@iR=h;;m0HJ9P%_F5ZkCfg#R(kVT=}q^H z-Jn7_s)XMT2gB0~CrT4JG41PGUf)rgTXCgKROR6PE~h)W$+kSJwbLer2hloCJ^wmY zxTmt?4RBpM*U->&4UOO$8nH8KG#lSgR*Or%o}Q~{SaKC5RATo~rnz#GN;J1`Y-LB; zZ}r&r!;!@nUNcTg5|SIBWFCZRm6jO+Hr)S!`18Hho0lCHle53^cfU?Q(8mThW4X zERdzW%fH|2qM+xjkx;W6E*{435h<0>HAbyz)@oo-I4W=EO#^B7zv>DkiKl70d@V$Q) z2DU_wc=8=jPa(#!?6X(o&v~;>-&c-UFnM~Ir1bmkHRnEmDGUan?)Xl$mCIYt2DvS_dji(i&L}qotgs!EcUXM$ret{ z%J^_(fpbd@ty8lyzMi3VYF3_8vrM$`fBjyh&eF{B#Ft;Wyc*1#OJF+8Y-%flnOD0M@2%H$u(I(nEA{mm;0@97DdKYM|v5BDw??kqv zQ@xACh!DSO?6bzt>UWXsFp=HYfuxEHE+Pv@lk}>GPz3!hc>7%S5WT{7zU_D32_g0_ z$h&vldFRS7Nz=F7s}fW(m z`S#&J{-@|)i~fz!zd7{Jzdx7$jncn)^lv`>TR{KD=-)#6x2Wgc#q{sL-F)N5>(_6* z`PJ9H`sQ0VZk@PxSChwE>rA#9N@uDf;1 z)|+4bN*eYnZ@T%q4R$~`tiSP9H*DQ{-zzp=yYc2N*WGaKjT>KaT)#Qn@|rCK_H6y;%{Omeoo!SthMj$C8@12xr{{p_kJ4ir|4-2{GM?(o z)^ECX{g$n(vmn?{?*QH}yzb`f*T3+VYp>gI?W@*rdEu6=*S~Pf=IdU#{*GI2-n@0o z3pQ_|caGA#ZTfqwStEP>+MetG)pPypJ=Y&L*I2}tZh6%!Z{55RbKQFLE6fUF>FB|$ zZ+z9}Yqzf7xc>H6U~~kM8#fX-H*UR=?wUI{UHeK}jXTy~ck9;mW;N-{&Fjq?t*1%6 z!Y$tQTecP#K-udFH#V=o?#5egT)%Pat#-NH#|+1tH>@Q@Cz#!G(`&BSxaHRC2-CJ) zd(-XLzGlmh-ug=F>{ZupdBsgPzWTtM%7s*KU+G z&TidEE42PP8uCrAdEsWlvFl#=JwJK<%J2P20?S1!zW;l_Z{@Ww`kw2)=eqA-dC_$* zx@h@Nu2{K#<#pFzzjDR(%U^iYjj!B%?dI3KkWl*O>v*-d&=5DiiWmEhG?vR~EbpK} z4$g;bt0JcJoul4p+89|Y#}(X-L)HUE8iznx%H;4^u%p%xwCrpe=|2;#@8>N=CjSF zx7Dj{zdzVBt{=Vi`kVVl`%=M6dQfh76ZY2X)%|p!=lgX97WX&)G6K=&E$atE!t~&8 z;^`&_>P)XP?)FZLzwaCVS%UMGH*UNZgPP#KKWJ!oWd5B`|1Jn1)dj(IglUAl*SyR$ zd+WyAH(z_pD+rUvFT5rr{3f)%=86s1WU@t=Ry0gIouGXE9X&i^>9p;8ZLi(D**5;2 zW=x4`^VK(Q*#i1VSa=gPam~?6i`)M@`iu6jzx9@zZoH0G%)UYQPSUdx@10vWZrFJ9 z?Hj2FqPH8jQY*_cyFJm@XjR_-PWp>JZ`{blD0}6#Th_0*Xm$2Obid`@{~tGQ-1?&L zS(QESdD-*v{maewucp6|nZKnW--SK8e)Ib5_VwATZq81=xVlh)87Owut-4E;8RtB#YXy9qklxrw!VP4 zsJ;JF=KiaR{$v|(-b$ThjDB>_zVowY{rqdl0Iy#E>YF#e<^`|XeDm$uPhNW?t>0BQ z+_)vXg$PJS(|MWu{*BYW|KW(Dp^`Ul%&x!r6}N6# zzxfq>W6LXu!CrgIjjsU4Yyle#9!Od^H3(k0@%z8`hF5+6_g-|vtCp|Y^t~4?f7Pm6 zFX~=*?XBNi^z&}|_ad*~4`EHc>p!M{7kbx!L;sfXxURi*>kT(=zVWBlUw=_eaNssW z`CdtE?k8`&?nc@|#Nw~L=@rcPiI>uQDRBFiTVHY0%{Sk&1v1F1*7I+H9sgt+PK)}A zo37nVPvr@KxaF2>H{N*NbW;z4BQ(Y;wSNos16;bpjBC5;_x1D_GTJ-oFJS%KHIXSS z3AveYYqOQWHVf^#e*G<5Z@B&D%^T>wOHI2;y+!gm$$NF_ub1NYki8qO-SYo)b0yGG zm09{#y;o~0Nfji7Z18|U7E+bkmjnobBoM>|3Hz2*s$LeTC0z?7t+bT@#|0J9IW40{ zM;&+DZKhj$6osB?QM(m&jtJV0+8*rgGvg>8r`54-Gxz@gd#RVl)`}i`x{lAP`~Lm@ zclqx9|Ijalkq1J8@yp~qzz`J9WQ>13zVeW9qObg>ormHHf%FaATn9EJ)lYF(S&o^x z7{0fOwvMd(9QgYzW}Sk^aiiWz$a8zh3-SaD{4zh#0M9&l=EEa@zu@%sM4{&a09z9m zCAO2>`$mSw5ZKQ`8K2%$(>iEB5@0+eJS-p$5|IY07X*~u6A^fXk!S$!GMSm0Gx&iM zCaS}~H=W%Nd~Tw4S*mkBKTwuS>sxcFuF3h)q@Wj}Jf)L~I@Iq-T?o`WUY7tP4)Qll zgryI-l{V?Rk8N_6mxw{Tx*B8&HRpjA;yD}h0+mlAz%aI=@gkny0;gi zYdTD}{g2@>e#_b^#6<0ElOW)#REt( z>SE?}B>I|#BGJ_l?+#)H01Ow2J$Q`8>iG{W6a}mnEuB0sVVYznR=FMZDbzonl|U<7 z1!X92i-R%5iGx9K`TTeo#>18Z3WhqE4ca(~A`V5}@yx~GB%1w@>YXKn0U;F0)DV+* z0P12SfjWchlhfG8s^tyME9?0+7$Wee!C4fC%uIBXCCx#4<#iI5`uMF$|UNs{kP#G|~3^mstSIEfuXB*JHR zBS=s^42_7##&^OuAMXW`P4MGxkNoHjhM>m~Wny>$r9z;wC#);ALjbu6!T>R=Fa%Ny zMLZyT08JD)WoKpMS7NFPs_v+jmWf?L05Od570#vyaNG6)oC8cnz9JjHD$Wlk;wjh+ z(wM9;m58U&2ZP9>EXQgwc!6aP@)*hBq7oo+y#U>?^8wI}*mfZ{07@dv;MWR#KTHT= zf)EMe^08mA9Yo$prUj|RfKV`V)w@fgHR03XFs2%fc_MV0_! zX0u@@3urcLEko@J=B}jdl0a2K2!o(bEu`{H%7JNdz~h*Wlh^S>ol>bze>w`7eM0#r zu@5n|vML@YGBhrs{lUROAqHH=#le3;5Y0XmO{0Z})_ddXA} zwgBZHt4Yn6Z2d;DeiQI=vBYj9C@h_Tu9~wptR;~k{3fYJd7YLle;`Ofi#xm`mz<^g4QQIt)V<;sSG50|k`t#<2?E_(9(eMT#5l@1?hJ=ZzvsLC7MkG!A|H&0>=~P zuoU$nlu8F9V(mr5IW2)eIWZ7|VZ_~7k?sMD1vE2p4Q-4RWrj#Zh&ANp%f|TtFoXXg zaH5`naVqtD(%NyqPQp9%^DQKZOv-ZUxIms{4?dqt^)tWN%&5ofqRYa1Afa(uxuTfv zjZ}|lST8at8__N=rsIizj{)AJI_C3~k@F8g zUBnMREv8Yq)P}M)+v$tNbUh-o$A$NUVk)~L>-j;#`>bqpCDbR&`7V`Klu%r-BEI9| zbfh!g13D@3neZz^QOTIDd%Nrt;(k$)r}kx{OIQ?4h5BKY(#FCDLAXj>x@ZEJ zyP>b*tS>=>8-bPr`af{_=0Ac8sw;Xdw!kVwkSwxBbfRX+Igs%vL5E|jI zWEez!BKSdMNFaL{u?Fa<)o<(Q*@`F!SuR4ipr}|jX;;$VlTfM2|A+@0FG4dR{f?!h zJ>U%_Qb>k^U_+89H2{HZEmBH>K$`Idl0X)nB#cYuOIMk#9T%~*Fo0MGYIUa)X`#E8 z@9qsolK3M|-lBi)KG!Hc@;)kSE4#&pl{+hC?U1oMvV7&Mnit#c?`3XmZf$L?{<_`c zugw#CM-(`rdq3@d(fPZ_-s-Wpj#k`lfTEJgp2)g06pK50hN2iBClYYRW)To18%d(Y zBeLlb7k~mLcKgj^N-#oU!MZhxY5=eof=idpA!dH+(lIJS1i*%;o0%SlX08jFrgsk= zW^(Rk&y`n{TDTaR1;EdFvnTB^lYU`{Z|Yp!)}~x?b{2onh`H16X64a%n4

    -pp)f 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

    6LLBOf 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 B5kCL` diff --git a/x/wasm/keeper/testdata/ibc_reflect.wasm b/x/wasm/keeper/testdata/ibc_reflect.wasm index 76802272c211af835ce28a9605e028669be041a3..3ff47810abebf1710df1f34a2cc9943d8d86538e 100644 GIT binary patch literal 271619 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

    J*7b4QlFXHRXZ*vYS$brC!_CJBB)o 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�tb~X&exeMz+(x@Cno#mds=p8hX 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 literal 269343 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

    H0;l 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

    VxSAV=Tvk>8K!}!hoeQd&lCMPuD?j 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 diff --git a/x/wasm/keeper/testdata/ibc_reflect_send.wasm b/x/wasm/keeper/testdata/ibc_reflect_send.wasm index fcb0ce69f0fb7329036df12ff1243ea9e2e3bdaa..b23c7bf648fd0d5f2e6e8faa639da4fdbb81a3e0 100644 GIT binary patch literal 282952 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 z z{M72_-F$~ze^1A0)AF4knf`QF%iP8_tqb$(f3o6B!EBd-FL3XbsFD!I5FU zyV&zN7>sn10`4sD6j%kNX*uJj{d#Y)dp30&sJWEJ*Z4{JNSXtt)uzCqLr>|2-Wp(w z`&i^|a1%JtT{q)i?t1Bl%r@7n%cd^&7SNjOc20NcFPU{ut8)huZVHgRd0xWLCHR22 zmvY(B@*RJXzsOt6$v$p6!x@Bi?h1de*W~WuT<mDcMW!x5*BUF4&5@XzFdKveJLYj*Ll;fQy zTKTT~_N3!8%EVGX;eLSj9q$ja54s&Qy8JfUTIZjZbTj91>PdSYE6eTmg}{`1$n`U` z4K`i(6nA>sPkuI|Ag_y7O^ literal 279218 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

    n2EH|$r*ggz0tsztt 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

    NoL3T|= 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 E7p`e~(*OVf diff --git a/x/wasm/keeper/testdata/reflect.wasm b/x/wasm/keeper/testdata/reflect.wasm index 7e4fa531b17cb07e793dd851fa0415b8fb3d1d38..3ca95363a0f11664ad41e6eae320f082745621c5 100644 GIT binary patch literal 291178 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μ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

    u~eU(iL)e)8n6JzF*8Btg!T0kcw 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 FzX57p)iVG9 literal 256190 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 From 6189e17271cbb5d0ffd7538fe3f1953f7ee4b180 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Mon, 12 Apr 2021 21:39:19 +0200 Subject: [PATCH 25/56] Add ReplyOn fields to SubMsg, state is bech32 not canonical addresses --- x/wasm/genesis_test.go | 12 ++++++------ x/wasm/keeper/keeper_test.go | 4 ++-- x/wasm/keeper/reflect_test.go | 6 +++--- x/wasm/keeper/submsg_test.go | 3 +++ x/wasm/module_test.go | 19 +++++++++---------- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/x/wasm/genesis_test.go b/x/wasm/genesis_test.go index 6d63c1fcff..5beeb54b5d 100644 --- a/x/wasm/genesis_test.go +++ b/x/wasm/genesis_test.go @@ -68,9 +68,9 @@ func TestInitGenesis(t *testing.T) { assertContractList(t, q, data.ctx, 1, []string{contractBech32Addr}) assertContractInfo(t, q, data.ctx, contractBech32Addr, 1, creator) assertContractState(t, q, data.ctx, contractBech32Addr, state{ - Verifier: []byte(fred), - Beneficiary: []byte(bob), - Funder: []byte(creator), + Verifier: fred.String(), + Beneficiary: bob.String(), + Funder: creator.String(), }) // export into genstate @@ -90,8 +90,8 @@ func TestInitGenesis(t *testing.T) { assertContractList(t, q2, newData.ctx, 1, []string{contractBech32Addr}) assertContractInfo(t, q2, newData.ctx, contractBech32Addr, 1, creator) assertContractState(t, q2, newData.ctx, contractBech32Addr, state{ - Verifier: []byte(fred), - Beneficiary: []byte(bob), - Funder: []byte(creator), + Verifier: fred.String(), + Beneficiary: bob.String(), + Funder: creator.String(), }) } diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 9302fae123..7a815d4342 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -933,11 +933,11 @@ func TestMigrate(t *testing.T) { // and verify contract state raw := keepers.WasmKeeper.QueryRaw(ctx, contractAddr, []byte("config")) - var stored map[string][]byte + var stored map[string]string require.NoError(t, json.Unmarshal(raw, &stored)) require.Contains(t, stored, "verifier") require.NoError(t, err) - assert.Equal(t, spec.expVerifier, sdk.AccAddress(stored["verifier"])) + assert.Equal(t, spec.expVerifier.String(), stored["verifier"]) }) } } diff --git a/x/wasm/keeper/reflect_test.go b/x/wasm/keeper/reflect_test.go index 1e60db4c85..c4cba0b07d 100644 --- a/x/wasm/keeper/reflect_test.go +++ b/x/wasm/keeper/reflect_test.go @@ -381,7 +381,7 @@ func TestReflectStargateQuery(t *testing.T) { } type reflectState struct { - Owner []byte `json:"owner"` + Owner string `json:"owner"` } func TestMaskReflectWasmQueries(t *testing.T) { @@ -418,7 +418,7 @@ func TestMaskReflectWasmQueries(t *testing.T) { raw := keeper.QueryRaw(ctx, reflectAddr, configKey) var stateRes reflectState mustParse(t, raw, &stateRes) - require.Equal(t, stateRes.Owner, []byte(creator)) + require.Equal(t, stateRes.Owner, creator.String()) // now, let's reflect a smart query into the x/wasm handlers and see if we get the same result reflectOwnerQuery := ReflectQueryMsg{Chain: &ChainQuery{Request: &wasmvmtypes.QueryRequest{Wasm: &wasmvmtypes.WasmQuery{ @@ -453,7 +453,7 @@ func TestMaskReflectWasmQueries(t *testing.T) { // now, with the raw data, we can parse it into state var reflectStateRes reflectState mustParse(t, reflectRawRes.Data, &reflectStateRes) - require.Equal(t, reflectStateRes.Owner, []byte(creator)) + require.Equal(t, reflectStateRes.Owner, creator.String()) } func TestWasmRawQueryWithNil(t *testing.T) { diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index bc0fa98ea3..4b27ad9fbc 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -61,6 +61,7 @@ func TestDispatchSubMsgSuccessCase(t *testing.T) { Msgs: []wasmvmtypes.SubMsg{{ ID: 7, Msg: msg, + ReplyOn: wasmvmtypes.ReplyAlways, }}, }, } @@ -322,6 +323,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { ID: tc.submsgID, Msg: msg, GasLimit: tc.gasLimit, + ReplyOn: wasmvmtypes.ReplyAlways, }}, }, } @@ -423,6 +425,7 @@ func TestDispatchSubMsgEncodeToNoSdkMsg(t *testing.T) { Msgs: []wasmvmtypes.SubMsg{{ ID: 7, Msg: msg, + ReplyOn: wasmvmtypes.ReplyAlways, }}, }, } diff --git a/x/wasm/module_test.go b/x/wasm/module_test.go index 35fdc0b782..514cc5a66c 100644 --- a/x/wasm/module_test.go +++ b/x/wasm/module_test.go @@ -8,7 +8,6 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/types" - wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" @@ -135,9 +134,9 @@ type initMsg struct { } type state struct { - Verifier wasmvmtypes.CanonicalAddress `json:"verifier"` - Beneficiary wasmvmtypes.CanonicalAddress `json:"beneficiary"` - Funder wasmvmtypes.CanonicalAddress `json:"funder"` + Verifier string `json:"verifier"` + Beneficiary string `json:"beneficiary"` + Funder string `json:"funder"` } func TestHandleInstantiate(t *testing.T) { @@ -192,9 +191,9 @@ func TestHandleInstantiate(t *testing.T) { assertContractList(t, q, data.ctx, 1, []string{contractBech32Addr}) assertContractInfo(t, q, data.ctx, contractBech32Addr, 1, creator) assertContractState(t, q, data.ctx, contractBech32Addr, state{ - Verifier: []byte(fred), - Beneficiary: []byte(bob), - Funder: []byte(creator), + Verifier: fred.String(), + Beneficiary: bob.String(), + Funder: creator.String(), }) } @@ -311,9 +310,9 @@ func TestHandleExecute(t *testing.T) { assertContractList(t, q, data.ctx, 1, []string{contractBech32Addr}) assertContractInfo(t, q, data.ctx, contractBech32Addr, 1, creator) assertContractState(t, q, data.ctx, contractBech32Addr, state{ - Verifier: []byte(fred), - Beneficiary: []byte(bob), - Funder: []byte(creator), + Verifier: fred.String(), + Beneficiary: bob.String(), + Funder: creator.String(), }) } From 84a6c4d7f454ec33ca6787c640adbfc9e2f7cc19 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Mon, 12 Apr 2021 21:49:43 +0200 Subject: [PATCH 26/56] Fix gas prices --- x/wasm/keeper/keeper_test.go | 4 ++-- x/wasm/keeper/recurse_test.go | 12 ++++++------ x/wasm/keeper/submsg_test.go | 10 +++++----- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 7a815d4342..18decb1429 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -283,7 +283,7 @@ func TestInstantiate(t *testing.T) { gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x11ca8), gasAfter-gasBefore) + require.Equal(t, uint64(0x1229f), gasAfter-gasBefore) } // ensure it is stored properly @@ -516,7 +516,7 @@ func TestExecute(t *testing.T) { // make sure gas is properly deducted from ctx gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x12963), gasAfter-gasBefore) + require.Equal(t, uint64(0x129d6), gasAfter-gasBefore) } // ensure bob now exists and got both payments released bobAcct = accKeeper.GetAccount(ctx, bob) diff --git a/x/wasm/keeper/recurse_test.go b/x/wasm/keeper/recurse_test.go index b0f45c384b..08cbf31fc9 100644 --- a/x/wasm/keeper/recurse_test.go +++ b/x/wasm/keeper/recurse_test.go @@ -57,12 +57,12 @@ func initRecurseContract(t *testing.T) (contract sdk.AccAddress, creator sdk.Acc func TestGasCostOnQuery(t *testing.T) { const ( - GasNoWork uint64 = 44_074 + GasNoWork uint64 = 44_072 // Note: about 100 SDK gas (10k wasmer gas) for each round of sha256 - GasWork50 uint64 = 49_744 // this is a little shy of 50k gas - to keep an eye on the limit + GasWork50 uint64 = 49_763 // this is a little shy of 50k gas - to keep an eye on the limit - GasReturnUnhashed uint64 = 287 - GasReturnHashed uint64 = 262 + GasReturnUnhashed uint64 = 283 + GasReturnHashed uint64 = 258 ) cases := map[string]struct { @@ -221,9 +221,9 @@ func TestLimitRecursiveQueryGas(t *testing.T) { const ( // Note: about 100 SDK gas (10k wasmer gas) for each round of sha256 - GasWork2k uint64 = 272_797 // = InstanceCost + x // we have 6x gas used in cpu than in the instance + GasWork2k uint64 = 273_566 // = InstanceCost + x // we have 6x gas used in cpu than in the instance // This is overhead for calling into a sub-contract - GasReturnHashed uint64 = 265 + GasReturnHashed uint64 = 262 ) cases := map[string]struct { diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index 4b27ad9fbc..f5f8f6baed 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -59,8 +59,8 @@ func TestDispatchSubMsgSuccessCase(t *testing.T) { reflectSend := ReflectHandleMsg{ ReflectSubCall: &reflectSubPayload{ Msgs: []wasmvmtypes.SubMsg{{ - ID: 7, - Msg: msg, + ID: 7, + Msg: msg, ReplyOn: wasmvmtypes.ReplyAlways, }}, }, @@ -323,7 +323,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { ID: tc.submsgID, Msg: msg, GasLimit: tc.gasLimit, - ReplyOn: wasmvmtypes.ReplyAlways, + ReplyOn: wasmvmtypes.ReplyAlways, }}, }, } @@ -423,8 +423,8 @@ func TestDispatchSubMsgEncodeToNoSdkMsg(t *testing.T) { reflectSend := ReflectHandleMsg{ ReflectSubCall: &reflectSubPayload{ Msgs: []wasmvmtypes.SubMsg{{ - ID: 7, - Msg: msg, + ID: 7, + Msg: msg, ReplyOn: wasmvmtypes.ReplyAlways, }}, }, From 1bec9259aade188abc7fdc869c5f0dc96492c656 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Mon, 12 Apr 2021 22:11:07 +0200 Subject: [PATCH 27/56] Test to show conditional replies not implemented --- x/wasm/keeper/submsg_test.go | 129 +++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index f5f8f6baed..c33a4de36e 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -453,3 +453,132 @@ func TestDispatchSubMsgEncodeToNoSdkMsg(t *testing.T) { assert.Empty(t, sub.Data) require.Len(t, sub.Events, 0) } + +// Try a simple send, no gas limit to for a sanity check before trying table tests +func TestDispatchSubMsgConditionalReplyOn(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, ReflectFeatures) + accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper + + deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) + contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) + + creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit) + _, _, fred := keyPubAddr() + + // upload code + reflectCode, err := ioutil.ReadFile("./testdata/reflect.wasm") + require.NoError(t, err) + codeID, err := keepers.ContractKeeper.Create(ctx, creator, reflectCode, "", "", nil) + require.NoError(t, err) + + // creator instantiates a contract and gives it tokens + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "reflect contract 1", contractStart) + require.NoError(t, err) + + goodSend := wasmvmtypes.CosmosMsg{ + Bank: &wasmvmtypes.BankMsg{ + Send: &wasmvmtypes.SendMsg{ + ToAddress: fred.String(), + Amount: []wasmvmtypes.Coin{{ + Denom: "denom", + Amount: "1000", + }}, + }, + }, + } + failSend := wasmvmtypes.CosmosMsg{ + Bank: &wasmvmtypes.BankMsg{ + Send: &wasmvmtypes.SendMsg{ + ToAddress: fred.String(), + Amount: []wasmvmtypes.Coin{{ + Denom: "no-such-token", + Amount: "777777", + }}, + }, + }, + } + + cases := map[string]struct { + // true for wasmvmtypes.ReplySuccess, false for wasmvmtypes.ReplyError + replyOnSuccess bool + msg wasmvmtypes.CosmosMsg + // true if the call should return an error (it wasn't handled) + expectError bool + // true if the reflect contract wrote the response (success or error) - it was captured + writeResult bool + }{ + "all good, reply success": { + replyOnSuccess: true, + msg: goodSend, + expectError: false, + writeResult: true, + }, + "all good, reply error": { + replyOnSuccess: false, + msg: goodSend, + expectError: false, + writeResult: false, + }, + "bad msg, reply success": { + replyOnSuccess: true, + msg: failSend, + expectError: true, + writeResult: false, + }, + "bad msg, reply error": { + replyOnSuccess: false, + msg: failSend, + expectError: false, + writeResult: true, + }, + } + + var id uint64 = 0 + for name, tc := range cases { + id++ + t.Run(name, func(t *testing.T) { + subMsg := wasmvmtypes.SubMsg{ + ID: id, + Msg: tc.msg, + ReplyOn: wasmvmtypes.ReplySuccess, + } + if !tc.replyOnSuccess { + subMsg.ReplyOn = wasmvmtypes.ReplyError + } + + reflectSend := ReflectHandleMsg{ + ReflectSubCall: &reflectSubPayload{ + Msgs: []wasmvmtypes.SubMsg{subMsg}, + }, + } + reflectSendBz, err := json.Marshal(reflectSend) + require.NoError(t, err) + _, err = keepers.ContractKeeper.Execute(ctx, contractAddr, creator, reflectSendBz, nil) + + if tc.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + } + + // query the reflect state to check if the result was stored + query := ReflectQueryMsg{ + SubCallResult: &SubCall{ID: id}, + } + queryBz, err := json.Marshal(query) + require.NoError(t, err) + queryRes, err := keeper.QuerySmart(ctx, contractAddr, queryBz) + if tc.writeResult { + // we got some data for this call + require.NoError(t, err) + var res wasmvmtypes.Reply + err = json.Unmarshal(queryRes, &res) + require.NoError(t, err) + require.Equal(t, id, res.ID) + } else { + // nothing should be there -> error + require.Error(t, err) + } + }) + } +} From 42ca87d16158ae28a56e9b31fde9f5ca8944e0b4 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Mon, 12 Apr 2021 22:14:43 +0200 Subject: [PATCH 28/56] Handle ReplySuccess + ReplyError properly --- x/wasm/keeper/keeper.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 43b4e4be3d..0c99ba8305 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -831,6 +831,15 @@ func (k Keeper) dispatchSubmessages(ctx sdk.Context, contractAddr sdk.AccAddress } // on failure, revert state from sandbox, and ignore events (just skip doing the above) + // we only callback if requested. Short-circuit here the two cases we don't want to + if msg.ReplyOn == wasmvmtypes.ReplySuccess && err != nil { + return err + } + if msg.ReplyOn == wasmvmtypes.ReplyError && err == nil { + return nil + } + + // otherwise, we create a SubcallResult and pass it into the calling contract var result wasmvmtypes.SubcallResult if err == nil { // just take the first one for now if there are multiple sub-sdk messages From 1a355dcb265c6fd64e0f3696d0ebf616491e527e Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Tue, 13 Apr 2021 10:25:41 +0200 Subject: [PATCH 29/56] Continue wasmvm version upgrade --- Dockerfile | 4 ++-- go.sum | 8 -------- x/wasm/keeper/keeper.go | 2 +- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index b493b224c1..08efd1b068 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,8 +15,8 @@ WORKDIR /code COPY . /code/ # See https://github.com/CosmWasm/wasmvm/releases -ADD https://github.com/CosmWasm/wasmvm/releases/download/v0.14.0-beta1/libwasmvm_muslc.a /lib/libwasmvm_muslc.a -RUN sha256sum /lib/libwasmvm_muslc.a | grep b69cf9ffbdfb2f1bd1e6f730ecee1eb0d06a1473840a24709aec7a7df5907d45 +ADD https://github.com/CosmWasm/wasmvm/releases/download/v0.14.0-beta3/libwasmvm_muslc.a /lib/libwasmvm_muslc.a +RUN sha256sum /lib/libwasmvm_muslc.a | grep adea8f977601daa8daa9885e02b31ca6dd0ab6d4dbbd8ba2ccfa447ffebda37c # force it to use static lib (from above) not standard libgo_cosmwasm.so file RUN LEDGER_ENABLED=false BUILD_TAGS=muslc make build diff --git a/go.sum b/go.sum index 1985319cef..2ac113ef1a 100644 --- a/go.sum +++ b/go.sum @@ -17,10 +17,6 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CosmWasm/wasmvm v0.14.0-beta1 h1:ASqXB/2D8CEBmAI/uljRw6eEMbeKXPQtL/wZzKXZGGA= -github.com/CosmWasm/wasmvm v0.14.0-beta1/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= -github.com/CosmWasm/wasmvm v0.14.0-beta2 h1:8bLLNaxj796qUwu6UuQDbqpMV9zPpxG3lNZZbswNdOo= -github.com/CosmWasm/wasmvm v0.14.0-beta2/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= github.com/CosmWasm/wasmvm v0.14.0-beta3 h1:HN1+HrC2kgO/V4voGdOWrN1sdUoTnSoLuSrBXbDVnbY= github.com/CosmWasm/wasmvm v0.14.0-beta3/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= @@ -105,8 +101,6 @@ github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cosmos/cosmos-sdk v0.42.3 h1:VFYq7spDBBIlygAxwcI79Xh2JuIrG1ZCPKpvqKghIZs= -github.com/cosmos/cosmos-sdk v0.42.3/go.mod h1:xiLp1G8mumj82S5KLJGCAyeAlD+7VNomg/aRSJV12yk= github.com/cosmos/cosmos-sdk v0.42.4 h1:yaD4PyOx0LnyfiWasC5egg1U76lT83GRxjJjupPo7Gk= github.com/cosmos/cosmos-sdk v0.42.4/go.mod h1:I1Zw1zmU4rA/NITaakTb71pXQnQrWyFBhqo3WSeg0vA= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= @@ -574,8 +568,6 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4= github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg= github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ= -github.com/tendermint/tendermint v0.34.8 h1:PMWgUx47FrNTsfhxCWzoiIlVAC1SE9+WBlnsF9oQW0I= -github.com/tendermint/tendermint v0.34.8/go.mod h1:JVuu3V1ZexOaZG8VJMRl8lnfrGw6hEB2TVnoUwKRbss= github.com/tendermint/tendermint v0.34.9 h1:9P2MXDEPOcPW0NBcHQ/HDSfvczZm+q5nUUw7AZ6f1Vc= github.com/tendermint/tendermint v0.34.9/go.mod h1:kl4Z1JwGx1I+u1SXIzMDy7Z3T8LiMeCAOnzNn6AIMT4= github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4= diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 0c99ba8305..74b4cc30c3 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -121,7 +121,7 @@ func NewKeeper( bank: NewBankCoinTransferrer(bankKeeper), portKeeper: portKeeper, capabilityKeeper: capabilityKeeper, - messenger: NewDefaultMessageHandler(router, channelKeeper, capabilityKeeper, cdc, portSource), + messenger: NewDefaultMessageHandler(router, channelKeeper, capabilityKeeper, bankKeeper, cdc, portSource), queryGasLimit: wasmConfig.SmartQueryGasLimit, paramSpace: paramSpace, } From 9ec97b5de98259a84b76e869497e517a59955057 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Tue, 13 Apr 2021 10:27:23 +0200 Subject: [PATCH 30/56] Handle wasmvm Burn message --- app/app.go | 1 + x/wasm/keeper/handler_plugin.go | 41 ++++++++++++- x/wasm/keeper/handler_plugin_test.go | 86 ++++++++++++++++++++++++++++ x/wasm/keeper/keeper_test.go | 2 +- x/wasm/keeper/test_common.go | 6 +- x/wasm/types/expected_keepers.go | 9 ++- 6 files changed, 140 insertions(+), 5 deletions(-) diff --git a/app/app.go b/app/app.go index bb32d3c531..94924455c1 100644 --- a/app/app.go +++ b/app/app.go @@ -181,6 +181,7 @@ var ( stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking}, govtypes.ModuleName: {authtypes.Burner}, ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, + wasm.ModuleName: {authtypes.Burner}, } // module accounts that are allowed to receive tokens diff --git a/x/wasm/keeper/handler_plugin.go b/x/wasm/keeper/handler_plugin.go index daf38339eb..eb184651d1 100644 --- a/x/wasm/keeper/handler_plugin.go +++ b/x/wasm/keeper/handler_plugin.go @@ -24,7 +24,15 @@ type SDKMessageHandler struct { encoders msgEncoder } -func NewDefaultMessageHandler(router sdk.Router, channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper, unpacker codectypes.AnyUnpacker, portSource types.ICS20TransferPortSource, customEncoders ...*MessageEncoders) Messenger { +func NewDefaultMessageHandler( + router sdk.Router, + channelKeeper types.ChannelKeeper, + capabilityKeeper types.CapabilityKeeper, + bankKeeper types.Coiner, + unpacker codectypes.AnyUnpacker, + portSource types.ICS20TransferPortSource, + customEncoders ...*MessageEncoders, +) Messenger { encoders := DefaultEncoders(unpacker, portSource) for _, e := range customEncoders { encoders = encoders.Merge(e) @@ -32,6 +40,7 @@ func NewDefaultMessageHandler(router sdk.Router, channelKeeper types.ChannelKeep return NewMessageHandlerChain( NewSDKMessageHandler(router, encoders), NewIBCRawPacketHandler(channelKeeper, capabilityKeeper), + NewBurnCoinMessageHandler(bankKeeper), ) } @@ -168,3 +177,33 @@ func (h IBCRawPacketHandler) DispatchMsg(ctx sdk.Context, _ sdk.AccAddress, cont ) return nil, nil, h.channelKeeper.SendPacket(ctx, channelCap, packet) } + +var _ Messenger = MessageHandlerFunc(nil) + +// MessageHandlerFunc is a helper to construct simple function based message handler +type MessageHandlerFunc func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) + +func (m MessageHandlerFunc) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + return m(ctx, contractAddr, contractIBCPortID, msg) +} + +// NewBurnCoinMessageHandler handles wasmvm.BurnMsg messages +func NewBurnCoinMessageHandler(coiner types.Coiner) MessageHandlerFunc { + return func(ctx sdk.Context, contractAddr sdk.AccAddress, _ string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + if msg.Bank != nil && msg.Bank.Burn != nil { + coins, err := convertWasmCoinsToSdkCoins(msg.Bank.Burn.Amount) + if err != nil { + return nil, nil, err + } + if err := coiner.SendCoinsFromAccountToModule(ctx, contractAddr, types.ModuleName, coins); err != nil { + return nil, nil, sdkerrors.Wrap(err, "transfer to module") + } + if err := coiner.BurnCoins(ctx, types.ModuleName, coins); err != nil { + return nil, nil, sdkerrors.Wrap(err, "burn coins") + } + moduleLogger(ctx).Info("Burned", "amount", coins) + return nil, nil, nil + } + return nil, nil, types.ErrUnknownMsg + } +} diff --git a/x/wasm/keeper/handler_plugin_test.go b/x/wasm/keeper/handler_plugin_test.go index e46989f0f7..c56be2c952 100644 --- a/x/wasm/keeper/handler_plugin_test.go +++ b/x/wasm/keeper/handler_plugin_test.go @@ -4,10 +4,12 @@ import ( "encoding/json" "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" "github.com/CosmWasm/wasmd/x/wasm/types" + wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" @@ -306,3 +308,87 @@ func TestIBCRawPacketHandler(t *testing.T) { }) } } + +func TestBurnCoinMessageHandlerIntegration(t *testing.T) { + // testing via full keeper setup so that we are confident the + // module permissions are set correct and no other handler + // picks the message in the default handler chain + ctx, keepers := CreateDefaultTestInput(t) + k := keepers.WasmKeeper + + before, err := keepers.BankKeeper.TotalSupply(sdk.WrapSDKContext(ctx), &banktypes.QueryTotalSupplyRequest{}) + require.NoError(t, err) + example := InstantiateHackatomExampleContract(t, ctx, keepers) // with deposit of 100 stake + + specs := map[string]struct { + msg wasmvmtypes.BurnMsg + expErr bool + }{ + "all good": { + msg: wasmvmtypes.BurnMsg{ + Amount: wasmvmtypes.Coins{{ + Denom: "denom", + Amount: "100", + }}, + }, + }, + "not enough funds in contract": { + msg: wasmvmtypes.BurnMsg{ + Amount: wasmvmtypes.Coins{{ + Denom: "denom", + Amount: "101", + }}, + }, + expErr: true, + }, + "zero amount rejected": { + msg: wasmvmtypes.BurnMsg{ + Amount: wasmvmtypes.Coins{{ + Denom: "denom", + Amount: "0", + }}, + }, + expErr: true, + }, + "unknown denom - insufficient funds": { + msg: wasmvmtypes.BurnMsg{ + Amount: wasmvmtypes.Coins{{ + Denom: "unknown", + Amount: "1", + }}, + }, + expErr: true, + }, + } + parentCtx := ctx + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + ctx, _ = parentCtx.CacheContext() + k.wasmVM = &wasmtesting.MockWasmer{ExecuteFn: func(codeID wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, executeMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64) (*wasmvmtypes.Response, uint64, error) { + return &wasmvmtypes.Response{Messages: []wasmvmtypes.CosmosMsg{ + {Bank: &wasmvmtypes.BankMsg{Burn: &spec.msg}}, + }, + }, 0, nil + }} + + // when + _, err = k.execute(ctx, example.Contract, example.CreatorAddr, nil, nil) + + // then + if spec.expErr { + require.Error(t, err) + return + } + require.NoError(t, err) + + // and total supply reduced by burned amount + after, err := keepers.BankKeeper.TotalSupply(sdk.WrapSDKContext(ctx), &banktypes.QueryTotalSupplyRequest{}) + require.NoError(t, err) + diff := before.Supply.Sub(after.Supply) + assert.Equal(t, sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(100))), diff) + }) + } + + // test cases: + // not enough money to burn +} diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 18decb1429..582a2eaf02 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -516,7 +516,7 @@ func TestExecute(t *testing.T) { // make sure gas is properly deducted from ctx gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x129d6), gasAfter-gasBefore) + require.Equal(t, uint64(0x12916), gasAfter-gasBefore) } // ensure bob now exists and got both payments released bobAcct = accKeeper.GetAccount(ctx, bob) diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index 31c70d1053..51511a32a5 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -213,6 +213,7 @@ func createTestInput( stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking}, govtypes.ModuleName: {authtypes.Burner}, ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, + types.ModuleName: {authtypes.Burner}, } authSubsp, _ := paramsKeeper.GetSubspace(authtypes.ModuleName) authKeeper := authkeeper.NewAccountKeeper( @@ -237,9 +238,10 @@ func createTestInput( blockedAddrs, ) bankParams := banktypes.DefaultParams() - bankParams = bankParams.SetSendEnabledParam("stake", true) bankKeeper.SetParams(ctx, bankParams) - + bankKeeper.SetSupply(ctx, banktypes.NewSupply(sdk.NewCoins( + sdk.NewCoin("denom", sdk.NewInt(10000)), + ))) stakingSubsp, _ := paramsKeeper.GetSubspace(stakingtypes.ModuleName) stakingKeeper := stakingkeeper.NewKeeper(appCodec, keyStaking, authKeeper, bankKeeper, stakingSubsp) stakingKeeper.SetParams(ctx, TestingStakeParams) diff --git a/x/wasm/types/expected_keepers.go b/x/wasm/types/expected_keepers.go index 6baf00a29a..bb8b56ecec 100644 --- a/x/wasm/types/expected_keepers.go +++ b/x/wasm/types/expected_keepers.go @@ -12,14 +12,21 @@ import ( stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ) -// BankKeeper defines a subset of methods implemented by the cosmos-sdk bank keeper +// BankViewKeeper defines a subset of methods implemented by the cosmos-sdk bank keeper type BankViewKeeper interface { GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins } +// Coiner is a subset of the sdk bank keeper methods +type Coiner interface { + BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error + SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error +} + // BankKeeper defines a subset of methods implemented by the cosmos-sdk bank keeper type BankKeeper interface { BankViewKeeper + Coiner SendEnabledCoins(ctx sdk.Context, coins ...sdk.Coin) error BlockedAddr(addr sdk.AccAddress) bool SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error From 39eed79466fceaed8297c30086ccd0fa666b4c8b Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Tue, 13 Apr 2021 10:40:13 +0200 Subject: [PATCH 31/56] Better interface name --- x/wasm/keeper/handler_plugin.go | 8 ++++---- x/wasm/types/expected_keepers.go | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/x/wasm/keeper/handler_plugin.go b/x/wasm/keeper/handler_plugin.go index eb184651d1..5a2341d608 100644 --- a/x/wasm/keeper/handler_plugin.go +++ b/x/wasm/keeper/handler_plugin.go @@ -28,7 +28,7 @@ func NewDefaultMessageHandler( router sdk.Router, channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper, - bankKeeper types.Coiner, + bankKeeper types.Burner, unpacker codectypes.AnyUnpacker, portSource types.ICS20TransferPortSource, customEncoders ...*MessageEncoders, @@ -188,17 +188,17 @@ func (m MessageHandlerFunc) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAdd } // NewBurnCoinMessageHandler handles wasmvm.BurnMsg messages -func NewBurnCoinMessageHandler(coiner types.Coiner) MessageHandlerFunc { +func NewBurnCoinMessageHandler(burner types.Burner) MessageHandlerFunc { return func(ctx sdk.Context, contractAddr sdk.AccAddress, _ string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { if msg.Bank != nil && msg.Bank.Burn != nil { coins, err := convertWasmCoinsToSdkCoins(msg.Bank.Burn.Amount) if err != nil { return nil, nil, err } - if err := coiner.SendCoinsFromAccountToModule(ctx, contractAddr, types.ModuleName, coins); err != nil { + if err := burner.SendCoinsFromAccountToModule(ctx, contractAddr, types.ModuleName, coins); err != nil { return nil, nil, sdkerrors.Wrap(err, "transfer to module") } - if err := coiner.BurnCoins(ctx, types.ModuleName, coins); err != nil { + if err := burner.BurnCoins(ctx, types.ModuleName, coins); err != nil { return nil, nil, sdkerrors.Wrap(err, "burn coins") } moduleLogger(ctx).Info("Burned", "amount", coins) diff --git a/x/wasm/types/expected_keepers.go b/x/wasm/types/expected_keepers.go index bb8b56ecec..0717a9f38e 100644 --- a/x/wasm/types/expected_keepers.go +++ b/x/wasm/types/expected_keepers.go @@ -17,8 +17,8 @@ type BankViewKeeper interface { GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins } -// Coiner is a subset of the sdk bank keeper methods -type Coiner interface { +// Burner is a subset of the sdk bank keeper methods +type Burner interface { BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error } @@ -26,7 +26,7 @@ type Coiner interface { // BankKeeper defines a subset of methods implemented by the cosmos-sdk bank keeper type BankKeeper interface { BankViewKeeper - Coiner + Burner SendEnabledCoins(ctx sdk.Context, coins ...sdk.Coin) error BlockedAddr(addr sdk.AccAddress) bool SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error From 3b16f57a1ebdb83a0cd81d444488bfaf90217870 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Tue, 13 Apr 2021 14:54:12 +0200 Subject: [PATCH 32/56] Go mod tidy --- go.sum | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/go.sum b/go.sum index 10758cbade..1e4c3937cc 100644 --- a/go.sum +++ b/go.sum @@ -206,8 +206,7 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1 h1:jAbXjIeW2ZSW2AwFxlGTDoc2CjI2XujLkV3ArsZFCvc= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= From d90bf6ec3fe3af16eb118a0c668baea69e7d2ba7 Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Fri, 16 Apr 2021 13:38:21 +0200 Subject: [PATCH 33/56] Extend ContractInfo for custom data (#492) * Extend ContractInfo with custom data * Review comments --- cmd/wasmd/root.go | 3 +- docs/proto/proto-docs.md | 1 + go.mod | 1 + proto/cosmwasm/wasm/v1beta1/query.proto | 14 +- proto/cosmwasm/wasm/v1beta1/types.proto | 7 + x/wasm/client/cli/genesis_msg.go | 6 +- x/wasm/client/cli/query.go | 51 +----- x/wasm/client/codec/marshaller.go | 78 +++++++++ x/wasm/keeper/contract_keeper.go | 6 + x/wasm/keeper/genesis_test.go | 35 +++- x/wasm/keeper/keeper.go | 13 ++ x/wasm/keeper/legacy_querier.go | 2 +- x/wasm/keeper/querier.go | 4 +- x/wasm/keeper/querier_test.go | 78 ++++++++- x/wasm/keeper/test_common.go | 2 + x/wasm/types/codec.go | 2 + x/wasm/types/exported_keepers.go | 3 + x/wasm/types/query.pb.go | 208 +++++++++++------------- x/wasm/types/types.go | 85 +++++++++- x/wasm/types/types.pb.go | 208 ++++++++++++++++-------- x/wasm/types/types_test.go | 195 +++++++++++++++++++++- 21 files changed, 750 insertions(+), 252 deletions(-) create mode 100644 x/wasm/client/codec/marshaller.go diff --git a/cmd/wasmd/root.go b/cmd/wasmd/root.go index 6b010c1c38..f8bca81e77 100644 --- a/cmd/wasmd/root.go +++ b/cmd/wasmd/root.go @@ -7,6 +7,7 @@ import ( "path/filepath" "github.com/CosmWasm/wasmd/x/wasm" + clientcodec "github.com/CosmWasm/wasmd/x/wasm/client/codec" authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" vestingcli "github.com/cosmos/cosmos-sdk/x/auth/vesting/client/cli" bankcmd "github.com/cosmos/cosmos-sdk/x/bank/client/cli" @@ -48,7 +49,7 @@ func NewRootCmd() (*cobra.Command, app.EncodingConfig) { config.Seal() initClientCtx := client.Context{}. - WithJSONMarshaler(encodingConfig.Marshaler). + WithJSONMarshaler(clientcodec.NewProtoCodec(encodingConfig.Marshaler, encodingConfig.InterfaceRegistry)). WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). WithLegacyAmino(encodingConfig.Amino). diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index 94df097d7f..16c4196174 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -185,6 +185,7 @@ ContractInfo stores a WASM contract instance | `label` | [string](#string) | | Label is optional metadata to be stored with a contract instance. | | `created` | [AbsoluteTxPosition](#cosmwasm.wasm.v1beta1.AbsoluteTxPosition) | | Created Tx position when the contract was instantiated. This data should kept internal and not be exposed via query results. Just use for sorting | | `ibc_port_id` | [string](#string) | | | +| `extension` | [google.protobuf.Any](#google.protobuf.Any) | | Extension is an extension point to store custom metadata within the persistence model. | diff --git a/go.mod b/go.mod index 52a5abc637..8a35004d34 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 github.com/rakyll/statik v0.1.7 + github.com/regen-network/cosmos-proto v0.3.1 // indirect github.com/rs/zerolog v1.21.0 github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa github.com/spf13/cast v1.3.1 diff --git a/proto/cosmwasm/wasm/v1beta1/query.proto b/proto/cosmwasm/wasm/v1beta1/query.proto index 1ddc871283..cd91c7ffb3 100644 --- a/proto/cosmwasm/wasm/v1beta1/query.proto +++ b/proto/cosmwasm/wasm/v1beta1/query.proto @@ -67,8 +67,11 @@ message QueryContractInfoResponse { // address is the address of the contract string address = 1; - ContractInfo contract_info = 2 - [ (gogoproto.embed) = true, (gogoproto.jsontag) = "" ]; + ContractInfo contract_info = 2 [ + (gogoproto.embed) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "" + ]; } // QueryContractHistoryRequest is the request type for the Query/ContractHistory @@ -103,8 +106,11 @@ message ContractInfoWithAddress { option (gogoproto.equal) = true; string address = 1; - ContractInfo contract_info = 2 - [ (gogoproto.embed) = true, (gogoproto.jsontag) = "" ]; + ContractInfo contract_info = 2 [ + (gogoproto.embed) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "" + ]; } // QueryContractsByCodeResponse is the response type for the // Query/ContractsByCode RPC method diff --git a/proto/cosmwasm/wasm/v1beta1/types.proto b/proto/cosmwasm/wasm/v1beta1/types.proto index bf976ddcb8..6e17eeae0f 100644 --- a/proto/cosmwasm/wasm/v1beta1/types.proto +++ b/proto/cosmwasm/wasm/v1beta1/types.proto @@ -1,7 +1,9 @@ syntax = "proto3"; package cosmwasm.wasm.v1beta1; +import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; option (gogoproto.goproto_getters_all) = false; @@ -83,6 +85,11 @@ message ContractInfo { // use for sorting AbsoluteTxPosition created = 5; string ibc_port_id = 6 [ (gogoproto.customname) = "IBCPortID" ]; + + // Extension is an extension point to store custom metadata within the + // persistence model. + google.protobuf.Any extension = 7 + [ (cosmos_proto.accepts_interface) = "ContractInfoExtension" ]; } // ContractCodeHistoryOperationType actions that caused a code change diff --git a/x/wasm/client/cli/genesis_msg.go b/x/wasm/client/cli/genesis_msg.go index dcee5acecf..87f4f290d2 100644 --- a/x/wasm/client/cli/genesis_msg.go +++ b/x/wasm/client/cli/genesis_msg.go @@ -32,7 +32,7 @@ type GenesisReader interface { // GenesisMutator extension point to modify the wasm module genesis state. // This gives flexibility to customize the data structure in the genesis file a bit. type GenesisMutator interface { - // AlterModuleState loads the genesis from the default or set home dir, + // AlterWasmModuleState loads the genesis from the default or set home dir, // unmarshalls the wasm module section into the object representation // calls the callback function to modify it // and marshals the modified state back into the genesis file @@ -147,7 +147,7 @@ func GenesisInstantiateContractCmd(defaultNodeHome string, genesisMutator Genesi return cmd } -// GenesisInstantiateContractCmd cli command to add a `MsgExecuteContract` to the wasm section of the genesis +// GenesisExecuteContractCmd cli command to add a `MsgExecuteContract` to the wasm section of the genesis // that is executed on block 0. func GenesisExecuteContractCmd(defaultNodeHome string, genesisMutator GenesisMutator) *cobra.Command { cmd := &cobra.Command{ @@ -420,7 +420,7 @@ func NewDefaultGenesisIO() *DefaultGenesisIO { return &DefaultGenesisIO{DefaultGenesisReader: DefaultGenesisReader{}} } -// AlterModuleState loads the genesis from the default or set home dir, +// AlterWasmModuleState loads the genesis from the default or set home dir, // unmarshalls the wasm module section into the object representation // calls the callback function to modify it // and marshals the modified state back into the genesis file diff --git a/x/wasm/client/cli/query.go b/x/wasm/client/cli/query.go index 5cca7c1fea..32409554f6 100644 --- a/x/wasm/client/cli/query.go +++ b/x/wasm/client/cli/query.go @@ -13,9 +13,7 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/gogo/protobuf/proto" "github.com/spf13/cobra" flag "github.com/spf13/pflag" ) @@ -66,7 +64,7 @@ func GetCmdListCode() *cobra.Command { if err != nil { return err } - return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res) + return clientCtx.PrintProto(res) }, } flags.AddQueryFlagsToCmd(cmd) @@ -107,7 +105,7 @@ func GetCmdListContractByCode() *cobra.Command { if err != nil { return err } - return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res) + return clientCtx.PrintProto(res) }, } flags.AddQueryFlagsToCmd(cmd) @@ -183,7 +181,7 @@ func GetCmdGetContractInfo() *cobra.Command { if err != nil { return err } - return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res) + return clientCtx.PrintProto(res) }, } flags.AddQueryFlagsToCmd(cmd) @@ -240,7 +238,7 @@ func GetCmdGetContractStateAll() *cobra.Command { if err != nil { return err } - return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res) + return clientCtx.PrintProto(res) }, } flags.AddQueryFlagsToCmd(cmd) @@ -281,7 +279,7 @@ func GetCmdGetContractStateRaw() *cobra.Command { if err != nil { return err } - return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res) + return clientCtx.PrintProto(res) }, } decoder.RegisterFlags(cmd.PersistentFlags(), "key argument") @@ -329,7 +327,7 @@ func GetCmdGetContractStateSmart() *cobra.Command { if err != nil { return err } - return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res) + return clientCtx.PrintProto(res) }, } decoder.RegisterFlags(cmd.PersistentFlags(), "query argument") @@ -371,7 +369,7 @@ func GetCmdGetContractHistory() *cobra.Command { return err } - return clientCtx.WithJSONMarshaler(&VanillaStdJsonMarshaller{}).PrintProto(res) + return clientCtx.PrintProto(res) }, } @@ -423,41 +421,6 @@ func asciiDecodeString(s string) ([]byte, error) { return []byte(s), nil } -type VanillaStdJsonMarshaller struct { -} - -func (x VanillaStdJsonMarshaller) MarshalInterfaceJSON(i proto.Message) ([]byte, error) { - any, err := codectypes.NewAnyWithValue(i) - if err != nil { - return nil, err - } - return x.MarshalJSON(any) -} - -func (x VanillaStdJsonMarshaller) MarshalJSON(o proto.Message) ([]byte, error) { - return json.MarshalIndent(o, "", " ") -} - -func (x VanillaStdJsonMarshaller) MustMarshalJSON(o proto.Message) []byte { - b, err := x.MarshalJSON(o) - if err != nil { - panic(err) - } - return b -} - -func (x VanillaStdJsonMarshaller) UnmarshalInterfaceJSON(bz []byte, ptr interface{}) error { - panic("not supported") -} - -func (x VanillaStdJsonMarshaller) UnmarshalJSON(bz []byte, ptr proto.Message) error { - panic("not supported") -} - -func (x VanillaStdJsonMarshaller) MustUnmarshalJSON(bz []byte, ptr proto.Message) { - panic("not supported") -} - // sdk ReadPageRequest expects binary but we encoded to base64 in our marshaller func withPageKeyDecoded(flagSet *flag.FlagSet) *flag.FlagSet { encoded, err := flagSet.GetString(flags.FlagPageKey) diff --git a/x/wasm/client/codec/marshaller.go b/x/wasm/client/codec/marshaller.go new file mode 100644 index 0000000000..ba5cc4d631 --- /dev/null +++ b/x/wasm/client/codec/marshaller.go @@ -0,0 +1,78 @@ +package codec + +import ( + "bytes" + "fmt" + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/gogo/protobuf/jsonpb" + "github.com/gogo/protobuf/proto" +) + +var _ codec.Marshaler = (*ProtoCodec)(nil) + +// ProtoCodec that omits empty values. +// This Marshaler can be used globally when setting up the client context or individually +// for each command via `clientCtx.WithJSONMarshaler(myMarshaler)`. +type ProtoCodec struct { + codec.Marshaler + interfaceRegistry types.InterfaceRegistry +} + +func NewProtoCodec(marshaler codec.Marshaler, registry types.InterfaceRegistry) *ProtoCodec { + return &ProtoCodec{Marshaler: marshaler, interfaceRegistry: registry} +} + +// MarshalJSON implements JSONMarshaler.MarshalJSON method, +// it marshals to JSON using proto codec. +func (pc *ProtoCodec) MarshalJSON(o proto.Message) ([]byte, error) { + m, ok := o.(codec.ProtoMarshaler) + if !ok { + return nil, fmt.Errorf("cannot protobuf JSON encode unsupported type: %T", o) + } + return ProtoMarshalJSON(m, pc.interfaceRegistry) +} + +// MustMarshalJSON implements JSONMarshaler.MustMarshalJSON method, +// it executes MarshalJSON except it panics upon failure. +func (pc *ProtoCodec) MustMarshalJSON(o proto.Message) []byte { + bz, err := pc.MarshalJSON(o) + if err != nil { + panic(err) + } + return bz +} + +// MarshalInterfaceJSON is a convenience function for proto marshalling interfaces. It +// packs the provided value in an Any and then marshals it to bytes. +// NOTE: to marshal a concrete type, you should use MarshalJSON instead +func (pc *ProtoCodec) MarshalInterfaceJSON(x proto.Message) ([]byte, error) { + any, err := types.NewAnyWithValue(x) + if err != nil { + return nil, err + } + return pc.MarshalJSON(any) +} + +// ProtoMarshalJSON provides an auxiliary function to return Proto3 JSON encoded +// bytes of a message. +func ProtoMarshalJSON(msg proto.Message, resolver jsonpb.AnyResolver) ([]byte, error) { + // method copied from sdk codec/json.go with EmitDefaults set to `false` + // so that empty fields are not rendered + + // We use the OrigName because camel casing fields just doesn't make sense. + // EmitDefaults is also often the more expected behavior for CLI users + jm := &jsonpb.Marshaler{OrigName: true, EmitDefaults: false, AnyResolver: resolver} + err := types.UnpackInterfaces(msg, types.ProtoJSONPacker{JSONPBMarshaler: jm}) + if err != nil { + return nil, err + } + + buf := new(bytes.Buffer) + + if err := jm.Marshal(buf, msg); err != nil { + return nil, err + } + + return buf.Bytes(), nil +} diff --git a/x/wasm/keeper/contract_keeper.go b/x/wasm/keeper/contract_keeper.go index 4d26831125..ad4670a94f 100644 --- a/x/wasm/keeper/contract_keeper.go +++ b/x/wasm/keeper/contract_keeper.go @@ -16,6 +16,7 @@ type decoratedKeeper interface { pinCode(ctx sdk.Context, codeID uint64) error unpinCode(ctx sdk.Context, codeID uint64) error execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) (*sdk.Result, error) + setContractInfoExtension(ctx sdk.Context, contract sdk.AccAddress, extra types.ContractInfoExtension) error } type PermissionedKeeper struct { @@ -66,3 +67,8 @@ func (p PermissionedKeeper) PinCode(ctx sdk.Context, codeID uint64) error { func (p PermissionedKeeper) UnpinCode(ctx sdk.Context, codeID uint64) error { return p.nested.unpinCode(ctx, codeID) } + +// SetExtraContractAttributes updates the extra attributes that can be stored with the contract info +func (p PermissionedKeeper) SetContractInfoExtension(ctx sdk.Context, contract sdk.AccAddress, extra types.ContractInfoExtension) error { + return p.nested.setContractInfoExtension(ctx, contract, extra) +} diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index 38893cb141..dca6e4735d 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -4,9 +4,9 @@ import ( "bytes" "crypto/sha256" "encoding/base64" - "encoding/json" "errors" "fmt" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "io/ioutil" "math/rand" "os" @@ -48,17 +48,20 @@ func TestGenesisExportImport(t *testing.T) { for i := 0; i < 25; i++ { var ( - codeInfo types.CodeInfo - contract types.ContractInfo - stateModels []types.Model - history []types.ContractCodeHistoryEntry - pinned bool + codeInfo types.CodeInfo + contract types.ContractInfo + stateModels []types.Model + history []types.ContractCodeHistoryEntry + pinned bool + contractExtension bool ) f.Fuzz(&codeInfo) f.Fuzz(&contract) f.Fuzz(&stateModels) f.NilChance(0).Fuzz(&history) f.Fuzz(&pinned) + f.Fuzz(&contractExtension) + creatorAddr, err := sdk.AccAddressFromBech32(codeInfo.Creator) require.NoError(t, err) codeID, err := contractKeeper.Create(srcCtx, creatorAddr, wasmCode, codeInfo.Source, codeInfo.Builder, &codeInfo.InstantiateConfig) @@ -66,6 +69,14 @@ func TestGenesisExportImport(t *testing.T) { if pinned { contractKeeper.PinCode(srcCtx, codeID) } + if contractExtension { + anyTime := time.Now().UTC() + var nestedType govtypes.TextProposal + f.NilChance(0).Fuzz(&nestedType) + myExtension, err := govtypes.NewProposal(&nestedType, 1, anyTime, anyTime) + require.NoError(t, err) + contract.SetExtension(&myExtension) + } contract.CodeID = codeID contractAddr := wasmKeeper.generateContractAddress(srcCtx, codeID) @@ -89,7 +100,7 @@ func TestGenesisExportImport(t *testing.T) { rand.Shuffle(len(exportedState.Sequences), func(i, j int) { exportedState.Sequences[i], exportedState.Sequences[j] = exportedState.Sequences[j], exportedState.Sequences[i] }) - exportedGenesis, err := json.Marshal(exportedState) + exportedGenesis, err := wasmKeeper.cdc.MarshalJSON(exportedState) require.NoError(t, err) // reset ContractInfo in source DB for comparison with dest DB @@ -104,7 +115,7 @@ func TestGenesisExportImport(t *testing.T) { dstKeeper, dstCtx, dstStoreKeys := setupKeeper(t) var importState wasmTypes.GenesisState - err = json.Unmarshal(exportedGenesis, &importState) + err = wasmKeeper.cdc.UnmarshalJSON(exportedGenesis, &importState) require.NoError(t, err) InitGenesis(dstCtx, dstKeeper, importState, &StakingKeeperMock{}, TestHandler(contractKeeper)) @@ -642,6 +653,14 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { }, false, log.NewNopLogger()) encodingConfig := MakeEncodingConfig(t) + // register an example extension. must be protobuf + encodingConfig.InterfaceRegistry.RegisterImplementations( + (*types.ContractInfoExtension)(nil), + &govtypes.Proposal{}, + ) + // also registering gov interfaces for nested Any type + govtypes.RegisterInterfaces(encodingConfig.InterfaceRegistry) + wasmConfig := wasmTypes.DefaultWasmConfig() pk := paramskeeper.NewKeeper(encodingConfig.Marshaler, encodingConfig.Amino, keyParams, tkeyParams) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 74b4cc30c3..c1d7416b3b 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -756,6 +756,19 @@ func (k Keeper) InitializePinnedCodes(ctx sdk.Context) error { return nil } +// setContractInfoExtension updates the extension point data that is stored with the contract info +func (k Keeper) setContractInfoExtension(ctx sdk.Context, contractAddr sdk.AccAddress, ext types.ContractInfoExtension) error { + info := k.GetContractInfo(ctx, contractAddr) + if info == nil { + return sdkerrors.Wrap(types.ErrNotFound, "contract info") + } + if err := info.SetExtension(ext); err != nil { + return err + } + k.storeContractInfo(ctx, contractAddr, info) + return nil +} + func (k Keeper) dispatchAll(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, subMsgs []wasmvmtypes.SubMsg, msgs []wasmvmtypes.CosmosMsg) error { // first dispatch all submessages (and the replies). err := k.dispatchSubmessages(ctx, contractAddr, ibcPort, subMsgs) diff --git a/x/wasm/keeper/legacy_querier.go b/x/wasm/keeper/legacy_querier.go index 6dc9debdef..5afde39479 100644 --- a/x/wasm/keeper/legacy_querier.go +++ b/x/wasm/keeper/legacy_querier.go @@ -152,7 +152,7 @@ func queryContractListByCode(ctx sdk.Context, codeID uint64, keeper types.ViewKe // and add the address infoWithAddress := types.ContractInfoWithAddress{ Address: addr.String(), - ContractInfo: &info, + ContractInfo: info, } contracts = append(contracts, infoWithAddress) } diff --git a/x/wasm/keeper/querier.go b/x/wasm/keeper/querier.go index 7423ee2720..cbca1be29c 100644 --- a/x/wasm/keeper/querier.go +++ b/x/wasm/keeper/querier.go @@ -103,7 +103,7 @@ func (q grpcQuerier) ContractsByCode(c context.Context, req *types.QueryContract if accumulate { r = append(r, types.ContractInfoWithAddress{ Address: contractAddr.String(), - ContractInfo: c, + ContractInfo: *c, }) } return true, nil @@ -267,7 +267,7 @@ func queryContractInfo(ctx sdk.Context, addr sdk.AccAddress, keeper types.ViewKe info.Created = nil return &types.ContractInfoWithAddress{ Address: addr.String(), - ContractInfo: info, + ContractInfo: *info, }, nil } diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index 0a9552cff8..05f554939a 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -5,18 +5,19 @@ import ( "encoding/json" "fmt" "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" - "io/ioutil" - "testing" - "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkErrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" + "io/ioutil" + "testing" + "time" ) func TestQueryAllContractState(t *testing.T) { @@ -523,6 +524,77 @@ func TestQueryCodeList(t *testing.T) { } } +func TestQueryContractInfo(t *testing.T) { + var ( + contractAddr = RandomAccountAddress(t) + anyDate = time.Now().UTC() + ) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + // register an example extension. must be protobuf + keepers.EncodingConfig.InterfaceRegistry.RegisterImplementations( + (*types.ContractInfoExtension)(nil), + &govtypes.Proposal{}, + ) + govtypes.RegisterInterfaces(keepers.EncodingConfig.InterfaceRegistry) + + k := keepers.WasmKeeper + querier := NewGrpcQuerier(k.cdc, k.storeKey, k, k.queryGasLimit) + myExtension := func(info *types.ContractInfo) { + // abuse gov proposal as a random protobuf extension with an Any type + myExt, err := govtypes.NewProposal(&govtypes.TextProposal{Title: "foo", Description: "bar"}, 1, anyDate, anyDate) + require.NoError(t, err) + myExt.TotalDeposit = nil + info.SetExtension(&myExt) + } + specs := map[string]struct { + src *types.QueryContractInfoRequest + stored types.ContractInfo + expRsp *types.QueryContractInfoResponse + expErr bool + }{ + "found": { + src: &types.QueryContractInfoRequest{Address: contractAddr.String()}, + stored: types.ContractInfoFixture(), + expRsp: &types.QueryContractInfoResponse{ + Address: contractAddr.String(), + ContractInfo: types.ContractInfoFixture(func(info *types.ContractInfo) { + info.Created = nil // not returned on queries + }), + }, + }, + "with extension": { + src: &types.QueryContractInfoRequest{Address: contractAddr.String()}, + stored: types.ContractInfoFixture(myExtension), + expRsp: &types.QueryContractInfoResponse{ + Address: contractAddr.String(), + ContractInfo: types.ContractInfoFixture(myExtension, func(info *types.ContractInfo) { + info.Created = nil // not returned on queries + }), + }, + }, + "not found": { + src: &types.QueryContractInfoRequest{Address: RandomBech32AccountAddress(t)}, + stored: types.ContractInfoFixture(), + expErr: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + xCtx, _ := ctx.CacheContext() + k.storeContractInfo(xCtx, contractAddr, &spec.stored) + // when + gotRsp, gotErr := querier.ContractInfo(sdk.WrapSDKContext(xCtx), spec.src) + if spec.expErr { + require.Error(t, gotErr) + return + } + require.NoError(t, gotErr) + assert.Equal(t, spec.expRsp, gotRsp) + }) + } + +} + func fromBase64(s string) []byte { r, err := base64.StdEncoding.DecodeString(s) if err != nil { diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index 51511a32a5..be766d952b 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -136,6 +136,7 @@ type TestKeepers struct { WasmKeeper *Keeper IBCKeeper *ibckeeper.Keeper Router *baseapp.Router + EncodingConfig params2.EncodingConfig } // CreateDefaultTestInput common settings for CreateTestInput @@ -334,6 +335,7 @@ func createTestInput( GovKeeper: govKeeper, IBCKeeper: ibcKeeper, Router: router, + EncodingConfig: encodingConfig, } return ctx, keepers } diff --git a/x/wasm/types/codec.go b/x/wasm/types/codec.go index edfe0ab3ab..70fa771cef 100644 --- a/x/wasm/types/codec.go +++ b/x/wasm/types/codec.go @@ -50,6 +50,8 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &UnpinCodesProposal{}, ) + registry.RegisterInterface("ContractInfoExtension", (*ContractInfoExtension)(nil)) + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } diff --git a/x/wasm/types/exported_keepers.go b/x/wasm/types/exported_keepers.go index ee63c21904..53533563c8 100644 --- a/x/wasm/types/exported_keepers.go +++ b/x/wasm/types/exported_keepers.go @@ -47,6 +47,9 @@ type ContractOpsKeeper interface { // UnpinCode removes the wasm contract from wasmvm cache UnpinCode(ctx sdk.Context, codeID uint64) error + + // SetContractInfoExtension updates the extension point data that is stored with the contract info + SetContractInfoExtension(ctx sdk.Context, contract sdk.AccAddress, extra ContractInfoExtension) error } // IBCContractKeeper IBC lifecycle event handler diff --git a/x/wasm/types/query.pb.go b/x/wasm/types/query.pb.go index 0805f736e3..ac8995c07a 100644 --- a/x/wasm/types/query.pb.go +++ b/x/wasm/types/query.pb.go @@ -77,8 +77,8 @@ var xxx_messageInfo_QueryContractInfoRequest proto.InternalMessageInfo // method type QueryContractInfoResponse struct { // address is the address of the contract - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - *ContractInfo `protobuf:"bytes,2,opt,name=contract_info,json=contractInfo,proto3,embedded=contract_info" json:""` + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + ContractInfo `protobuf:"bytes,2,opt,name=contract_info,json=contractInfo,proto3,embedded=contract_info" json:""` } func (m *QueryContractInfoResponse) Reset() { *m = QueryContractInfoResponse{} } @@ -241,8 +241,8 @@ var xxx_messageInfo_QueryContractsByCodeRequest proto.InternalMessageInfo // ContractInfoWithAddress adds the address (key) to the ContractInfo // representation type ContractInfoWithAddress struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - *ContractInfo `protobuf:"bytes,2,opt,name=contract_info,json=contractInfo,proto3,embedded=contract_info" json:""` + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + ContractInfo `protobuf:"bytes,2,opt,name=contract_info,json=contractInfo,proto3,embedded=contract_info" json:""` } func (m *ContractInfoWithAddress) Reset() { *m = ContractInfoWithAddress{} } @@ -787,77 +787,77 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1beta1/query.proto", fileDescriptor_e8595715dfdf95d1) } var fileDescriptor_e8595715dfdf95d1 = []byte{ - // 1105 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x97, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xc7, 0x3d, 0xa9, 0xe3, 0xc4, 0xd3, 0x14, 0xcc, 0xa8, 0x50, 0x63, 0xdc, 0x75, 0x58, 0x50, - 0xea, 0x16, 0x69, 0x37, 0x89, 0x53, 0x04, 0xe5, 0x54, 0xa7, 0x40, 0x2a, 0x51, 0x7e, 0x6c, 0x84, - 0x22, 0xe8, 0x21, 0x1a, 0xef, 0x4e, 0xed, 0x45, 0xf6, 0x8e, 0xbb, 0x33, 0x26, 0xb1, 0xa2, 0x50, - 0xc4, 0x85, 0x13, 0x02, 0x89, 0x23, 0x17, 0x0e, 0x1c, 0x50, 0x81, 0x7b, 0x8f, 0x1c, 0x38, 0xe4, - 0x18, 0x89, 0x0b, 0x27, 0x0b, 0x1c, 0x84, 0x50, 0xfe, 0x84, 0x9e, 0xd0, 0xce, 0xce, 0x3a, 0xbb, - 0x8e, 0xd7, 0xeb, 0x20, 0x0b, 0x2e, 0xd6, 0x8e, 0xfd, 0xde, 0x9b, 0xcf, 0xfb, 0xbe, 0x99, 0xf7, - 0xd6, 0xf0, 0x79, 0x93, 0xb2, 0xd6, 0x0e, 0x66, 0x2d, 0x5d, 0x7c, 0x7c, 0xbc, 0x52, 0x23, 0x1c, - 0xaf, 0xe8, 0xf7, 0x3b, 0xc4, 0xed, 0x6a, 0x6d, 0x97, 0x72, 0x8a, 0x9e, 0x0e, 0x4c, 0x34, 0xf1, - 0x21, 0x4d, 0x0a, 0x17, 0xeb, 0xb4, 0x4e, 0x85, 0x85, 0xee, 0x3d, 0xf9, 0xc6, 0x85, 0x98, 0x78, - 0xbc, 0xdb, 0x26, 0x4c, 0x9a, 0x14, 0xeb, 0x94, 0xd6, 0x9b, 0x44, 0xc7, 0x6d, 0x5b, 0xc7, 0x8e, - 0x43, 0x39, 0xe6, 0x36, 0x75, 0x82, 0x5f, 0xaf, 0x79, 0x01, 0x28, 0xd3, 0x6b, 0x98, 0x11, 0x1f, - 0x63, 0x10, 0xa4, 0x8d, 0xeb, 0xb6, 0x23, 0x8c, 0x7d, 0x5b, 0x75, 0x0d, 0xe6, 0xdf, 0xf3, 0x2c, - 0xd6, 0xa9, 0xc3, 0x5d, 0x6c, 0xf2, 0xdb, 0xce, 0x3d, 0x6a, 0x90, 0xfb, 0x1d, 0xc2, 0x38, 0xca, - 0xc3, 0x39, 0x6c, 0x59, 0x2e, 0x61, 0x2c, 0x0f, 0x16, 0x41, 0x39, 0x6b, 0x04, 0x4b, 0xf5, 0x4b, - 0x00, 0x9f, 0x1d, 0xe1, 0xc6, 0xda, 0xd4, 0x61, 0x24, 0xde, 0x0f, 0x19, 0xf0, 0x82, 0x29, 0x3d, - 0xb6, 0x6d, 0xe7, 0x1e, 0xcd, 0xcf, 0x2c, 0x82, 0xf2, 0xf9, 0xd5, 0x17, 0xb4, 0x91, 0xfa, 0x68, - 0xe1, 0xe8, 0xd5, 0xf9, 0xc3, 0x5e, 0x09, 0x1c, 0xf7, 0x4a, 0x29, 0x63, 0xc1, 0x0c, 0x7d, 0x7f, - 0x23, 0xfd, 0xf7, 0xb7, 0x25, 0xa0, 0x3e, 0x80, 0xcf, 0x45, 0x80, 0x36, 0x6c, 0xc6, 0xa9, 0xdb, - 0x4d, 0x4c, 0x05, 0xbd, 0x01, 0xe1, 0x89, 0x28, 0x92, 0x67, 0x49, 0xf3, 0x15, 0xd4, 0x3c, 0x05, - 0x35, 0xbf, 0x90, 0x01, 0xd3, 0xbb, 0xb8, 0x4e, 0x64, 0x54, 0x23, 0xe4, 0xa9, 0x3e, 0x02, 0xb0, - 0x38, 0x9a, 0x40, 0xaa, 0xf2, 0x0e, 0x9c, 0x23, 0x0e, 0x77, 0x6d, 0xe2, 0x21, 0x9c, 0x2b, 0x9f, - 0x5f, 0xd5, 0x13, 0xb2, 0x5e, 0xa7, 0x16, 0x91, 0x41, 0x5e, 0x77, 0xb8, 0xdb, 0xad, 0xa6, 0x0f, - 0xbc, 0xec, 0x83, 0x28, 0xe8, 0xcd, 0x11, 0xe4, 0x57, 0x12, 0xc9, 0x7d, 0x9a, 0x08, 0xfa, 0x27, - 0x43, 0xda, 0xb1, 0x6a, 0xd7, 0xdb, 0x3b, 0xd0, 0xee, 0x12, 0x9c, 0x33, 0xa9, 0x45, 0xb6, 0x6d, - 0x4b, 0x68, 0x97, 0x36, 0x32, 0xde, 0xf2, 0xb6, 0x35, 0x35, 0xe9, 0xbe, 0x00, 0xf0, 0x52, 0xb8, - 0xd4, 0x5b, 0x36, 0x6f, 0xdc, 0x94, 0xe5, 0xf9, 0x3f, 0xce, 0xd2, 0x2f, 0xc3, 0xa5, 0x1c, 0x08, - 0x22, 0x4b, 0x79, 0x17, 0x3e, 0x11, 0xd9, 0x3a, 0xa8, 0xa8, 0x36, 0xc1, 0xde, 0xa1, 0xe4, 0x64, - 0x41, 0x2f, 0x84, 0x11, 0xa6, 0x58, 0xd6, 0x4f, 0x83, 0x34, 0x6e, 0x36, 0x9b, 0x01, 0xc1, 0x26, - 0xc7, 0x9c, 0xfc, 0x77, 0x97, 0xe2, 0x3b, 0x00, 0x2f, 0xc7, 0x20, 0x48, 0x29, 0x6f, 0xc0, 0x4c, - 0x8b, 0x5a, 0xa4, 0x19, 0x48, 0x58, 0x8c, 0x91, 0xf0, 0x8e, 0x67, 0x24, 0x05, 0x93, 0x1e, 0xd3, - 0x53, 0x6a, 0x4b, 0x0a, 0x65, 0xe0, 0x9d, 0x33, 0x0a, 0x75, 0x19, 0x42, 0xb1, 0xc7, 0xb6, 0x85, - 0x39, 0x16, 0x08, 0x0b, 0x46, 0x56, 0x7c, 0x73, 0x0b, 0x73, 0xac, 0x56, 0x64, 0xfa, 0xa7, 0x03, - 0xcb, 0xf4, 0x11, 0x4c, 0x0b, 0x4f, 0x20, 0x3c, 0xc5, 0xb3, 0xfa, 0x01, 0x54, 0x84, 0xd3, 0x66, - 0x0b, 0xbb, 0x7c, 0xba, 0x3c, 0x9b, 0xb0, 0x14, 0x1b, 0x5a, 0x12, 0x2d, 0x87, 0x89, 0xaa, 0xc5, - 0xc7, 0xbd, 0x52, 0x9e, 0x38, 0x26, 0xb5, 0x6c, 0xa7, 0xae, 0x7f, 0xc4, 0xa8, 0xa3, 0x19, 0x78, - 0xe7, 0x0e, 0x61, 0xcc, 0xd3, 0xd2, 0xe7, 0x7d, 0x09, 0xe6, 0xe4, 0x6d, 0x49, 0xee, 0x19, 0xea, - 0x5f, 0x00, 0xe6, 0x3c, 0xc3, 0xc8, 0xc0, 0xb8, 0x3a, 0x64, 0x5d, 0xcd, 0xf5, 0x7b, 0xa5, 0x8c, - 0x30, 0xbb, 0x75, 0xdc, 0x2b, 0xcd, 0xd8, 0xd6, 0xa0, 0xe7, 0xe4, 0xe1, 0x9c, 0xe9, 0x12, 0xcc, - 0xa9, 0x2b, 0xb2, 0xcb, 0x1a, 0xc1, 0x12, 0xbd, 0x0f, 0xb3, 0x1e, 0xce, 0x76, 0x03, 0xb3, 0x46, - 0xfe, 0x9c, 0xa0, 0x7f, 0xe5, 0x71, 0xaf, 0xb4, 0x56, 0xb7, 0x79, 0xa3, 0x53, 0xd3, 0x4c, 0xda, - 0xd2, 0x39, 0x71, 0x2c, 0xe2, 0xb6, 0x6c, 0x87, 0x87, 0x1f, 0x9b, 0x76, 0x8d, 0xe9, 0xb5, 0x2e, - 0x27, 0x4c, 0xdb, 0x20, 0xbb, 0x55, 0xef, 0xc1, 0x98, 0xf7, 0x42, 0x6d, 0x60, 0xd6, 0x40, 0xcf, - 0xc0, 0x0c, 0xa3, 0x1d, 0xd7, 0x24, 0xf9, 0xb4, 0xd8, 0x4f, 0xae, 0x3c, 0x90, 0x5a, 0xc7, 0x6e, - 0x5a, 0xc4, 0xcd, 0xcf, 0xfa, 0x20, 0x72, 0x29, 0x9b, 0xc8, 0xe7, 0x00, 0x3e, 0x15, 0x92, 0x45, - 0x66, 0xfa, 0x36, 0xcc, 0xfa, 0x99, 0x7a, 0x0d, 0x0b, 0x84, 0x4e, 0xec, 0xa8, 0xa6, 0x11, 0x55, - 0x29, 0xd4, 0xb4, 0xe6, 0x4d, 0xf9, 0x1b, 0x2a, 0xca, 0x6a, 0x89, 0x4a, 0x57, 0xe7, 0x8f, 0x7b, - 0x25, 0xb1, 0xf6, 0x2b, 0x23, 0x49, 0xee, 0x86, 0x40, 0x58, 0x50, 0xa0, 0xe8, 0x0d, 0x07, 0xff, - 0xfa, 0x86, 0xff, 0x00, 0x20, 0x0a, 0x47, 0x97, 0x79, 0xbe, 0x05, 0xe1, 0x20, 0xcf, 0xe0, 0x6a, - 0x4f, 0x9c, 0xa8, 0x7f, 0xcb, 0xb3, 0x41, 0x92, 0xd3, 0xbb, 0xe8, 0xab, 0x0f, 0x21, 0x9c, 0x15, - 0xb4, 0xe8, 0x1b, 0x00, 0x17, 0xc2, 0x6d, 0x19, 0xc5, 0x4d, 0xe3, 0xb8, 0xb7, 0xa3, 0xc2, 0xf2, - 0xe4, 0x0e, 0x3e, 0x89, 0x5a, 0xfe, 0xec, 0xd7, 0x3f, 0xbf, 0x9e, 0x51, 0xd1, 0x62, 0xf4, 0xc5, - 0x2e, 0x68, 0xff, 0xfa, 0x9e, 0xbc, 0xc5, 0xfb, 0xe8, 0x47, 0x00, 0x9f, 0x1c, 0x7a, 0x8f, 0x40, - 0xab, 0x93, 0xec, 0x17, 0x7d, 0xed, 0x29, 0x54, 0xce, 0xe4, 0x23, 0x31, 0x97, 0x05, 0xe6, 0x35, - 0x54, 0x4e, 0xc2, 0xd4, 0x1b, 0x12, 0xed, 0x61, 0x08, 0x57, 0xce, 0xca, 0xc9, 0x70, 0xa3, 0x6f, - 0x1a, 0x93, 0xe1, 0x0e, 0x0d, 0x63, 0x55, 0x13, 0xb8, 0x65, 0xb4, 0x34, 0x8c, 0x6b, 0x11, 0x7d, - 0x4f, 0xb6, 0x95, 0xfd, 0x01, 0x3d, 0x43, 0x3f, 0x01, 0x98, 0x1b, 0x1e, 0x47, 0x68, 0xec, 0xce, - 0x31, 0xf3, 0xb3, 0xb0, 0x76, 0x36, 0xa7, 0x24, 0xde, 0x53, 0xf2, 0x32, 0x81, 0xf6, 0x08, 0xc0, - 0xdc, 0xf0, 0xfc, 0x18, 0xcf, 0x1b, 0x33, 0xc6, 0xc6, 0xf3, 0xc6, 0x8d, 0x28, 0xf5, 0x55, 0xc1, - 0x5b, 0x41, 0x2b, 0x89, 0xbc, 0x2e, 0xde, 0xd1, 0xf7, 0x4e, 0xc6, 0xcf, 0x3e, 0xfa, 0x19, 0x40, - 0x74, 0x7a, 0xd4, 0xa0, 0xeb, 0xe3, 0x38, 0x62, 0xa7, 0x5e, 0xe1, 0xe5, 0xb3, 0xba, 0xc9, 0x04, - 0x5e, 0x13, 0x09, 0x5c, 0x47, 0x95, 0x64, 0xc1, 0xbd, 0x20, 0xd1, 0x14, 0x1e, 0xc0, 0xb4, 0x38, - 0xce, 0x57, 0xc6, 0x1f, 0xcd, 0x93, 0x33, 0x5c, 0x4e, 0x36, 0x94, 0x5c, 0x2f, 0x0a, 0x2e, 0x05, - 0x15, 0xc7, 0x1d, 0x5c, 0xb4, 0x0b, 0x67, 0x45, 0x6b, 0x45, 0x89, 0x81, 0x83, 0xde, 0x5e, 0xb8, - 0x3a, 0x81, 0xa5, 0x64, 0x28, 0x08, 0x86, 0x8b, 0x08, 0x9d, 0x66, 0xa8, 0x6e, 0x1c, 0xfc, 0xa1, - 0xa4, 0xbe, 0xef, 0x2b, 0xa9, 0x83, 0xbe, 0x02, 0x0e, 0xfb, 0x0a, 0xf8, 0xbd, 0xaf, 0x80, 0xaf, - 0x8e, 0x94, 0xd4, 0xe1, 0x91, 0x92, 0xfa, 0xed, 0x48, 0x49, 0x7d, 0xb8, 0x14, 0x9a, 0xad, 0xeb, - 0x94, 0xb5, 0xb6, 0x82, 0x3f, 0xad, 0x96, 0xbe, 0xeb, 0x07, 0x14, 0x7f, 0x5a, 0x6b, 0x19, 0xf1, - 0x5f, 0xb3, 0xf2, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x56, 0xdc, 0x6b, 0x2a, 0x0f, 0x00, - 0x00, + // 1111 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x97, 0xcd, 0x6f, 0x1b, 0xc5, + 0x1b, 0xc7, 0x3d, 0xa9, 0xf3, 0xe2, 0x69, 0xfa, 0xfb, 0x85, 0x51, 0xa1, 0xc6, 0xb8, 0xbb, 0x61, + 0x41, 0xa9, 0x5b, 0xa4, 0xdd, 0x24, 0x4e, 0x11, 0x94, 0x53, 0x9d, 0x02, 0xa9, 0x44, 0x79, 0xd9, + 0x08, 0x22, 0xe8, 0x21, 0x1a, 0xef, 0x4e, 0xed, 0x45, 0xf6, 0x8e, 0xbb, 0x33, 0x26, 0xb1, 0xa2, + 0x50, 0xc4, 0x85, 0x2b, 0xa8, 0x47, 0x2e, 0x1c, 0x38, 0xa0, 0x02, 0xf7, 0x1e, 0x39, 0x70, 0xc8, + 0x31, 0x12, 0x17, 0x4e, 0x16, 0x38, 0x08, 0xa1, 0xfc, 0x09, 0x3d, 0xa1, 0x9d, 0x9d, 0x75, 0x76, + 0x1d, 0xaf, 0xd7, 0x41, 0x16, 0x5c, 0xa2, 0x9d, 0xf8, 0x79, 0x9e, 0xf9, 0x3c, 0xdf, 0x67, 0xe6, + 0x79, 0x76, 0xe1, 0xf3, 0x16, 0x65, 0xcd, 0x1d, 0xcc, 0x9a, 0x86, 0xf8, 0xf3, 0xc9, 0x4a, 0x95, + 0x70, 0xbc, 0x62, 0xdc, 0x6f, 0x13, 0xaf, 0xa3, 0xb7, 0x3c, 0xca, 0x29, 0x7a, 0x3a, 0x34, 0xd1, + 0xc5, 0x1f, 0x69, 0x52, 0xb8, 0x58, 0xa3, 0x35, 0x2a, 0x2c, 0x0c, 0xff, 0x29, 0x30, 0x2e, 0x24, + 0xc4, 0xe3, 0x9d, 0x16, 0x61, 0xd2, 0xa4, 0x58, 0xa3, 0xb4, 0xd6, 0x20, 0x06, 0x6e, 0x39, 0x06, + 0x76, 0x5d, 0xca, 0x31, 0x77, 0xa8, 0x1b, 0xfe, 0x7a, 0xcd, 0x0f, 0x40, 0x99, 0x51, 0xc5, 0x8c, + 0x04, 0x18, 0xfd, 0x20, 0x2d, 0x5c, 0x73, 0x5c, 0x61, 0x1c, 0xd8, 0x6a, 0x6b, 0x30, 0xff, 0x9e, + 0x6f, 0xb1, 0x4e, 0x5d, 0xee, 0x61, 0x8b, 0xdf, 0x76, 0xef, 0x51, 0x93, 0xdc, 0x6f, 0x13, 0xc6, + 0x51, 0x1e, 0xce, 0x62, 0xdb, 0xf6, 0x08, 0x63, 0x79, 0xb0, 0x08, 0x4a, 0x39, 0x33, 0x5c, 0x6a, + 0x0f, 0x01, 0x7c, 0x76, 0x88, 0x1b, 0x6b, 0x51, 0x97, 0x91, 0x64, 0x3f, 0xf4, 0x01, 0xbc, 0x60, + 0x49, 0x8f, 0x6d, 0xc7, 0xbd, 0x47, 0xf3, 0x53, 0x8b, 0xa0, 0x74, 0x7e, 0xf5, 0x05, 0x7d, 0xa8, + 0x3e, 0x7a, 0x34, 0x7a, 0x65, 0xfe, 0xa0, 0xab, 0x66, 0x0e, 0xbb, 0x2a, 0x38, 0xee, 0xaa, 0x19, + 0x73, 0xde, 0x8a, 0xfc, 0x76, 0x23, 0xfb, 0xd7, 0x37, 0x2a, 0xd0, 0x1e, 0xc0, 0xe7, 0x62, 0x50, + 0x1b, 0x0e, 0xe3, 0xd4, 0xeb, 0xa4, 0xa6, 0x83, 0xde, 0x80, 0xf0, 0x44, 0x18, 0xc9, 0xb4, 0xa4, + 0x07, 0x2a, 0xea, 0xbe, 0x8a, 0x7a, 0x50, 0xcc, 0x90, 0xeb, 0x5d, 0x5c, 0x23, 0x32, 0xaa, 0x19, + 0xf1, 0xd4, 0x1e, 0x03, 0x58, 0x1c, 0x4e, 0x20, 0x95, 0x79, 0x07, 0xce, 0x12, 0x97, 0x7b, 0x0e, + 0xf1, 0x11, 0xce, 0x95, 0xce, 0xaf, 0x1a, 0x29, 0x99, 0xaf, 0x53, 0x9b, 0xc8, 0x20, 0xaf, 0xbb, + 0xdc, 0xeb, 0x54, 0xb2, 0xbe, 0x0a, 0x66, 0x18, 0x05, 0xbd, 0x39, 0x84, 0xfc, 0x4a, 0x2a, 0x79, + 0x40, 0x13, 0x43, 0xff, 0x74, 0x40, 0x3b, 0x56, 0xe9, 0xf8, 0x7b, 0x87, 0xda, 0x5d, 0x82, 0xb3, + 0x16, 0xb5, 0xc9, 0xb6, 0x63, 0x0b, 0xed, 0xb2, 0xe6, 0x8c, 0xbf, 0xbc, 0x6d, 0x4f, 0x4c, 0xba, + 0xaf, 0x00, 0xbc, 0x14, 0x2d, 0xf7, 0x96, 0xc3, 0xeb, 0x37, 0x65, 0x79, 0xfe, 0xab, 0xf3, 0xf4, + 0xf3, 0x60, 0x39, 0xfb, 0xa2, 0xc8, 0x72, 0xde, 0x85, 0xff, 0x8b, 0x6d, 0x1f, 0x56, 0x55, 0x1f, + 0x63, 0xff, 0x48, 0x82, 0xb2, 0xa8, 0x17, 0xa2, 0x08, 0x13, 0x2c, 0xed, 0x67, 0x61, 0x1a, 0x37, + 0x1b, 0x8d, 0x90, 0x60, 0x93, 0x63, 0x4e, 0xfe, 0xbd, 0x8b, 0xf1, 0x2d, 0x80, 0x97, 0x13, 0x10, + 0xa4, 0x94, 0x37, 0xe0, 0x4c, 0x93, 0xda, 0xa4, 0x11, 0x4a, 0x58, 0x4c, 0x90, 0xf0, 0x8e, 0x6f, + 0x24, 0x05, 0x93, 0x1e, 0x93, 0x53, 0x6a, 0x4b, 0x0a, 0x65, 0xe2, 0x9d, 0x33, 0x0a, 0x75, 0x19, + 0x42, 0xb1, 0xc7, 0xb6, 0x8d, 0x39, 0x16, 0x08, 0xf3, 0x66, 0x4e, 0xfc, 0xe7, 0x16, 0xe6, 0x58, + 0x2b, 0xcb, 0xf4, 0x4f, 0x07, 0x96, 0xe9, 0x23, 0x98, 0x15, 0x9e, 0x40, 0x78, 0x8a, 0x67, 0xed, + 0x43, 0xa8, 0x08, 0xa7, 0xcd, 0x26, 0xf6, 0xf8, 0x64, 0x79, 0x36, 0xa1, 0x9a, 0x18, 0x5a, 0x12, + 0x2d, 0x47, 0x89, 0x2a, 0xc5, 0x27, 0x5d, 0x35, 0x4f, 0x5c, 0x8b, 0xda, 0x8e, 0x5b, 0x33, 0x3e, + 0x66, 0xd4, 0xd5, 0x4d, 0xbc, 0x73, 0x87, 0x30, 0xe6, 0x6b, 0x19, 0xf0, 0xbe, 0x04, 0x17, 0xe4, + 0x6d, 0x49, 0xef, 0x1b, 0xda, 0x9f, 0x00, 0x2e, 0xf8, 0x86, 0xb1, 0xc1, 0x71, 0x75, 0xc0, 0xba, + 0xb2, 0xd0, 0xeb, 0xaa, 0x33, 0xc2, 0xec, 0xd6, 0x71, 0x57, 0x9d, 0x72, 0xec, 0x7e, 0xdf, 0xc9, + 0xc3, 0x59, 0xcb, 0x23, 0x98, 0x53, 0x4f, 0x64, 0x97, 0x33, 0xc3, 0x25, 0x7a, 0x1f, 0xe6, 0x7c, + 0x9c, 0xed, 0x3a, 0x66, 0xf5, 0xfc, 0x39, 0x41, 0xff, 0xca, 0x93, 0xae, 0xba, 0x56, 0x73, 0x78, + 0xbd, 0x5d, 0xd5, 0x2d, 0xda, 0x34, 0x38, 0x71, 0x6d, 0xe2, 0x35, 0x1d, 0x97, 0x47, 0x1f, 0x1b, + 0x4e, 0x95, 0x19, 0xd5, 0x0e, 0x27, 0x4c, 0xdf, 0x20, 0xbb, 0x15, 0xff, 0xc1, 0x9c, 0xf3, 0x43, + 0x6d, 0x60, 0x56, 0x47, 0xcf, 0xc0, 0x19, 0x46, 0xdb, 0x9e, 0x45, 0xf2, 0x59, 0xb1, 0x9f, 0x5c, + 0xf9, 0x20, 0xd5, 0xb6, 0xd3, 0xb0, 0x89, 0x97, 0x9f, 0x0e, 0x40, 0xe4, 0x52, 0x36, 0x91, 0x2f, + 0x00, 0x7c, 0x2a, 0x22, 0x8b, 0xcc, 0xf4, 0x6d, 0x98, 0x0b, 0x32, 0xf5, 0x9b, 0x16, 0x88, 0x9c, + 0xd8, 0x61, 0x4d, 0x23, 0xae, 0x52, 0x65, 0xae, 0xdf, 0xb4, 0xe6, 0x2c, 0xf9, 0x1b, 0x2a, 0xca, + 0x6a, 0x89, 0x4a, 0x57, 0xe6, 0x8e, 0xbb, 0xaa, 0x58, 0x07, 0x95, 0x91, 0x24, 0x77, 0x23, 0x20, + 0x2c, 0x2c, 0x50, 0xfc, 0x86, 0x83, 0x7f, 0x7c, 0xc3, 0xbf, 0x07, 0x10, 0x45, 0xa3, 0xcb, 0x3c, + 0xdf, 0x82, 0xb0, 0x9f, 0x67, 0x78, 0xb5, 0xc7, 0x4e, 0x34, 0xb8, 0xe5, 0xb9, 0x30, 0xc9, 0xc9, + 0x5d, 0xf4, 0xd5, 0x47, 0x10, 0x4e, 0x0b, 0x5a, 0xf4, 0x35, 0x80, 0xf3, 0xd1, 0xb6, 0x8c, 0x92, + 0x26, 0x72, 0xd2, 0x5b, 0x52, 0x61, 0x79, 0x7c, 0x87, 0x80, 0x44, 0x2b, 0x7d, 0xfe, 0xcb, 0x1f, + 0x0f, 0xa7, 0x34, 0xb4, 0x18, 0x7f, 0xc1, 0x0b, 0xdb, 0xbf, 0xb1, 0x27, 0x6f, 0xf1, 0x3e, 0xfa, + 0x01, 0xc0, 0xff, 0x0f, 0xbc, 0x4b, 0xa0, 0xd5, 0x71, 0xf6, 0x8b, 0xbf, 0xfa, 0x14, 0xca, 0x67, + 0xf2, 0x91, 0x98, 0xcb, 0x02, 0xf3, 0x1a, 0x2a, 0xa5, 0x61, 0x1a, 0x75, 0x89, 0xf6, 0x28, 0x82, + 0x2b, 0x67, 0xe5, 0x78, 0xb8, 0xf1, 0xb7, 0x8d, 0xf1, 0x70, 0x07, 0x86, 0xb1, 0xa6, 0x0b, 0xdc, + 0x12, 0x5a, 0x1a, 0xc4, 0xb5, 0x89, 0xb1, 0x27, 0xdb, 0xca, 0x7e, 0x9f, 0x9e, 0xa1, 0x1f, 0x01, + 0x5c, 0x18, 0x1c, 0x47, 0x68, 0xe4, 0xce, 0x09, 0xf3, 0xb3, 0xb0, 0x76, 0x36, 0xa7, 0x34, 0xde, + 0x53, 0xf2, 0x32, 0x81, 0xf6, 0x18, 0xc0, 0x85, 0xc1, 0xf9, 0x31, 0x9a, 0x37, 0x61, 0x8c, 0x8d, + 0xe6, 0x4d, 0x1a, 0x51, 0xda, 0xab, 0x82, 0xb7, 0x8c, 0x56, 0x52, 0x79, 0x3d, 0xbc, 0x63, 0xec, + 0x9d, 0x8c, 0x9f, 0x7d, 0xf4, 0x13, 0x80, 0xe8, 0xf4, 0xa8, 0x41, 0xd7, 0x47, 0x71, 0x24, 0x4e, + 0xbd, 0xc2, 0xcb, 0x67, 0x75, 0x93, 0x09, 0xbc, 0x26, 0x12, 0xb8, 0x8e, 0xca, 0xe9, 0x82, 0xfb, + 0x41, 0xe2, 0x29, 0x3c, 0x80, 0x59, 0x71, 0x9c, 0xaf, 0x8c, 0x3e, 0x9a, 0x27, 0x67, 0xb8, 0x94, + 0x6e, 0x28, 0xb9, 0x5e, 0x14, 0x5c, 0x0a, 0x2a, 0x8e, 0x3a, 0xb8, 0x68, 0x17, 0x4e, 0x8b, 0xd6, + 0x8a, 0x52, 0x03, 0x87, 0xbd, 0xbd, 0x70, 0x75, 0x0c, 0x4b, 0xc9, 0x50, 0x10, 0x0c, 0x17, 0x11, + 0x3a, 0xcd, 0x50, 0xd9, 0x38, 0xf8, 0x5d, 0xc9, 0x7c, 0xd7, 0x53, 0x32, 0x07, 0x3d, 0x05, 0x1c, + 0xf6, 0x14, 0xf0, 0x5b, 0x4f, 0x01, 0x5f, 0x1e, 0x29, 0x99, 0xc3, 0x23, 0x25, 0xf3, 0xeb, 0x91, + 0x92, 0xf9, 0x68, 0x29, 0x32, 0x5b, 0xd7, 0x29, 0x6b, 0x6e, 0x85, 0x1f, 0xaf, 0xb6, 0xb1, 0x1b, + 0x04, 0x14, 0x1f, 0xaf, 0xd5, 0x19, 0xf1, 0xcd, 0x59, 0xfe, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x99, + 0xbc, 0xec, 0x7a, 0x32, 0x0f, 0x00, 0x00, } func (this *QueryContractInfoResponse) Equal(that interface{}) bool { @@ -882,7 +882,7 @@ func (this *QueryContractInfoResponse) Equal(that interface{}) bool { if this.Address != that1.Address { return false } - if !this.ContractInfo.Equal(that1.ContractInfo) { + if !this.ContractInfo.Equal(&that1.ContractInfo) { return false } return true @@ -909,7 +909,7 @@ func (this *ContractInfoWithAddress) Equal(that interface{}) bool { if this.Address != that1.Address { return false } - if !this.ContractInfo.Equal(that1.ContractInfo) { + if !this.ContractInfo.Equal(&that1.ContractInfo) { return false } return true @@ -1376,18 +1376,16 @@ func (m *QueryContractInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro _ = i var l int _ = l - if m.ContractInfo != nil { - { - size, err := m.ContractInfo.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + { + size, err := m.ContractInfo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0x12 + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 if len(m.Address) > 0 { i -= len(m.Address) copy(dAtA[i:], m.Address) @@ -1549,18 +1547,16 @@ func (m *ContractInfoWithAddress) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l - if m.ContractInfo != nil { - { - size, err := m.ContractInfo.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + { + size, err := m.ContractInfo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0x12 + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 if len(m.Address) > 0 { i -= len(m.Address) copy(dAtA[i:], m.Address) @@ -2089,10 +2085,8 @@ func (m *QueryContractInfoResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - if m.ContractInfo != nil { - l = m.ContractInfo.Size() - n += 1 + l + sovQuery(uint64(l)) - } + l = m.ContractInfo.Size() + n += 1 + l + sovQuery(uint64(l)) return n } @@ -2158,10 +2152,8 @@ func (m *ContractInfoWithAddress) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - if m.ContractInfo != nil { - l = m.ContractInfo.Size() - n += 1 + l + sovQuery(uint64(l)) - } + l = m.ContractInfo.Size() + n += 1 + l + sovQuery(uint64(l)) return n } @@ -2547,9 +2539,6 @@ func (m *QueryContractInfoResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ContractInfo == nil { - m.ContractInfo = &ContractInfo{} - } if err := m.ContractInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -3008,9 +2997,6 @@ func (m *ContractInfoWithAddress) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ContractInfo == nil { - m.ContractInfo = &ContractInfo{} - } if err := m.ContractInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/x/wasm/types/types.go b/x/wasm/types/types.go index 53a9e9c64b..edd0112de0 100644 --- a/x/wasm/types/types.go +++ b/x/wasm/types/types.go @@ -2,10 +2,12 @@ package types import ( "fmt" - wasmvmtypes "github.com/CosmWasm/wasmvm/types" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/gogo/protobuf/proto" + "reflect" ) const ( @@ -68,6 +70,14 @@ func NewContractInfo(codeID uint64, creator, admin sdk.AccAddress, label string, } } +// validatable is an optional interface that can be implemented by an ContractInfoExtension to enable validation +type validatable interface { + ValidateBasic() error +} + +// ValidateBasic does syntax checks on the data. If an extension is set and has the `ValidateBasic() error` method, then +// the method is called as well. It is recommend to implement `ValidateBasic` so that the data is verified in the setter +// but also in the genesis import process. func (c *ContractInfo) ValidateBasic() error { if c.CodeID == 0 { return sdkerrors.Wrap(ErrEmpty, "code id") @@ -83,6 +93,62 @@ func (c *ContractInfo) ValidateBasic() error { if err := validateLabel(c.Label); err != nil { return sdkerrors.Wrap(err, "label") } + if c.Extension == nil { + return nil + } + + e, ok := c.Extension.GetCachedValue().(validatable) + if !ok { + return nil + } + if err := e.ValidateBasic(); err != nil { + return sdkerrors.Wrap(err, "extension") + } + return nil +} + +// SetExtension set new extension data. Calls `ValidateBasic() error` on non nil values when method is implemented by +// the extension. +func (c *ContractInfo) SetExtension(ext ContractInfoExtension) error { + if ext == nil { + c.Extension = nil + return nil + } + if e, ok := ext.(validatable); ok { + if err := e.ValidateBasic(); err != nil { + return err + } + } + any, err := codectypes.NewAnyWithValue(ext) + if err != nil { + return sdkerrors.Wrap(sdkerrors.ErrPackAny, err.Error()) + } + + c.Extension = any + return nil +} + +// ReadExtension copies the extension value to the pointer passed as argument so that there is no need to cast +// For example with a custom extension of type `MyContractDetails` it will look as following: +// var d MyContractDetails +// if err := info.ReadExtension(&d); err != nil { +// return nil, sdkerrors.Wrap(err, "extension") +// } +func (c *ContractInfo) ReadExtension(e ContractInfoExtension) error { + rv := reflect.ValueOf(e) + if rv.Kind() != reflect.Ptr || rv.IsNil() { + return sdkerrors.Wrap(sdkerrors.ErrInvalidType, "not a pointer") + } + if c.Extension == nil { + return nil + } + + cached := c.Extension.GetCachedValue() + elem := reflect.ValueOf(cached).Elem() + if !elem.Type().AssignableTo(rv.Elem().Type()) { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "extension is of type %s but argument of %s", elem.Type(), rv.Elem().Type()) + } + rv.Elem().Set(elem) return nil } @@ -128,6 +194,23 @@ func (c *ContractInfo) AdminAddr() sdk.AccAddress { return admin } +// ContractInfoExtension defines the extension point for custom data to be stored with a contract info +type ContractInfoExtension interface { + proto.Message + String() string +} + +var _ codectypes.UnpackInterfacesMessage = &ContractInfo{} + +// UnpackInterfaces implements codectypes.UnpackInterfaces +func (m *ContractInfo) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { + var details ContractInfoExtension + if err := unpacker.UnpackAny(m.Extension, &details); err != nil { + return err + } + return codectypes.UnpackInterfaces(details, unpacker) +} + // NewAbsoluteTxPosition gets a block position from the context func NewAbsoluteTxPosition(ctx sdk.Context) *AbsoluteTxPosition { // we must safely handle nil gas meters diff --git a/x/wasm/types/types.pb.go b/x/wasm/types/types.pb.go index 99ab489bb4..a7d3d38873 100644 --- a/x/wasm/types/types.pb.go +++ b/x/wasm/types/types.pb.go @@ -7,8 +7,10 @@ import ( bytes "bytes" encoding_json "encoding/json" fmt "fmt" + types "github.com/cosmos/cosmos-sdk/codec/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" + _ "github.com/regen-network/cosmos-proto" github_com_tendermint_tendermint_libs_bytes "github.com/tendermint/tendermint/libs/bytes" io "io" math "math" @@ -273,6 +275,9 @@ type ContractInfo struct { // use for sorting Created *AbsoluteTxPosition `protobuf:"bytes,5,opt,name=created,proto3" json:"created,omitempty"` IBCPortID string `protobuf:"bytes,6,opt,name=ibc_port_id,json=ibcPortId,proto3" json:"ibc_port_id,omitempty"` + // Extension is an extension point to store custom metadata within the + // persistence model. + Extension *types.Any `protobuf:"bytes,7,opt,name=extension,proto3" json:"extension,omitempty"` } func (m *ContractInfo) Reset() { *m = ContractInfo{} } @@ -451,78 +456,82 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1beta1/types.proto", fileDescriptor_2548aa229a1f29bc) } var fileDescriptor_2548aa229a1f29bc = []byte{ - // 1123 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xcd, 0x6f, 0x1b, 0x45, - 0x14, 0xf7, 0xda, 0xce, 0xd7, 0x34, 0xb4, 0xee, 0xd0, 0x50, 0xd7, 0x14, 0xdb, 0xd9, 0xf2, 0x91, - 0x7e, 0x60, 0xd3, 0x82, 0x28, 0xea, 0xcd, 0x5e, 0x2f, 0xcd, 0x56, 0xc4, 0xb6, 0xc6, 0x0e, 0x6d, - 0x90, 0xd0, 0x6a, 0x76, 0x77, 0xe2, 0x0c, 0xdd, 0xdd, 0xb1, 0x76, 0xc6, 0xad, 0xdd, 0xbf, 0x00, - 0x85, 0x0b, 0xe2, 0xc4, 0x81, 0x48, 0x48, 0x20, 0xd4, 0x3f, 0xa5, 0x17, 0xa4, 0x1e, 0x39, 0x59, - 0x90, 0x0a, 0x09, 0xae, 0xe1, 0xd6, 0x13, 0xda, 0x19, 0x5b, 0x5e, 0xd1, 0x36, 0x31, 0x97, 0xd5, - 0xbc, 0x37, 0xef, 0xf7, 0x7b, 0xef, 0xf7, 0x66, 0xde, 0x6a, 0xc0, 0xba, 0xcb, 0x78, 0xf0, 0x10, - 0xf3, 0xa0, 0x2a, 0x3f, 0x0f, 0xae, 0x3b, 0x44, 0xe0, 0xeb, 0x55, 0x31, 0xea, 0x13, 0x5e, 0xe9, - 0x47, 0x4c, 0x30, 0xb8, 0x36, 0x0d, 0xa9, 0xc8, 0xcf, 0x24, 0xa4, 0x70, 0xae, 0xc7, 0x7a, 0x4c, - 0x46, 0x54, 0xe3, 0x95, 0x0a, 0xd6, 0x1d, 0x70, 0xa6, 0xe6, 0xba, 0x84, 0xf3, 0xee, 0xa8, 0x4f, - 0xda, 0x38, 0xc2, 0x01, 0xb4, 0xc0, 0xc2, 0x03, 0xec, 0x0f, 0x48, 0x5e, 0x2b, 0x6b, 0x1b, 0xa7, - 0x6f, 0xac, 0x57, 0x5e, 0xca, 0x57, 0x99, 0xc1, 0xea, 0xb9, 0xa3, 0x71, 0x69, 0x75, 0x84, 0x03, - 0xff, 0x96, 0x2e, 0x91, 0x3a, 0x52, 0x0c, 0xb7, 0xb2, 0xdf, 0xff, 0x58, 0xd2, 0xf4, 0x1f, 0x34, - 0xb0, 0xaa, 0xa2, 0x0d, 0x16, 0xee, 0xd2, 0x1e, 0xbc, 0x07, 0x40, 0x9f, 0x44, 0x01, 0xe5, 0x9c, - 0xb2, 0x70, 0xfe, 0x34, 0x6b, 0x47, 0xe3, 0xd2, 0x59, 0x95, 0x66, 0x06, 0xd7, 0x51, 0x82, 0x0b, - 0x5e, 0x03, 0x4b, 0xd8, 0xf3, 0x22, 0xc2, 0x79, 0x3e, 0x5d, 0xd6, 0x36, 0x56, 0xea, 0xf0, 0x68, - 0x5c, 0x3a, 0xad, 0x30, 0x93, 0x0d, 0x1d, 0x4d, 0x43, 0x26, 0xe5, 0xfd, 0x99, 0x06, 0x8b, 0x52, - 0x39, 0x87, 0x02, 0x40, 0x97, 0x79, 0xc4, 0x1e, 0xf4, 0x7d, 0x86, 0x3d, 0x1b, 0xcb, 0xdc, 0xb2, - 0xc0, 0x53, 0x37, 0x2e, 0x1d, 0x5b, 0xa0, 0x52, 0x56, 0x5f, 0x7f, 0x32, 0x2e, 0xa5, 0x8e, 0xc6, - 0xa5, 0x0b, 0x2a, 0xe5, 0x8b, 0x64, 0x3a, 0xca, 0xc5, 0xce, 0x6d, 0xe9, 0x53, 0x50, 0xf8, 0x9d, - 0x06, 0x8a, 0x34, 0xe4, 0x02, 0x87, 0x82, 0x62, 0x41, 0x6c, 0x8f, 0xec, 0xe2, 0x81, 0x2f, 0xec, - 0x44, 0x8f, 0xd2, 0xf3, 0xf6, 0xe8, 0xf2, 0xd1, 0xb8, 0xf4, 0x8e, 0x4a, 0x7e, 0x3c, 0xa5, 0x8e, - 0x2e, 0x26, 0x02, 0x1a, 0x6a, 0xbf, 0x3d, 0xeb, 0xe4, 0x1d, 0x00, 0x03, 0x3c, 0xb4, 0xe3, 0x3c, - 0xb6, 0x94, 0xc1, 0xe9, 0x23, 0x92, 0xcf, 0x94, 0xb5, 0x8d, 0x6c, 0xfd, 0xad, 0x99, 0xc2, 0x17, - 0x63, 0x74, 0x74, 0x26, 0xc0, 0xc3, 0xbb, 0x98, 0x07, 0x06, 0xf3, 0x48, 0x87, 0x3e, 0x52, 0xd7, - 0x20, 0xa5, 0xff, 0xaa, 0x81, 0xe5, 0xd8, 0x65, 0x85, 0xbb, 0x0c, 0xbe, 0x09, 0x56, 0x24, 0x62, - 0x0f, 0xf3, 0x3d, 0xd9, 0xe0, 0x55, 0xb4, 0x1c, 0x3b, 0x36, 0x31, 0xdf, 0x83, 0x79, 0xb0, 0xe4, - 0x46, 0x04, 0x0b, 0x16, 0xa9, 0x53, 0x44, 0x53, 0x13, 0xbe, 0x01, 0x16, 0x39, 0x1b, 0x44, 0xae, - 0xaa, 0x64, 0x05, 0x4d, 0xac, 0x18, 0xe1, 0x0c, 0xa8, 0xef, 0x91, 0x28, 0x9f, 0x55, 0x88, 0x89, - 0x09, 0xef, 0x01, 0x98, 0x6c, 0x84, 0x2b, 0xcf, 0x29, 0xbf, 0x30, 0xff, 0x91, 0x66, 0xe3, 0x23, - 0x45, 0x67, 0x13, 0x24, 0x6a, 0x43, 0xff, 0x47, 0x03, 0xab, 0x06, 0x0b, 0x45, 0x84, 0x5d, 0x21, - 0x35, 0x5d, 0x02, 0x4b, 0x52, 0x13, 0xf5, 0xa4, 0xa2, 0x6c, 0x1d, 0x1c, 0x8e, 0x4b, 0x8b, 0x52, - 0x72, 0x03, 0x2d, 0xc6, 0x5b, 0x96, 0x77, 0x8c, 0xb6, 0x73, 0x60, 0x01, 0x7b, 0x01, 0x0d, 0x27, - 0xd2, 0x94, 0x11, 0x7b, 0x7d, 0xec, 0x10, 0x7f, 0xa2, 0x4b, 0x19, 0xd0, 0x98, 0xb0, 0x10, 0x6f, - 0x22, 0xe5, 0xf2, 0xab, 0xa4, 0x38, 0x9c, 0xf9, 0x03, 0x41, 0xba, 0xc3, 0x36, 0xe3, 0x54, 0x50, - 0x16, 0xa2, 0x29, 0x12, 0xbe, 0x0f, 0x4e, 0x51, 0xc7, 0xb5, 0xfb, 0x2c, 0x12, 0x71, 0xcd, 0x8b, - 0x72, 0x60, 0x5e, 0x3b, 0x1c, 0x97, 0x56, 0xac, 0xba, 0xd1, 0x66, 0x91, 0xb0, 0x1a, 0x68, 0x85, - 0x3a, 0xae, 0x5c, 0x7a, 0xb7, 0xb2, 0x7f, 0xc5, 0xd3, 0xf2, 0x4d, 0x1a, 0xe4, 0xa7, 0xaa, 0x63, - 0x69, 0x9b, 0x94, 0x0b, 0x16, 0x8d, 0xcc, 0x50, 0x44, 0x23, 0xb8, 0x0d, 0x56, 0x58, 0x9f, 0x44, - 0x58, 0xcc, 0xe6, 0xfa, 0xe6, 0x2b, 0x0a, 0x7b, 0x09, 0x47, 0x6b, 0x0a, 0x8d, 0x6f, 0x32, 0x9a, - 0x31, 0x25, 0x1b, 0x9b, 0x7e, 0x65, 0x63, 0x0d, 0xb0, 0x34, 0xe8, 0x7b, 0xb2, 0x25, 0x99, 0xff, - 0xdd, 0x92, 0x09, 0x12, 0x56, 0x40, 0x26, 0xe0, 0x3d, 0xd9, 0xeb, 0xd5, 0xfa, 0xc5, 0xe7, 0xe3, - 0x52, 0x9e, 0x84, 0x2e, 0xf3, 0x68, 0xd8, 0xab, 0x7e, 0xc5, 0x59, 0x58, 0x41, 0xf8, 0xe1, 0x16, - 0xe1, 0x1c, 0xf7, 0x08, 0x8a, 0x03, 0x75, 0x04, 0xe0, 0x8b, 0x74, 0x70, 0x1d, 0xac, 0x3a, 0x3e, - 0x73, 0xef, 0xdb, 0x7b, 0x84, 0xf6, 0xf6, 0x84, 0xba, 0x0d, 0xe8, 0x94, 0xf4, 0x6d, 0x4a, 0x17, - 0xbc, 0x00, 0x96, 0xc5, 0xd0, 0xa6, 0xa1, 0x47, 0x86, 0x4a, 0x13, 0x5a, 0x12, 0x43, 0x2b, 0x36, - 0x75, 0x0a, 0x16, 0xb6, 0x98, 0x47, 0x7c, 0x78, 0x07, 0x64, 0xee, 0x93, 0x91, 0x9a, 0x8e, 0xfa, - 0x27, 0xcf, 0xc7, 0xa5, 0x8f, 0x7a, 0x54, 0xec, 0x0d, 0x9c, 0x8a, 0xcb, 0x82, 0xaa, 0x20, 0xa1, - 0x17, 0x4f, 0x6b, 0x28, 0x92, 0x4b, 0x9f, 0x3a, 0xbc, 0xea, 0x8c, 0x04, 0xe1, 0x95, 0x4d, 0x32, - 0xac, 0xc7, 0x0b, 0x14, 0x93, 0xc4, 0xd7, 0x48, 0xfd, 0xd4, 0xd3, 0x72, 0xd6, 0x94, 0x71, 0xe5, - 0x6f, 0x0d, 0x80, 0xd9, 0xcf, 0x03, 0x7e, 0x0c, 0xce, 0xd7, 0x0c, 0xc3, 0xec, 0x74, 0xec, 0xee, - 0x4e, 0xdb, 0xb4, 0xb7, 0x9b, 0x9d, 0xb6, 0x69, 0x58, 0x9f, 0x5a, 0x66, 0x23, 0x97, 0x2a, 0x5c, - 0xd8, 0x3f, 0x28, 0xaf, 0xcd, 0x82, 0xb7, 0x43, 0xde, 0x27, 0x2e, 0xdd, 0xa5, 0xc4, 0x83, 0xd7, - 0x00, 0x4c, 0xe2, 0x9a, 0xad, 0x7a, 0xab, 0xb1, 0x93, 0xd3, 0x0a, 0xe7, 0xf6, 0x0f, 0xca, 0xb9, - 0x19, 0xa4, 0xc9, 0x1c, 0xe6, 0x8d, 0xe0, 0x4d, 0x90, 0x4f, 0x46, 0xb7, 0x9a, 0x9f, 0xed, 0xd8, - 0xb5, 0x46, 0x03, 0x99, 0x9d, 0x4e, 0x2e, 0xfd, 0xdf, 0x34, 0xad, 0xd0, 0x1f, 0xd5, 0xd4, 0xef, - 0x1a, 0xde, 0x00, 0x6b, 0x49, 0xa0, 0xf9, 0xb9, 0x89, 0x76, 0x64, 0xa6, 0x4c, 0xe1, 0xfc, 0xfe, - 0x41, 0xf9, 0xf5, 0x19, 0xca, 0x7c, 0x40, 0xa2, 0x51, 0x9c, 0xac, 0xb0, 0xfc, 0xf5, 0x4f, 0xc5, - 0xd4, 0xe3, 0x9f, 0x8b, 0xa9, 0x2b, 0xbf, 0x64, 0x40, 0xf9, 0xa4, 0x4b, 0x07, 0x09, 0xf8, 0xc0, - 0x68, 0x35, 0xbb, 0xa8, 0x66, 0x74, 0x6d, 0xa3, 0xd5, 0x30, 0xed, 0x4d, 0xab, 0xd3, 0x6d, 0xa1, - 0x1d, 0xbb, 0xd5, 0x36, 0x51, 0xad, 0x6b, 0xb5, 0x9a, 0x2f, 0x6b, 0x4d, 0x75, 0xff, 0xa0, 0x7c, - 0xf5, 0x24, 0xee, 0x64, 0xc3, 0xee, 0x82, 0xcb, 0x73, 0xa5, 0xb1, 0x9a, 0x56, 0x37, 0xa7, 0x15, - 0x36, 0xf6, 0x0f, 0xca, 0x6f, 0x9f, 0xc4, 0x6f, 0x85, 0x54, 0xc0, 0x2f, 0xc1, 0xb5, 0xb9, 0x88, - 0xb7, 0xac, 0xdb, 0xa8, 0xd6, 0x35, 0x73, 0xe9, 0xc2, 0xd5, 0xfd, 0x83, 0xf2, 0x7b, 0x27, 0x71, - 0x6f, 0xd1, 0x5e, 0x84, 0x05, 0x99, 0x9b, 0xfe, 0xb6, 0xd9, 0x34, 0x3b, 0x56, 0x27, 0x97, 0x99, - 0x8f, 0xfe, 0x36, 0x09, 0x09, 0xa7, 0xbc, 0x90, 0x8d, 0x0f, 0xab, 0xbe, 0xf9, 0xe4, 0x8f, 0x62, - 0xea, 0xf1, 0x61, 0x51, 0x7b, 0x72, 0x58, 0xd4, 0x9e, 0x1e, 0x16, 0xb5, 0xdf, 0x0f, 0x8b, 0xda, - 0xb7, 0xcf, 0x8a, 0xa9, 0xa7, 0xcf, 0x8a, 0xa9, 0xdf, 0x9e, 0x15, 0x53, 0x5f, 0xbc, 0x9b, 0x98, - 0x03, 0x83, 0xf1, 0xe0, 0xee, 0xf4, 0x3d, 0xe4, 0x55, 0x87, 0xea, 0x5d, 0x24, 0xdf, 0x43, 0xce, - 0xa2, 0x7c, 0xe3, 0x7c, 0xf8, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd8, 0xd8, 0x83, 0x31, 0x35, - 0x09, 0x00, 0x00, + // 1190 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x5d, 0x6f, 0x1b, 0x45, + 0x17, 0xf6, 0xda, 0xce, 0x87, 0xa7, 0x79, 0x5b, 0x77, 0xde, 0x84, 0x3a, 0xa6, 0xd8, 0xce, 0x96, + 0x8f, 0xf4, 0xcb, 0xa6, 0x05, 0x51, 0xd4, 0x3b, 0x7b, 0xbd, 0x34, 0x5b, 0x11, 0xdb, 0x1a, 0x3b, + 0xb4, 0x41, 0x42, 0xab, 0xd9, 0xdd, 0x89, 0x33, 0x74, 0xbd, 0x63, 0xed, 0x8c, 0x5b, 0xbb, 0xbf, + 0x00, 0x85, 0x1b, 0xc4, 0x15, 0x17, 0x44, 0x42, 0x02, 0xa1, 0xfe, 0x00, 0x7e, 0x01, 0x57, 0x15, + 0x12, 0x52, 0x2f, 0xb9, 0xb2, 0x20, 0x15, 0x12, 0xdc, 0xe6, 0xb2, 0x57, 0x68, 0x67, 0x6c, 0x79, + 0x45, 0x3f, 0x62, 0x6e, 0xac, 0x39, 0x67, 0xce, 0xf3, 0x9c, 0x79, 0xce, 0x99, 0x33, 0x5e, 0xb0, + 0xe1, 0x32, 0xde, 0x7b, 0x80, 0x79, 0xaf, 0x22, 0x7f, 0xee, 0x5f, 0x73, 0x88, 0xc0, 0xd7, 0x2a, + 0x62, 0xd4, 0x27, 0xbc, 0xdc, 0x0f, 0x99, 0x60, 0x70, 0x6d, 0x1a, 0x52, 0x96, 0x3f, 0x93, 0x90, + 0xfc, 0x7a, 0xe4, 0x66, 0xdc, 0x96, 0x41, 0x15, 0x65, 0x28, 0x44, 0x7e, 0xb5, 0xcb, 0xba, 0x4c, + 0xf9, 0xa3, 0xd5, 0xc4, 0xbb, 0xde, 0x65, 0xac, 0xeb, 0x93, 0x8a, 0xb4, 0x9c, 0xc1, 0x5e, 0x05, + 0x07, 0x23, 0xb5, 0xa5, 0x3b, 0xe0, 0x4c, 0xd5, 0x75, 0x09, 0xe7, 0x9d, 0x51, 0x9f, 0xb4, 0x70, + 0x88, 0x7b, 0xd0, 0x02, 0x0b, 0xf7, 0xb1, 0x3f, 0x20, 0x39, 0xad, 0xa4, 0x6d, 0x9e, 0xbe, 0xbe, + 0x51, 0x7e, 0xe1, 0x29, 0xca, 0x33, 0x58, 0x2d, 0x7b, 0x3c, 0x2e, 0xae, 0x8c, 0x70, 0xcf, 0xbf, + 0xa9, 0x4b, 0xa4, 0x8e, 0x14, 0xc3, 0xcd, 0xf4, 0x37, 0xdf, 0x15, 0x35, 0xfd, 0x5b, 0x0d, 0xac, + 0xa8, 0x68, 0x83, 0x05, 0x7b, 0xb4, 0x0b, 0xef, 0x02, 0xd0, 0x27, 0x61, 0x8f, 0x72, 0x4e, 0x59, + 0x30, 0x7f, 0x9a, 0xb5, 0xe3, 0x71, 0xf1, 0xac, 0x4a, 0x33, 0x83, 0xeb, 0x28, 0xc6, 0x05, 0xaf, + 0x80, 0x25, 0xec, 0x79, 0x21, 0xe1, 0x3c, 0x97, 0x2c, 0x69, 0x9b, 0x99, 0x1a, 0x3c, 0x1e, 0x17, + 0x4f, 0x2b, 0xcc, 0x64, 0x43, 0x47, 0xd3, 0x90, 0xc9, 0xf1, 0xfe, 0x4c, 0x82, 0x45, 0xa9, 0x9c, + 0x43, 0x01, 0xa0, 0xcb, 0x3c, 0x62, 0x0f, 0xfa, 0x3e, 0xc3, 0x9e, 0x8d, 0x65, 0x6e, 0x79, 0xc0, + 0x53, 0xd7, 0x2f, 0xbc, 0xf2, 0x80, 0x4a, 0x59, 0x6d, 0xe3, 0xf1, 0xb8, 0x98, 0x38, 0x1e, 0x17, + 0xd7, 0x55, 0xca, 0xe7, 0xc9, 0x74, 0x94, 0x8d, 0x9c, 0x3b, 0xd2, 0xa7, 0xa0, 0xf0, 0x6b, 0x0d, + 0x14, 0x68, 0xc0, 0x05, 0x0e, 0x04, 0xc5, 0x82, 0xd8, 0x1e, 0xd9, 0xc3, 0x03, 0x5f, 0xd8, 0xb1, + 0x1a, 0x25, 0xe7, 0xad, 0xd1, 0xc5, 0xe3, 0x71, 0xf1, 0x2d, 0x95, 0xfc, 0xd5, 0x94, 0x3a, 0x3a, + 0x1f, 0x0b, 0xa8, 0xab, 0xfd, 0xd6, 0xac, 0x92, 0xb7, 0x01, 0xec, 0xe1, 0xa1, 0x1d, 0xe5, 0xb1, + 0xa5, 0x0c, 0x4e, 0x1f, 0x92, 0x5c, 0xaa, 0xa4, 0x6d, 0xa6, 0x6b, 0x6f, 0xcc, 0x14, 0x3e, 0x1f, + 0xa3, 0xa3, 0x33, 0x3d, 0x3c, 0xbc, 0x83, 0x79, 0xcf, 0x60, 0x1e, 0x69, 0xd3, 0x87, 0xea, 0x1a, + 0x24, 0xf4, 0x5f, 0x35, 0xb0, 0x1c, 0xb9, 0xac, 0x60, 0x8f, 0xc1, 0xd7, 0x41, 0x46, 0x22, 0xf6, + 0x31, 0xdf, 0x97, 0x05, 0x5e, 0x41, 0xcb, 0x91, 0x63, 0x0b, 0xf3, 0x7d, 0x98, 0x03, 0x4b, 0x6e, + 0x48, 0xb0, 0x60, 0xa1, 0xea, 0x22, 0x9a, 0x9a, 0xf0, 0x35, 0xb0, 0xc8, 0xd9, 0x20, 0x74, 0xd5, + 0x49, 0x32, 0x68, 0x62, 0x45, 0x08, 0x67, 0x40, 0x7d, 0x8f, 0x84, 0xb9, 0xb4, 0x42, 0x4c, 0x4c, + 0x78, 0x17, 0xc0, 0x78, 0x21, 0x5c, 0xd9, 0xa7, 0xdc, 0xc2, 0xfc, 0x2d, 0x4d, 0x47, 0x2d, 0x45, + 0x67, 0x63, 0x24, 0x6a, 0x43, 0xff, 0x39, 0x09, 0x56, 0x0c, 0x16, 0x88, 0x10, 0xbb, 0x42, 0x6a, + 0xba, 0x00, 0x96, 0xa4, 0x26, 0xea, 0x49, 0x45, 0xe9, 0x1a, 0x38, 0x1a, 0x17, 0x17, 0xa5, 0xe4, + 0x3a, 0x5a, 0x8c, 0xb6, 0x2c, 0xef, 0x15, 0xda, 0x56, 0xc1, 0x02, 0xf6, 0x7a, 0x34, 0x98, 0x48, + 0x53, 0x46, 0xe4, 0xf5, 0xb1, 0x43, 0xfc, 0x89, 0x2e, 0x65, 0x40, 0x63, 0xc2, 0x42, 0xbc, 0x89, + 0x94, 0x8b, 0x2f, 0x93, 0xe2, 0x70, 0xe6, 0x0f, 0x04, 0xe9, 0x0c, 0x5b, 0x8c, 0x53, 0x41, 0x59, + 0x80, 0xa6, 0x48, 0x78, 0x15, 0x9c, 0xa2, 0x8e, 0x6b, 0xf7, 0x59, 0x28, 0xa2, 0x33, 0x2f, 0xca, + 0x81, 0xf9, 0xdf, 0xd1, 0xb8, 0x98, 0xb1, 0x6a, 0x46, 0x8b, 0x85, 0xc2, 0xaa, 0xa3, 0x0c, 0x75, + 0x5c, 0xb9, 0xf4, 0xe0, 0x36, 0xc8, 0x90, 0xa1, 0x20, 0x81, 0xbc, 0x90, 0x4b, 0x32, 0xeb, 0x6a, + 0x59, 0xbd, 0x2c, 0xe5, 0xe9, 0xcb, 0x52, 0xae, 0x06, 0xa3, 0xda, 0xfa, 0x2f, 0x3f, 0x5d, 0x5d, + 0x8b, 0x57, 0xc6, 0x9c, 0xc2, 0xd0, 0x8c, 0xe1, 0x66, 0xfa, 0xaf, 0x68, 0xf8, 0xbe, 0x4c, 0x82, + 0xdc, 0x34, 0x34, 0xaa, 0xd4, 0x16, 0xe5, 0x82, 0x85, 0x23, 0x33, 0x10, 0xe1, 0x08, 0xee, 0x80, + 0x0c, 0xeb, 0x93, 0x10, 0x8b, 0xd9, 0x33, 0x71, 0xe3, 0x25, 0x3a, 0x5f, 0xc0, 0xd1, 0x9c, 0x42, + 0xa3, 0xc1, 0x40, 0x33, 0xa6, 0x78, 0x9f, 0x92, 0x2f, 0xed, 0x93, 0x01, 0x96, 0x06, 0x7d, 0x4f, + 0x56, 0x38, 0xf5, 0x9f, 0x2b, 0x3c, 0x41, 0xc2, 0x32, 0x48, 0xf5, 0x78, 0x57, 0xb6, 0x6e, 0xa5, + 0x76, 0xfe, 0xd9, 0xb8, 0x98, 0x23, 0x81, 0xcb, 0x3c, 0x1a, 0x74, 0x2b, 0x9f, 0x73, 0x16, 0x94, + 0x11, 0x7e, 0xb0, 0x4d, 0x38, 0xc7, 0x5d, 0x82, 0xa2, 0x40, 0x1d, 0x01, 0xf8, 0x3c, 0x1d, 0xdc, + 0x00, 0x2b, 0x8e, 0xcf, 0xdc, 0x7b, 0xf6, 0x3e, 0xa1, 0xdd, 0x7d, 0xa1, 0x2e, 0x17, 0x3a, 0x25, + 0x7d, 0x5b, 0xd2, 0x05, 0xd7, 0xc1, 0xb2, 0x18, 0xda, 0x34, 0xf0, 0xc8, 0x50, 0x69, 0x42, 0x4b, + 0x62, 0x68, 0x45, 0xa6, 0x4e, 0xc1, 0xc2, 0x36, 0xf3, 0x88, 0x0f, 0x6f, 0x83, 0xd4, 0x3d, 0x32, + 0x52, 0xc3, 0x56, 0xfb, 0xf0, 0xd9, 0xb8, 0xf8, 0x7e, 0x97, 0x8a, 0xfd, 0x81, 0x53, 0x76, 0x59, + 0xaf, 0x22, 0x48, 0xe0, 0x45, 0xc3, 0x1f, 0x88, 0xf8, 0xd2, 0xa7, 0x0e, 0xaf, 0x38, 0x23, 0x41, + 0x78, 0x79, 0x8b, 0x0c, 0x6b, 0xd1, 0x02, 0x45, 0x24, 0xd1, 0xad, 0x54, 0xff, 0x11, 0x49, 0x39, + 0xba, 0xca, 0xb8, 0xf4, 0xb7, 0x06, 0xc0, 0xec, 0x2d, 0x82, 0x1f, 0x80, 0x73, 0x55, 0xc3, 0x30, + 0xdb, 0x6d, 0xbb, 0xb3, 0xdb, 0x32, 0xed, 0x9d, 0x46, 0xbb, 0x65, 0x1a, 0xd6, 0x47, 0x96, 0x59, + 0xcf, 0x26, 0xf2, 0xeb, 0x07, 0x87, 0xa5, 0xb5, 0x59, 0xf0, 0x4e, 0xc0, 0xfb, 0xc4, 0xa5, 0x7b, + 0x94, 0x78, 0xf0, 0x0a, 0x80, 0x71, 0x5c, 0xa3, 0x59, 0x6b, 0xd6, 0x77, 0xb3, 0x5a, 0x7e, 0xf5, + 0xe0, 0xb0, 0x94, 0x9d, 0x41, 0x1a, 0xcc, 0x61, 0xde, 0x08, 0xde, 0x00, 0xb9, 0x78, 0x74, 0xb3, + 0xf1, 0xf1, 0xae, 0x5d, 0xad, 0xd7, 0x91, 0xd9, 0x6e, 0x67, 0x93, 0xff, 0x4e, 0xd3, 0x0c, 0xfc, + 0x51, 0x55, 0xbd, 0xfe, 0xf0, 0x3a, 0x58, 0x8b, 0x03, 0xcd, 0x4f, 0x4c, 0xb4, 0x2b, 0x33, 0xa5, + 0xf2, 0xe7, 0x0e, 0x0e, 0x4b, 0xff, 0x9f, 0xa1, 0xcc, 0xfb, 0x24, 0x1c, 0x45, 0xc9, 0xf2, 0xcb, + 0x5f, 0x7c, 0x5f, 0x48, 0x3c, 0xfa, 0xa1, 0x90, 0xb8, 0xf4, 0x63, 0x0a, 0x94, 0x4e, 0xba, 0x74, + 0x90, 0x80, 0x77, 0x8d, 0x66, 0xa3, 0x83, 0xaa, 0x46, 0xc7, 0x36, 0x9a, 0x75, 0xd3, 0xde, 0xb2, + 0xda, 0x9d, 0x26, 0xda, 0xb5, 0x9b, 0x2d, 0x13, 0x55, 0x3b, 0x56, 0xb3, 0xf1, 0xa2, 0xd2, 0x54, + 0x0e, 0x0e, 0x4b, 0x97, 0x4f, 0xe2, 0x8e, 0x17, 0xec, 0x0e, 0xb8, 0x38, 0x57, 0x1a, 0xab, 0x61, + 0x75, 0xb2, 0x5a, 0x7e, 0xf3, 0xe0, 0xb0, 0xf4, 0xe6, 0x49, 0xfc, 0x56, 0x40, 0x05, 0xfc, 0x0c, + 0x5c, 0x99, 0x8b, 0x78, 0xdb, 0xba, 0x85, 0xaa, 0x1d, 0x33, 0x9b, 0xcc, 0x5f, 0x3e, 0x38, 0x2c, + 0xbd, 0x73, 0x12, 0xf7, 0x36, 0xed, 0x86, 0x58, 0x90, 0xb9, 0xe9, 0x6f, 0x99, 0x0d, 0xb3, 0x6d, + 0xb5, 0xb3, 0xa9, 0xf9, 0xe8, 0x6f, 0x91, 0x80, 0x70, 0xca, 0xf3, 0xe9, 0xa8, 0x59, 0xb5, 0xad, + 0xc7, 0x7f, 0x14, 0x12, 0x8f, 0x8e, 0x0a, 0xda, 0xe3, 0xa3, 0x82, 0xf6, 0xe4, 0xa8, 0xa0, 0xfd, + 0x7e, 0x54, 0xd0, 0xbe, 0x7a, 0x5a, 0x48, 0x3c, 0x79, 0x5a, 0x48, 0xfc, 0xf6, 0xb4, 0x90, 0xf8, + 0xf4, 0xed, 0xd8, 0x1c, 0x18, 0x8c, 0xf7, 0xee, 0x4c, 0x3f, 0xca, 0xbc, 0xca, 0x50, 0x7d, 0x9c, + 0xc9, 0x8f, 0x32, 0x67, 0x51, 0xbe, 0x72, 0xef, 0xfd, 0x13, 0x00, 0x00, 0xff, 0xff, 0xf0, 0xea, + 0x50, 0x19, 0xba, 0x09, 0x00, 0x00, } func (this *AccessTypeParam) Equal(that interface{}) bool { @@ -679,6 +688,9 @@ func (this *ContractInfo) Equal(that interface{}) bool { if this.IBCPortID != that1.IBCPortID { return false } + if !this.Extension.Equal(that1.Extension) { + return false + } return true } func (this *ContractCodeHistoryEntry) Equal(that interface{}) bool { @@ -955,6 +967,18 @@ func (m *ContractInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Extension != nil { + { + size, err := m.Extension.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } if len(m.IBCPortID) > 0 { i -= len(m.IBCPortID) copy(dAtA[i:], m.IBCPortID) @@ -1237,6 +1261,10 @@ func (m *ContractInfo) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + if m.Extension != nil { + l = m.Extension.Size() + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -2017,6 +2045,42 @@ func (m *ContractInfo) Unmarshal(dAtA []byte) error { } m.IBCPortID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Extension", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Extension == nil { + m.Extension = &types.Any{} + } + if err := m.Extension.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/x/wasm/types/types_test.go b/x/wasm/types/types_test.go index 53a9d2170a..3208341427 100644 --- a/x/wasm/types/types_test.go +++ b/x/wasm/types/types_test.go @@ -1,10 +1,17 @@ package types import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/types" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/libs/rand" "strings" "testing" - - "github.com/stretchr/testify/require" + "time" ) func TestContractInfoValidateBasic(t *testing.T) { @@ -41,6 +48,23 @@ func TestContractInfoValidateBasic(t *testing.T) { srcMutator: func(c *ContractInfo) { c.Label = strings.Repeat("a", MaxLabelSize+1) }, expError: true, }, + "invalid extension": { + srcMutator: func(c *ContractInfo) { + // any protobuf type with ValidateBasic method + any, err := codectypes.NewAnyWithValue(&govtypes.TextProposal{}) + require.NoError(t, err) + c.Extension = any + }, + expError: true, + }, + "not validatable extension": { + srcMutator: func(c *ContractInfo) { + // any protobuf type with ValidateBasic method + any, err := codectypes.NewAnyWithValue(&govtypes.Proposal{}) + require.NoError(t, err) + c.Extension = any + }, + }, } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { @@ -117,3 +141,170 @@ func TestCodeInfoValidateBasic(t *testing.T) { }) } } + +func TestContractInfoSetExtension(t *testing.T) { + anyTime := time.Now().UTC() + aNestedProtobufExt := func() ContractInfoExtension { + // using gov proposal here as a random protobuf types as it contains an Any type inside for nested unpacking + myExtension, err := govtypes.NewProposal(&govtypes.TextProposal{Title: "bar"}, 1, anyTime, anyTime) + require.NoError(t, err) + myExtension.TotalDeposit = nil + return &myExtension + } + + specs := map[string]struct { + src ContractInfoExtension + expErr bool + expNil bool + }{ + "all good with any proto extension": { + src: aNestedProtobufExt(), + }, + "nil allowed": { + src: nil, + expNil: true, + }, + "validated and accepted": { + src: &govtypes.TextProposal{Title: "bar", Description: "set"}, + }, + "validated and rejected": { + src: &govtypes.TextProposal{Title: "bar"}, + expErr: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + var c ContractInfo + gotErr := c.SetExtension(spec.src) + if spec.expErr { + require.Error(t, gotErr) + return + } + require.NoError(t, gotErr) + if spec.expNil { + return + } + require.NotNil(t, c.Extension) + assert.NotNil(t, c.Extension.GetCachedValue()) + }) + } +} + +func TestContractInfoMarshalUnmarshal(t *testing.T) { + var myAddr sdk.AccAddress = rand.Bytes(sdk.AddrLen) + var myOtherAddr sdk.AccAddress = rand.Bytes(sdk.AddrLen) + var anyPos = AbsoluteTxPosition{BlockHeight: 1, TxIndex: 2} + + anyTime := time.Now().UTC() + // using gov proposal here as a random protobuf types as it contains an Any type inside for nested unpacking + myExtension, err := govtypes.NewProposal(&govtypes.TextProposal{Title: "bar"}, 1, anyTime, anyTime) + require.NoError(t, err) + myExtension.TotalDeposit = nil + + src := NewContractInfo(1, myAddr, myOtherAddr, "bar", &anyPos) + err = src.SetExtension(&myExtension) + require.NoError(t, err) + + interfaceRegistry := types.NewInterfaceRegistry() + marshaler := codec.NewProtoCodec(interfaceRegistry) + RegisterInterfaces(interfaceRegistry) + // register proposal as extension type + interfaceRegistry.RegisterImplementations( + (*ContractInfoExtension)(nil), + &govtypes.Proposal{}, + ) + // register gov types for nested Anys + govtypes.RegisterInterfaces(interfaceRegistry) + + // when encode + bz, err := marshaler.MarshalBinaryBare(&src) + require.NoError(t, err) + // and decode + var dest ContractInfo + err = marshaler.UnmarshalBinaryBare(bz, &dest) + // then + require.NoError(t, err) + assert.Equal(t, src, dest) + // and sanity check nested any + var destExt govtypes.Proposal + require.NoError(t, dest.ReadExtension(&destExt)) + assert.Equal(t, destExt.GetTitle(), "bar") +} + +func TestContractInfoReadExtension(t *testing.T) { + anyTime := time.Now().UTC() + myExtension, err := govtypes.NewProposal(&govtypes.TextProposal{Title: "foo"}, 1, anyTime, anyTime) + require.NoError(t, err) + type TestExtensionAsStruct struct { + ContractInfoExtension + } + + specs := map[string]struct { + setup func(*ContractInfo) + param func() ContractInfoExtension + expVal ContractInfoExtension + expErr bool + }{ + "all good": { + setup: func(i *ContractInfo) { + i.SetExtension(&myExtension) + }, + param: func() ContractInfoExtension { + return &govtypes.Proposal{} + }, + expVal: &myExtension, + }, + "no extension set": { + setup: func(i *ContractInfo) { + }, + param: func() ContractInfoExtension { + return &govtypes.Proposal{} + }, + expVal: &govtypes.Proposal{}, + }, + "nil argument value": { + setup: func(i *ContractInfo) { + i.SetExtension(&myExtension) + }, + param: func() ContractInfoExtension { + return nil + }, + expErr: true, + }, + "non matching types": { + setup: func(i *ContractInfo) { + i.SetExtension(&myExtension) + }, + param: func() ContractInfoExtension { + return &govtypes.TextProposal{} + }, + expErr: true, + }, + "not a pointer argument": { + setup: func(i *ContractInfo) { + }, + param: func() ContractInfoExtension { + return TestExtensionAsStruct{} + }, + expErr: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + var c ContractInfo + spec.setup(&c) + // when + + gotValue := spec.param() + gotErr := c.ReadExtension(gotValue) + + // then + if spec.expErr { + require.Error(t, gotErr) + return + } + require.NoError(t, gotErr) + assert.Equal(t, spec.expVal, gotValue) + }) + } +} From aabc575ff4933c89d0d2a114ef5ecf15e85fc7b0 Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Fri, 16 Apr 2021 13:38:47 +0200 Subject: [PATCH 34/56] Fix InitializePinnedCodes --- x/wasm/keeper/keeper.go | 2 +- x/wasm/keeper/keeper_test.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index c1d7416b3b..6c1117309d 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -745,7 +745,7 @@ func (k Keeper) InitializePinnedCodes(ctx sdk.Context) error { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.PinnedCodeIndexPrefix) iter := store.Iterator(nil, nil) for ; iter.Valid(); iter.Next() { - codeInfo := k.GetCodeInfo(ctx, types.ParsePinnedCodeIndex(iter.Value())) + codeInfo := k.GetCodeInfo(ctx, types.ParsePinnedCodeIndex(iter.Key())) if codeInfo == nil { return sdkerrors.Wrap(types.ErrNotFound, "code info") } diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 582a2eaf02..65844fec6e 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -1278,3 +1278,34 @@ func TestClearContractAdmin(t *testing.T) { }) } } + +func TestInitializePinnedCodes(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + k := keepers.WasmKeeper + + var capturedChecksums []wasmvm.Checksum + mock := wasmtesting.MockWasmer{PinFn: func(checksum wasmvm.Checksum) error { + capturedChecksums = append(capturedChecksums, checksum) + return nil + }} + wasmtesting.MakeIBCInstantiable(&mock) + + const testItems = 3 + myCodeIDs := make([]uint64, testItems) + for i := 0; i < testItems; i++ { + myCodeIDs[i] = StoreRandomContract(t, ctx, keepers, &mock).CodeID + require.NoError(t, k.pinCode(ctx, myCodeIDs[i])) + } + capturedChecksums = nil + + // when + gotErr := k.InitializePinnedCodes(ctx) + + // then + require.NoError(t, gotErr) + require.Len(t, capturedChecksums, testItems) + for i, c := range myCodeIDs { + var exp wasmvm.Checksum = k.GetCodeInfo(ctx, c).CodeHash + assert.Equal(t, exp, capturedChecksums[i]) + } +} From c76c07c0d89bb2d44b2d3aaa4ced18740aedc0f9 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Fri, 16 Apr 2021 15:23:59 +0200 Subject: [PATCH 35/56] Remove build-linux from PHONY Closes #384 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d27595426b..c97f8dc653 100644 --- a/Makefile +++ b/Makefile @@ -182,7 +182,7 @@ proto-lint: proto-check-breaking: @$(DOCKER_BUF) check breaking --against-input $(HTTPS_GIT)#branch=master -.PHONY: all build-linux install install-debug \ +.PHONY: all install install-debug \ go-mod-cache draw-deps clean build format \ test test-all test-build test-cover test-unit test-race \ test-sim-import-export \ From 602881f6d33430549f6d10fa93f4bec46367d683 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Tue, 20 Apr 2021 22:13:43 +0200 Subject: [PATCH 36/56] Clean up docs, point to CosmWasm repo for contract details --- x/wasm/IBC.md | 325 ++------------------------------------------------ 1 file changed, 11 insertions(+), 314 deletions(-) diff --git a/x/wasm/IBC.md b/x/wasm/IBC.md index d5f1b8144b..c3cd0a0023 100644 --- a/x/wasm/IBC.md +++ b/x/wasm/IBC.md @@ -27,9 +27,9 @@ as how contracts can properly identify their counterparty. (We considered on port for the `x/wasm` module and multiplexing on it, but [dismissed that idea](#rejected-ideas)) * Upon `Instantiate`, if a contract is *IBC Enabled*, we dynamically - bind a port for this contract. The port name is `wasm-`, - eg. `wasm-cosmos1hmdudppzceg27qsuq707tjg8rkgj7g5hnvnw29` -* If a *Channel* is being established with a registered `wasm-xyz` port, + bind a port for this contract. The port name is `wasm.`, + eg. `wasm.cosmos1hmdudppzceg27qsuq707tjg8rkgj7g5hnvnw29` +* If a *Channel* is being established with a registered `wasm.xyz` port, the `x/wasm.Keeper` will handle this and call into the appropriate contract to determine supported protocol versions during the [`ChanOpenTry` and `ChanOpenAck` phases](https://docs.cosmos.network/master/ibc/overview.html#channels). @@ -42,7 +42,7 @@ as how contracts can properly identify their counterparty. * When sending a packet, the CosmWasm contract must specify the local *ChannelID*. As there is a unique *PortID* per contract, that is filled in by `x/wasm` to produce the globally unique `(PortID, ChannelID)` -* When receiving a Packet (or Ack or Timeout), the contracts receives the +* When receiving a Packet (or Ack or Timeout), the contracts receives the local *ChannelID* it came from, as well as the packet that was sent by the counterparty. * When receiving an Ack or Timeout packet, the contract also receives the original packet that it sent earlier. @@ -54,320 +54,17 @@ as how contracts can properly identify their counterparty. Establishing *Clients* and *Connections* is out of the scope of this module and must be created by the same means as for `ibc-transfer` -(via the cli or otherwise). `x/wasm` will bind a unique *Port* for each -"IBC Enabled" contract. +(via the [go cli](https://github.com/cosmos/relayer) or better [ts-relayer](https://github.com/confio/ts-relayer)). +`x/wasm` will bind a unique *Port* for each "IBC Enabled" contract. For mocks, all the Packet Handling and Channel Lifecycle Hooks are routed to some Golang stub handler, but containing the contract address, so we -can perform contract-specific actions for each packet. +can perform contract-specific actions for each packet. In a real setting, +we route to the contract that owns the port/channel and call one of it's various +entry points. -### Messages - -An "IBC Enabled" contract may dispatch the following messages not available -to other contracts: - -* `IBCSendMsg` - this sends an IBC packet over an established channel. -* `IBCCloseChannel` - given an existing channelID bound to this contract's Port, - initiate the closing sequence and reject all pending packets. - -They are returned from `handle` just like any other `CosmosMsg` -(For mocks, we will trigger this externally, later only valid contract addresses -should be able to do so). - -### Packet Handling - -An "IBC Enabled" contract must support the following callbacks from the runtime -(we will likely multiplex many over one wasm export, as we do with handle, but these -are the different calls we must support): - -* `IBCRecvPacket` - when another chain sends a packet destined to - an IBCEnabled contract, this will be routed to the proper contract - and call a function exposed for this purpose. -* `IBCPacketAck` - The original sender of `IBCSendMsg` will - get this callback eventually if the message was - processed on the other chain (this may be either a success or an error, - but comes from the app-level protocol, not the IBC protocol). -* `IBCPacketTimeout` - The original sender of `IBCSendMsg` will - get this callback eventually if the message failed to be - processed on the other chain (for timeout, closed channel, or - other IBC-level failure) - -Note: We may add some helpers inside the contract to map `IBCPacketAck` / `IBCPacketTimeout` -to `IBCPacketSucceeded` / `IBCPacketFailed` assuming they use the standard envelope. However, -we decided not to enforce this on the Go-level, to allow contracts to communicate using protocols -that do not use this envelope. - -### Channel Lifecycle Hooks - -If you look at the [4 step process](https://docs.cosmos.network/master/ibc/overview.html#channels) for -channel handshakes, we simplify this from the view of the contract: - -1. The main path to initiate a channel from a contract to an external port is via an external - client executing `simd tx ibc channel open-init` or such. This allows the initiating party - to select which version/protocol they want to connect with. There must be a callback for - the initiating contract to verify if the version and/or ordering are valid. - **Question**: can we reuse the same check-logic as for step 2 -2. The counterparty has a chance for version negotiation in `OnChanOpenTry`, where the contract - can apply custom logic. It provides the protocol versions that the initiating party expects, and - the contract can reject the connection or accept it and return the protocol version it will communicate with. - Implementing this (contract selects a version, not just the relayer) requires that we support - [ADR 025](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-025-ibc-passive-channels.md). - TODO: check with Agoric and cwgoes to upstream any Cosmos SDK changes so this can work out of the box. -3. `OnChanOpened` is called on the contract for both `OnChanOpenAck` and `OnChanOpenConfirm` containing - the final version string (counterparty version). This gives a chance to abort the process - if we realize this doesn't work. Or save the info (we may need to define this channel uses an older version - of the protocol for example). -4. `OnChanClosed` is called on both sides if the channel is closed for any reason, allowing them to - perform any cleanup. This will be followed by `IBCPacketTimeout` callbacks for all the in-progress - packets that were not processed before it closed, as well as all pending acks (pending the relayer - to provide that). - -We require the following callbacks on the contract - -* `OnChanNegotiate` - called on the initiating side on `OnChanOpenInit` and on receiving end for `OnChanOpenTry`. - @alpe: does it make sense to use the same shape for both of these? Rather than `CounterPartyVersion`, they would - have `ProposedVersion`, but otherwise the same logic. -* `OnChanOpened` - called on both sides after the initial 2 steps have passed to confirm the version used -* `OnChanClosed` - this is called when an existing channel is closed for any reason - -### Queries - -We may want to expose some basic queries of IBC State to the contract. -We should check if this is useful to the contract and if it opens up -any possible DoS: - -* `GetPortID` - return PortID given a contract address -* `ListChannels` - return a list of all (portID, channelID) pairs - that are bound to a given port. -* `ListPendingPackets` - given a (portID, channelID) identifier, return all packets - in that channel, that have been sent by this chain, but for which no acknowledgement - or timeout has yet been received -* `ListPendingAcknowledgements` - given a (portID, channelID) identifier, return all packets - in that channel, that have been received and processed by this chain, but for which - we have no proof the acknowledgement has been relayed -* `GetCounterparty` - given a local (portID, channelID) identifier, it will look up - what (portID, channelID) are bound to the remote end of the channel. - -## Contract Details - -Here we map out the workflow with the exact arguments passed with those calls -from the Go side (which we will use with our mock), and then a -proposal for multiplexing this over fewer wasm exports (define some rust types) - -Messages: - -```go -package messages - -type IBCSendMsg struct { - // This is our contract-local ID - ChannelID string - Msg []byte - // optional fields (or do we need exactly/at least one of these?) - TimeoutHeight uint64 - TimeoutTimestamp uint64 -} - -type IBCCloseChannel struct { - ChannelID string -} - -// "Versions must be strings but and implement any versioning structure..." -// https://docs.cosmos.network/master/ibc/custom.html#channel-handshake-version-negotiation -// Use the same approach here -type Version string -``` - -Packet callbacks: - -```go -package packets - -// for reference: this is more like what we pass to wasmvm -// func (c *mockContract) OnReceive(params cosmwasm2.Env, msg []byte, store prefix.Store, api cosmwasm.GoAPI, -// querier keeper.QueryHandler, meter sdk.GasMeter, gas uint64) (*cosmwasm2.OnReceiveIBCResponse, uint64, error) {} -// below is how we want to expose it in x/wasm: - -// IBCRecvPacket is called when we receive a packet sent from the other end of a channel -// The response bytes listed here will be returned to the caller as "result" in IBCPacketAck -// What do we do with error? -// -// If we were to assume/enforce an envelope, then we could wrap response/error into the acknowledge packet, -// but we delegated that encoding to the contract -func IBCRecvPacket(ctx sdk.Context, k *wasm.Keeper, contractAddress sdk.AccAddress, env IBCPacketInfo, msg []byte) - (response []byte, err error) {} - -// how to handle error here? if we push it up the ibc stack and fail the transaction (normal handling), -// the packet may be posted again and again. just log and ignore failures here? what does a failure even mean? -// only realistic one I can imagine is OutOfGas (panic) to retry with higher gas limit. -// -// if there any point in returning a response, what does it mean? -func IBCPacketAck(ctx sdk.Context, k *wasm.Keeper, contractAddress sdk.AccAddress, env IBCPacketInfo, - originalMsg []byte, result []byte) error {} - -// same question as for IBCPacketAck -func IBCPacketDropped(ctx sdk.Context, k *wasm.Keeper, contractAddress sdk.AccAddress, env IBCPacketInfo, - originalMsg []byte, errorMsg string) error {} - -// do we need/want all this info? -type IBCPacketInfo struct { - // local id for the Channel packet was sent/received on - ChannelID string - - // sequence for the packet (will already be enforced in order if ORDERED channel) - Sequence uint64 - - // Note: Timeout if guaranteed ONLY to be exceeded iff we are processing IBCPacketDropped - // otherwise, this is just interesting metadata - - // block height after which the packet times out - TimeoutHeight uint64 - // block timestamp (in nanoseconds) after which the packet times out - TimeoutTimestamp uint64 -} -``` - -Channel Lifecycle: - -```go -package lifecycle - -// if this returns error, we reject the channel opening -// otherwise response has the versions we accept -// -// It is provided the full ChannelInfo being proposed to do any needed checks -func OnChanNegotiate(ctx sdk.Context, k *wasm.Keeper, contractAddress sdk.AccAddress, request ChannelInfo) - (version Version, err error) {} - -// This is called with the full ChannelInfo once the other side has agreed. -// An error here will still abort the handshake process. (so you can double check the order/version here) -// -// The main purpose is to allow the contract to set up any internal state knowing the channel was established, -// and keep a registry with that ChannelID -func OnChanOpened(ctx sdk.Context, k *wasm.Keeper, contractAddress sdk.AccAddress, request ChannelInfo) error {} - -// This is called when the channel is closed for any reason -// TODO: any meaning to return an error here? we cannot abort closing a channel -func OnChanClosed(ctx sdk.Context, k *wasm.Keeper, contractAddress sdk.AccAddress, request ChannelClosedInfo) error {} - -type ChannelInfo struct { - // key info to enforce (error if not what is expected) - Order channeltypes.Order - // The proposed version. This may come from the relayer, from the initiating contract, or the responding contract. - // In any case, this is the currently agreed upon version to use and if there is disagreement, the contract should - // propose another one (if possible in return value), or return an error - ProposedVersion Version - // local id for the Channel that is being initiated - ChannelID string - // these two are taken from channeltypes.Counterparty - RemotePortID string - RemoteChannelID string -} - -type ChannelClosedInfo struct { - // local id for the Channel that is being shut down - ChannelID string -} -``` - -Queries: - -These are callbacks that the contract can make, calling into a QueryPlugin. -The general type definition for a `QueryPlugin` is -`func(ctx sdk.Context, request *wasmTypes.IBCQuery) ([]byte, error)`. -All other info (like the contract address we are querying for) must be passed in -from the contract (which knows it's own address). - -Here we just defined the request and response types (which will be serialized into `[]byte`) - -```go -package queries - -type QueryPort struct { - ContractAddress string -} - -type QueryPortResponse struct { - PortID string -} - -type QueryChannels struct { - // exactly one of these must be set. ContractAddress is a shortcut to save the Contract->PortID mapping - PortID string - ContractAddress string -} - -type QueryChannelsResponse struct { - ChannelIDs []ChannelMetadata -} - -type ChannelMetadata struct { - // Local portID, channelID is our unique identifier - PortID string - ChannelID string - RemotePortID string - Order channeltypes.Order - Verson Version -} - -type QueryPendingPackets struct { - // Always required - ChannelID string - - // exactly one of these must be set. ContractAddress is a shortcut to save the Contract->PortID mapping - PortID string - ContractAddress string -} - -type QueryPendingPacketsResponse struct { - Packets []PacketMetadata -} - -type PacketMetadata struct { - // The original (serialized) message we sent - Msg []byte - - Sequence uint64 - // block height after which the packet times out - TimeoutHeight uint64 - // block timestamp (in nanoseconds) after which the packet times out - TimeoutTimestamp uint64 -} - -type QueryPendingAcknowlegdements struct { - // Always required - ChannelID string - - // exactly one of these must be set. ContractAddress is a shortcut to save the Contract->PortID mapping - PortID string - ContractAddress string -} - -type QueryPendingPacketsResponse struct { - // Do we need another struct for the metadata? - Packets []PacketMetadata -} - - -type QueryCounterparty struct { - // Always required - ChannelID string - - // exactly one of these must be set. ContractAddress is a shortcut to save the Contract->PortID mapping - PortID string - ContractAddress string -} - -// lists (port, channel) on the counterparty for our local channel -type QueryCounterpartyResponse struct { - PortID string - ChannelID string -} -``` - -### Contract (Wasm) entrypoints - -**TODO** +Please refer to the CosmWasm repo for all +[details on the IBC API from the point of view of a CosmWasm contract](https://github.com/CosmWasm/cosmwasm/blob/main/IBC.md). ## Future Ideas From 8ef2d2695b25bee933ae3470c60267bdcb43640c Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Fri, 23 Apr 2021 13:28:52 +0200 Subject: [PATCH 37/56] Persist last code update with contract lookup index --- x/wasm/keeper/genesis_test.go | 33 ++++++++++++++++----------------- x/wasm/keeper/keeper.go | 33 ++++++++++++++++++++++++++++----- x/wasm/keeper/keeper_test.go | 17 +++++++++++++---- x/wasm/types/keys.go | 6 +++--- x/wasm/types/keys_test.go | 6 +++--- 5 files changed, 63 insertions(+), 32 deletions(-) diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index dca6e4735d..3fae7e4efc 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -6,6 +6,7 @@ import ( "encoding/base64" "errors" "fmt" + prefix2 "github.com/cosmos/cosmos-sdk/store/prefix" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "io/ioutil" "math/rand" @@ -103,19 +104,27 @@ func TestGenesisExportImport(t *testing.T) { exportedGenesis, err := wasmKeeper.cdc.MarshalJSON(exportedState) require.NoError(t, err) - // reset ContractInfo in source DB for comparison with dest DB + // setup new instances + dstKeeper, dstCtx, dstStoreKeys := setupKeeper(t) + + // reset contract code index in source DB for comparison with dest DB wasmKeeper.IterateContractInfo(srcCtx, func(address sdk.AccAddress, info wasmTypes.ContractInfo) bool { - wasmKeeper.deleteContractSecondIndex(srcCtx, address, &info) - info.ResetFromGenesis(srcCtx) - wasmKeeper.storeContractInfo(srcCtx, address, &info) + wasmKeeper.removeFromContractCodeSecondaryIndex(srcCtx, address, wasmKeeper.getLastContractHistoryEntry(srcCtx, address)) + prefix := prefix2.NewStore(srcCtx.KVStore(wasmKeeper.storeKey), types.GetContractCodeHistoryElementPrefix(address)) + for iter := prefix.Iterator(nil, nil); iter.Valid(); iter.Next() { + prefix.Delete(iter.Key()) + } + x := &info + newHistory := x.ResetFromGenesis(dstCtx) + wasmKeeper.storeContractInfo(srcCtx, address, x) + wasmKeeper.addToContractCodeSecondaryIndex(srcCtx, address, newHistory) + wasmKeeper.appendToContractHistory(srcCtx, address, newHistory) return false }) // re-import - dstKeeper, dstCtx, dstStoreKeys := setupKeeper(t) - var importState wasmTypes.GenesisState - err = wasmKeeper.cdc.UnmarshalJSON(exportedGenesis, &importState) + err = dstKeeper.cdc.UnmarshalJSON(exportedGenesis, &importState) require.NoError(t, err) InitGenesis(dstCtx, dstKeeper, importState, &StakingKeeperMock{}, TestHandler(contractKeeper)) @@ -125,16 +134,6 @@ func TestGenesisExportImport(t *testing.T) { dstIT := dstCtx.KVStore(dstStoreKeys[j]).Iterator(nil, nil) for i := 0; srcIT.Valid(); i++ { - isContractHistory := srcStoreKeys[j].Name() == types.StoreKey && bytes.HasPrefix(srcIT.Key(), types.ContractCodeHistoryElementPrefix) - if isContractHistory { - // only skip history entries because we know they are different - // from genesis they are merged into 1 single entry - srcIT.Next() - if bytes.HasPrefix(dstIT.Key(), types.ContractCodeHistoryElementPrefix) { - dstIT.Next() - } - continue - } require.True(t, dstIT.Valid(), "[%s] destination DB has less elements than source. Missing: %x", srcStoreKeys[j].Name(), srcIT.Key()) require.Equal(t, srcIT.Key(), dstIT.Key(), i) require.Equal(t, srcIT.Value(), dstIT.Value(), "[%s] element (%d): %X", srcStoreKeys[j].Name(), i, srcIT.Key()) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 6c1117309d..3d7766c00f 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -296,8 +296,10 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A } // store contract before dispatch so that contract could be called back + historyEntry := contractInfo.InitialHistory(initMsg) + k.addToContractCodeSecondaryIndex(ctx, contractAddress, historyEntry) + k.appendToContractHistory(ctx, contractAddress, historyEntry) k.storeContractInfo(ctx, contractAddress, &contractInfo) - k.appendToContractHistory(ctx, contractAddress, contractInfo.InitialHistory(initMsg)) // dispatch submessages then messages err = k.dispatchAll(ctx, contractAddress, contractInfo.IBCPortID, res.Submessages, res.Messages) @@ -408,10 +410,11 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller ctx.EventManager().EmitEvents(events) // delete old secondary index entry - k.deleteContractSecondIndex(ctx, contractAddress, contractInfo) + k.removeFromContractCodeSecondaryIndex(ctx, contractAddress, k.getLastContractHistoryEntry(ctx, contractAddress)) // persist migration updates historyEntry := contractInfo.AddMigration(ctx, newCodeID, msg) k.appendToContractHistory(ctx, contractAddress, historyEntry) + k.addToContractCodeSecondaryIndex(ctx, contractAddress, historyEntry) k.storeContractInfo(ctx, contractAddress, contractInfo) // dispatch submessages then messages @@ -507,8 +510,15 @@ func (k Keeper) reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply was }, nil } -func (k Keeper) deleteContractSecondIndex(ctx sdk.Context, contractAddress sdk.AccAddress, contractInfo *types.ContractInfo) { - ctx.KVStore(k.storeKey).Delete(types.GetContractByCreatedSecondaryIndexKey(contractAddress, contractInfo)) +// addToContractCodeSecondaryIndex adds element to the index for contracts-by-codeid queries +func (k Keeper) addToContractCodeSecondaryIndex(ctx sdk.Context, contractAddress sdk.AccAddress, entry types.ContractCodeHistoryEntry) { + store := ctx.KVStore(k.storeKey) + store.Set(types.GetContractByCreatedSecondaryIndexKey(contractAddress, entry), []byte{}) +} + +// removeFromContractCodeSecondaryIndex removes element to the index for contracts-by-codeid queries +func (k Keeper) removeFromContractCodeSecondaryIndex(ctx sdk.Context, contractAddress sdk.AccAddress, entry types.ContractCodeHistoryEntry) { + ctx.KVStore(k.storeKey).Delete(types.GetContractByCreatedSecondaryIndexKey(contractAddress, entry)) } func (k Keeper) setContractAdmin(ctx sdk.Context, contractAddress, caller, newAdmin sdk.AccAddress, authZ AuthorizationPolicy) error { @@ -552,6 +562,18 @@ func (k Keeper) GetContractHistory(ctx sdk.Context, contractAddr sdk.AccAddress) return r } +func (k Keeper) getLastContractHistoryEntry(ctx sdk.Context, contractAddr sdk.AccAddress) types.ContractCodeHistoryEntry { + prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), types.GetContractCodeHistoryElementPrefix(contractAddr)) + iter := prefixStore.ReverseIterator(nil, nil) + var r types.ContractCodeHistoryEntry + if !iter.Valid() { + // all contracts have a history + panic(fmt.Sprintf("no history for %s", contractAddr.String())) + } + k.cdc.MustUnmarshalBinaryBare(iter.Value(), &r) + return r +} + // QuerySmart queries the smart contract itself. func (k Keeper) QuerySmart(ctx sdk.Context, contractAddr sdk.AccAddress, req []byte) ([]byte, error) { defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "query-smart") @@ -623,10 +645,10 @@ func (k Keeper) HasContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) return store.Has(types.GetContractAddressKey(contractAddress)) } +// storeContractInfo persists the ContractInfo. No secondary index updated here. func (k Keeper) storeContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress, contract *types.ContractInfo) { store := ctx.KVStore(k.storeKey) store.Set(types.GetContractAddressKey(contractAddress), k.cdc.MustMarshalBinaryBare(contract)) - store.Set(types.GetContractByCreatedSecondaryIndexKey(contractAddress, contract), []byte{}) } func (k Keeper) IterateContractInfo(ctx sdk.Context, cb func(sdk.AccAddress, types.ContractInfo) bool) { @@ -1003,6 +1025,7 @@ func (k Keeper) importContract(ctx sdk.Context, contractAddr sdk.AccAddress, c * historyEntry := c.ResetFromGenesis(ctx) k.appendToContractHistory(ctx, contractAddr, historyEntry) k.storeContractInfo(ctx, contractAddr, c) + k.addToContractCodeSecondaryIndex(ctx, contractAddr, historyEntry) return k.importContractState(ctx, contractAddr, state) } diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 65844fec6e..0ea3dd0438 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -950,20 +950,29 @@ func TestMigrateReplacesTheSecondIndex(t *testing.T) { store := ctx.KVStore(keepers.WasmKeeper.storeKey) oldContractInfo := keepers.WasmKeeper.GetContractInfo(ctx, example.Contract) require.NotNil(t, oldContractInfo) - exists := store.Has(types.GetContractByCreatedSecondaryIndexKey(example.Contract, oldContractInfo)) + createHistoryEntry := types.ContractCodeHistoryEntry{ + CodeID: example.CodeID, + Updated: types.NewAbsoluteTxPosition(ctx), + } + exists := store.Has(types.GetContractByCreatedSecondaryIndexKey(example.Contract, createHistoryEntry)) require.True(t, exists) + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) // increment for different block // when do migrate newCodeExample := StoreBurnerExampleContract(t, ctx, keepers) migMsgBz := BurnerExampleInitMsg{Payout: example.CreatorAddr}.GetBytes(t) _, err := keepers.ContractKeeper.Migrate(ctx, example.Contract, example.CreatorAddr, newCodeExample.CodeID, migMsgBz) require.NoError(t, err) + // then the new index exists - newContractInfo := keepers.WasmKeeper.GetContractInfo(ctx, example.Contract) - exists = store.Has(types.GetContractByCreatedSecondaryIndexKey(example.Contract, newContractInfo)) + migrateHistoryEntry := types.ContractCodeHistoryEntry{ + CodeID: newCodeExample.CodeID, + Updated: types.NewAbsoluteTxPosition(ctx), + } + exists = store.Has(types.GetContractByCreatedSecondaryIndexKey(example.Contract, migrateHistoryEntry)) require.True(t, exists) // and the old index was removed - exists = store.Has(types.GetContractByCreatedSecondaryIndexKey(example.Contract, oldContractInfo)) + exists = store.Has(types.GetContractByCreatedSecondaryIndexKey(example.Contract, createHistoryEntry)) require.False(t, exists) } diff --git a/x/wasm/types/keys.go b/x/wasm/types/keys.go index ff9bcb68a8..310034ca77 100644 --- a/x/wasm/types/keys.go +++ b/x/wasm/types/keys.go @@ -52,13 +52,13 @@ func GetContractStorePrefix(addr sdk.AccAddress) []byte { } // GetContractByCreatedSecondaryIndexKey returns the key for the secondary index: -// `` -func GetContractByCreatedSecondaryIndexKey(contractAddr sdk.AccAddress, c *ContractInfo) []byte { +// `` +func GetContractByCreatedSecondaryIndexKey(contractAddr sdk.AccAddress, c ContractCodeHistoryEntry) []byte { prefix := GetContractByCodeIDSecondaryIndexPrefix(c.CodeID) prefixLen := len(prefix) r := make([]byte, prefixLen+AbsoluteTxPositionLen+sdk.AddrLen) copy(r[0:], prefix) - copy(r[prefixLen:], c.Created.Bytes()) + copy(r[prefixLen:], c.Updated.Bytes()) copy(r[prefixLen+AbsoluteTxPositionLen:], contractAddr) return r } diff --git a/x/wasm/types/keys_test.go b/x/wasm/types/keys_test.go index 2d12aef6f8..95ef74ff16 100644 --- a/x/wasm/types/keys_test.go +++ b/x/wasm/types/keys_test.go @@ -29,12 +29,12 @@ func TestGetContractByCodeIDSecondaryIndexPrefix(t *testing.T) { } func TestGetContractByCreatedSecondaryIndexKey(t *testing.T) { - c := &ContractInfo{ + e := ContractCodeHistoryEntry{ CodeID: 1, - Created: &AbsoluteTxPosition{2 + 1<<(8*7), 3 + 1<<(8*7)}, + Updated: &AbsoluteTxPosition{2 + 1<<(8*7), 3 + 1<<(8*7)}, } addr := bytes.Repeat([]byte{4}, sdk.AddrLen) - got := GetContractByCreatedSecondaryIndexKey(addr, c) + got := GetContractByCreatedSecondaryIndexKey(addr, e) exp := []byte{6, // prefix 0, 0, 0, 0, 0, 0, 0, 1, // codeID 1, 0, 0, 0, 0, 0, 0, 2, // height From c377d7110e3d97ce2a660068420154c83efe954f Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Fri, 23 Apr 2021 15:07:33 +0200 Subject: [PATCH 38/56] List contract address without other data --- contrib/local/02-contracts.sh | 2 +- contrib/local/03-grpc-queries.sh | 16 +- docs/proto/proto-docs.md | 20 +- proto/cosmwasm/wasm/v1beta1/query.proto | 17 +- x/wasm/alias.go | 1 - x/wasm/keeper/genesis_test.go | 21 +- x/wasm/keeper/keeper.go | 12 + x/wasm/keeper/keeper_test.go | 41 +++ x/wasm/keeper/legacy_querier.go | 40 +-- x/wasm/keeper/legacy_querier_test.go | 9 +- x/wasm/keeper/querier.go | 28 +- x/wasm/keeper/querier_test.go | 13 +- x/wasm/keeper/wasmtesting/mock_engine.go | 10 +- x/wasm/module_test.go | 10 +- x/wasm/types/exported_keepers.go | 1 + x/wasm/types/query.pb.go | 438 +++++------------------ 16 files changed, 212 insertions(+), 467 deletions(-) diff --git a/contrib/local/02-contracts.sh b/contrib/local/02-contracts.sh index f95c41bf3b..ccb5eb40f1 100755 --- a/contrib/local/02-contracts.sh +++ b/contrib/local/02-contracts.sh @@ -25,7 +25,7 @@ wasmd tx wasm instantiate "$CODE_ID" "$INIT" --admin=$(wasmd keys show validator --from validator --amount="100ustake" --label "local0.1.0" \ --gas 1000000 -y --chain-id=testing -b block | jq -CONTRACT=$(wasmd query wasm list-contract-by-code "$CODE_ID" -o json | jq -r '.contract_infos[-1].address') +CONTRACT=$(wasmd query wasm list-contract-by-code "$CODE_ID" -o json | jq -r '.contracts[-1]') echo "* Contract address: $CONTRACT" echo "### Query all" RESP=$(wasmd query wasm contract-state all "$CONTRACT" -o json) diff --git a/contrib/local/03-grpc-queries.sh b/contrib/local/03-grpc-queries.sh index 94ea59983f..bca10cb05d 100755 --- a/contrib/local/03-grpc-queries.sh +++ b/contrib/local/03-grpc-queries.sh @@ -4,26 +4,28 @@ set -o errexit -o nounset -o pipefail DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" echo "-----------------------" -COSMOS_SDK_DIR=${COSMOS_SDK_DIR:-$(go list -f "{{ .Dir }}" -m github.com/cosmos/cosmos-sdk)} +PROTO_THRD="$DIR/../../third_party/proto" +PROTO_WASMD="$DIR/../../proto" +PROTO_WASMD_QUERY="$PROTO_WASMD/cosmwasm/wasm/v1beta1/query.proto" echo "### List all codes" -RESP=$(grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/types/query.proto \ +RESP=$(grpcurl -plaintext -import-path $PROTO_THRD -import-path $PROTO_WASMD -proto $PROTO_WASMD_QUERY \ localhost:9090 cosmwasm.wasm.v1beta1.Query/Codes) echo "$RESP" | jq CODE_ID=$(echo "$RESP" | jq -r '.codeInfos[-1].codeId') -echo "### List contract by code" -RESP=$(grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/types/query.proto \ +echo "### List contracts by code" +RESP=$(grpcurl -plaintext -import-path $PROTO_THRD -import-path $PROTO_WASMD -proto $PROTO_WASMD_QUERY \ -d "{\"codeId\": $CODE_ID}" localhost:9090 cosmwasm.wasm.v1beta1.Query/ContractsByCode ) echo $RESP | jq echo "### Show history for contract" -CONTRACT=$(echo $RESP | jq -r ".contractInfos[-1].address") -grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/types/query.proto \ +CONTRACT=$(echo $RESP | jq -r ".contracts[-1]") +grpcurl -plaintext -import-path $PROTO_THRD -import-path $PROTO_WASMD -proto $PROTO_WASMD_QUERY \ -d "{\"address\": \"$CONTRACT\"}" localhost:9090 cosmwasm.wasm.v1beta1.Query/ContractHistory | jq echo "### Show contract state" -grpcurl -plaintext -import-path $COSMOS_SDK_DIR/third_party/proto -import-path $COSMOS_SDK_DIR/proto -import-path . -proto ./x/wasm/types/query.proto \ +grpcurl -plaintext -import-path $PROTO_THRD -import-path $PROTO_WASMD -proto $PROTO_WASMD_QUERY \ -d "{\"address\": \"$CONTRACT\"}" localhost:9090 cosmwasm.wasm.v1beta1.Query/AllContractState | jq echo "Empty state due to 'burner' contract cleanup" diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index 16c4196174..7235179730 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -55,7 +55,6 @@ - [cosmwasm/wasm/v1beta1/query.proto](#cosmwasm/wasm/v1beta1/query.proto) - [CodeInfoResponse](#cosmwasm.wasm.v1beta1.CodeInfoResponse) - - [ContractInfoWithAddress](#cosmwasm.wasm.v1beta1.ContractInfoWithAddress) - [QueryAllContractStateRequest](#cosmwasm.wasm.v1beta1.QueryAllContractStateRequest) - [QueryAllContractStateResponse](#cosmwasm.wasm.v1beta1.QueryAllContractStateResponse) - [QueryCodeRequest](#cosmwasm.wasm.v1beta1.QueryCodeRequest) @@ -814,23 +813,6 @@ CodeInfoResponse contains code meta data from CodeInfo - - -### ContractInfoWithAddress -ContractInfoWithAddress adds the address (key) to the ContractInfo -representation - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| `address` | [string](#string) | | | -| `contract_info` | [ContractInfo](#cosmwasm.wasm.v1beta1.ContractInfo) | | | - - - - - - ### QueryAllContractStateRequest @@ -1020,7 +1002,7 @@ Query/ContractsByCode RPC method | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `contract_infos` | [ContractInfoWithAddress](#cosmwasm.wasm.v1beta1.ContractInfoWithAddress) | repeated | | +| `contracts` | [string](#string) | repeated | contracts are a set of contract addresses | | `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. | diff --git a/proto/cosmwasm/wasm/v1beta1/query.proto b/proto/cosmwasm/wasm/v1beta1/query.proto index cd91c7ffb3..3f96cc68f1 100644 --- a/proto/cosmwasm/wasm/v1beta1/query.proto +++ b/proto/cosmwasm/wasm/v1beta1/query.proto @@ -100,23 +100,12 @@ message QueryContractsByCodeRequest { cosmos.base.query.v1beta1.PageRequest pagination = 2; } -// ContractInfoWithAddress adds the address (key) to the ContractInfo -// representation -message ContractInfoWithAddress { - option (gogoproto.equal) = true; - - string address = 1; - ContractInfo contract_info = 2 [ - (gogoproto.embed) = true, - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "" - ]; -} // QueryContractsByCodeResponse is the response type for the // Query/ContractsByCode RPC method message QueryContractsByCodeResponse { - repeated ContractInfoWithAddress contract_infos = 1 - [ (gogoproto.nullable) = false ]; + // contracts are a set of contract addresses + repeated string contracts = 1; + // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/x/wasm/alias.go b/x/wasm/alias.go index 59ff271023..82573fa2fa 100644 --- a/x/wasm/alias.go +++ b/x/wasm/alias.go @@ -125,7 +125,6 @@ type ( ContractInfo = types.ContractInfo CreatedAt = types.AbsoluteTxPosition Config = types.WasmConfig - ContractInfoWithAddress = types.ContractInfoWithAddress CodeInfoResponse = types.CodeInfoResponse MessageHandler = keeper.SDKMessageHandler BankEncoder = keeper.BankEncoder diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index 3fae7e4efc..23a48d4953 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -6,20 +6,14 @@ import ( "encoding/base64" "errors" "fmt" - prefix2 "github.com/cosmos/cosmos-sdk/store/prefix" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - "io/ioutil" - "math/rand" - "os" - "testing" - "time" - "github.com/CosmWasm/wasmd/x/wasm/types" wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/store" + "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" distributionkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" @@ -31,6 +25,11 @@ import ( "github.com/tendermint/tendermint/proto/tendermint/crypto" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" + "io/ioutil" + "math/rand" + "os" + "testing" + "time" ) const firstCodeID = 1 @@ -110,9 +109,9 @@ func TestGenesisExportImport(t *testing.T) { // reset contract code index in source DB for comparison with dest DB wasmKeeper.IterateContractInfo(srcCtx, func(address sdk.AccAddress, info wasmTypes.ContractInfo) bool { wasmKeeper.removeFromContractCodeSecondaryIndex(srcCtx, address, wasmKeeper.getLastContractHistoryEntry(srcCtx, address)) - prefix := prefix2.NewStore(srcCtx.KVStore(wasmKeeper.storeKey), types.GetContractCodeHistoryElementPrefix(address)) - for iter := prefix.Iterator(nil, nil); iter.Valid(); iter.Next() { - prefix.Delete(iter.Key()) + prefixStore := prefix.NewStore(srcCtx.KVStore(wasmKeeper.storeKey), types.GetContractCodeHistoryElementPrefix(address)) + for iter := prefixStore.Iterator(nil, nil); iter.Valid(); iter.Next() { + prefixStore.Delete(iter.Key()) } x := &info newHistory := x.ResetFromGenesis(dstCtx) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 3d7766c00f..9dcc4c4bc9 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -521,6 +521,17 @@ func (k Keeper) removeFromContractCodeSecondaryIndex(ctx sdk.Context, contractAd ctx.KVStore(k.storeKey).Delete(types.GetContractByCreatedSecondaryIndexKey(contractAddress, entry)) } +// IterateContractsByCode iterates over all contracts with given codeID ASC on code update time. +func (k Keeper) IterateContractsByCode(ctx sdk.Context, codeID uint64, cb func(address sdk.AccAddress) bool) { + prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), types.GetContractByCodeIDSecondaryIndexPrefix(codeID)) + for iter := prefixStore.Iterator(nil, nil); iter.Valid(); iter.Next() { + key := iter.Key() + if cb(key[types.AbsoluteTxPositionLen:]) { + return + } + } +} + func (k Keeper) setContractAdmin(ctx sdk.Context, contractAddress, caller, newAdmin sdk.AccAddress, authZ AuthorizationPolicy) error { contractInfo := k.GetContractInfo(ctx, contractAddress) if contractInfo == nil { @@ -562,6 +573,7 @@ func (k Keeper) GetContractHistory(ctx sdk.Context, contractAddr sdk.AccAddress) return r } +// getLastContractHistoryEntry returns the last element from history. To be used internally only as it panics when none exists func (k Keeper) getLastContractHistoryEntry(ctx sdk.Context, contractAddr sdk.AccAddress) types.ContractCodeHistoryEntry { prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), types.GetContractCodeHistoryElementPrefix(contractAddr)) iter := prefixStore.ReverseIterator(nil, nil) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 0ea3dd0438..4b5607f7bd 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -1055,6 +1055,47 @@ func TestMigrateWithDispatchedMessage(t *testing.T) { assert.Equal(t, deposit, balance) } +func TestIterateContractsByCode(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, SupportedFeatures) + k, c := keepers.WasmKeeper, keepers.ContractKeeper + example1 := InstantiateHackatomExampleContract(t, ctx, keepers) + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + example2 := InstantiateIBCReflectContract(t, ctx, keepers) + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + initMsg := HackatomExampleInitMsg{ + Verifier: RandomAccountAddress(t), + Beneficiary: RandomAccountAddress(t), + }.GetBytes(t) + contractAddr3, _, err := c.Instantiate(ctx, example1.CodeID, example1.CreatorAddr, nil, initMsg, "foo", nil) + require.NoError(t, err) + specs := map[string]struct { + codeID uint64 + exp []sdk.AccAddress + }{ + "multiple results": { + codeID: example1.CodeID, + exp: []sdk.AccAddress{example1.Contract, contractAddr3}, + }, + "single results": { + codeID: example2.CodeID, + exp: []sdk.AccAddress{example2.Contract}, + }, + "empty results": { + codeID: 99999, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + var gotAddr []sdk.AccAddress + k.IterateContractsByCode(ctx, spec.codeID, func(address sdk.AccAddress) bool { + gotAddr = append(gotAddr, address) + return false + }) + assert.Equal(t, spec.exp, gotAddr) + }) + } +} + type sudoMsg struct { // This is a tongue-in-check demo command. This is not the intended purpose of Sudo. // Here we show that some priviledged Go module can make a call that should never be exposed diff --git a/x/wasm/keeper/legacy_querier.go b/x/wasm/keeper/legacy_querier.go index 5afde39479..f5d24a1993 100644 --- a/x/wasm/keeper/legacy_querier.go +++ b/x/wasm/keeper/legacy_querier.go @@ -2,15 +2,12 @@ package keeper import ( "encoding/json" - "reflect" - "sort" - "strconv" - "strings" - "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" abci "github.com/tendermint/tendermint/abci/types" + "reflect" + "strconv" ) const ( @@ -47,7 +44,7 @@ func NewLegacyQuerier(keeper types.ViewKeeper, gasLimit sdk.Gas) sdk.Querier { if err != nil { return nil, sdkerrors.Wrapf(types.ErrInvalid, "code id: %s", err.Error()) } - rsp, err = queryContractListByCode(ctx, codeID, keeper) + rsp = queryContractListByCode(ctx, codeID, keeper) case QueryGetContractState: if len(path) < 3 { return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "unknown data query endpoint") @@ -145,32 +142,11 @@ func queryContractHistory(ctx sdk.Context, contractAddr sdk.AccAddress, keeper t return history, nil } -func queryContractListByCode(ctx sdk.Context, codeID uint64, keeper types.ViewKeeper) ([]types.ContractInfoWithAddress, error) { - var contracts []types.ContractInfoWithAddress - keeper.IterateContractInfo(ctx, func(addr sdk.AccAddress, info types.ContractInfo) bool { - if info.CodeID == codeID { - // and add the address - infoWithAddress := types.ContractInfoWithAddress{ - Address: addr.String(), - ContractInfo: info, - } - contracts = append(contracts, infoWithAddress) - } +func queryContractListByCode(ctx sdk.Context, codeID uint64, keeper types.ViewKeeper) []string { + var contracts []string + keeper.IterateContractsByCode(ctx, codeID, func(addr sdk.AccAddress) bool { + contracts = append(contracts, addr.String()) return false }) - - // now we sort them by AbsoluteTxPosition - sort.Slice(contracts, func(i, j int) bool { - this := contracts[i].ContractInfo.Created - other := contracts[j].ContractInfo.Created - if this.Equal(other) { - return strings.Compare(contracts[i].Address, contracts[j].Address) < 0 - } - return this.LessThan(other) - }) - - for i := range contracts { - contracts[i].Created = nil - } - return contracts, nil + return contracts } diff --git a/x/wasm/keeper/legacy_querier_test.go b/x/wasm/keeper/legacy_querier_test.go index 7c366c2672..0699eebc3a 100644 --- a/x/wasm/keeper/legacy_querier_test.go +++ b/x/wasm/keeper/legacy_querier_test.go @@ -205,17 +205,14 @@ func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { res, err := q(ctx, query, data) require.NoError(t, err) - var contracts []map[string]interface{} + var contracts []string err = json.Unmarshal(res, &contracts) require.NoError(t, err) require.Equal(t, 10, len(contracts)) - for i, contract := range contracts { - assert.Equal(t, fmt.Sprintf("contract %d", i), contract["label"]) - assert.NotEmpty(t, contract["address"]) - // ensure these are not shown - assert.Nil(t, contract["created"]) + for _, contract := range contracts { + assert.NotEmpty(t, contract) } } diff --git a/x/wasm/keeper/querier.go b/x/wasm/keeper/querier.go index cbca1be29c..0901c4448f 100644 --- a/x/wasm/keeper/querier.go +++ b/x/wasm/keeper/querier.go @@ -43,10 +43,7 @@ func (q grpcQuerier) ContractInfo(c context.Context, req *types.QueryContractInf case rsp == nil: return nil, types.ErrNotFound } - return &types.QueryContractInfoResponse{ - Address: rsp.Address, - ContractInfo: rsp.ContractInfo, - }, nil + return rsp, nil } func (q grpcQuerier) ContractHistory(c context.Context, req *types.QueryContractHistoryRequest) (*types.QueryContractHistoryResponse, error) { @@ -82,6 +79,7 @@ func (q grpcQuerier) ContractHistory(c context.Context, req *types.QueryContract }, nil } +// ContractsByCode lists all smart contracts for a code id func (q grpcQuerier) ContractsByCode(c context.Context, req *types.QueryContractsByCodeRequest) (*types.QueryContractsByCodeResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") @@ -90,21 +88,13 @@ func (q grpcQuerier) ContractsByCode(c context.Context, req *types.QueryContract return nil, sdkerrors.Wrap(types.ErrInvalid, "code id") } ctx := sdk.UnwrapSDKContext(c) - r := make([]types.ContractInfoWithAddress, 0) + r := make([]string, 0) prefixStore := prefix.NewStore(ctx.KVStore(q.storeKey), types.GetContractByCodeIDSecondaryIndexPrefix(req.CodeId)) pageRes, err := query.FilteredPaginate(prefixStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { - var contractAddr sdk.AccAddress = key[types.AbsoluteTxPositionLen:] - c := q.keeper.GetContractInfo(ctx, contractAddr) - if c == nil { - return false, types.ErrNotFound - } - c.Created = nil // redact if accumulate { - r = append(r, types.ContractInfoWithAddress{ - Address: contractAddr.String(), - ContractInfo: *c, - }) + var contractAddr sdk.AccAddress = key[types.AbsoluteTxPositionLen:] + r = append(r, contractAddr.String()) } return true, nil }) @@ -112,8 +102,8 @@ func (q grpcQuerier) ContractsByCode(c context.Context, req *types.QueryContract return nil, err } return &types.QueryContractsByCodeResponse{ - ContractInfos: r, - Pagination: pageRes, + Contracts: r, + Pagination: pageRes, }, nil } @@ -258,14 +248,14 @@ func (q grpcQuerier) Codes(c context.Context, req *types.QueryCodesRequest) (*ty return &types.QueryCodesResponse{CodeInfos: r, Pagination: pageRes}, nil } -func queryContractInfo(ctx sdk.Context, addr sdk.AccAddress, keeper types.ViewKeeper) (*types.ContractInfoWithAddress, error) { +func queryContractInfo(ctx sdk.Context, addr sdk.AccAddress, keeper types.ViewKeeper) (*types.QueryContractInfoResponse, error) { info := keeper.GetContractInfo(ctx, addr) if info == nil { return nil, types.ErrNotFound } // redact the Created field (just used for sorting, not part of public API) info.Created = nil - return &types.ContractInfoWithAddress{ + return &types.QueryContractInfoResponse{ Address: addr.String(), ContractInfo: *info, }, nil diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index 05f554939a..cdb7098539 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -283,13 +283,13 @@ func TestQueryContractListByCodeOrdering(t *testing.T) { } // create 10 contracts with real block/gas setup - for i := range [10]int{} { + for i := 0; i < 10; i++ { // 3 tx per block, so we ensure both comparisons work if i%3 == 0 { ctx = setBlock(ctx, h) h++ } - _, _, err = keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, initMsgBz, fmt.Sprintf("contract %d", i), topUp) + _, _, err = keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, initMsgBz, fmt.Sprintf("contractAddr %d", i), topUp) require.NoError(t, err) } @@ -298,13 +298,10 @@ func TestQueryContractListByCodeOrdering(t *testing.T) { res, err := q.ContractsByCode(sdk.WrapSDKContext(ctx), &types.QueryContractsByCodeRequest{CodeId: codeID}) require.NoError(t, err) - require.Equal(t, 10, len(res.ContractInfos)) + require.Equal(t, 10, len(res.Contracts)) - for i, contract := range res.ContractInfos { - assert.Equal(t, fmt.Sprintf("contract %d", i), contract.Label) - assert.NotEmpty(t, contract.Address) - // ensure these are not shown - assert.Nil(t, contract.Created) + for _, contractAddr := range res.Contracts { + assert.NotEmpty(t, contractAddr) } } diff --git a/x/wasm/keeper/wasmtesting/mock_engine.go b/x/wasm/keeper/wasmtesting/mock_engine.go index d0dc0d695e..0e8fbb0c4c 100644 --- a/x/wasm/keeper/wasmtesting/mock_engine.go +++ b/x/wasm/keeper/wasmtesting/mock_engine.go @@ -271,10 +271,16 @@ type contractExecutable interface { ) (*wasmvmtypes.Response, uint64, error) } -//MakeIBCInstantiable adds some noop functions to not fail when contract is used for instantiation -func MakeIBCInstantiable(m *MockWasmer) { +//MakeInstantiable adds some noop functions to not fail when contract is used for instantiation +func MakeInstantiable(m *MockWasmer) { m.CreateFn = HashOnlyCreateFn m.InstantiateFn = NoOpInstantiateFn + m.AnalyzeCodeFn = WithoutIBCAnalyzeFn +} + +//MakeIBCInstantiable adds some noop functions to not fail when contract is used for instantiation +func MakeIBCInstantiable(m *MockWasmer) { + MakeInstantiable(m) m.AnalyzeCodeFn = HasIBCAnalyzeFn } diff --git a/x/wasm/module_test.go b/x/wasm/module_test.go index 514cc5a66c..6d0f2aa271 100644 --- a/x/wasm/module_test.go +++ b/x/wasm/module_test.go @@ -509,25 +509,25 @@ func assertCodeBytes(t *testing.T, q sdk.Querier, ctx sdk.Context, codeID uint64 assert.EqualValues(t, codeID, res["id"]) } -func assertContractList(t *testing.T, q sdk.Querier, ctx sdk.Context, codeID uint64, addrs []string) { +func assertContractList(t *testing.T, q sdk.Querier, ctx sdk.Context, codeID uint64, expContractAddrs []string) { bz, sdkerr := q(ctx, []string{QueryListContractByCode, fmt.Sprintf("%d", codeID)}, abci.RequestQuery{}) require.NoError(t, sdkerr) if len(bz) == 0 { - require.Equal(t, len(addrs), 0) + require.Equal(t, len(expContractAddrs), 0) return } - var res []ContractInfoWithAddress + var res []string err := json.Unmarshal(bz, &res) require.NoError(t, err) var hasAddrs = make([]string, len(res)) for i, r := range res { - hasAddrs[i] = r.Address + hasAddrs[i] = r } - assert.Equal(t, hasAddrs, addrs) + assert.Equal(t, expContractAddrs, hasAddrs) } func assertContractState(t *testing.T, q sdk.Querier, ctx sdk.Context, contractBech32Addr string, expected state) { diff --git a/x/wasm/types/exported_keepers.go b/x/wasm/types/exported_keepers.go index 53533563c8..201653130e 100644 --- a/x/wasm/types/exported_keepers.go +++ b/x/wasm/types/exported_keepers.go @@ -15,6 +15,7 @@ type ViewKeeper interface { HasContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) bool GetContractInfo(ctx types.Context, contractAddress types.AccAddress) *ContractInfo IterateContractInfo(ctx types.Context, cb func(types.AccAddress, ContractInfo) bool) + IterateContractsByCode(ctx sdk.Context, codeID uint64, cb func(address sdk.AccAddress) bool) GetContractState(ctx types.Context, contractAddress types.AccAddress) types.Iterator GetCodeInfo(ctx types.Context, codeID uint64) *CodeInfo IterateCodeInfos(ctx types.Context, cb func(uint64, CodeInfo) bool) diff --git a/x/wasm/types/query.pb.go b/x/wasm/types/query.pb.go index ac8995c07a..8b2c6cdb96 100644 --- a/x/wasm/types/query.pb.go +++ b/x/wasm/types/query.pb.go @@ -238,50 +238,11 @@ func (m *QueryContractsByCodeRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryContractsByCodeRequest proto.InternalMessageInfo -// ContractInfoWithAddress adds the address (key) to the ContractInfo -// representation -type ContractInfoWithAddress struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - ContractInfo `protobuf:"bytes,2,opt,name=contract_info,json=contractInfo,proto3,embedded=contract_info" json:""` -} - -func (m *ContractInfoWithAddress) Reset() { *m = ContractInfoWithAddress{} } -func (m *ContractInfoWithAddress) String() string { return proto.CompactTextString(m) } -func (*ContractInfoWithAddress) ProtoMessage() {} -func (*ContractInfoWithAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{5} -} -func (m *ContractInfoWithAddress) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ContractInfoWithAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ContractInfoWithAddress.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *ContractInfoWithAddress) XXX_Merge(src proto.Message) { - xxx_messageInfo_ContractInfoWithAddress.Merge(m, src) -} -func (m *ContractInfoWithAddress) XXX_Size() int { - return m.Size() -} -func (m *ContractInfoWithAddress) XXX_DiscardUnknown() { - xxx_messageInfo_ContractInfoWithAddress.DiscardUnknown(m) -} - -var xxx_messageInfo_ContractInfoWithAddress proto.InternalMessageInfo - // QueryContractsByCodeResponse is the response type for the // Query/ContractsByCode RPC method type QueryContractsByCodeResponse struct { - ContractInfos []ContractInfoWithAddress `protobuf:"bytes,1,rep,name=contract_infos,json=contractInfos,proto3" json:"contract_infos"` + // contracts are a set of contract addresses + Contracts []string `protobuf:"bytes,1,rep,name=contracts,proto3" json:"contracts,omitempty"` // pagination defines the pagination in the response. Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } @@ -290,7 +251,7 @@ func (m *QueryContractsByCodeResponse) Reset() { *m = QueryContractsByCo func (m *QueryContractsByCodeResponse) String() string { return proto.CompactTextString(m) } func (*QueryContractsByCodeResponse) ProtoMessage() {} func (*QueryContractsByCodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{6} + return fileDescriptor_e8595715dfdf95d1, []int{5} } func (m *QueryContractsByCodeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -332,7 +293,7 @@ func (m *QueryAllContractStateRequest) Reset() { *m = QueryAllContractSt func (m *QueryAllContractStateRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllContractStateRequest) ProtoMessage() {} func (*QueryAllContractStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{7} + return fileDescriptor_e8595715dfdf95d1, []int{6} } func (m *QueryAllContractStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -373,7 +334,7 @@ func (m *QueryAllContractStateResponse) Reset() { *m = QueryAllContractS func (m *QueryAllContractStateResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllContractStateResponse) ProtoMessage() {} func (*QueryAllContractStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{8} + return fileDescriptor_e8595715dfdf95d1, []int{7} } func (m *QueryAllContractStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -414,7 +375,7 @@ func (m *QueryRawContractStateRequest) Reset() { *m = QueryRawContractSt func (m *QueryRawContractStateRequest) String() string { return proto.CompactTextString(m) } func (*QueryRawContractStateRequest) ProtoMessage() {} func (*QueryRawContractStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{9} + return fileDescriptor_e8595715dfdf95d1, []int{8} } func (m *QueryRawContractStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -454,7 +415,7 @@ func (m *QueryRawContractStateResponse) Reset() { *m = QueryRawContractS func (m *QueryRawContractStateResponse) String() string { return proto.CompactTextString(m) } func (*QueryRawContractStateResponse) ProtoMessage() {} func (*QueryRawContractStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{10} + return fileDescriptor_e8595715dfdf95d1, []int{9} } func (m *QueryRawContractStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -496,7 +457,7 @@ func (m *QuerySmartContractStateRequest) Reset() { *m = QuerySmartContra func (m *QuerySmartContractStateRequest) String() string { return proto.CompactTextString(m) } func (*QuerySmartContractStateRequest) ProtoMessage() {} func (*QuerySmartContractStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{11} + return fileDescriptor_e8595715dfdf95d1, []int{10} } func (m *QuerySmartContractStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -536,7 +497,7 @@ func (m *QuerySmartContractStateResponse) Reset() { *m = QuerySmartContr func (m *QuerySmartContractStateResponse) String() string { return proto.CompactTextString(m) } func (*QuerySmartContractStateResponse) ProtoMessage() {} func (*QuerySmartContractStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{12} + return fileDescriptor_e8595715dfdf95d1, []int{11} } func (m *QuerySmartContractStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -574,7 +535,7 @@ func (m *QueryCodeRequest) Reset() { *m = QueryCodeRequest{} } func (m *QueryCodeRequest) String() string { return proto.CompactTextString(m) } func (*QueryCodeRequest) ProtoMessage() {} func (*QueryCodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{13} + return fileDescriptor_e8595715dfdf95d1, []int{12} } func (m *QueryCodeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -616,7 +577,7 @@ func (m *CodeInfoResponse) Reset() { *m = CodeInfoResponse{} } func (m *CodeInfoResponse) String() string { return proto.CompactTextString(m) } func (*CodeInfoResponse) ProtoMessage() {} func (*CodeInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{14} + return fileDescriptor_e8595715dfdf95d1, []int{13} } func (m *CodeInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -655,7 +616,7 @@ func (m *QueryCodeResponse) Reset() { *m = QueryCodeResponse{} } func (m *QueryCodeResponse) String() string { return proto.CompactTextString(m) } func (*QueryCodeResponse) ProtoMessage() {} func (*QueryCodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{15} + return fileDescriptor_e8595715dfdf95d1, []int{14} } func (m *QueryCodeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -694,7 +655,7 @@ func (m *QueryCodesRequest) Reset() { *m = QueryCodesRequest{} } func (m *QueryCodesRequest) String() string { return proto.CompactTextString(m) } func (*QueryCodesRequest) ProtoMessage() {} func (*QueryCodesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{16} + return fileDescriptor_e8595715dfdf95d1, []int{15} } func (m *QueryCodesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -734,7 +695,7 @@ func (m *QueryCodesResponse) Reset() { *m = QueryCodesResponse{} } func (m *QueryCodesResponse) String() string { return proto.CompactTextString(m) } func (*QueryCodesResponse) ProtoMessage() {} func (*QueryCodesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e8595715dfdf95d1, []int{17} + return fileDescriptor_e8595715dfdf95d1, []int{16} } func (m *QueryCodesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -769,7 +730,6 @@ func init() { proto.RegisterType((*QueryContractHistoryRequest)(nil), "cosmwasm.wasm.v1beta1.QueryContractHistoryRequest") proto.RegisterType((*QueryContractHistoryResponse)(nil), "cosmwasm.wasm.v1beta1.QueryContractHistoryResponse") proto.RegisterType((*QueryContractsByCodeRequest)(nil), "cosmwasm.wasm.v1beta1.QueryContractsByCodeRequest") - proto.RegisterType((*ContractInfoWithAddress)(nil), "cosmwasm.wasm.v1beta1.ContractInfoWithAddress") proto.RegisterType((*QueryContractsByCodeResponse)(nil), "cosmwasm.wasm.v1beta1.QueryContractsByCodeResponse") proto.RegisterType((*QueryAllContractStateRequest)(nil), "cosmwasm.wasm.v1beta1.QueryAllContractStateRequest") proto.RegisterType((*QueryAllContractStateResponse)(nil), "cosmwasm.wasm.v1beta1.QueryAllContractStateResponse") @@ -787,77 +747,75 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1beta1/query.proto", fileDescriptor_e8595715dfdf95d1) } var fileDescriptor_e8595715dfdf95d1 = []byte{ - // 1111 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x97, 0xcd, 0x6f, 0x1b, 0xc5, - 0x1b, 0xc7, 0x3d, 0xa9, 0xf3, 0xe2, 0x69, 0xfa, 0xfb, 0x85, 0x51, 0xa1, 0xc6, 0xb8, 0xbb, 0x61, - 0x41, 0xa9, 0x5b, 0xa4, 0xdd, 0x24, 0x4e, 0x11, 0x94, 0x53, 0x9d, 0x02, 0xa9, 0x44, 0x79, 0xd9, - 0x08, 0x22, 0xe8, 0x21, 0x1a, 0xef, 0x4e, 0xed, 0x45, 0xf6, 0x8e, 0xbb, 0x33, 0x26, 0xb1, 0xa2, - 0x50, 0xc4, 0x85, 0x2b, 0xa8, 0x47, 0x2e, 0x1c, 0x38, 0xa0, 0x02, 0xf7, 0x1e, 0x39, 0x70, 0xc8, - 0x31, 0x12, 0x17, 0x4e, 0x16, 0x38, 0x08, 0xa1, 0xfc, 0x09, 0x3d, 0xa1, 0x9d, 0x9d, 0x75, 0x76, - 0x1d, 0xaf, 0xd7, 0x41, 0x16, 0x5c, 0xa2, 0x9d, 0xf8, 0x79, 0x9e, 0xf9, 0x3c, 0xdf, 0x67, 0xe6, - 0x79, 0x76, 0xe1, 0xf3, 0x16, 0x65, 0xcd, 0x1d, 0xcc, 0x9a, 0x86, 0xf8, 0xf3, 0xc9, 0x4a, 0x95, - 0x70, 0xbc, 0x62, 0xdc, 0x6f, 0x13, 0xaf, 0xa3, 0xb7, 0x3c, 0xca, 0x29, 0x7a, 0x3a, 0x34, 0xd1, - 0xc5, 0x1f, 0x69, 0x52, 0xb8, 0x58, 0xa3, 0x35, 0x2a, 0x2c, 0x0c, 0xff, 0x29, 0x30, 0x2e, 0x24, - 0xc4, 0xe3, 0x9d, 0x16, 0x61, 0xd2, 0xa4, 0x58, 0xa3, 0xb4, 0xd6, 0x20, 0x06, 0x6e, 0x39, 0x06, - 0x76, 0x5d, 0xca, 0x31, 0x77, 0xa8, 0x1b, 0xfe, 0x7a, 0xcd, 0x0f, 0x40, 0x99, 0x51, 0xc5, 0x8c, - 0x04, 0x18, 0xfd, 0x20, 0x2d, 0x5c, 0x73, 0x5c, 0x61, 0x1c, 0xd8, 0x6a, 0x6b, 0x30, 0xff, 0x9e, - 0x6f, 0xb1, 0x4e, 0x5d, 0xee, 0x61, 0x8b, 0xdf, 0x76, 0xef, 0x51, 0x93, 0xdc, 0x6f, 0x13, 0xc6, - 0x51, 0x1e, 0xce, 0x62, 0xdb, 0xf6, 0x08, 0x63, 0x79, 0xb0, 0x08, 0x4a, 0x39, 0x33, 0x5c, 0x6a, - 0x0f, 0x01, 0x7c, 0x76, 0x88, 0x1b, 0x6b, 0x51, 0x97, 0x91, 0x64, 0x3f, 0xf4, 0x01, 0xbc, 0x60, - 0x49, 0x8f, 0x6d, 0xc7, 0xbd, 0x47, 0xf3, 0x53, 0x8b, 0xa0, 0x74, 0x7e, 0xf5, 0x05, 0x7d, 0xa8, - 0x3e, 0x7a, 0x34, 0x7a, 0x65, 0xfe, 0xa0, 0xab, 0x66, 0x0e, 0xbb, 0x2a, 0x38, 0xee, 0xaa, 0x19, - 0x73, 0xde, 0x8a, 0xfc, 0x76, 0x23, 0xfb, 0xd7, 0x37, 0x2a, 0xd0, 0x1e, 0xc0, 0xe7, 0x62, 0x50, - 0x1b, 0x0e, 0xe3, 0xd4, 0xeb, 0xa4, 0xa6, 0x83, 0xde, 0x80, 0xf0, 0x44, 0x18, 0xc9, 0xb4, 0xa4, - 0x07, 0x2a, 0xea, 0xbe, 0x8a, 0x7a, 0x50, 0xcc, 0x90, 0xeb, 0x5d, 0x5c, 0x23, 0x32, 0xaa, 0x19, - 0xf1, 0xd4, 0x1e, 0x03, 0x58, 0x1c, 0x4e, 0x20, 0x95, 0x79, 0x07, 0xce, 0x12, 0x97, 0x7b, 0x0e, - 0xf1, 0x11, 0xce, 0x95, 0xce, 0xaf, 0x1a, 0x29, 0x99, 0xaf, 0x53, 0x9b, 0xc8, 0x20, 0xaf, 0xbb, - 0xdc, 0xeb, 0x54, 0xb2, 0xbe, 0x0a, 0x66, 0x18, 0x05, 0xbd, 0x39, 0x84, 0xfc, 0x4a, 0x2a, 0x79, - 0x40, 0x13, 0x43, 0xff, 0x74, 0x40, 0x3b, 0x56, 0xe9, 0xf8, 0x7b, 0x87, 0xda, 0x5d, 0x82, 0xb3, - 0x16, 0xb5, 0xc9, 0xb6, 0x63, 0x0b, 0xed, 0xb2, 0xe6, 0x8c, 0xbf, 0xbc, 0x6d, 0x4f, 0x4c, 0xba, - 0xaf, 0x00, 0xbc, 0x14, 0x2d, 0xf7, 0x96, 0xc3, 0xeb, 0x37, 0x65, 0x79, 0xfe, 0xab, 0xf3, 0xf4, - 0xf3, 0x60, 0x39, 0xfb, 0xa2, 0xc8, 0x72, 0xde, 0x85, 0xff, 0x8b, 0x6d, 0x1f, 0x56, 0x55, 0x1f, - 0x63, 0xff, 0x48, 0x82, 0xb2, 0xa8, 0x17, 0xa2, 0x08, 0x13, 0x2c, 0xed, 0x67, 0x61, 0x1a, 0x37, - 0x1b, 0x8d, 0x90, 0x60, 0x93, 0x63, 0x4e, 0xfe, 0xbd, 0x8b, 0xf1, 0x2d, 0x80, 0x97, 0x13, 0x10, - 0xa4, 0x94, 0x37, 0xe0, 0x4c, 0x93, 0xda, 0xa4, 0x11, 0x4a, 0x58, 0x4c, 0x90, 0xf0, 0x8e, 0x6f, - 0x24, 0x05, 0x93, 0x1e, 0x93, 0x53, 0x6a, 0x4b, 0x0a, 0x65, 0xe2, 0x9d, 0x33, 0x0a, 0x75, 0x19, - 0x42, 0xb1, 0xc7, 0xb6, 0x8d, 0x39, 0x16, 0x08, 0xf3, 0x66, 0x4e, 0xfc, 0xe7, 0x16, 0xe6, 0x58, - 0x2b, 0xcb, 0xf4, 0x4f, 0x07, 0x96, 0xe9, 0x23, 0x98, 0x15, 0x9e, 0x40, 0x78, 0x8a, 0x67, 0xed, - 0x43, 0xa8, 0x08, 0xa7, 0xcd, 0x26, 0xf6, 0xf8, 0x64, 0x79, 0x36, 0xa1, 0x9a, 0x18, 0x5a, 0x12, - 0x2d, 0x47, 0x89, 0x2a, 0xc5, 0x27, 0x5d, 0x35, 0x4f, 0x5c, 0x8b, 0xda, 0x8e, 0x5b, 0x33, 0x3e, - 0x66, 0xd4, 0xd5, 0x4d, 0xbc, 0x73, 0x87, 0x30, 0xe6, 0x6b, 0x19, 0xf0, 0xbe, 0x04, 0x17, 0xe4, - 0x6d, 0x49, 0xef, 0x1b, 0xda, 0x9f, 0x00, 0x2e, 0xf8, 0x86, 0xb1, 0xc1, 0x71, 0x75, 0xc0, 0xba, - 0xb2, 0xd0, 0xeb, 0xaa, 0x33, 0xc2, 0xec, 0xd6, 0x71, 0x57, 0x9d, 0x72, 0xec, 0x7e, 0xdf, 0xc9, - 0xc3, 0x59, 0xcb, 0x23, 0x98, 0x53, 0x4f, 0x64, 0x97, 0x33, 0xc3, 0x25, 0x7a, 0x1f, 0xe6, 0x7c, - 0x9c, 0xed, 0x3a, 0x66, 0xf5, 0xfc, 0x39, 0x41, 0xff, 0xca, 0x93, 0xae, 0xba, 0x56, 0x73, 0x78, - 0xbd, 0x5d, 0xd5, 0x2d, 0xda, 0x34, 0x38, 0x71, 0x6d, 0xe2, 0x35, 0x1d, 0x97, 0x47, 0x1f, 0x1b, - 0x4e, 0x95, 0x19, 0xd5, 0x0e, 0x27, 0x4c, 0xdf, 0x20, 0xbb, 0x15, 0xff, 0xc1, 0x9c, 0xf3, 0x43, - 0x6d, 0x60, 0x56, 0x47, 0xcf, 0xc0, 0x19, 0x46, 0xdb, 0x9e, 0x45, 0xf2, 0x59, 0xb1, 0x9f, 0x5c, - 0xf9, 0x20, 0xd5, 0xb6, 0xd3, 0xb0, 0x89, 0x97, 0x9f, 0x0e, 0x40, 0xe4, 0x52, 0x36, 0x91, 0x2f, - 0x00, 0x7c, 0x2a, 0x22, 0x8b, 0xcc, 0xf4, 0x6d, 0x98, 0x0b, 0x32, 0xf5, 0x9b, 0x16, 0x88, 0x9c, - 0xd8, 0x61, 0x4d, 0x23, 0xae, 0x52, 0x65, 0xae, 0xdf, 0xb4, 0xe6, 0x2c, 0xf9, 0x1b, 0x2a, 0xca, - 0x6a, 0x89, 0x4a, 0x57, 0xe6, 0x8e, 0xbb, 0xaa, 0x58, 0x07, 0x95, 0x91, 0x24, 0x77, 0x23, 0x20, - 0x2c, 0x2c, 0x50, 0xfc, 0x86, 0x83, 0x7f, 0x7c, 0xc3, 0xbf, 0x07, 0x10, 0x45, 0xa3, 0xcb, 0x3c, - 0xdf, 0x82, 0xb0, 0x9f, 0x67, 0x78, 0xb5, 0xc7, 0x4e, 0x34, 0xb8, 0xe5, 0xb9, 0x30, 0xc9, 0xc9, - 0x5d, 0xf4, 0xd5, 0x47, 0x10, 0x4e, 0x0b, 0x5a, 0xf4, 0x35, 0x80, 0xf3, 0xd1, 0xb6, 0x8c, 0x92, - 0x26, 0x72, 0xd2, 0x5b, 0x52, 0x61, 0x79, 0x7c, 0x87, 0x80, 0x44, 0x2b, 0x7d, 0xfe, 0xcb, 0x1f, - 0x0f, 0xa7, 0x34, 0xb4, 0x18, 0x7f, 0xc1, 0x0b, 0xdb, 0xbf, 0xb1, 0x27, 0x6f, 0xf1, 0x3e, 0xfa, - 0x01, 0xc0, 0xff, 0x0f, 0xbc, 0x4b, 0xa0, 0xd5, 0x71, 0xf6, 0x8b, 0xbf, 0xfa, 0x14, 0xca, 0x67, - 0xf2, 0x91, 0x98, 0xcb, 0x02, 0xf3, 0x1a, 0x2a, 0xa5, 0x61, 0x1a, 0x75, 0x89, 0xf6, 0x28, 0x82, - 0x2b, 0x67, 0xe5, 0x78, 0xb8, 0xf1, 0xb7, 0x8d, 0xf1, 0x70, 0x07, 0x86, 0xb1, 0xa6, 0x0b, 0xdc, - 0x12, 0x5a, 0x1a, 0xc4, 0xb5, 0x89, 0xb1, 0x27, 0xdb, 0xca, 0x7e, 0x9f, 0x9e, 0xa1, 0x1f, 0x01, - 0x5c, 0x18, 0x1c, 0x47, 0x68, 0xe4, 0xce, 0x09, 0xf3, 0xb3, 0xb0, 0x76, 0x36, 0xa7, 0x34, 0xde, - 0x53, 0xf2, 0x32, 0x81, 0xf6, 0x18, 0xc0, 0x85, 0xc1, 0xf9, 0x31, 0x9a, 0x37, 0x61, 0x8c, 0x8d, - 0xe6, 0x4d, 0x1a, 0x51, 0xda, 0xab, 0x82, 0xb7, 0x8c, 0x56, 0x52, 0x79, 0x3d, 0xbc, 0x63, 0xec, - 0x9d, 0x8c, 0x9f, 0x7d, 0xf4, 0x13, 0x80, 0xe8, 0xf4, 0xa8, 0x41, 0xd7, 0x47, 0x71, 0x24, 0x4e, - 0xbd, 0xc2, 0xcb, 0x67, 0x75, 0x93, 0x09, 0xbc, 0x26, 0x12, 0xb8, 0x8e, 0xca, 0xe9, 0x82, 0xfb, - 0x41, 0xe2, 0x29, 0x3c, 0x80, 0x59, 0x71, 0x9c, 0xaf, 0x8c, 0x3e, 0x9a, 0x27, 0x67, 0xb8, 0x94, - 0x6e, 0x28, 0xb9, 0x5e, 0x14, 0x5c, 0x0a, 0x2a, 0x8e, 0x3a, 0xb8, 0x68, 0x17, 0x4e, 0x8b, 0xd6, - 0x8a, 0x52, 0x03, 0x87, 0xbd, 0xbd, 0x70, 0x75, 0x0c, 0x4b, 0xc9, 0x50, 0x10, 0x0c, 0x17, 0x11, - 0x3a, 0xcd, 0x50, 0xd9, 0x38, 0xf8, 0x5d, 0xc9, 0x7c, 0xd7, 0x53, 0x32, 0x07, 0x3d, 0x05, 0x1c, - 0xf6, 0x14, 0xf0, 0x5b, 0x4f, 0x01, 0x5f, 0x1e, 0x29, 0x99, 0xc3, 0x23, 0x25, 0xf3, 0xeb, 0x91, - 0x92, 0xf9, 0x68, 0x29, 0x32, 0x5b, 0xd7, 0x29, 0x6b, 0x6e, 0x85, 0x1f, 0xaf, 0xb6, 0xb1, 0x1b, - 0x04, 0x14, 0x1f, 0xaf, 0xd5, 0x19, 0xf1, 0xcd, 0x59, 0xfe, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x99, - 0xbc, 0xec, 0x7a, 0x32, 0x0f, 0x00, 0x00, + // 1084 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x97, 0xcf, 0x6f, 0xe3, 0x44, + 0x14, 0xc7, 0x33, 0xdd, 0xf4, 0x47, 0x66, 0x8b, 0x28, 0xa3, 0x05, 0x42, 0xc8, 0xda, 0xc5, 0xa0, + 0x6e, 0x76, 0x91, 0xec, 0xfe, 0x5a, 0x04, 0xcb, 0x89, 0x74, 0x81, 0xae, 0xc4, 0xf2, 0xc3, 0x15, + 0xac, 0x80, 0x43, 0x35, 0xb1, 0x67, 0x13, 0xa3, 0xc4, 0x93, 0xf5, 0x4c, 0x68, 0xa3, 0xaa, 0x2c, + 0x42, 0x42, 0x5c, 0x91, 0xf6, 0xc8, 0x85, 0x03, 0x07, 0xb4, 0xc0, 0x7d, 0x8f, 0x1c, 0x7b, 0xac, + 0xc4, 0x85, 0x53, 0x04, 0x29, 0x42, 0xa8, 0x7f, 0xc2, 0x9e, 0xd0, 0x8c, 0xc7, 0x89, 0x93, 0xc6, + 0x71, 0x8a, 0x22, 0x2e, 0x91, 0x27, 0x7e, 0xef, 0xf9, 0xf3, 0xbe, 0xf3, 0xde, 0x3c, 0x1b, 0xbe, + 0xe0, 0x50, 0xd6, 0xd8, 0xc3, 0xac, 0x61, 0xc9, 0x9f, 0xcf, 0xd7, 0x2a, 0x84, 0xe3, 0x35, 0xeb, + 0x5e, 0x8b, 0x04, 0x6d, 0xb3, 0x19, 0x50, 0x4e, 0xd1, 0xd3, 0x91, 0x89, 0x29, 0x7f, 0x94, 0x49, + 0xe1, 0x52, 0x95, 0x56, 0xa9, 0xb4, 0xb0, 0xc4, 0x55, 0x68, 0x5c, 0x48, 0x88, 0xc7, 0xdb, 0x4d, + 0xc2, 0x94, 0x49, 0xb1, 0x4a, 0x69, 0xb5, 0x4e, 0x2c, 0xdc, 0xf4, 0x2c, 0xec, 0xfb, 0x94, 0x63, + 0xee, 0x51, 0x3f, 0xba, 0x7b, 0x4d, 0x04, 0xa0, 0xcc, 0xaa, 0x60, 0x46, 0x42, 0x8c, 0x5e, 0x90, + 0x26, 0xae, 0x7a, 0xbe, 0x34, 0x0e, 0x6d, 0x8d, 0x4d, 0x98, 0xff, 0x40, 0x58, 0x6c, 0x51, 0x9f, + 0x07, 0xd8, 0xe1, 0xb7, 0xfc, 0xbb, 0xd4, 0x26, 0xf7, 0x5a, 0x84, 0x71, 0x94, 0x87, 0xf3, 0xd8, + 0x75, 0x03, 0xc2, 0x58, 0x1e, 0x2c, 0x83, 0x52, 0xce, 0x8e, 0x96, 0xc6, 0x03, 0x00, 0x9f, 0x1b, + 0xe1, 0xc6, 0x9a, 0xd4, 0x67, 0x24, 0xd9, 0x0f, 0x7d, 0x04, 0x9f, 0x70, 0x94, 0xc7, 0xae, 0xe7, + 0xdf, 0xa5, 0xf9, 0x99, 0x65, 0x50, 0xba, 0xb8, 0xfe, 0xa2, 0x39, 0x52, 0x1f, 0x33, 0x1e, 0xbd, + 0xbc, 0x78, 0xd4, 0xd1, 0x33, 0xc7, 0x1d, 0x1d, 0x9c, 0x76, 0xf4, 0x8c, 0xbd, 0xe8, 0xc4, 0xee, + 0xdd, 0xc8, 0xfe, 0xf3, 0xbd, 0x0e, 0x8c, 0xfb, 0xf0, 0xf9, 0x01, 0xa8, 0x6d, 0x8f, 0x71, 0x1a, + 0xb4, 0x53, 0xd3, 0x41, 0x6f, 0x41, 0xd8, 0x17, 0x46, 0x31, 0xad, 0x98, 0xa1, 0x8a, 0xa6, 0x50, + 0xd1, 0x0c, 0x37, 0x33, 0xe2, 0x7a, 0x1f, 0x57, 0x89, 0x8a, 0x6a, 0xc7, 0x3c, 0x8d, 0x47, 0x00, + 0x16, 0x47, 0x13, 0x28, 0x65, 0xde, 0x83, 0xf3, 0xc4, 0xe7, 0x81, 0x47, 0x04, 0xc2, 0x85, 0xd2, + 0xc5, 0x75, 0x2b, 0x25, 0xf3, 0x2d, 0xea, 0x12, 0x15, 0xe4, 0x4d, 0x9f, 0x07, 0xed, 0x72, 0x56, + 0xa8, 0x60, 0x47, 0x51, 0xd0, 0xdb, 0x23, 0xc8, 0xaf, 0xa4, 0x92, 0x87, 0x34, 0x03, 0xe8, 0x5f, + 0x0c, 0x69, 0xc7, 0xca, 0x6d, 0xf1, 0xec, 0x48, 0xbb, 0x67, 0xe1, 0xbc, 0x43, 0x5d, 0xb2, 0xeb, + 0xb9, 0x52, 0xbb, 0xac, 0x3d, 0x27, 0x96, 0xb7, 0xdc, 0xa9, 0x49, 0xf7, 0xf5, 0xb0, 0x74, 0x3d, + 0x00, 0x25, 0x5d, 0x11, 0xe6, 0xa2, 0x2d, 0x0f, 0xc5, 0xcb, 0xd9, 0xfd, 0x3f, 0xa6, 0xa7, 0xc3, + 0x97, 0x11, 0xc7, 0x1b, 0xf5, 0x7a, 0x84, 0xb2, 0xc3, 0x31, 0x27, 0xff, 0x5f, 0x15, 0xfd, 0x00, + 0xe0, 0xe5, 0x04, 0x04, 0xa5, 0xc5, 0x0d, 0x38, 0xd7, 0xa0, 0x2e, 0xa9, 0x47, 0x55, 0x54, 0x4c, + 0xa8, 0xa2, 0xdb, 0xc2, 0x48, 0x95, 0x8c, 0xf2, 0x98, 0x9e, 0x52, 0x77, 0x94, 0x50, 0x36, 0xde, + 0x3b, 0xa7, 0x50, 0x97, 0x21, 0x94, 0xcf, 0xd8, 0x75, 0x31, 0xc7, 0x12, 0x61, 0xd1, 0xce, 0xc9, + 0x7f, 0x6e, 0x62, 0x8e, 0x8d, 0x0d, 0x95, 0xfe, 0xd9, 0xc0, 0x2a, 0x7d, 0x04, 0xb3, 0xd2, 0x13, + 0x48, 0x4f, 0x79, 0x6d, 0x7c, 0x0c, 0x35, 0xe9, 0xb4, 0xd3, 0xc0, 0x01, 0x9f, 0x2e, 0xcf, 0x0e, + 0xd4, 0x13, 0x43, 0x2b, 0xa2, 0xd5, 0x38, 0x51, 0xb9, 0xf8, 0xb8, 0xa3, 0xe7, 0x89, 0xef, 0x50, + 0xd7, 0xf3, 0xab, 0xd6, 0x67, 0x8c, 0xfa, 0xa6, 0x8d, 0xf7, 0x6e, 0x13, 0xc6, 0x84, 0x96, 0x21, + 0xef, 0xcb, 0x70, 0x49, 0x95, 0x7b, 0x7a, 0x93, 0x19, 0x7f, 0x03, 0xb8, 0x24, 0x0c, 0x07, 0x4e, + 0xd9, 0xab, 0x43, 0xd6, 0xe5, 0xa5, 0x6e, 0x47, 0x9f, 0x93, 0x66, 0x37, 0x4f, 0x3b, 0xfa, 0x8c, + 0xe7, 0xf6, 0x9a, 0x34, 0x0f, 0xe7, 0x9d, 0x80, 0x60, 0x4e, 0x03, 0x99, 0x5d, 0xce, 0x8e, 0x96, + 0xe8, 0x43, 0x98, 0x13, 0x38, 0xbb, 0x35, 0xcc, 0x6a, 0xf9, 0x0b, 0x92, 0xfe, 0xd5, 0xc7, 0x1d, + 0x7d, 0xb3, 0xea, 0xf1, 0x5a, 0xab, 0x62, 0x3a, 0xb4, 0x61, 0x71, 0xe2, 0xbb, 0x24, 0x68, 0x78, + 0x3e, 0x8f, 0x5f, 0xd6, 0xbd, 0x0a, 0xb3, 0x2a, 0x6d, 0x4e, 0x98, 0xb9, 0x4d, 0xf6, 0xcb, 0xe2, + 0xc2, 0x5e, 0x10, 0xa1, 0xb6, 0x31, 0xab, 0xa1, 0x67, 0xe0, 0x1c, 0xa3, 0xad, 0xc0, 0x21, 0xf9, + 0xac, 0x7c, 0x9e, 0x5a, 0x09, 0x90, 0x4a, 0xcb, 0xab, 0xbb, 0x24, 0xc8, 0xcf, 0x86, 0x20, 0x6a, + 0xa9, 0x4e, 0xf0, 0x6f, 0x00, 0x7c, 0x2a, 0x26, 0x8b, 0xca, 0xf4, 0x5d, 0xd1, 0xfa, 0x22, 0x53, + 0x31, 0x31, 0x40, 0xac, 0x62, 0x47, 0x9d, 0x9b, 0x83, 0x2a, 0x95, 0x17, 0x7a, 0x13, 0x63, 0xc1, + 0x51, 0xf7, 0x50, 0x51, 0xed, 0x96, 0xdc, 0xe9, 0xf2, 0xc2, 0x69, 0x47, 0x97, 0xeb, 0x70, 0x67, + 0x14, 0xc9, 0xa7, 0x31, 0x10, 0x16, 0x6d, 0xd0, 0x60, 0x87, 0x83, 0xff, 0xdc, 0xe1, 0x3f, 0x01, + 0x88, 0xe2, 0xd1, 0x55, 0x9e, 0xef, 0x40, 0xd8, 0xcb, 0x33, 0x6a, 0xed, 0x89, 0x13, 0x0d, 0xbb, + 0x3c, 0x17, 0x25, 0x39, 0xbd, 0x46, 0x5f, 0x7f, 0x08, 0xe1, 0xac, 0xa4, 0x45, 0xdf, 0x01, 0xb8, + 0x18, 0x9f, 0xc9, 0x28, 0x69, 0x7c, 0x25, 0xbd, 0x52, 0x14, 0x56, 0x27, 0x77, 0x08, 0x49, 0x8c, + 0xd2, 0x57, 0xbf, 0xfd, 0xf5, 0x60, 0xc6, 0x40, 0xcb, 0x83, 0x6f, 0x43, 0xd1, 0xd1, 0x6f, 0x1d, + 0xa8, 0x2e, 0x3e, 0x44, 0x3f, 0x03, 0xf8, 0xe4, 0xd0, 0xe0, 0x45, 0xeb, 0x93, 0x3c, 0x6f, 0xf0, + 0x3d, 0xa1, 0xb0, 0x71, 0x2e, 0x1f, 0x85, 0xb9, 0x2a, 0x31, 0xaf, 0xa1, 0x52, 0x1a, 0xa6, 0x55, + 0x53, 0x68, 0x0f, 0x63, 0xb8, 0x6a, 0xd8, 0x4d, 0x86, 0x3b, 0x38, 0x9a, 0x27, 0xc3, 0x1d, 0x9a, + 0xa6, 0x86, 0x29, 0x71, 0x4b, 0x68, 0x65, 0x18, 0xd7, 0x25, 0xd6, 0x81, 0x3a, 0x56, 0x0e, 0xad, + 0xfe, 0x7c, 0xfd, 0x05, 0xc0, 0xa5, 0xe1, 0x71, 0x84, 0xc6, 0x3e, 0x39, 0x61, 0x7e, 0x16, 0x36, + 0xcf, 0xe7, 0x94, 0xc6, 0x7b, 0x46, 0x5e, 0x26, 0xd1, 0x1e, 0x01, 0xb8, 0x34, 0x3c, 0x3f, 0xc6, + 0xf3, 0x26, 0x8c, 0xb1, 0xf1, 0xbc, 0x49, 0x23, 0xca, 0x78, 0x4d, 0xf2, 0x6e, 0xa0, 0xb5, 0x54, + 0xde, 0x00, 0xef, 0x59, 0x07, 0xfd, 0xf1, 0x73, 0x88, 0x7e, 0x05, 0x10, 0x9d, 0x1d, 0x35, 0xe8, + 0xfa, 0x38, 0x8e, 0xc4, 0xa9, 0x57, 0x78, 0xe5, 0xbc, 0x6e, 0x2a, 0x81, 0xd7, 0x65, 0x02, 0xd7, + 0xd1, 0x46, 0xba, 0xe0, 0x22, 0xc8, 0x60, 0x0a, 0xf7, 0x61, 0x56, 0x96, 0xf3, 0x95, 0xf1, 0xa5, + 0xd9, 0xaf, 0xe1, 0x52, 0xba, 0xa1, 0xe2, 0x7a, 0x49, 0x72, 0x69, 0xa8, 0x38, 0xae, 0x70, 0xd1, + 0x3e, 0x9c, 0x95, 0x47, 0x2b, 0x4a, 0x0d, 0x1c, 0x9d, 0xed, 0x85, 0xab, 0x13, 0x58, 0x2a, 0x86, + 0x82, 0x64, 0xb8, 0x84, 0xd0, 0x59, 0x86, 0xf2, 0xf6, 0xd1, 0x9f, 0x5a, 0xe6, 0xc7, 0xae, 0x96, + 0x39, 0xea, 0x6a, 0xe0, 0xb8, 0xab, 0x81, 0x3f, 0xba, 0x1a, 0xf8, 0xf6, 0x44, 0xcb, 0x1c, 0x9f, + 0x68, 0x99, 0xdf, 0x4f, 0xb4, 0xcc, 0x27, 0x2b, 0xb1, 0xd9, 0xba, 0x45, 0x59, 0xe3, 0x4e, 0xf4, + 0xa5, 0xe7, 0x5a, 0xfb, 0x61, 0x40, 0xf9, 0xa5, 0x57, 0x99, 0x93, 0x1f, 0x68, 0x1b, 0xff, 0x06, + 0x00, 0x00, 0xff, 0xff, 0xcc, 0x4d, 0x4e, 0xc2, 0x5f, 0x0e, 0x00, 0x00, } func (this *QueryContractInfoResponse) Equal(that interface{}) bool { @@ -887,33 +845,6 @@ func (this *QueryContractInfoResponse) Equal(that interface{}) bool { } return true } -func (this *ContractInfoWithAddress) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ContractInfoWithAddress) - if !ok { - that2, ok := that.(ContractInfoWithAddress) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Address != that1.Address { - return false - } - if !this.ContractInfo.Equal(&that1.ContractInfo) { - return false - } - return true -} func (this *CodeInfoResponse) Equal(that interface{}) bool { if that == nil { return this == nil @@ -1527,46 +1458,6 @@ func (m *QueryContractsByCodeRequest) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } -func (m *ContractInfoWithAddress) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ContractInfoWithAddress) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ContractInfoWithAddress) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.ContractInfo.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - func (m *QueryContractsByCodeResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1599,16 +1490,11 @@ func (m *QueryContractsByCodeResponse) MarshalToSizedBuffer(dAtA []byte) (int, e i-- dAtA[i] = 0x12 } - if len(m.ContractInfos) > 0 { - for iNdEx := len(m.ContractInfos) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.ContractInfos[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } + if len(m.Contracts) > 0 { + for iNdEx := len(m.Contracts) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Contracts[iNdEx]) + copy(dAtA[i:], m.Contracts[iNdEx]) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Contracts[iNdEx]))) i-- dAtA[i] = 0xa } @@ -2142,30 +2028,15 @@ func (m *QueryContractsByCodeRequest) Size() (n int) { return n } -func (m *ContractInfoWithAddress) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = m.ContractInfo.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - func (m *QueryContractsByCodeResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.ContractInfos) > 0 { - for _, e := range m.ContractInfos { - l = e.Size() + if len(m.Contracts) > 0 { + for _, s := range m.Contracts { + l = len(s) n += 1 + l + sovQuery(uint64(l)) } } @@ -2907,7 +2778,7 @@ func (m *QueryContractsByCodeRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *ContractInfoWithAddress) Unmarshal(dAtA []byte) error { +func (m *QueryContractsByCodeResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2930,15 +2801,15 @@ func (m *ContractInfoWithAddress) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ContractInfoWithAddress: wiretype end group for non-group") + return fmt.Errorf("proto: QueryContractsByCodeResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ContractInfoWithAddress: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryContractsByCodeResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Contracts", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -2966,124 +2837,7 @@ func (m *ContractInfoWithAddress) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContractInfo", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ContractInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryContractsByCodeResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryContractsByCodeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryContractsByCodeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContractInfos", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ContractInfos = append(m.ContractInfos, ContractInfoWithAddress{}) - if err := m.ContractInfos[len(m.ContractInfos)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Contracts = append(m.Contracts, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 2: if wireType != 2 { From 9ebeb859cfb3ea941063e9aeae75b5ecc8a4a6f1 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Tue, 27 Apr 2021 08:24:38 +0200 Subject: [PATCH 39/56] Update to wasmvm 0.14.0-beta4 (#499) * Update deps and test contracts to v0.14.0-beta4 * Update to new DistributionMsg, StakingQuery * Fix existing tests * Add test for single Validator query --- go.mod | 8 +-- go.sum | 6 +- x/wasm/keeper/handler_plugin_encoders.go | 66 +++++++++++------- x/wasm/keeper/handler_plugin_encoders_test.go | 23 ++---- x/wasm/keeper/query_plugins.go | 21 +++++- x/wasm/keeper/recurse_test.go | 4 +- x/wasm/keeper/staking_test.go | 51 ++++++++++++-- x/wasm/keeper/testdata/burner.wasm | Bin 148593 -> 145359 bytes x/wasm/keeper/testdata/hackatom.wasm | Bin 204617 -> 200195 bytes x/wasm/keeper/testdata/hackatom.wasm.gzip | Bin 65531 -> 65008 bytes x/wasm/keeper/testdata/ibc_reflect.wasm | Bin 271619 -> 273811 bytes x/wasm/keeper/testdata/ibc_reflect_send.wasm | Bin 282952 -> 284873 bytes x/wasm/keeper/testdata/reflect.wasm | Bin 291178 -> 293573 bytes x/wasm/keeper/testdata/staking.wasm | Bin 260159 -> 261190 bytes 14 files changed, 119 insertions(+), 60 deletions(-) diff --git a/go.mod b/go.mod index 7b269b2da8..ac45fac9e2 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/CosmWasm/wasmd go 1.15 require ( - github.com/CosmWasm/wasmvm v0.14.0-beta3 + github.com/CosmWasm/wasmvm v0.14.0-beta4 github.com/cosmos/cosmos-sdk v0.42.4 github.com/cosmos/iavl v0.15.3 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b @@ -14,7 +14,7 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 github.com/rakyll/statik v0.1.7 - github.com/regen-network/cosmos-proto v0.3.1 // indirect + github.com/regen-network/cosmos-proto v0.3.1 github.com/rs/zerolog v1.21.0 github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa github.com/spf13/cast v1.3.1 @@ -23,12 +23,12 @@ require ( github.com/spf13/viper v1.7.1 github.com/stretchr/testify v1.7.0 github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca - github.com/tendermint/tendermint v0.34.9 + github.com/tendermint/tendermint v0.34.10 github.com/tendermint/tm-db v0.6.4 golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 // indirect golang.org/x/text v0.3.4 // indirect google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f - google.golang.org/grpc v1.36.0 + google.golang.org/grpc v1.37.0 gopkg.in/yaml.v2 v2.4.0 ) diff --git a/go.sum b/go.sum index 58cff33596..f7ef9c4e6a 100644 --- a/go.sum +++ b/go.sum @@ -17,8 +17,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CosmWasm/wasmvm v0.14.0-beta3 h1:HN1+HrC2kgO/V4voGdOWrN1sdUoTnSoLuSrBXbDVnbY= -github.com/CosmWasm/wasmvm v0.14.0-beta3/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= +github.com/CosmWasm/wasmvm v0.14.0-beta4 h1:H8zVI/zRc+GAO+dk9jgGlo+5w0AENDJi6KN8Phvd2O0= +github.com/CosmWasm/wasmvm v0.14.0-beta4/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= @@ -570,6 +570,8 @@ github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ= github.com/tendermint/tendermint v0.34.9 h1:9P2MXDEPOcPW0NBcHQ/HDSfvczZm+q5nUUw7AZ6f1Vc= github.com/tendermint/tendermint v0.34.9/go.mod h1:kl4Z1JwGx1I+u1SXIzMDy7Z3T8LiMeCAOnzNn6AIMT4= +github.com/tendermint/tendermint v0.34.10 h1:wBOc/It8sh/pVH9np2V5fBvRmIyFN/bUrGPx+eAHexs= +github.com/tendermint/tendermint v0.34.10/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4= github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI= github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8= diff --git a/x/wasm/keeper/handler_plugin_encoders.go b/x/wasm/keeper/handler_plugin_encoders.go index 1381026518..c79e560002 100644 --- a/x/wasm/keeper/handler_plugin_encoders.go +++ b/x/wasm/keeper/handler_plugin_encoders.go @@ -18,28 +18,31 @@ import ( type BankEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.BankMsg) ([]sdk.Msg, error) type CustomEncoder func(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) +type DistributionEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.DistributionMsg) ([]sdk.Msg, error) type StakingEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.StakingMsg) ([]sdk.Msg, error) type StargateEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.StargateMsg) ([]sdk.Msg, error) type WasmEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, error) type IBCEncoder func(ctx sdk.Context, sender sdk.AccAddress, contractIBCPortID string, msg *wasmvmtypes.IBCMsg) ([]sdk.Msg, error) type MessageEncoders struct { - Bank func(sender sdk.AccAddress, msg *wasmvmtypes.BankMsg) ([]sdk.Msg, error) - Custom func(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) - IBC func(ctx sdk.Context, sender sdk.AccAddress, contractIBCPortID string, msg *wasmvmtypes.IBCMsg) ([]sdk.Msg, error) - Staking func(sender sdk.AccAddress, msg *wasmvmtypes.StakingMsg) ([]sdk.Msg, error) - Stargate func(sender sdk.AccAddress, msg *wasmvmtypes.StargateMsg) ([]sdk.Msg, error) - Wasm func(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, error) + Bank func(sender sdk.AccAddress, msg *wasmvmtypes.BankMsg) ([]sdk.Msg, error) + Custom func(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) + Distribution func(sender sdk.AccAddress, msg *wasmvmtypes.DistributionMsg) ([]sdk.Msg, error) + IBC func(ctx sdk.Context, sender sdk.AccAddress, contractIBCPortID string, msg *wasmvmtypes.IBCMsg) ([]sdk.Msg, error) + Staking func(sender sdk.AccAddress, msg *wasmvmtypes.StakingMsg) ([]sdk.Msg, error) + Stargate func(sender sdk.AccAddress, msg *wasmvmtypes.StargateMsg) ([]sdk.Msg, error) + Wasm func(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, error) } func DefaultEncoders(unpacker codectypes.AnyUnpacker, portSource types.ICS20TransferPortSource) MessageEncoders { return MessageEncoders{ - Bank: EncodeBankMsg, - Custom: NoCustomMsg, - IBC: EncodeIBCMsg(portSource), - Staking: EncodeStakingMsg, - Stargate: EncodeStargateMsg(unpacker), - Wasm: EncodeWasmMsg, + Bank: EncodeBankMsg, + Custom: NoCustomMsg, + Distribution: EncodeDistributionMsg, + IBC: EncodeIBCMsg(portSource), + Staking: EncodeStakingMsg, + Stargate: EncodeStargateMsg(unpacker), + Wasm: EncodeWasmMsg, } } @@ -53,6 +56,9 @@ func (e MessageEncoders) Merge(o *MessageEncoders) MessageEncoders { if o.Custom != nil { e.Custom = o.Custom } + if o.Distribution != nil { + e.Distribution = o.Distribution + } if o.IBC != nil { e.IBC = o.IBC } @@ -74,6 +80,8 @@ func (e MessageEncoders) Encode(ctx sdk.Context, contractAddr sdk.AccAddress, co return e.Bank(contractAddr, msg.Bank) case msg.Custom != nil: return e.Custom(contractAddr, msg.Custom) + case msg.Distribution != nil: + return e.Distribution(contractAddr, msg.Distribution) case msg.IBC != nil: return e.IBC(ctx, contractAddr, contractIBCPortID, msg.IBC) case msg.Staking != nil: @@ -109,6 +117,25 @@ func NoCustomMsg(sender sdk.AccAddress, msg json.RawMessage) ([]sdk.Msg, error) return nil, sdkerrors.Wrap(types.ErrUnknownMsg, "custom variant not supported") } +func EncodeDistributionMsg(sender sdk.AccAddress, msg *wasmvmtypes.DistributionMsg) ([]sdk.Msg, error) { + switch { + case msg.SetWithdrawAddress != nil: + setMsg := distributiontypes.MsgSetWithdrawAddress{ + DelegatorAddress: sender.String(), + WithdrawAddress: msg.SetWithdrawAddress.Address, + } + return []sdk.Msg{&setMsg}, nil + case msg.WithdrawDelegatorReward != nil: + withdrawMsg := distributiontypes.MsgWithdrawDelegatorReward{ + DelegatorAddress: sender.String(), + ValidatorAddress: msg.WithdrawDelegatorReward.Validator, + } + return []sdk.Msg{&withdrawMsg}, nil + default: + return nil, sdkerrors.Wrap(types.ErrUnknownMsg, "unknown variant of Distribution") + } +} + func EncodeStakingMsg(sender sdk.AccAddress, msg *wasmvmtypes.StakingMsg) ([]sdk.Msg, error) { switch { case msg.Delegate != nil: @@ -146,21 +173,6 @@ func EncodeStakingMsg(sender sdk.AccAddress, msg *wasmvmtypes.StakingMsg) ([]sdk Amount: coin, } return []sdk.Msg{&sdkMsg}, nil - case msg.Withdraw != nil: - senderAddr := sender.String() - rcpt := senderAddr - if len(msg.Withdraw.Recipient) != 0 { - rcpt = msg.Withdraw.Recipient - } - setMsg := distributiontypes.MsgSetWithdrawAddress{ - DelegatorAddress: senderAddr, - WithdrawAddress: rcpt, - } - withdrawMsg := distributiontypes.MsgWithdrawDelegatorReward{ - DelegatorAddress: senderAddr, - ValidatorAddress: msg.Withdraw.Validator, - } - return []sdk.Msg{&setMsg, &withdrawMsg}, nil default: return nil, sdkerrors.Wrap(types.ErrUnknownMsg, "unknown variant of Staking") } diff --git a/x/wasm/keeper/handler_plugin_encoders_test.go b/x/wasm/keeper/handler_plugin_encoders_test.go index 78af04d47f..af7e343122 100644 --- a/x/wasm/keeper/handler_plugin_encoders_test.go +++ b/x/wasm/keeper/handler_plugin_encoders_test.go @@ -279,33 +279,28 @@ func TestEncoding(t *testing.T) { }, }, }, - "staking withdraw (implicit recipient)": { + "staking withdraw (explicit recipient)": { sender: addr1, srcMsg: wasmvmtypes.CosmosMsg{ - Staking: &wasmvmtypes.StakingMsg{ - Withdraw: &wasmvmtypes.WithdrawMsg{ + Distribution: &wasmvmtypes.DistributionMsg{ + WithdrawDelegatorReward: &wasmvmtypes.WithdrawDelegatorRewardMsg{ Validator: valAddr2.String(), }, }, }, output: []sdk.Msg{ - &distributiontypes.MsgSetWithdrawAddress{ - DelegatorAddress: addr1.String(), - WithdrawAddress: addr1.String(), - }, &distributiontypes.MsgWithdrawDelegatorReward{ DelegatorAddress: addr1.String(), ValidatorAddress: valAddr2.String(), }, }, }, - "staking withdraw (explicit recipient)": { + "staking set withdraw address": { sender: addr1, srcMsg: wasmvmtypes.CosmosMsg{ - Staking: &wasmvmtypes.StakingMsg{ - Withdraw: &wasmvmtypes.WithdrawMsg{ - Validator: valAddr2.String(), - Recipient: addr2.String(), + Distribution: &wasmvmtypes.DistributionMsg{ + SetWithdrawAddress: &wasmvmtypes.SetWithdrawAddressMsg{ + Address: addr2.String(), }, }, }, @@ -314,10 +309,6 @@ func TestEncoding(t *testing.T) { DelegatorAddress: addr1.String(), WithdrawAddress: addr2.String(), }, - &distributiontypes.MsgWithdrawDelegatorReward{ - DelegatorAddress: addr1.String(), - ValidatorAddress: valAddr2.String(), - }, }, }, "stargate encoded bank msg": { diff --git a/x/wasm/keeper/query_plugins.go b/x/wasm/keeper/query_plugins.go index f469fdc266..c37432a18a 100644 --- a/x/wasm/keeper/query_plugins.go +++ b/x/wasm/keeper/query_plugins.go @@ -280,7 +280,7 @@ func StakingQuerier(keeper types.StakingKeeper, distKeeper types.DistributionKee } return json.Marshal(res) } - if request.Validators != nil { + if request.AllValidators != nil { validators := keeper.GetBondedValidatorsByPower(ctx) //validators := keeper.GetAllValidators(ctx) wasmVals := make([]wasmvmtypes.Validator, len(validators)) @@ -292,11 +292,28 @@ func StakingQuerier(keeper types.StakingKeeper, distKeeper types.DistributionKee MaxChangeRate: v.Commission.MaxChangeRate.String(), } } - res := wasmvmtypes.ValidatorsResponse{ + res := wasmvmtypes.AllValidatorsResponse{ Validators: wasmVals, } return json.Marshal(res) } + if request.Validator != nil { + valAddr, err := sdk.ValAddressFromBech32(request.Validator.Address) + if err != nil { + return nil, err + } + v, found := keeper.GetValidator(ctx, valAddr) + res := wasmvmtypes.ValidatorResponse{} + if found { + res.Validator = &wasmvmtypes.Validator{ + Address: v.OperatorAddress, + Commission: v.Commission.Rate.String(), + MaxCommission: v.Commission.MaxRate.String(), + MaxChangeRate: v.Commission.MaxChangeRate.String(), + } + } + return json.Marshal(res) + } if request.AllDelegations != nil { delegator, err := sdk.AccAddressFromBech32(request.AllDelegations.Delegator) if err != nil { diff --git a/x/wasm/keeper/recurse_test.go b/x/wasm/keeper/recurse_test.go index 08cbf31fc9..2b65d3c2da 100644 --- a/x/wasm/keeper/recurse_test.go +++ b/x/wasm/keeper/recurse_test.go @@ -249,8 +249,8 @@ func TestLimitRecursiveQueryGas(t *testing.T) { Work: 2000, }, expectQueriesFromContract: 5, - // FIXME: why +1 ... confused a bit by calculations, seems like rounding issues - expectedGas: GasWork2k + 5*(GasWork2k+GasReturnHashed) + 1, + // FIXME: why -3 ... confused a bit by calculations, seems like rounding issues + expectedGas: GasWork2k + 5*(GasWork2k+GasReturnHashed) - 3, }, // this is where we expect an error... // it has enough gas to run 4 times and die on the 5th (4th time dispatching to sub-contract) diff --git a/x/wasm/keeper/staking_test.go b/x/wasm/keeper/staking_test.go index b90fed75a4..4af1d041f4 100644 --- a/x/wasm/keeper/staking_test.go +++ b/x/wasm/keeper/staking_test.go @@ -470,24 +470,61 @@ func TestQueryStakingInfo(t *testing.T) { assert.Equal(t, "stake", bondedRes.Denom) // now, let's reflect a smart query into the x/wasm handlers and see if we get the same result - reflectValidatorsQuery := ReflectQueryMsg{Chain: &ChainQuery{Request: &wasmvmtypes.QueryRequest{Staking: &wasmvmtypes.StakingQuery{ - Validators: &wasmvmtypes.ValidatorsQuery{}, + reflectAllValidatorsQuery := ReflectQueryMsg{Chain: &ChainQuery{Request: &wasmvmtypes.QueryRequest{Staking: &wasmvmtypes.StakingQuery{ + AllValidators: &wasmvmtypes.AllValidatorsQuery{}, }}}} - reflectValidatorsBin := buildReflectQuery(t, &reflectValidatorsQuery) - res, err = keeper.QuerySmart(ctx, maskAddr, reflectValidatorsBin) + reflectAllValidatorsBin := buildReflectQuery(t, &reflectAllValidatorsQuery) + res, err = keeper.QuerySmart(ctx, maskAddr, reflectAllValidatorsBin) require.NoError(t, err) // first we pull out the data from chain response, before parsing the original response mustParse(t, res, &reflectRes) - var validatorRes wasmvmtypes.ValidatorsResponse + var allValidatorsRes wasmvmtypes.AllValidatorsResponse + mustParse(t, reflectRes.Data, &allValidatorsRes) + require.Len(t, allValidatorsRes.Validators, 1) + valInfo := allValidatorsRes.Validators[0] + // Note: this ValAddress not AccAddress, may change with #264 + require.Equal(t, valAddr.String(), valInfo.Address) + require.Contains(t, valInfo.Commission, "0.100") + require.Contains(t, valInfo.MaxCommission, "0.200") + require.Contains(t, valInfo.MaxChangeRate, "0.010") + + // find a validator + reflectValidatorQuery := ReflectQueryMsg{Chain: &ChainQuery{Request: &wasmvmtypes.QueryRequest{Staking: &wasmvmtypes.StakingQuery{ + Validator: &wasmvmtypes.ValidatorQuery{ + Address: valAddr.String(), + }, + }}}} + reflectValidatorBin := buildReflectQuery(t, &reflectValidatorQuery) + res, err = keeper.QuerySmart(ctx, maskAddr, reflectValidatorBin) + require.NoError(t, err) + // first we pull out the data from chain response, before parsing the original response + mustParse(t, res, &reflectRes) + var validatorRes wasmvmtypes.ValidatorResponse mustParse(t, reflectRes.Data, &validatorRes) - require.Len(t, validatorRes.Validators, 1) - valInfo := validatorRes.Validators[0] + require.NotNil(t, validatorRes.Validator) + valInfo = *validatorRes.Validator // Note: this ValAddress not AccAddress, may change with #264 require.Equal(t, valAddr.String(), valInfo.Address) require.Contains(t, valInfo.Commission, "0.100") require.Contains(t, valInfo.MaxCommission, "0.200") require.Contains(t, valInfo.MaxChangeRate, "0.010") + // missing validator + noVal := sdk.ValAddress(secp256k1.GenPrivKey().PubKey().Address()) + reflectNoValidatorQuery := ReflectQueryMsg{Chain: &ChainQuery{Request: &wasmvmtypes.QueryRequest{Staking: &wasmvmtypes.StakingQuery{ + Validator: &wasmvmtypes.ValidatorQuery{ + Address: noVal.String(), + }, + }}}} + reflectNoValidatorBin := buildReflectQuery(t, &reflectNoValidatorQuery) + res, err = keeper.QuerySmart(ctx, maskAddr, reflectNoValidatorBin) + require.NoError(t, err) + // first we pull out the data from chain response, before parsing the original response + mustParse(t, res, &reflectRes) + var noValidatorRes wasmvmtypes.ValidatorResponse + mustParse(t, reflectRes.Data, &noValidatorRes) + require.Nil(t, noValidatorRes.Validator) + // test to get all my delegations reflectAllDelegationsQuery := ReflectQueryMsg{Chain: &ChainQuery{Request: &wasmvmtypes.QueryRequest{Staking: &wasmvmtypes.StakingQuery{ AllDelegations: &wasmvmtypes.AllDelegationsQuery{ diff --git a/x/wasm/keeper/testdata/burner.wasm b/x/wasm/keeper/testdata/burner.wasm index 356bdcea2142f3835e8507d608520b0305eb5fb0..e2a9940735d3dde5380ba0dedd129cb597267b8d 100644 GIT binary patch delta 36064 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 NogH=Ob`}qK{~u<>oyq_J diff --git a/x/wasm/keeper/testdata/hackatom.wasm b/x/wasm/keeper/testdata/hackatom.wasm index aeecf05af1354738b51f5b52026492fd147f6fef..1eb955b2bae50b9c93d146c54eb5f8a41006ebb2 100644 GIT binary patch delta 48177 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 delta 50562 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 diff --git a/x/wasm/keeper/testdata/hackatom.wasm.gzip b/x/wasm/keeper/testdata/hackatom.wasm.gzip index 116a90fc8b2c5e6d89b3c334a82448c16644d439..40a94a970bcafc9ec51b94faff173c63787f7b93 100644 GIT binary patch literal 65008 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/`aUGY^6cDmk$FkH`pdoSK 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�iO!Ox1pO4+q$?jwwu3+sz!8u73{ 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

    lSHzTqta52)_`EJoOU%j3Y`V& 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 literal 65531 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

    -pp)f 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 R_#T8MBh$QL1N7(Ve*ttxpT__I diff --git a/x/wasm/keeper/testdata/ibc_reflect_send.wasm b/x/wasm/keeper/testdata/ibc_reflect_send.wasm index b23c7bf648fd0d5f2e6e8faa639da4fdbb81a3e0..faf997cb7373a7825e622641dad95453fca71bd8 100644 GIT binary patch delta 91601 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 jTA@d&+-c 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 diff --git a/x/wasm/keeper/testdata/reflect.wasm b/x/wasm/keeper/testdata/reflect.wasm index 3ca95363a0f11664ad41e6eae320f082745621c5..aa6455c982333ad9f09d929604475ddf080192e8 100644 GIT binary patch literal 293573 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μ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

    is7dh?Fa+=tQdZ3G<>+mEMutD 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 Date: Tue, 27 Apr 2021 09:04:58 +0200 Subject: [PATCH 40/56] Review feedback --- x/wasm/keeper/keeper_test.go | 27 +++++++++++++++++++++++++++ x/wasm/keeper/querier_test.go | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 4b5607f7bd..fc88de3b3e 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -1096,6 +1096,33 @@ func TestIterateContractsByCode(t *testing.T) { } } +func TestIterateContractsByCodeWithMigration(t *testing.T) { + // mock migration so that it does not fail when migrate example1 to example2.codeID + mockWasmVM := wasmtesting.MockWasmer{MigrateFn: func(codeID wasmvm.Checksum, env wasmvmtypes.Env, migrateMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64) (*wasmvmtypes.Response, uint64, error) { + return &wasmvmtypes.Response{}, 1, nil + }} + wasmtesting.MakeInstantiable(&mockWasmVM) + ctx, keepers := CreateTestInput(t, false, SupportedFeatures, WithWasmEngine(&mockWasmVM)) + k, c := keepers.WasmKeeper, keepers.ContractKeeper + example1 := InstantiateHackatomExampleContract(t, ctx, keepers) + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + example2 := InstantiateIBCReflectContract(t, ctx, keepers) + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + _, err := c.Migrate(ctx, example1.Contract, example1.CreatorAddr, example2.CodeID, []byte("{}")) + require.NoError(t, err) + + // when + var gotAddr []sdk.AccAddress + k.IterateContractsByCode(ctx, example2.CodeID, func(address sdk.AccAddress) bool { + gotAddr = append(gotAddr, address) + return false + }) + + // then + exp := []sdk.AccAddress{example2.Contract, example1.Contract} + assert.Equal(t, exp, gotAddr) +} + type sudoMsg struct { // This is a tongue-in-check demo command. This is not the intended purpose of Sudo. // Here we show that some priviledged Go module can make a call that should never be exposed diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index cdb7098539..ee989014a1 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -289,7 +289,7 @@ func TestQueryContractListByCodeOrdering(t *testing.T) { ctx = setBlock(ctx, h) h++ } - _, _, err = keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, initMsgBz, fmt.Sprintf("contractAddr %d", i), topUp) + _, _, err = keepers.ContractKeeper.Instantiate(ctx, codeID, creator, nil, initMsgBz, fmt.Sprintf("contract %d", i), topUp) require.NoError(t, err) } From 305f13cc0a7997b44f4e12be801a328bacdb8afe Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Tue, 27 Apr 2021 14:00:42 +0200 Subject: [PATCH 41/56] Submessage reply can overwrite caller response (#502) * Reply may overwrite result data * Fix interface name * Refacting for tests * Test response handler * Fix naked error --- x/wasm/keeper/keeper.go | 252 +++++++------------- x/wasm/keeper/keeper_test.go | 87 +++++++ x/wasm/keeper/msg_dispatcher.go | 174 ++++++++++++++ x/wasm/keeper/msg_dispatcher_test.go | 236 ++++++++++++++++++ x/wasm/keeper/options.go | 4 +- x/wasm/keeper/query_plugins.go | 4 +- x/wasm/keeper/relay.go | 14 +- x/wasm/keeper/relay_test.go | 49 ++-- x/wasm/keeper/wasmtesting/msg_dispatcher.go | 25 ++ x/wasm/keeper/wasmtesting/store.go | 26 ++ 10 files changed, 664 insertions(+), 207 deletions(-) create mode 100644 x/wasm/keeper/msg_dispatcher.go create mode 100644 x/wasm/keeper/msg_dispatcher_test.go create mode 100644 x/wasm/keeper/wasmtesting/msg_dispatcher.go create mode 100644 x/wasm/keeper/wasmtesting/store.go diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 9dcc4c4bc9..8bb7bc522b 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -14,7 +14,6 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/libs/log" "path/filepath" @@ -51,33 +50,41 @@ type Option interface { } // WasmVMQueryHandler is an extension point for custom query handler implementations -type WASMVMQueryHandler interface { +type WasmVMQueryHandler interface { // HandleQuery executes the requested query HandleQuery(ctx sdk.Context, caller sdk.AccAddress, request wasmvmtypes.QueryRequest) ([]byte, error) } -// Messenger is an extension point for custom wasmVM message handling -type Messenger interface { - // DispatchMsg encodes the wasmVM message and dispatches it. - DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) -} - type CoinTransferrer interface { // TransferCoins sends the coin amounts from the source to the destination with rules applied. TransferCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error } +// WasmVMResponseHandler is an extension point to handles the response data returned by a contract call. +type WasmVMResponseHandler interface { + // Handle processes the data returned by a contract invocation. + Handle( + ctx sdk.Context, + contractAddr sdk.AccAddress, + ibcPort string, + submessages []wasmvmtypes.SubMsg, + messages []wasmvmtypes.CosmosMsg, + origRspData []byte, + ) ([]byte, error) +} + // Keeper will have a reference to Wasmer with it's own data directory. type Keeper struct { - storeKey sdk.StoreKey - cdc codec.Marshaler - accountKeeper types.AccountKeeper - bank CoinTransferrer - portKeeper types.PortKeeper - capabilityKeeper types.CapabilityKeeper - wasmVM types.WasmerEngine - wasmVMQueryHandler WASMVMQueryHandler - messenger Messenger + storeKey sdk.StoreKey + cdc codec.Marshaler + accountKeeper types.AccountKeeper + bank CoinTransferrer + portKeeper types.PortKeeper + capabilityKeeper types.CapabilityKeeper + wasmVM types.WasmerEngine + wasmVMQueryHandler WasmVMQueryHandler + wasmVMResponseHandler WasmVMResponseHandler + messenger Messenger // queryGasLimit is the max wasmvm gas that can be spent on executing a query with a contract queryGasLimit uint64 paramSpace paramtypes.Subspace @@ -113,7 +120,7 @@ func NewKeeper( paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) } - keeper := Keeper{ + keeper := &Keeper{ storeKey: storeKey, cdc: cdc, wasmVM: wasmer, @@ -125,11 +132,14 @@ func NewKeeper( queryGasLimit: wasmConfig.SmartQueryGasLimit, paramSpace: paramSpace, } - keeper.wasmVMQueryHandler = DefaultQueryPlugins(bankKeeper, stakingKeeper, distKeeper, channelKeeper, queryRouter, &keeper) + + keeper.wasmVMQueryHandler = DefaultQueryPlugins(bankKeeper, stakingKeeper, distKeeper, channelKeeper, queryRouter, keeper) for _, o := range opts { - o.apply(&keeper) + o.apply(keeper) } - return keeper + // not updateable, yet + keeper.wasmVMResponseHandler = NewDefaultWasmVMContractResponseHandler(NewMessageDispatcher(keeper.messenger, keeper)) + return *keeper } func (k Keeper) getUploadAccessConfig(ctx sdk.Context) types.AccessConfig { @@ -302,12 +312,12 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A k.storeContractInfo(ctx, contractAddress, &contractInfo) // dispatch submessages then messages - err = k.dispatchAll(ctx, contractAddress, contractInfo.IBCPortID, res.Submessages, res.Messages) + data, err := k.handleContractResponse(ctx, contractAddress, contractInfo.IBCPortID, res) if err != nil { return nil, nil, sdkerrors.Wrap(err, "dispatch") } - return contractAddress, res.Data, nil + return contractAddress, data, nil } // Execute executes the contract instance @@ -346,13 +356,13 @@ func (k Keeper) execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller ctx.EventManager().EmitEvents(events) // dispatch submessages then messages - err = k.dispatchAll(ctx, contractAddress, contractInfo.IBCPortID, res.Submessages, res.Messages) + data, err := k.handleContractResponse(ctx, contractAddress, contractInfo.IBCPortID, res) if err != nil { return nil, sdkerrors.Wrap(err, "dispatch") } return &sdk.Result{ - Data: res.Data, + Data: data, }, nil } @@ -418,13 +428,13 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller k.storeContractInfo(ctx, contractAddress, contractInfo) // dispatch submessages then messages - err = k.dispatchAll(ctx, contractAddress, contractInfo.IBCPortID, res.Submessages, res.Messages) + data, err := k.handleContractResponse(ctx, contractAddress, contractInfo.IBCPortID, res) if err != nil { return nil, sdkerrors.Wrap(err, "dispatch") } return &sdk.Result{ - Data: res.Data, + Data: data, }, nil } @@ -458,13 +468,13 @@ func (k Keeper) Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte ctx.EventManager().EmitEvents(events) // dispatch submessages then messages - err = k.dispatchAll(ctx, contractAddress, contractInfo.IBCPortID, res.Submessages, res.Messages) + data, err := k.handleContractResponse(ctx, contractAddress, contractInfo.IBCPortID, res) if err != nil { return nil, sdkerrors.Wrap(err, "dispatch") } return &sdk.Result{ - Data: res.Data, + Data: data, }, nil } @@ -500,13 +510,12 @@ func (k Keeper) reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply was ctx.EventManager().EmitEvents(events) // dispatch submessages then messages - err = k.dispatchAll(ctx, contractAddress, contractInfo.IBCPortID, res.Submessages, res.Messages) + data, err := k.handleContractResponse(ctx, contractAddress, contractInfo.IBCPortID, res) if err != nil { return nil, sdkerrors.Wrap(err, "dispatch") } - return &sdk.Result{ - Data: res.Data, + Data: data, }, nil } @@ -803,146 +812,9 @@ func (k Keeper) setContractInfoExtension(ctx sdk.Context, contractAddr sdk.AccAd return nil } -func (k Keeper) dispatchAll(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, subMsgs []wasmvmtypes.SubMsg, msgs []wasmvmtypes.CosmosMsg) error { - // first dispatch all submessages (and the replies). - err := k.dispatchSubmessages(ctx, contractAddr, ibcPort, subMsgs) - if err != nil { - return err - } - // then dispatch all the normal messages - return k.dispatchMessages(ctx, contractAddr, ibcPort, msgs) -} - -func (k Keeper) dispatchMessages(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.CosmosMsg) error { - for _, msg := range msgs { - events, _, err := k.messenger.DispatchMsg(ctx, contractAddr, ibcPort, msg) - if err != nil { - return err - } - // redispatch all events, (type sdk.EventTypeMessage will be filtered out in the handler) - ctx.EventManager().EmitEvents(events) - } - return nil -} - -func (k Keeper) dispatchMsgWithGasLimit(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msg wasmvmtypes.CosmosMsg, gasLimit uint64) (events []sdk.Event, data [][]byte, err error) { - limitedMeter := sdk.NewGasMeter(gasLimit) - subCtx := ctx.WithGasMeter(limitedMeter) - - // catch out of gas panic and just charge the entire gas limit - defer func() { - if r := recover(); r != nil { - // if it's not an OutOfGas error, raise it again - if _, ok := r.(sdk.ErrorOutOfGas); !ok { - // log it to get the original stack trace somewhere (as panic(r) keeps message but stacktrace to here - k.Logger(ctx).Info("SubMsg rethrowing panic: %#v", r) - panic(r) - } - ctx.GasMeter().ConsumeGas(gasLimit, "Sub-Message OutOfGas panic") - err = sdkerrors.Wrap(sdkerrors.ErrOutOfGas, "SubMsg hit gas limit") - } - }() - events, data, err = k.messenger.DispatchMsg(subCtx, contractAddr, ibcPort, msg) - - // make sure we charge the parent what was spent - spent := subCtx.GasMeter().GasConsumed() - ctx.GasMeter().ConsumeGas(spent, "From limited Sub-Message") - - return events, data, err -} - -// dispatchSubmessages builds a sandbox to execute these messages and returns the execution result to the contract -// that dispatched them, both on success as well as failure -func (k Keeper) dispatchSubmessages(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.SubMsg) error { - for _, msg := range msgs { - // first, we build a sub-context which we can use inside the submessages - subCtx, commit := ctx.CacheContext() - - // check how much gas left locally, optionally wrap the gas meter - gasRemaining := ctx.GasMeter().Limit() - ctx.GasMeter().GasConsumed() - limitGas := msg.GasLimit != nil && (*msg.GasLimit < gasRemaining) - - var err error - var events []sdk.Event - var data [][]byte - if limitGas { - events, data, err = k.dispatchMsgWithGasLimit(subCtx, contractAddr, ibcPort, msg.Msg, *msg.GasLimit) - } else { - events, data, err = k.messenger.DispatchMsg(subCtx, contractAddr, ibcPort, msg.Msg) - } - - // if it succeeds, commit state changes from submessage, and pass on events to Event Manager - if err == nil { - commit() - ctx.EventManager().EmitEvents(events) - } - // on failure, revert state from sandbox, and ignore events (just skip doing the above) - - // we only callback if requested. Short-circuit here the two cases we don't want to - if msg.ReplyOn == wasmvmtypes.ReplySuccess && err != nil { - return err - } - if msg.ReplyOn == wasmvmtypes.ReplyError && err == nil { - return nil - } - - // otherwise, we create a SubcallResult and pass it into the calling contract - var result wasmvmtypes.SubcallResult - if err == nil { - // just take the first one for now if there are multiple sub-sdk messages - // and safely return nothing if no data - var responseData []byte - if len(data) > 0 { - responseData = data[0] - } - result = wasmvmtypes.SubcallResult{ - Ok: &wasmvmtypes.SubcallResponse{ - Events: sdkEventsToWasmVmEvents(events), - Data: responseData, - }, - } - } else { - result = wasmvmtypes.SubcallResult{ - Err: err.Error(), - } - } - - // now handle the reply, we use the parent context, and abort on error - reply := wasmvmtypes.Reply{ - ID: msg.ID, - Result: result, - } - - // we can ignore any result returned as there is nothing to do with the data - // and the events are already in the ctx.EventManager() - _, err = k.reply(ctx, contractAddr, reply) - if err != nil { - return err - } - } - return nil -} - -func sdkEventsToWasmVmEvents(events []sdk.Event) []wasmvmtypes.Event { - res := make([]wasmvmtypes.Event, len(events)) - for i, ev := range events { - res[i] = wasmvmtypes.Event{ - Type: ev.Type, - Attributes: sdkAttributesToWasmVmAttributes(ev.Attributes), - } - } - return res -} - -func sdkAttributesToWasmVmAttributes(attrs []abci.EventAttribute) []wasmvmtypes.EventAttribute { - res := make([]wasmvmtypes.EventAttribute, len(attrs)) - for i, attr := range attrs { - res[i] = wasmvmtypes.EventAttribute{ - Key: string(attr.Key), - Value: string(attr.Value), - } - } - return res +// handleContractResponse processes the contract response +func (k *Keeper) handleContractResponse(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, res *wasmvmtypes.Response) ([]byte, error) { + return k.wasmVMResponseHandler.Handle(ctx, contractAddr, ibcPort, res.Submessages, res.Messages, res.Data) } func gasForContract(ctx sdk.Context) uint64 { @@ -1111,3 +983,39 @@ func (c BankCoinTransferrer) TransferCoins(ctx sdk.Context, fromAddr sdk.AccAddr } return nil } + +type msgDispatcher interface { + DispatchMessages(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.CosmosMsg) error + DispatchSubmessages(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.SubMsg) ([]byte, error) +} + +// DefaultWasmVMContractResponseHandler default implementation that first dispatches submessage then normal messages. +// The Submessage execution may include an success/failure response handling by the contract that can overwrite the +// original +type DefaultWasmVMContractResponseHandler struct { + md msgDispatcher +} + +func NewDefaultWasmVMContractResponseHandler(md msgDispatcher) *DefaultWasmVMContractResponseHandler { + return &DefaultWasmVMContractResponseHandler{md: md} +} + +// Handle processes the data returned by a contract invocation. +func (h DefaultWasmVMContractResponseHandler) Handle( + ctx sdk.Context, + contractAddr sdk.AccAddress, + ibcPort string, + submessages []wasmvmtypes.SubMsg, + messages []wasmvmtypes.CosmosMsg, + origRspData []byte, +) ([]byte, error) { + result := origRspData + switch rsp, err := h.md.DispatchSubmessages(ctx, contractAddr, ibcPort, submessages); { + case err != nil: + return nil, sdkerrors.Wrap(err, "submessages") + case rsp != nil: + result = rsp + } + // then dispatch all the normal messages + return result, sdkerrors.Wrap(h.md.DispatchMessages(ctx, contractAddr, ibcPort, messages), "messages") +} diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index fc88de3b3e..616b412d9f 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -1386,3 +1386,90 @@ func TestInitializePinnedCodes(t *testing.T) { assert.Equal(t, exp, capturedChecksums[i]) } } + +func TestNewDefaultWasmVMContractResponseHandler(t *testing.T) { + noopDMsgs := func(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.CosmosMsg) error { + return nil + } + + specs := map[string]struct { + srcData []byte + setup func(m *wasmtesting.MockMsgDispatcher) + expErr bool + expData []byte + }{ + "submessage overwrites result when set": { + srcData: []byte("otherData"), + setup: func(m *wasmtesting.MockMsgDispatcher) { + m.DispatchSubmessagesFn = func(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.SubMsg) ([]byte, error) { + return []byte("mySubMsgData"), nil + } + m.DispatchMessagesFn = noopDMsgs + }, + expErr: false, + expData: []byte("mySubMsgData"), + }, + "submessage overwrites result when empty": { + srcData: []byte("otherData"), + setup: func(m *wasmtesting.MockMsgDispatcher) { + m.DispatchSubmessagesFn = func(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.SubMsg) ([]byte, error) { + return []byte(""), nil + } + m.DispatchMessagesFn = noopDMsgs + }, + expErr: false, + expData: []byte(""), + }, + "submessage do not overwrite result when nil": { + srcData: []byte("otherData"), + setup: func(m *wasmtesting.MockMsgDispatcher) { + m.DispatchSubmessagesFn = func(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.SubMsg) ([]byte, error) { + return nil, nil + } + m.DispatchMessagesFn = noopDMsgs + }, + expErr: false, + expData: []byte("otherData"), + }, + "submessage error aborts process": { + setup: func(m *wasmtesting.MockMsgDispatcher) { + m.DispatchSubmessagesFn = func(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.SubMsg) ([]byte, error) { + return nil, errors.New("test - ignore") + } + }, + expErr: true, + }, + "message error aborts process": { + setup: func(m *wasmtesting.MockMsgDispatcher) { + m.DispatchSubmessagesFn = func(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.SubMsg) ([]byte, error) { + return []byte("mySubMsgData"), nil + } + m.DispatchMessagesFn = func(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.CosmosMsg) error { + return errors.New("test - ignore") + } + }, + expErr: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + var ( + subMsgs []wasmvmtypes.SubMsg + msgs []wasmvmtypes.CosmosMsg + ) + var mock wasmtesting.MockMsgDispatcher + spec.setup(&mock) + d := NewDefaultWasmVMContractResponseHandler(&mock) + // when + + gotData, gotErr := d.Handle(sdk.Context{}, RandomAccountAddress(t), "ibc-port", subMsgs, msgs, spec.srcData) + if spec.expErr { + require.Error(t, gotErr) + return + } + require.NoError(t, gotErr) + assert.Equal(t, spec.expData, gotData) + }) + } + +} diff --git a/x/wasm/keeper/msg_dispatcher.go b/x/wasm/keeper/msg_dispatcher.go new file mode 100644 index 0000000000..e246ff5ea5 --- /dev/null +++ b/x/wasm/keeper/msg_dispatcher.go @@ -0,0 +1,174 @@ +package keeper + +import ( + "github.com/CosmWasm/wasmd/x/wasm/types" + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + abci "github.com/tendermint/tendermint/abci/types" +) + +// Messenger is an extension point for custom wasmd message handling +type Messenger interface { + // DispatchMsg encodes the wasmVM message and dispatches it. + DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) +} + +// replyer is a subset of keeper that can handle replies to submessages +type replyer interface { + reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply wasmvmtypes.Reply) (*sdk.Result, error) +} + +// MessageDispatcher coordinates message sending and submessage reply/ state commits +type MessageDispatcher struct { + messenger Messenger + keeper replyer +} + +// NewMessageDispatcher constructor +func NewMessageDispatcher(messenger Messenger, keeper replyer) *MessageDispatcher { + return &MessageDispatcher{messenger: messenger, keeper: keeper} +} + +// DispatchMessages sends all messages. +func (d MessageDispatcher) DispatchMessages(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.CosmosMsg) error { + for _, msg := range msgs { + events, _, err := d.messenger.DispatchMsg(ctx, contractAddr, ibcPort, msg) + if err != nil { + return err + } + // redispatch all events, (type sdk.EventTypeMessage will be filtered out in the handler) + ctx.EventManager().EmitEvents(events) + } + return nil +} + +// dispatchMsgWithGasLimit sends a message with gas limit applied +func (d MessageDispatcher) dispatchMsgWithGasLimit(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msg wasmvmtypes.CosmosMsg, gasLimit uint64) (events []sdk.Event, data [][]byte, err error) { + limitedMeter := sdk.NewGasMeter(gasLimit) + subCtx := ctx.WithGasMeter(limitedMeter) + + // catch out of gas panic and just charge the entire gas limit + defer func() { + if r := recover(); r != nil { + // if it's not an OutOfGas error, raise it again + if _, ok := r.(sdk.ErrorOutOfGas); !ok { + // log it to get the original stack trace somewhere (as panic(r) keeps message but stacktrace to here + moduleLogger(ctx).Info("SubMsg rethrowing panic: %#v", r) + panic(r) + } + ctx.GasMeter().ConsumeGas(gasLimit, "Sub-Message OutOfGas panic") + err = sdkerrors.Wrap(sdkerrors.ErrOutOfGas, "SubMsg hit gas limit") + } + }() + events, data, err = d.messenger.DispatchMsg(subCtx, contractAddr, ibcPort, msg) + + // make sure we charge the parent what was spent + spent := subCtx.GasMeter().GasConsumed() + ctx.GasMeter().ConsumeGas(spent, "From limited Sub-Message") + + return events, data, err +} + +// DispatchSubmessages builds a sandbox to execute these messages and returns the execution result to the contract +// that dispatched them, both on success as well as failure +func (d MessageDispatcher) DispatchSubmessages(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.SubMsg) ([]byte, error) { + var rsp []byte + for _, msg := range msgs { + switch msg.ReplyOn { + case wasmvmtypes.ReplySuccess, wasmvmtypes.ReplyError, wasmvmtypes.ReplyAlways: + default: + return nil, sdkerrors.Wrap(types.ErrInvalid, "replyOn") + } + // first, we build a sub-context which we can use inside the submessages + subCtx, commit := ctx.CacheContext() + + // check how much gas left locally, optionally wrap the gas meter + gasRemaining := ctx.GasMeter().Limit() - ctx.GasMeter().GasConsumed() + limitGas := msg.GasLimit != nil && (*msg.GasLimit < gasRemaining) + + var err error + var events []sdk.Event + var data [][]byte + if limitGas { + events, data, err = d.dispatchMsgWithGasLimit(subCtx, contractAddr, ibcPort, msg.Msg, *msg.GasLimit) + } else { + events, data, err = d.messenger.DispatchMsg(subCtx, contractAddr, ibcPort, msg.Msg) + } + + // if it succeeds, commit state changes from submessage, and pass on events to Event Manager + if err == nil { + commit() + ctx.EventManager().EmitEvents(events) + } + // on failure, revert state from sandbox, and ignore events (just skip doing the above) + + // we only callback if requested. Short-circuit here the two cases we don't want to + if msg.ReplyOn == wasmvmtypes.ReplySuccess && err != nil { + return nil, err + } + if msg.ReplyOn == wasmvmtypes.ReplyError && err == nil { + continue + } + + // otherwise, we create a SubcallResult and pass it into the calling contract + var result wasmvmtypes.SubcallResult + if err == nil { + // just take the first one for now if there are multiple sub-sdk messages + // and safely return nothing if no data + var responseData []byte + if len(data) > 0 { + responseData = data[0] + } + result = wasmvmtypes.SubcallResult{ + Ok: &wasmvmtypes.SubcallResponse{ + Events: sdkEventsToWasmVmEvents(events), + Data: responseData, + }, + } + } else { + result = wasmvmtypes.SubcallResult{ + Err: err.Error(), + } + } + + // now handle the reply, we use the parent context, and abort on error + reply := wasmvmtypes.Reply{ + ID: msg.ID, + Result: result, + } + + // we can ignore any result returned as there is nothing to do with the data + // and the events are already in the ctx.EventManager() + rData, err := d.keeper.reply(ctx, contractAddr, reply) + switch { + case err != nil: + return nil, sdkerrors.Wrap(err, "reply") + case rData.Data != nil: + rsp = rData.Data + } + } + return rsp, nil +} + +func sdkEventsToWasmVmEvents(events []sdk.Event) []wasmvmtypes.Event { + res := make([]wasmvmtypes.Event, len(events)) + for i, ev := range events { + res[i] = wasmvmtypes.Event{ + Type: ev.Type, + Attributes: sdkAttributesToWasmVmAttributes(ev.Attributes), + } + } + return res +} + +func sdkAttributesToWasmVmAttributes(attrs []abci.EventAttribute) []wasmvmtypes.EventAttribute { + res := make([]wasmvmtypes.EventAttribute, len(attrs)) + for i, attr := range attrs { + res[i] = wasmvmtypes.EventAttribute{ + Key: string(attr.Key), + Value: string(attr.Value), + } + } + return res +} diff --git a/x/wasm/keeper/msg_dispatcher_test.go b/x/wasm/keeper/msg_dispatcher_test.go new file mode 100644 index 0000000000..36b389d8ce --- /dev/null +++ b/x/wasm/keeper/msg_dispatcher_test.go @@ -0,0 +1,236 @@ +package keeper + +import ( + "errors" + "fmt" + "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" + "testing" +) + +func TestDispatchSubmessages(t *testing.T) { + noReplyCalled := &mockReplyer{} + var anyGasLimit uint64 = 1 + specs := map[string]struct { + msgs []wasmvmtypes.SubMsg + replyer *mockReplyer + msgHandler *wasmtesting.MockMessageHandler + expErr bool + expData []byte + expCommits []bool + expEvents sdk.Events + }{ + "no reply on error without error": { + msgs: []wasmvmtypes.SubMsg{{ReplyOn: wasmvmtypes.ReplyError}}, + replyer: noReplyCalled, + msgHandler: &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + return nil, [][]byte{[]byte("myData")}, nil + }, + }, + expCommits: []bool{true}, + }, + "no reply on success without success": { + msgs: []wasmvmtypes.SubMsg{{ReplyOn: wasmvmtypes.ReplySuccess}}, + replyer: noReplyCalled, + msgHandler: &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + return nil, nil, errors.New("test, ignore") + }, + }, + expCommits: []bool{false}, + expErr: true, + }, + "reply on success - received": { + msgs: []wasmvmtypes.SubMsg{{ + ReplyOn: wasmvmtypes.ReplySuccess, + }}, + replyer: &mockReplyer{ + replyFn: func(ctx sdk.Context, contractAddress sdk.AccAddress, reply wasmvmtypes.Reply) (*sdk.Result, error) { + return &sdk.Result{Data: []byte("myReplyData")}, nil + }, + }, + msgHandler: &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + return nil, [][]byte{[]byte("myData")}, nil + }, + }, + expData: []byte("myReplyData"), + expCommits: []bool{true}, + }, + "reply on error - handled": { + msgs: []wasmvmtypes.SubMsg{{ + ReplyOn: wasmvmtypes.ReplyError, + }}, + replyer: &mockReplyer{ + replyFn: func(ctx sdk.Context, contractAddress sdk.AccAddress, reply wasmvmtypes.Reply) (*sdk.Result, error) { + return &sdk.Result{Data: []byte("myReplyData")}, nil + }, + }, + msgHandler: &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + return nil, nil, errors.New("my error") + }, + }, + expData: []byte("myReplyData"), + expCommits: []bool{false}, + }, + "with reply events": { + msgs: []wasmvmtypes.SubMsg{{ + ReplyOn: wasmvmtypes.ReplySuccess, + }}, + replyer: &mockReplyer{ + replyFn: func(ctx sdk.Context, contractAddress sdk.AccAddress, reply wasmvmtypes.Reply) (*sdk.Result, error) { + return &sdk.Result{Data: []byte("myReplyData")}, nil + }, + }, + msgHandler: &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + myEvents := []sdk.Event{{Type: "myEvent", Attributes: []abci.EventAttribute{{Key: []byte("foo"), Value: []byte("bar")}}}} + return myEvents, [][]byte{[]byte("myData")}, nil + }, + }, + expData: []byte("myReplyData"), + expCommits: []bool{true}, + expEvents: []sdk.Event{{ + Type: "myEvent", + Attributes: []abci.EventAttribute{{Key: []byte("foo"), Value: []byte("bar")}}, + }}, + }, + "reply returns error": { + msgs: []wasmvmtypes.SubMsg{{ + ReplyOn: wasmvmtypes.ReplySuccess, + }}, + replyer: &mockReplyer{ + replyFn: func(ctx sdk.Context, contractAddress sdk.AccAddress, reply wasmvmtypes.Reply) (*sdk.Result, error) { + return nil, errors.New("reply failed") + }, + }, + msgHandler: &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + return nil, nil, nil + }, + }, + expCommits: []bool{false}, + expErr: true, + }, + "with gas limit - out of gas": { + msgs: []wasmvmtypes.SubMsg{{ + GasLimit: &anyGasLimit, + ReplyOn: wasmvmtypes.ReplyError, + }}, + replyer: &mockReplyer{ + replyFn: func(ctx sdk.Context, contractAddress sdk.AccAddress, reply wasmvmtypes.Reply) (*sdk.Result, error) { + return &sdk.Result{Data: []byte("myReplyData")}, nil + }, + }, + msgHandler: &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + ctx.GasMeter().ConsumeGas(sdk.Gas(101), "testing") + return nil, [][]byte{[]byte("someData")}, nil + }, + }, + expData: []byte("myReplyData"), + expCommits: []bool{false}, + }, + "with gas limit - within limit no error": { + msgs: []wasmvmtypes.SubMsg{{ + GasLimit: &anyGasLimit, + ReplyOn: wasmvmtypes.ReplyError, + }}, + replyer: &mockReplyer{}, + msgHandler: &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + ctx.GasMeter().ConsumeGas(sdk.Gas(1), "testing") + return nil, [][]byte{[]byte("someData")}, nil + }, + }, + expCommits: []bool{true}, + }, + "multiple msg - last reply": { + msgs: []wasmvmtypes.SubMsg{{ID: 1, ReplyOn: wasmvmtypes.ReplyError}, {ID: 2, ReplyOn: wasmvmtypes.ReplyError}}, + replyer: &mockReplyer{ + replyFn: func(ctx sdk.Context, contractAddress sdk.AccAddress, reply wasmvmtypes.Reply) (*sdk.Result, error) { + return &sdk.Result{Data: []byte(fmt.Sprintf("myReplyData:%d", reply.ID))}, nil + }, + }, + msgHandler: &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + return nil, nil, errors.New("my error") + }, + }, + expData: []byte("myReplyData:2"), + expCommits: []bool{false, false}, + }, + "multiple msg - last reply with non nil": { + msgs: []wasmvmtypes.SubMsg{{ID: 1, ReplyOn: wasmvmtypes.ReplyError}, {ID: 2, ReplyOn: wasmvmtypes.ReplyError}}, + replyer: &mockReplyer{ + replyFn: func(ctx sdk.Context, contractAddress sdk.AccAddress, reply wasmvmtypes.Reply) (*sdk.Result, error) { + if reply.ID == 2 { + return &sdk.Result{}, nil + } + return &sdk.Result{Data: []byte("myReplyData:1")}, nil + }, + }, + msgHandler: &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + return nil, nil, errors.New("my error") + }, + }, + expData: []byte("myReplyData:1"), + expCommits: []bool{false, false}, + }, + "empty replyOn rejected": { + msgs: []wasmvmtypes.SubMsg{{}}, + replyer: noReplyCalled, + msgHandler: &wasmtesting.MockMessageHandler{}, + expErr: true, + }, + "invalid replyOn rejected": { + msgs: []wasmvmtypes.SubMsg{{ReplyOn: "invalid"}}, + replyer: noReplyCalled, + msgHandler: &wasmtesting.MockMessageHandler{}, + expCommits: []bool{false}, + expErr: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + var mockStore wasmtesting.MockCommitMultiStore + em := sdk.NewEventManager() + ctx := sdk.Context{}.WithMultiStore(&mockStore). + WithGasMeter(sdk.NewGasMeter(100)). + WithEventManager(em) + d := NewMessageDispatcher(spec.msgHandler, spec.replyer) + gotData, gotErr := d.DispatchSubmessages(ctx, RandomAccountAddress(t), "any_port", spec.msgs) + if spec.expErr { + require.Error(t, gotErr) + return + } else { + require.NoError(t, gotErr) + assert.Equal(t, spec.expData, gotData) + } + assert.Equal(t, spec.expCommits, mockStore.Committed) + if len(spec.expEvents) == 0 { + assert.Empty(t, em.Events()) + } else { + assert.Equal(t, spec.expEvents, em.Events()) + } + }) + } +} + +type mockReplyer struct { + replyFn func(ctx sdk.Context, contractAddress sdk.AccAddress, reply wasmvmtypes.Reply) (*sdk.Result, error) +} + +func (m mockReplyer) reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply wasmvmtypes.Reply) (*sdk.Result, error) { + if m.replyFn == nil { + panic("not expected to be called") + } + return m.replyFn(ctx, contractAddress, reply) +} diff --git a/x/wasm/keeper/options.go b/x/wasm/keeper/options.go index 9486a225ba..8d9872d891 100644 --- a/x/wasm/keeper/options.go +++ b/x/wasm/keeper/options.go @@ -11,7 +11,7 @@ func (f optsFn) apply(keeper *Keeper) { f(keeper) } -// WithMessageHandler is an optional constructor parameter to replace the default wasmVM engine with the +// WithWasmEngine is an optional constructor parameter to replace the default wasmVM engine with the // given one. func WithWasmEngine(x types.WasmerEngine) Option { return optsFn(func(k *Keeper) { @@ -29,7 +29,7 @@ func WithMessageHandler(x Messenger) Option { // WithQueryHandler is an optional constructor parameter to set custom query handler for wasmVM requests. // This option should not be combined with Option `WithQueryPlugins`. -func WithQueryHandler(x WASMVMQueryHandler) Option { +func WithQueryHandler(x WasmVMQueryHandler) Option { return optsFn(func(k *Keeper) { k.wasmVMQueryHandler = x }) diff --git a/x/wasm/keeper/query_plugins.go b/x/wasm/keeper/query_plugins.go index c37432a18a..d19f3190eb 100644 --- a/x/wasm/keeper/query_plugins.go +++ b/x/wasm/keeper/query_plugins.go @@ -16,11 +16,11 @@ import ( type QueryHandler struct { Ctx sdk.Context - Plugins WASMVMQueryHandler + Plugins WasmVMQueryHandler Caller sdk.AccAddress } -func NewQueryHandler(ctx sdk.Context, vmQueryHandler WASMVMQueryHandler, caller sdk.AccAddress) QueryHandler { +func NewQueryHandler(ctx sdk.Context, vmQueryHandler WasmVMQueryHandler, caller sdk.AccAddress) QueryHandler { return QueryHandler{ Ctx: ctx, Plugins: vmQueryHandler, diff --git a/x/wasm/keeper/relay.go b/x/wasm/keeper/relay.go index 992b91480c..7109d78230 100644 --- a/x/wasm/keeper/relay.go +++ b/x/wasm/keeper/relay.go @@ -71,7 +71,7 @@ func (k Keeper) OnConnectChannel( events := types.ParseEvents(res.Attributes, contractAddr) ctx.EventManager().EmitEvents(events) - if err := k.dispatchAll(ctx, contractAddr, contractInfo.IBCPortID, res.Submessages, res.Messages); err != nil { + if _, err := k.wasmVMResponseHandler.Handle(ctx, contractAddr, contractInfo.IBCPortID, res.Submessages, res.Messages, nil); err != nil { return err } return nil @@ -109,7 +109,7 @@ func (k Keeper) OnCloseChannel( events := types.ParseEvents(res.Attributes, contractAddr) ctx.EventManager().EmitEvents(events) - if err := k.dispatchAll(ctx, contractAddr, contractInfo.IBCPortID, res.Submessages, res.Messages); err != nil { + if _, err := k.wasmVMResponseHandler.Handle(ctx, contractAddr, contractInfo.IBCPortID, res.Submessages, res.Messages, nil); err != nil { return err } return nil @@ -145,11 +145,7 @@ func (k Keeper) OnRecvPacket( // emit all events from this contract itself events := types.ParseEvents(res.Attributes, contractAddr) ctx.EventManager().EmitEvents(events) - - if err := k.dispatchAll(ctx, contractAddr, contractInfo.IBCPortID, res.Submessages, res.Messages); err != nil { - return nil, err - } - return res.Acknowledgement, nil + return k.wasmVMResponseHandler.Handle(ctx, contractAddr, contractInfo.IBCPortID, res.Submessages, res.Messages, res.Acknowledgement) } // OnAckPacket calls the contract to handle the "acknowledgement" data which can contain success or failure of a packet @@ -184,7 +180,7 @@ func (k Keeper) OnAckPacket( events := types.ParseEvents(res.Attributes, contractAddr) ctx.EventManager().EmitEvents(events) - if err := k.dispatchAll(ctx, contractAddr, contractInfo.IBCPortID, res.Submessages, res.Messages); err != nil { + if _, err := k.wasmVMResponseHandler.Handle(ctx, contractAddr, contractInfo.IBCPortID, res.Submessages, res.Messages, nil); err != nil { return err } return nil @@ -219,7 +215,7 @@ func (k Keeper) OnTimeoutPacket( events := types.ParseEvents(res.Attributes, contractAddr) ctx.EventManager().EmitEvents(events) - if err := k.dispatchAll(ctx, contractAddr, contractInfo.IBCPortID, res.Submessages, res.Messages); err != nil { + if _, err := k.wasmVMResponseHandler.Handle(ctx, contractAddr, contractInfo.IBCPortID, res.Submessages, res.Messages, nil); err != nil { return err } return nil diff --git a/x/wasm/keeper/relay_test.go b/x/wasm/keeper/relay_test.go index 889792b79e..f8e57d4ccf 100644 --- a/x/wasm/keeper/relay_test.go +++ b/x/wasm/keeper/relay_test.go @@ -15,7 +15,8 @@ import ( func TestOnOpenChannel(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) + var messenger = &wasmtesting.MockMessageHandler{} + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) specs := map[string]struct { @@ -74,7 +75,8 @@ func TestOnOpenChannel(t *testing.T) { func TestOnConnectChannel(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) + var messenger = &wasmtesting.MockMessageHandler{} + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) specs := map[string]struct { @@ -82,7 +84,7 @@ func TestOnConnectChannel(t *testing.T) { contractGas sdk.Gas contractResp *wasmvmtypes.IBCBasicResponse contractErr error - overwriteMessenger Messenger + overwriteMessenger *wasmtesting.MockMessageHandler expErr bool expContractEventAttrs int expNoEvents bool @@ -148,10 +150,9 @@ func TestOnConnectChannel(t *testing.T) { defer cancel() before := ctx.GasMeter().GasConsumed() msger, capturedMsgs := wasmtesting.NewCapturingMessageHandler() - keepers.WasmKeeper.messenger = msger - + *messenger = *msger if spec.overwriteMessenger != nil { - keepers.WasmKeeper.messenger = spec.overwriteMessenger + *messenger = *spec.overwriteMessenger } // when @@ -184,7 +185,8 @@ func TestOnConnectChannel(t *testing.T) { func TestOnCloseChannel(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) + var messenger = &wasmtesting.MockMessageHandler{} + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) specs := map[string]struct { @@ -192,7 +194,7 @@ func TestOnCloseChannel(t *testing.T) { contractGas sdk.Gas contractResp *wasmvmtypes.IBCBasicResponse contractErr error - overwriteMessenger Messenger + overwriteMessenger *wasmtesting.MockMessageHandler expErr bool expContractEventAttrs int expNoEvents bool @@ -257,10 +259,10 @@ func TestOnCloseChannel(t *testing.T) { defer cancel() before := ctx.GasMeter().GasConsumed() msger, capturedMsgs := wasmtesting.NewCapturingMessageHandler() - keepers.WasmKeeper.messenger = msger + *messenger = *msger if spec.overwriteMessenger != nil { - keepers.WasmKeeper.messenger = spec.overwriteMessenger + *messenger = *spec.overwriteMessenger } // when @@ -294,7 +296,8 @@ func TestOnCloseChannel(t *testing.T) { func TestOnRecvPacket(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) + var messenger = &wasmtesting.MockMessageHandler{} + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) specs := map[string]struct { @@ -302,7 +305,7 @@ func TestOnRecvPacket(t *testing.T) { contractGas sdk.Gas contractResp *wasmvmtypes.IBCReceiveResponse contractErr error - overwriteMessenger Messenger + overwriteMessenger *wasmtesting.MockMessageHandler expErr bool expContractEventAttrs int expNoEvents bool @@ -380,10 +383,10 @@ func TestOnRecvPacket(t *testing.T) { before := ctx.GasMeter().GasConsumed() msger, capturedMsgs := wasmtesting.NewCapturingMessageHandler() - keepers.WasmKeeper.messenger = msger + *messenger = *msger if spec.overwriteMessenger != nil { - keepers.WasmKeeper.messenger = spec.overwriteMessenger + *messenger = *spec.overwriteMessenger } // when @@ -419,7 +422,8 @@ func TestOnRecvPacket(t *testing.T) { func TestOnAckPacket(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) + var messenger = &wasmtesting.MockMessageHandler{} + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) specs := map[string]struct { @@ -427,7 +431,7 @@ func TestOnAckPacket(t *testing.T) { contractGas sdk.Gas contractResp *wasmvmtypes.IBCBasicResponse contractErr error - overwriteMessenger Messenger + overwriteMessenger *wasmtesting.MockMessageHandler expErr bool expContractEventAttrs int expNoEvents bool @@ -493,10 +497,10 @@ func TestOnAckPacket(t *testing.T) { defer cancel() before := ctx.GasMeter().GasConsumed() msger, capturedMsgs := wasmtesting.NewCapturingMessageHandler() - keepers.WasmKeeper.messenger = msger + *messenger = *msger if spec.overwriteMessenger != nil { - keepers.WasmKeeper.messenger = spec.overwriteMessenger + *messenger = *spec.overwriteMessenger } // when @@ -530,7 +534,8 @@ func TestOnAckPacket(t *testing.T) { func TestOnTimeoutPacket(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) - parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures) + var messenger = &wasmtesting.MockMessageHandler{} + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) specs := map[string]struct { @@ -538,7 +543,7 @@ func TestOnTimeoutPacket(t *testing.T) { contractGas sdk.Gas contractResp *wasmvmtypes.IBCBasicResponse contractErr error - overwriteMessenger Messenger + overwriteMessenger *wasmtesting.MockMessageHandler expErr bool expContractEventAttrs int expNoEvents bool @@ -603,10 +608,10 @@ func TestOnTimeoutPacket(t *testing.T) { defer cancel() before := ctx.GasMeter().GasConsumed() msger, capturedMsgs := wasmtesting.NewCapturingMessageHandler() - keepers.WasmKeeper.messenger = msger + *messenger = *msger if spec.overwriteMessenger != nil { - keepers.WasmKeeper.messenger = spec.overwriteMessenger + *messenger = *spec.overwriteMessenger } // when diff --git a/x/wasm/keeper/wasmtesting/msg_dispatcher.go b/x/wasm/keeper/wasmtesting/msg_dispatcher.go new file mode 100644 index 0000000000..b05d25dfc8 --- /dev/null +++ b/x/wasm/keeper/wasmtesting/msg_dispatcher.go @@ -0,0 +1,25 @@ +package wasmtesting + +import ( + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +type MockMsgDispatcher struct { + DispatchMessagesFn func(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.CosmosMsg) error + DispatchSubmessagesFn func(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.SubMsg) ([]byte, error) +} + +func (m MockMsgDispatcher) DispatchMessages(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.CosmosMsg) error { + if m.DispatchMessagesFn == nil { + panic("not expected to be called") + } + return m.DispatchMessagesFn(ctx, contractAddr, ibcPort, msgs) +} + +func (m MockMsgDispatcher) DispatchSubmessages(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.SubMsg) ([]byte, error) { + if m.DispatchSubmessagesFn == nil { + panic("not expected to be called") + } + return m.DispatchSubmessagesFn(ctx, contractAddr, ibcPort, msgs) +} diff --git a/x/wasm/keeper/wasmtesting/store.go b/x/wasm/keeper/wasmtesting/store.go new file mode 100644 index 0000000000..6548c8bae2 --- /dev/null +++ b/x/wasm/keeper/wasmtesting/store.go @@ -0,0 +1,26 @@ +package wasmtesting + +import ( + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// MockCommitMultiStore mock with a CacheMultiStore to capture commits +type MockCommitMultiStore struct { + sdk.CommitMultiStore + Committed []bool +} + +func (m *MockCommitMultiStore) CacheMultiStore() storetypes.CacheMultiStore { + m.Committed = append(m.Committed, false) + return &mockCMS{m, &m.Committed[len(m.Committed)-1]} +} + +type mockCMS struct { + sdk.CommitMultiStore + committed *bool +} + +func (m *mockCMS) Write() { + *m.committed = true +} From 846611bcd21364e015e76b92731563f9b3b12ca1 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Wed, 28 Apr 2021 14:35:48 +0200 Subject: [PATCH 42/56] Update to wasmvm v0.14.0-beta5 (#504) * Bump deps and contracts to v0.14.0-beta5 * Add admin field/variants to WasmMsg handling * Compiles * Update usage of IBC Timeout in tests * Minor doc/test/Dockerfile updates Co-authored-by: Alex Peters --- Dockerfile | 2 +- go.mod | 2 +- go.sum | 4 +- x/wasm/ibc.go | 27 +++++- x/wasm/ibc_test.go | 81 ++++++++++++++++ x/wasm/keeper/handler_plugin.go | 5 +- x/wasm/keeper/handler_plugin_encoders.go | 43 ++++++--- x/wasm/keeper/handler_plugin_encoders_test.go | 90 +++++++++++++++++- x/wasm/keeper/handler_plugin_test.go | 24 +++-- x/wasm/keeper/testdata/burner.wasm | Bin 145359 -> 145925 bytes x/wasm/keeper/testdata/hackatom.wasm | Bin 200195 -> 200760 bytes x/wasm/keeper/testdata/hackatom.wasm.gzip | Bin 65008 -> 65153 bytes x/wasm/keeper/testdata/ibc_reflect.wasm | Bin 273811 -> 282139 bytes x/wasm/keeper/testdata/ibc_reflect_send.wasm | Bin 284873 -> 293679 bytes x/wasm/keeper/testdata/reflect.wasm | Bin 293573 -> 302407 bytes x/wasm/keeper/testdata/staking.wasm | Bin 261190 -> 260102 bytes x/wasm/relay_pingpong_test.go | 16 ++-- x/wasm/relay_test.go | 23 ++--- 18 files changed, 263 insertions(+), 54 deletions(-) create mode 100644 x/wasm/ibc_test.go diff --git a/Dockerfile b/Dockerfile index 08efd1b068..a4ccafce39 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ WORKDIR /code COPY . /code/ # See https://github.com/CosmWasm/wasmvm/releases -ADD https://github.com/CosmWasm/wasmvm/releases/download/v0.14.0-beta3/libwasmvm_muslc.a /lib/libwasmvm_muslc.a +ADD https://github.com/CosmWasm/wasmvm/releases/download/v0.14.0-beta5/libwasmvm_muslc.a /lib/libwasmvm_muslc.a RUN sha256sum /lib/libwasmvm_muslc.a | grep adea8f977601daa8daa9885e02b31ca6dd0ab6d4dbbd8ba2ccfa447ffebda37c # force it to use static lib (from above) not standard libgo_cosmwasm.so file diff --git a/go.mod b/go.mod index ac45fac9e2..30182d1261 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/CosmWasm/wasmd go 1.15 require ( - github.com/CosmWasm/wasmvm v0.14.0-beta4 + github.com/CosmWasm/wasmvm v0.14.0-beta5 github.com/cosmos/cosmos-sdk v0.42.4 github.com/cosmos/iavl v0.15.3 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b diff --git a/go.sum b/go.sum index f7ef9c4e6a..175015787a 100644 --- a/go.sum +++ b/go.sum @@ -17,8 +17,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CosmWasm/wasmvm v0.14.0-beta4 h1:H8zVI/zRc+GAO+dk9jgGlo+5w0AENDJi6KN8Phvd2O0= -github.com/CosmWasm/wasmvm v0.14.0-beta4/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= +github.com/CosmWasm/wasmvm v0.14.0-beta5 h1:lYe8tQr/m/utoAPyfp4vbka59CT7GH25QDUA0sZ4xN8= +github.com/CosmWasm/wasmvm v0.14.0-beta5/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= diff --git a/x/wasm/ibc.go b/x/wasm/ibc.go index f9b45d72df..f7d162a6a7 100644 --- a/x/wasm/ibc.go +++ b/x/wasm/ibc.go @@ -244,16 +244,33 @@ func (i IBCHandler) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Packet) } func newIBCPacket(packet channeltypes.Packet) wasmvmtypes.IBCPacket { + var timeout wasmvmtypes.IBCTimeout + // detect set/unset + if packet.TimeoutHeight.RevisionHeight != 0 { + if packet.TimeoutTimestamp != 0 { + timeout.Both = &wasmvmtypes.IBCTimeoutBoth{ + Block: wasmvmtypes.IBCTimeoutBlock{ + Height: packet.TimeoutHeight.RevisionHeight, + Revision: packet.TimeoutHeight.RevisionNumber, + }, + Timestamp: packet.TimeoutTimestamp, + } + } else { + timeout.Block = &wasmvmtypes.IBCTimeoutBlock{ + Height: packet.TimeoutHeight.RevisionHeight, + Revision: packet.TimeoutHeight.RevisionNumber, + } + } + } else { + timeout.Timestamp = &packet.TimeoutTimestamp + } + return wasmvmtypes.IBCPacket{ Data: packet.Data, Src: wasmvmtypes.IBCEndpoint{ChannelID: packet.SourceChannel, PortID: packet.SourcePort}, Dest: wasmvmtypes.IBCEndpoint{ChannelID: packet.DestinationChannel, PortID: packet.DestinationPort}, Sequence: packet.Sequence, - TimeoutBlock: &wasmvmtypes.IBCTimeoutBlock{ - Height: packet.TimeoutHeight.RevisionHeight, - Revision: packet.TimeoutHeight.RevisionNumber, - }, - TimeoutTimestamp: &packet.TimeoutTimestamp, + Timeout: timeout, } } diff --git a/x/wasm/ibc_test.go b/x/wasm/ibc_test.go new file mode 100644 index 0000000000..1510f740e1 --- /dev/null +++ b/x/wasm/ibc_test.go @@ -0,0 +1,81 @@ +package wasm + +import ( + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" + channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestMapToWasmVMIBCPacket(t *testing.T) { + var myTimestamp uint64 = 1 + specs := map[string]struct { + src channeltypes.Packet + exp wasmvmtypes.IBCPacket + }{ + "with hight timeout": { + src: IBCPacketFixture(), + exp: wasmvmtypes.IBCPacket{ + Data: []byte("myData"), + Src: wasmvmtypes.IBCEndpoint{PortID: "srcPort", ChannelID: "channel-1"}, + Dest: wasmvmtypes.IBCEndpoint{PortID: "destPort", ChannelID: "channel-2"}, + Sequence: 1, + Timeout: wasmvmtypes.IBCTimeout{Block: &wasmvmtypes.IBCTimeoutBlock{Height: 1, Revision: 2}}, + }, + }, + "with time timeout": { + src: IBCPacketFixture(func(p *channeltypes.Packet) { + p.TimeoutTimestamp = myTimestamp + p.TimeoutHeight = clienttypes.Height{} + }), + exp: wasmvmtypes.IBCPacket{ + Data: []byte("myData"), + Src: wasmvmtypes.IBCEndpoint{PortID: "srcPort", ChannelID: "channel-1"}, + Dest: wasmvmtypes.IBCEndpoint{PortID: "destPort", ChannelID: "channel-2"}, + Sequence: 1, + Timeout: wasmvmtypes.IBCTimeout{Timestamp: &myTimestamp}, + }, + }, "with time and height timeout": { + src: IBCPacketFixture(func(p *channeltypes.Packet) { + p.TimeoutTimestamp = myTimestamp + }), + exp: wasmvmtypes.IBCPacket{ + Data: []byte("myData"), + Src: wasmvmtypes.IBCEndpoint{PortID: "srcPort", ChannelID: "channel-1"}, + Dest: wasmvmtypes.IBCEndpoint{PortID: "destPort", ChannelID: "channel-2"}, + Sequence: 1, + Timeout: wasmvmtypes.IBCTimeout{Both: &wasmvmtypes.IBCTimeoutBoth{ + Block: wasmvmtypes.IBCTimeoutBlock{Height: 1, Revision: 2}, + Timestamp: myTimestamp, + }}, + }, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + got := newIBCPacket(spec.src) + assert.Equal(t, spec.exp, got) + }) + } +} + +func IBCPacketFixture(mutators ...func(p *channeltypes.Packet)) channeltypes.Packet { + r := channeltypes.Packet{ + Sequence: 1, + SourcePort: "srcPort", + SourceChannel: "channel-1", + DestinationPort: "destPort", + DestinationChannel: "channel-2", + Data: []byte("myData"), + TimeoutHeight: clienttypes.Height{ + RevisionHeight: 1, + RevisionNumber: 2, + }, + TimeoutTimestamp: 0, + } + for _, m := range mutators { + m(&r) + } + return r +} diff --git a/x/wasm/keeper/handler_plugin.go b/x/wasm/keeper/handler_plugin.go index 5a2341d608..d39b51a492 100644 --- a/x/wasm/keeper/handler_plugin.go +++ b/x/wasm/keeper/handler_plugin.go @@ -165,6 +165,7 @@ func (h IBCRawPacketHandler) DispatchMsg(ctx sdk.Context, _ sdk.AccAddress, cont if !ok { return nil, nil, sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability") } + timestamp, height := ConvertWasmIBCTimeout(msg.IBC.SendPacket.Timeout) packet := channeltypes.NewPacket( msg.IBC.SendPacket.Data, sequence, @@ -172,8 +173,8 @@ func (h IBCRawPacketHandler) DispatchMsg(ctx sdk.Context, _ sdk.AccAddress, cont contractIBCChannelID, channelInfo.Counterparty.PortId, channelInfo.Counterparty.ChannelId, - convertWasmIBCTimeoutHeightToCosmosHeight(msg.IBC.SendPacket.TimeoutBlock), - convertWasmIBCTimeoutTimestampToCosmosTimestamp(msg.IBC.SendPacket.TimeoutTimestamp), + height, + timestamp, ) return nil, nil, h.channelKeeper.SendPacket(ctx, channelCap, packet) } diff --git a/x/wasm/keeper/handler_plugin_encoders.go b/x/wasm/keeper/handler_plugin_encoders.go index c79e560002..9e6bb28ed1 100644 --- a/x/wasm/keeper/handler_plugin_encoders.go +++ b/x/wasm/keeper/handler_plugin_encoders.go @@ -221,6 +221,7 @@ func EncodeWasmMsg(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, CodeID: msg.Instantiate.CodeID, Label: msg.Instantiate.Label, InitMsg: msg.Instantiate.Msg, + Admin: msg.Instantiate.Admin, Funds: coins, } return []sdk.Msg{&sdkMsg}, nil @@ -232,6 +233,19 @@ func EncodeWasmMsg(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, MigrateMsg: msg.Migrate.Msg, } return []sdk.Msg{&sdkMsg}, nil + case msg.ClearAdmin != nil: + sdkMsg := types.MsgClearAdmin{ + Sender: sender.String(), + Contract: msg.ClearAdmin.ContractAddr, + } + return []sdk.Msg{&sdkMsg}, nil + case msg.UpdateAdmin != nil: + sdkMsg := types.MsgUpdateAdmin{ + Sender: sender.String(), + Contract: msg.UpdateAdmin.ContractAddr, + NewAdmin: msg.UpdateAdmin.Admin, + } + return []sdk.Msg{&sdkMsg}, nil default: return nil, sdkerrors.Wrap(types.ErrUnknownMsg, "unknown variant of Wasm") } @@ -251,14 +265,15 @@ func EncodeIBCMsg(portSource types.ICS20TransferPortSource) func(ctx sdk.Context if err != nil { return nil, sdkerrors.Wrap(err, "amount") } + timestamp, height := ConvertWasmIBCTimeout(msg.Transfer.Timeout) msg := &ibctransfertypes.MsgTransfer{ SourcePort: portSource.GetPort(ctx), SourceChannel: msg.Transfer.ChannelID, Token: amount, Sender: sender.String(), Receiver: msg.Transfer.ToAddress, - TimeoutHeight: convertWasmIBCTimeoutHeightToCosmosHeight(msg.Transfer.TimeoutBlock), - TimeoutTimestamp: convertWasmIBCTimeoutTimestampToCosmosTimestamp(msg.Transfer.TimeoutTimestamp), + TimeoutHeight: height, + TimeoutTimestamp: timestamp, } return []sdk.Msg{msg}, nil default: @@ -267,18 +282,22 @@ func EncodeIBCMsg(portSource types.ICS20TransferPortSource) func(ctx sdk.Context } } -func convertWasmIBCTimeoutHeightToCosmosHeight(ibcTimeoutBlock *wasmvmtypes.IBCTimeoutBlock) ibcclienttypes.Height { - if ibcTimeoutBlock == nil { - return ibcclienttypes.NewHeight(0, 0) - } - return ibcclienttypes.NewHeight(ibcTimeoutBlock.Revision, ibcTimeoutBlock.Height) -} +// ConvertWasmIBCTimeout converts the wasmvm ibc timeout type to cosmos-sdk height and relative block timeout +func ConvertWasmIBCTimeout(ibcTimeout wasmvmtypes.IBCTimeout) (uint64, ibcclienttypes.Height) { + var timestamp uint64 + var height ibcclienttypes.Height -func convertWasmIBCTimeoutTimestampToCosmosTimestamp(timestamp *uint64) uint64 { - if timestamp == nil { - return 0 + switch { + case ibcTimeout.Timestamp != nil: + timestamp = *ibcTimeout.Timestamp + case ibcTimeout.Block != nil: + height = ibcclienttypes.NewHeight(ibcTimeout.Block.Revision, ibcTimeout.Block.Height) + case ibcTimeout.Both != nil: + timestamp = ibcTimeout.Both.Timestamp + height = ibcclienttypes.NewHeight(ibcTimeout.Both.Block.Revision, ibcTimeout.Both.Block.Height) } - return *timestamp + + return timestamp, height } func convertWasmCoinsToSdkCoins(coins []wasmvmtypes.Coin) (sdk.Coins, error) { diff --git a/x/wasm/keeper/handler_plugin_encoders_test.go b/x/wasm/keeper/handler_plugin_encoders_test.go index af7e343122..5088141e92 100644 --- a/x/wasm/keeper/handler_plugin_encoders_test.go +++ b/x/wasm/keeper/handler_plugin_encoders_test.go @@ -22,9 +22,12 @@ import ( ) func TestEncoding(t *testing.T) { - addr1 := RandomAccountAddress(t) - addr2 := RandomAccountAddress(t) - invalidAddr := "xrnd1d02kd90n38qvr3qb9qof83fn2d2" + var ( + addr1 = RandomAccountAddress(t) + addr2 = RandomAccountAddress(t) + addr3 = RandomAccountAddress(t) + invalidAddr = "xrnd1d02kd90n38qvr3qb9qof83fn2d2" + ) valAddr := make(sdk.ValAddress, sdk.AddrLen) valAddr[0] = 12 valAddr2 := make(sdk.ValAddress, sdk.AddrLen) @@ -171,6 +174,7 @@ func TestEncoding(t *testing.T) { wasmvmtypes.NewCoin(123, "eth"), }, Label: "myLabel", + Admin: addr2.String(), }, }, }, @@ -181,6 +185,7 @@ func TestEncoding(t *testing.T) { Label: "myLabel", InitMsg: jsonMsg, Funds: sdk.NewCoins(sdk.NewInt64Coin("eth", 123)), + Admin: addr2.String(), }, }, }, @@ -204,6 +209,40 @@ func TestEncoding(t *testing.T) { }, }, }, + "wasm update admin": { + sender: addr2, + srcMsg: wasmvmtypes.CosmosMsg{ + Wasm: &wasmvmtypes.WasmMsg{ + UpdateAdmin: &wasmvmtypes.UpdateAdminMsg{ + ContractAddr: addr1.String(), + Admin: addr3.String(), + }, + }, + }, + output: []sdk.Msg{ + &types.MsgUpdateAdmin{ + Sender: addr2.String(), + Contract: addr1.String(), + NewAdmin: addr3.String(), + }, + }, + }, + "wasm clear admin": { + sender: addr2, + srcMsg: wasmvmtypes.CosmosMsg{ + Wasm: &wasmvmtypes.WasmMsg{ + ClearAdmin: &wasmvmtypes.ClearAdminMsg{ + ContractAddr: addr1.String(), + }, + }, + }, + output: []sdk.Msg{ + &types.MsgClearAdmin{ + Sender: addr2.String(), + Contract: addr1.String(), + }, + }, + }, "staking delegate": { sender: addr1, srcMsg: wasmvmtypes.CosmosMsg{ @@ -353,7 +392,9 @@ func TestEncoding(t *testing.T) { Denom: "ALX", Amount: "1", }, - TimeoutBlock: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, + Timeout: wasmvmtypes.IBCTimeout{ + Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, + }, }, }, }, @@ -386,7 +427,45 @@ func TestEncoding(t *testing.T) { Denom: "ALX", Amount: "1", }, - TimeoutTimestamp: &timeoutVal, + Timeout: wasmvmtypes.IBCTimeout{Timestamp: &timeoutVal}, + }, + }, + }, + transferPortSource: wasmtesting.MockIBCTransferKeeper{GetPortFn: func(ctx sdk.Context) string { + return "transfer" + }}, + output: []sdk.Msg{ + &ibctransfertypes.MsgTransfer{ + SourcePort: "transfer", + SourceChannel: "myChanID", + Token: sdk.Coin{ + Denom: "ALX", + Amount: sdk.NewInt(1), + }, + Sender: addr1.String(), + Receiver: addr2.String(), + TimeoutTimestamp: 100, + }, + }, + }, "IBC transfer with time and height timeout": { + sender: addr1, + srcContractIBCPort: "myIBCPort", + srcMsg: wasmvmtypes.CosmosMsg{ + IBC: &wasmvmtypes.IBCMsg{ + Transfer: &wasmvmtypes.TransferMsg{ + ChannelID: "myChanID", + ToAddress: addr2.String(), + Amount: wasmvmtypes.Coin{ + Denom: "ALX", + Amount: "1", + }, + Timeout: wasmvmtypes.IBCTimeout{Both: &wasmvmtypes.IBCTimeoutBoth{ + Block: wasmvmtypes.IBCTimeoutBlock{ + Height: 1, + Revision: 2, + }, + Timestamp: timeoutVal, + }}, }, }, }, @@ -404,6 +483,7 @@ func TestEncoding(t *testing.T) { Sender: addr1.String(), Receiver: addr2.String(), TimeoutTimestamp: 100, + TimeoutHeight: clienttypes.Height{RevisionNumber: 2, RevisionHeight: 1}, }, }, }, diff --git a/x/wasm/keeper/handler_plugin_test.go b/x/wasm/keeper/handler_plugin_test.go index c56be2c952..6d0dcd04a7 100644 --- a/x/wasm/keeper/handler_plugin_test.go +++ b/x/wasm/keeper/handler_plugin_test.go @@ -249,9 +249,11 @@ func TestIBCRawPacketHandler(t *testing.T) { }{ "all good": { srcMsg: wasmvmtypes.SendPacketMsg{ - ChannelID: "channel-1", - Data: []byte("myData"), - TimeoutBlock: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, + ChannelID: "channel-1", + Data: []byte("myData"), + Timeout: wasmvmtypes.IBCTimeout{ + Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, + }, }, chanKeeper: chanKeeper, capKeeper: capKeeper, @@ -267,9 +269,11 @@ func TestIBCRawPacketHandler(t *testing.T) { }, "sequence not found returns error": { srcMsg: wasmvmtypes.SendPacketMsg{ - ChannelID: "channel-1", - Data: []byte("myData"), - TimeoutBlock: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, + ChannelID: "channel-1", + Data: []byte("myData"), + Timeout: wasmvmtypes.IBCTimeout{ + Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, + }, }, chanKeeper: &wasmtesting.MockChannelKeeper{ GetNextSequenceSendFn: func(ctx sdk.Context, portID, channelID string) (uint64, bool) { @@ -279,9 +283,11 @@ func TestIBCRawPacketHandler(t *testing.T) { }, "capability not found returns error": { srcMsg: wasmvmtypes.SendPacketMsg{ - ChannelID: "channel-1", - Data: []byte("myData"), - TimeoutBlock: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, + ChannelID: "channel-1", + Data: []byte("myData"), + Timeout: wasmvmtypes.IBCTimeout{ + Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, + }, }, chanKeeper: chanKeeper, capKeeper: wasmtesting.MockCapabilityKeeper{ diff --git a/x/wasm/keeper/testdata/burner.wasm b/x/wasm/keeper/testdata/burner.wasm index e2a9940735d3dde5380ba0dedd129cb597267b8d..6413e515535c73de6234d97f132895c073d9c0d7 100644 GIT binary patch delta 13844 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 S2;iGgXDe3vAIuXgt^WgMt90Z5 diff --git a/x/wasm/keeper/testdata/hackatom.wasm b/x/wasm/keeper/testdata/hackatom.wasm index 1eb955b2bae50b9c93d146c54eb5f8a41006ebb2..d2a4b250331531a005d1054522c47f44a5c8b968 100644 GIT binary patch delta 16571 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 AkpKVy delta 16533 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 ZBYqhGWFj6vEaoYrSn7K-!oJl0e*iN~u(SXG diff --git a/x/wasm/keeper/testdata/hackatom.wasm.gzip b/x/wasm/keeper/testdata/hackatom.wasm.gzip index 40a94a970bcafc9ec51b94faff173c63787f7b93..5d93ff3b302b15e058e16e78994c8891980c1342 100644 GIT binary patch literal 65153 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

    K+*! z+HuQIY%8zcar3UC;@@RvU9sfzbJm(UYuB~^?4515+`9X=2OfX&sppQp_^aQ)``#$S znI}}(UEbQdSxt-AZMzi;|Lw`Aj{WNREAPI?a2c7Tw6?CHv1#%8uF$sKcisKs@mDg; z6%9=*yF$0@egG;z_u|{{zIQgm+|bk&N^Sd>!_ORf?c~{yw{G9D|GsCAJoo(ZS5EzQ z(VnMYK6d<-rskHFtJb&Qch+eL0%S2>;;sZ)avrjzo)! z+qeAa(SuJN{>!A?lF5w=n_I44y>|VNuKU?@zj^JgvmgH{7T=jj{NK0LRd6+&i_@?Qjap;Yw`NVyEZ4AHkzU7Y zSq+OeXyjC^L9NKlQPr|$jap^WtkftqIT@|oe72fZaAtLuv6d^I-p+@)4bxLEs74-R z3)CZDu&XpVhFo2?G26I7tydSQS81wLjd}}btZMU#q-SFD%)X%l4Usw8Az1pX3)Edn@mZ_MTF z`?%p#Gc-n(Ds``UIBXg$uT(?nEnMmuwvf%rVAKi)EKdn)s?@6t%1q9rFe@jhCYrMq zIm%pRenye1SUXLzf!(M)tbA4Z8{=!b*Oe!grxd4EXO!mGdc;M4BY6RyAU)_ca(54Eqkr7N`di9>}& z8m-=to$K+}9(dr5H+9}!yANpeb+fzscHS0k|L~*Lop;_E*qe{DLXdXU}==7{^bYKBL^}t6j8sNo(8k6{uq!!BF?c_~4f7 zZrcCg!N-oCc=X`VOOfd9>!)0+VnHO`tfI!68YyP&Sw-A5U5TnnwSdd4Og*Tc#!chO zwJw7qwQJa`o21vK_W0SLR%e@}DrE~*in%`S3RMlK*XT5J`7+L^^RTt50u5)>v^II2 z8BUE=s~?`Rw7FbcxuPgLSJ%vyWX;da*XY%Yv}L-aVNQLex=y86U!_*4Osp!kqqAg@ zR-d|W{geiSUY#+~uhDxfoGEp5W>=eWkxt*(P`F6jR_q_vH0q1lg-u>IQ>#})tzl1o z>X0JKk+Joz?xZ30>`jNa)$DwAWZ}MlAMtA{Ic3KTeWSiyHF4yzHK8jwzs5WlMSaJg zwcB2=)cxeM;mLN^%xQ;jzLDFg%3yUG)9oFpPxWzaB)2hjXSQ*rE6}_*+qC9ZgQu6ufYUazm z?t4a0yT4EbJPQ3j&$Nty_o2))zM8yJzpW_H_({pW#b-AJnp>j#n(sbb+7f#8Obc_W zw3Ru1<|^BnK-&lJ>|1u?{WHsW#=88h;>dDlfYC7305+8Hk7AL*mSa+cG)lEnsoHmwle=E3d1#AzU&k z@5`+C?V>>g#_Fnn2I40^q+rT2&Me}q@B=@$-*9WVYuAKz-?kF!9rSs#(VK-Q<^pDX zfz>men!pGv#nMUj6wbPm*-PWX|57|z*G)dIe&+=`XFN5PF@*;Ft2*czz&mk8OnbB3 zRVUN7C2}Z|0gpy3j`lj6qe{Ddr-I_w@f5HZ4}7gWW2%*965m^x$Lkd<7$ppaveqFa WJ)tp_mn9s&`STAW)Y(Ef5CZ_BcBNnd literal 65008 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/`aUGY^6cDmk$FkH`pdoSK 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�iO!Ox1pO4+q$?jwwu3+sz!8u73{ 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

    lSHzTqta52)_`EJoOU%j3Y`V& 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 diff --git a/x/wasm/keeper/testdata/ibc_reflect.wasm b/x/wasm/keeper/testdata/ibc_reflect.wasm index d110005f499f01f4e7332e4d81159e382b5052b1..82a11df2865ca81c239bedbfd36111c81b23ac9e 100644 GIT binary patch delta 98047 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∨x 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

    pqyYzLTY`476bg1TC&7 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
    mU>yD8s2b+P*mB!RQ(S21Rw~ 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 diff --git a/x/wasm/keeper/testdata/ibc_reflect_send.wasm b/x/wasm/keeper/testdata/ibc_reflect_send.wasm index faf997cb7373a7825e622641dad95453fca71bd8..2ce39a1cf042ba3a3ae295bbecc7cebaabc5aea6 100644 GIT binary patch delta 99137 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�lk`D7Ga35dVx!er8N#nT!su1P6%ECEk&99jzI3GzXo zigeS>9KyMBKn8(_xL78em|J?w_jn{`iX6c~&tOn%L-}w# ze9kZ!m*^3)9sTY-tuI;kCVj~+Lnkpqj(yJZwc8qBV8j9|K`g(v4*ugxad|f97OMwN zg%533Lm*!U4y$?54{nL3HqqQaR>@OBx(I zWO{)t?+M5MOpV2tywvS>Q+USDaPA5CCp$o-JY*#QEa?Z7lhWmg4Dle-2(^fOKn9&o zHVuf`F8>l&tiqk*Y&Vxfr#M^roXz8D@8w_cPNZp^11&MmDVI<98Pj&sGZc+-$|F6^ z_-jVBq{yexIkb(4M>1-k3K$8&)}}yV_%?()pM#K~{7$fRC{n=P6Q|f?Ay&d%G{wk- z!eS)qf$!6>Qh5-XjCdC*B(zzFFo8bND1nCsXS`l<$!ar)_mKiOuAxmq0piGDG$4^g zFK-4`Cdxww95ltAhXO7GP*ETeSnJ5|2XUf z9Taz=GzTddx6wc+XSa@2t>r0DGFmLDFdrirkfF0NJpLEz++i3i7&$r+!-?%J_P~YR zTh*j+)E^WN6ot`k2`BxRXrC9B*dwP?Nnrxk#(@J*ceI|JmT?2Wl{Uz*pIR_E50O6R z1>BP-{eRuPdz@C&_Xqx*z0ce)JySE&G}GmonJzQcOw&~=HK%(iiK22V30-vO<358Z zgqUiFPzs?mhzZHWAcR2(MF>$*q@vRA{oebWXU<&k`Mkcr-#(*Y8&YLz_(k(`&f0PTKgIF2US$ntVR`Q)}RVQgR~_=M=Ak?T+R%@ zg*mggDA-wsF~=CjoCwAo;e;8phC6{9gkVFWU4u5ngDS4;!6M9cQMw8<)pH;%)~Hp= zoFaF!24G1s|`CaBA>ce8WD>S+(g#PsOGFWVME1z?TeUjSC%#Yy2AF z2|{cg@L3D@-}67TGUH-7CL^b*$n6Lw=kZ%Vd6#W{5HHriDjDKhPR~7A-@eHx5h++dA0d1 z?xZD$KwG->RkAfLv~^axQNsa2`rE1jCvP(%$O|zcTpT>#;ofxW5CMeiF#QLGuGXM z8SC!d);(sdy9YC7D~1;rnM4g{{5KtY%vg`zFym?+gJ^>pNBEero(^)Vm@&ErGq$qo zX%x6PL@x7LowM| zg%;Zd0^K$1!w8o7d%y^m_|q7{0)KiQ66(8etPcM;2%JwC?*&(a(j^2=zg{RDN~;_b7hWZiQsWKz^w|OIl(&6MAexy4o(p5!;pk2 zay$m=>;W{i>Yh>r7W-R2r~v9O{AqytBYzs8e#f5%s9*D^U%F4t*kyIA?^|IU$RGjd zsF!zH?Og#j4LXGwbBjO9C;j)7ebTxJ4|C8Oi(f@3xY8VSrgL88PF=)OJu#ej^jsho_kNc1Or)(O zRc9s1y7=9hyL)L=O-ot;;<)|Q*gpmL%Ih}_rGaMOVW3(N%Sj8 z^%>ZI;!3C2(|`VCJ<=9$dT6FynQaHkwQF(o+zPV+u}N#DXX63I^gDa35!44~ z?zK`qeK0ISJ5=wz)=(DQy|+qHtP7sqYrT#^KJc@r5!Q#(6iL4q7h*48q;+1c^MzQhHvYZ67*4$sM<}G0A zqNT^pgjz)A1=?mZR%Hm8Je9*?N>%=9O`|c35k4`d<7)74RyKT}rv7HNu@0;IezQik zgm)|6rK=o?0e&XIvy|pV-Z+&GWGMVRrqT{-quH>7@L)KqrX92{gTZFULF+%(IyLfl z>#;h=kLmTmBAs_gTjcLNWMymXOhj1KiPa*48AUIc81es*MMwI5c=To=CNrC18K~@} z4~N8{mH-f+aCGG`KT7x5DV+_FI(E$=b`cQkklL&UAGY>cm#eNvtUui$HmJ8yx;x!n zg|q&!7B_MGnnS&-xw&F`4zOnx^QU!I%x-pxbsM8D{nI+V(*jxv+8}E^aA5-z^KU5+ zXp@15Cwi!UJSp4zCybKTY}N6Yb&EAa)%)5?Z_KVeO$sc+o+bs>z~G9q{l@@tYo-eR zW<*QgJ7&<_6C=cNfnp@soJg|Ae)%wGo<+V5}G#?8#cd#zIz28f!}GYO7L9ba-y8 zXlb?jFJDq?EOA{>W8{7yhIA@5N_G>Xk9C>4UWl{nYpj_EuL@m=j|g3+eqixY)kca7 zfi!nY(c0kePBfuE%LA<2WkD+}sT<*nLsCuvy6%wTV!F7YDdaO}m@RT6_dW<%H&Era z$Vs7&zv{aN(m~J8=jtU}oD4kw-4-3w30=g=Mpy`95UyHEp7YW1an(CQWcNZj?qq78 zO{!6J>?imy>d%KU&MbUREJs2^9*q$uX7WRA%+g;5Ai}PU5Cxdl#}OjejFpp5z?O-P z6z8@1oMWvI!$}5Wnz^B4;bN<2U~(Zqqg(p(+!HClqG)Xv3xWz~sfHwq z_9(bMQQTq*C^2zP!Fr;tIR1d@Sq~_+LS0!;Ou!VstS34~5wk2PGSh-$B;K7G6q$K? zF9$~xqa2I=OAN_pEII<&z$*eE9)1*@_=cdEi#PiwiB_i91#mFp#Q&2d##xKhXGtOp zogPaPU6JZsUu0uKqw9+|8y$ZDGsdM#O%ffxCY_zwj1$z!4InTbRj)SC%X((A$Y}-7 z3iwFD!j!0kz?^loRKPepypkv9w@ktTpSpvVjGIs z4q*q%zsH9NgAZO!KR!g7Om3l*4O)B`2?>qk|1wR`>nx#>Xavl{81>CYh)tBgx-^1N zdsvk<5R1>g8@fMhlsYw-;uB=&Vq$XNc@eI0QuaN0<$EWn!2i0!BmK zl@5S`^BNYfQt)&G)|exJn(|XaI%t1O)m_obG6bQr%Dn$F0$sP(;lwOU;7UKfDSSHy3T-Z4l=~!zv5wyxP)S zWLC+&zc&}BVNv?F5KHjb(Ly|xbQAr%NFHs@k=az&@AseF6r8Vr^rvyY{@S1ZOpR_WE=R}jw-zOMjBlf7 z@KhVolMwOl=&QqR#BafxvsQn$6*ChK(%}b@B_PZOQ`NXGqLo^fCqCq4XXoq5ew;5d zW0x&JwU($Btv<*R&#GtJX)*r2c7k4`_^w@BLrL^X>7z~o?4J4ur@TdtD!|&UQ2!|q z3scW`XdclYm*9;A1ZAagr!w1%oBX3(1!uck%ht6Q4_VcuF}n1*_cUX)G&Zdxd=Ra9 zWn;UD*6=4)x5J)l-Kt7Y68*C46ZlJ@^X0u2Z`F503UwzQjajF46-%Rvi4+TjdjBVw z)GE7*Vb%#1I$3leBu1PJA?aOJcCuKDIb70BWQrqqs@uAW+pP1|fv>b|%mYdT0^O#+ zArB}tj9}*HcNb0Kaq_?|YWNXCI8<}Hi;b>ux0}v}xMe}pqV}g;;7NqIMuPe8P*Zw{ z*C^cKbzm%95VdgE>l87BQk`(12sOD`Ae`!fQ$&Bz(Osu#-ksIcNOicdk9WO`gOD4d z@CuGm6mTIoAYP`L(Nl~iw}Zc-w!BFH)7(ai6IK0x3@YHuIWnWrsys-CV-TiQ8xI8R$J2b=glgfK4fsR4ZjT@A-gsQmPc$`tz2MXsih8J@7HppDC(bhYV9gv#YJYDid2#xx zREYHYN3^vYT$a!Mti>OD$q0GMD;_3hSs3}j(?zyed8cYLTwK${<#Bq< zhQ}@S4w%7r)zibpm0(e=&k(uY4OUwoPshl>`ur*zy)J%UNX-zZwME@|hR7KNEj%1A zEM&oc#aqSt3(dBZI>{-A$CS$^=r`cJ=ud-9JmXJ4p-!A3hIZUcFRMiDF2*Cf(|nRq z!b#kIg_R7aQBvzr)FS+CzI!SH?9DMOWm6 z9W6R(td%?oFg^$UC#R1V$>+GJ-JElzMurp;2m@kfP|u!;1n&nR9nH+m-X32@jsQhA zO)U6INwqyr&y~&UtI=YyT_S_msH?_^-7Srtq0~3pa*h^gOy!7nx-P&%+7Mx}^+>Y1~RbT_Cc=j(b$%SaGFqD+OF} zaeZ;Q(bZrptr#n=!&b^1CmLuU6M)@pAG1ZMYIXfX_1tUhqqpjd2;(2R6aJw#oJ}a= zWKo@=qc>0;1gjM?N zkXu5G3||I;0|mmBpd@7H$|J@HNxy|!&`(nu$Rn^HV&?$oCUtLV;NsWyj{aC zgd=emF$&F+H`vf$2H&SBgo)x`;2S&-i~e?ysA7g_hK&&-2jdG*WWUY<64oBE86|H; zL#bv+5iBlfAXjXKu{nTD@I~9%YdN|-odb4eJG-hoLD=-MV2@l=??|PO5Ij;DxdycC+b|dORNIqi8wS+aS;d&8ggl%a+ib_D%1!D z;Vof1o6Ra!ftSmRd>~|Qk@2^+X#+wQWCbc^2_t%u;NJyRIc%~LSC~N5^Z zFpWAEC@m1h=Qx2^cyW{lG5jpWPx>=r_2%Jcb41I*PD3vkqPzCA-6CVXF9Ti`7)N;Z zw2PzORPJ(W7e}q~4`==XYd>`8vSz%Q#YhuB*ei-j~<}bbYl(eKea4|k2zL{0FyS=S59c*VF zN8mN#b(Vz~aGKuL-JKpJJR$4s4!NLD{1-QgqP$I9#4U)-Rmk)#p6J%#5WD5?We_X2 zb8_o7VJYwyOc%l$u7MTnf}6@hcvo^1wP9OrwuEgFs_E(aVT*3H;1e4Z2)3HV0aGDQF34#^vHgiu8F`h%}>M0!!B7(C{n71vH~AzDzW% z?@AN6?n^|5gwa^tc@FNp_qt3p?a1-K=ENhR3o$^`llO;I6ZdzpkjR*m!4XfKsghJM#A?7iF+5~0>Q!+0@`qw%n-ve4RHaB zM;?}p?gS7f7MGI~kiqXz(KE%MkiS}5UA1P+6l(~g&@7SK*#Ex3dg!L{ZyIm9oiR)F z1xl(}V%`6QnSa5o?pk>PM15AOjgJ^|H4y&)3LlI9zr@GQ|BjDOUn81y#lbTYn1ztb ze_GuGa1o{Y)jf<##`%wj7`;WKTQq(F-5^R6-6rl3Ls}R-f_58uA>h&Jcou|>yS&Oq zg~8`LL|=_eUy2mtT|kQmaB;`A;v*o<)7NR~>b>g(BMa=mPD@vb*XtCIY{(pn$2jgx zSXo?b5uVRQP3Hg{W~-wO&JW*Yiv-vGEqvL#7zU029R;9i!%v?7-o9RJbk9hek&lx7 zG~jMy9UQe?s%GfjQ$>c}sd_h5k&$R_vGzBJ?wvK!^$ZR=5|fX}EyQ7;r+=5$%+Y6m zlDXwKh|~_6%%R8iFg$$1uE7*ZC?wi$*H;8*8K;v$(RMCxMAE7<< zrW(UqaFbY>;p-nlT3&?6G%>Wzg4JcZvVt1bNk6qE(Wf zB8k%|jHNlRN`)r|z^Y*BL- z2&ct+B#1b#l7JU$GsYZAEiU8@z(E&5-}lo3aR#-xka$^@FJvVKr>oQM7S!UldqA{M zFWxQE@(>}$h6=^T7Y~8qa0WiXkF>a3!%Q9uBNROeG;glG~!_* zpz-WNp?zqy2*!!%!L5Ta2bCac5|)syXd67XP@HY1whZ~qxnPkuHJUbGTm%AfNPW6U z+mB-wiwsknVD=5~lEvQeXl!q+w2J#eWz5j#yhV5}QKBQtw)npbmP~9ayoixfcLE zu3o;^SXm7=P~W@%UU3mnbmV;i*-=$=pBO`<_ZRnxw$=m{eZN?Px1PUW^cIILweexm zOf_06f*3^WrJ~TF;1Pp@R7m9DKxa@8MlW=ZB23|~rDBjD1(Azbg42kC9aWPDM3TY7 z|DdPG9uV27*hh$PieoJdtFW8WxJmD>oezj64dIqyWya7jK+7w7fOtqSB|j)yWNY*Q zQ%8E6N&g0hL5;7jdq`whtJS>^iP4zJZx4x94Z`@E$e`L7!z!sZEeEFe zUncSgt$wiFL8vJQ`cc>>G#$p~;FFhiZ-qg!|N{TvQk_u z=G>+pTnSV&@1|se4|>uf=0xt@2tANH8YFsO6+EKtj@LXQp06^0p8Tj7gp2w&Ju2=7 z4yQaOGTULuaQcZRhQQ$x`o*mnc}_rIz~^_voh?YaYV8=OLQQx~w_Ey{cm+*NU!~3K z%U8j=w?e%ET?rmPtPWP=&4ZH(=KfXJ`w~HgH!%+S4 zgm|Vo#vN;d1!&%q>UjA@TDM49k@SCna20a zsTTfztyttDHvHn9r5ds8SO$&Qf0fom?Cht*h@BFw1@il!7G*k`uM1u;7&brbgVQt) zX7)_T1rKe}!ew>s-rLV;`E&O(TK=Sx?+h(bxZ1*a2oQ{krRGHPI2hCm zrngKE1xKvdc9$4K#e?2agf+YJSuworG_qAVQ}AqLuQbyH}NZ96Ut%7rVyk`RA~pHv04j>le%GwT5X7P*K{^qj|r%5@IH z6Fn!|p!Hjy6So`cT#ABtR1G~Za-we~{fiDZRm)!xtx{8H4W_#ut-%HX>IYo{{^ScH zB`O8brU%ca=k;#>^?8v^qONPNa);2oOk0T7lzAIIS=~`48juRYIn8UKsyHPBt~Eh( zg}~BwKu!C>c`;3uxE}smt5y5;;%v@hz35ma48()WZeB0W_XzYNm5*6~uAKFPXqy%$ z?FoqZ#z6jhLe6S+-wUEA_RnW8h_52e{MAD*h#d9(i{fJB4}D2Ij;;>BBrX8~zhDCd zpB3t{4SF`)Hi%X=$a(zBVxf4u6gK$ln_`LG6A?NpR^vtFpQ$Pxk<1}^p zn<8CJ*eE)YGO>oy!nie5`9?$5b6yc+x|-uzDd-a#-e!YBmGc+qgGc4PW=$^s#a64``HI673tE#B{bLE=KpC}jCV~*Ev5+eqK%EKoBw?k`Ccz*raPvK*oiYjtnO`HII zs0V1*Q!l?E;2)^^y{aEmUqxSw)cRN996Miq^{Oa@X)^Sh=%CGamsCIidhm6@d(lt5 zE}BMBHi2J)di*u;ez;}5hBaHE>lf6>cHVKLC&XdzQvIYCrCOYF|5~g*za#_BznLtGnOQw75D6=LZ^_1in*3AFQ1J^EMzYWl7z!2Q#2?1$~4y6TSxOs%C*OW*Yrs+EvxsdA`z zSG>R_EPBt|>^N{@6H;%gwtWG0W#xOKgtrg`tcdsrM?cWxneU7Idf*a*rfZXVP_2C* zo9DRN_P$tVoKQl>*#yB@o2X@#(A}L-`zu9W3NNJ?S5OmY8y!0P%TP4Wf(U-qhd2bC zr`CKZ@~jf|#fPGG{SpaPrEvJoUDMfN)$k+HZq#|k^JG7$c@*yRx<=|_m>aYTP$q}7 zv~LPN&uJ7IOAy~33Juu4Xt!Pn1wxfVV?I)w)q@|2SJC;nt=P~vsq40ipIjiN*7K;B z3nz8w$KrPI743@Bm!2s29+}Gd1ShBCYUC$|!|A#Z=#Qy+pNLc2QGJ21<%}5>NOw&9 z>=RyIMjV5}_d^_4edeJbgZNamZ0UQ6qIkGI<4$1~fFU|Ks!sbJBp+DOZ-Y=na?Fz%R@g;4fzp}`*`I=gq55w_# zg6B^F&tCQ9=c1i>c(L04x$(Ry{leS!_$r5XGW+-o(Nk;S;c=6qH%d*9n-SdmVcirU z8qg5!zg?UitM%YS&$HEI+eP>ehHl&_!dH3vnJPs%mff#EQEhgJjBF|yF(v8XgFe(T ze*QN)#;kwWF{)2@Kw!om3e{9F7Jex2E6^;zE!Rla0Gx?$wMA#3 zD0sUSh#R6#dE9D476%r{M$Cbf(YIk-bvK!swi{ITR`tMcEeCJf4VT6hYTIrx)Vg)i z+cFymM@%4mMAM37tX9#aETO;7$l2ejk}R1VY=Ylx*e;}RnX^^h{Ua1qbJZQmvSHd* z%ta59F~Q-n3XVii>n-ZH9})9&uFC!i2I~@a@F&r#g+8H{VlD_Fvk;Hq)-aH8R?*7Q z;2o-P4@mPOb?zQL@ZvoXx#p@@_Tbc1qQ2fEUdntIZ(*qB1=zXVA28kGs08=067}+4 zct0*uzwX8Lg%v7oAB6Wss{1~D@H%gwZgA;79MMYD3;RSy6D(*HrA>&-UEp;9ztS!u z6pC^iJFrh|Y=kQGM#EMxxiS+@K-!~x^UtFD5CStIMX#zbEe5Gu}2}au%|4_$Q7(qw?1oPB$ zzrgF@UQ2!VsO;m5Z3|O3P!w#UMD=(~HdcrBL%g{|r5+G1nynI9;8YBDj!E-sAc85- zAfbQXDAkw)A~$2svskb^XB{5F2Z4TmtbXu-$ZquAGpNAhD`fM7tML0EGI(81-M>P% zu^!M!pHTb=N`S%|=~c&HMNZ*Tv{s5Do14d2|$m0w8y;A-Dn<$w4zfT<)Tzwwy zsE=`wdKz_(8j%)v{4N@II4rB>~?R#wyQgT6^)Blzk%ixd}~DGFxTh>7SJ0X zQ?9^oy+$EW6c%n}VYDd>!y`mGXUezNRgMM58`a?@f{&{5F}3>OfO zhBI71tnf1Q^69qKi-*LhxOKnjnq`6gb}n9vXsPGn~=E zx6C_a&@k!Y4WiyZy|J^_8^q1J-YD`q*<9-tu6kXscyE+$syQs8_dmU{u+|%5{J*@i ztk$py;eYDnpbOzJwBpp+hj4^gsBS+ba$^p2F-TR_#v@{Q+=kaU3Cc4C3YUU&Z9q3x zefh3?F2tB6G`va{UR$nr;T|I#mD@U<%idCUAP<-W|xFNXob@k|< zq6f<(bh+4Hp`J9Y6&w|5V!cVmqk;xn@+7CDns-!W#x1Sz2Gmil{Szu9R3VnZr_HN! zFg#{ch22%26?dm9d>9{Wc=woSQ77vD+ltr55j~fGK=#@=@^=fK=^yC6m z6R^EH<`-xI2}vi=G(e>*_L)2hegrr*sO-N)-+=A=<-d9Nom6qFT0q#fe_6kdFcc+FC8ylC}RyQ5`8>-gdrd5QH`$pvG&MN@$S-1@6z z`Iv6j@sjOh+>hJj5aSN2gjktpy{eYR$&2Gi#CB_)%^xZuUgnj&f6hf1S$)D#9QzH^&BeYXj-1G6)YpQjk zyf)<*>wo$nN+09a9m(O;*X&BYDYR*73!bI=>&&P3dsrU$NzI zIPq|b;lyK#-$t20%j*4dtGWJ0O!d4xe~9sK{th(h>f=NiG)n_X+54O&zP1^H_9pli zHak_C)N_y_FjpeCPv-tZ4E&l0uL?CLS%wc@6_Cg4Ja}zL zmd)eLhNf_0_ypKl{S-MN9_N@uqgM*vrEW@*v#fj7;S||2OP@ayA)v?e3>Xz$C_~Vf z;d=}qQgk?2xu>jGs+=8DwBRv-v9WV-4fZ|HZ;qR>@F_2&5=Bm?vo4(B)~KkNv8!gr z!ElD##=^DXMpv0eCwcvb>bWOCr}AkOzHdW=1KS^}iC%0BXfMAvpZVCifPr`)Q$n8D6LWW}ioxYmXL57w-; z&YPwl!%8y-yc31-RWS9jifd}_6 zmj}m{x}N&ArF_QA+NvR;o^B)$|;> zRt;?h`~P^nE2^Qd>w z3LIAk5DfL^A9nxNa)i}G-QQZa%`yXrK!yf#Fw}u~c5=lDnj6r?kF8}7?^2fQc^PiG zYqgeveKW!uG6@YCsB7;)@8X4fw#(ju;9@B-VccmsofC&QV-~=2Z5C!ZBEbp;c>5{< zG7R+q9Zh*K#Ag92H92YI%wOlCqDRKu40T@{xd3{nHf`nf@%Nz_m?0o8iXeWYdx%n5 zxO5bNn^08sCY|z{EmqddD8|z0J!J@$Bw*EFZDlDni|`&H*MxXOlL(YHoAP8~kxMLg zhMU@tUrxF+|2Z^8L6Z8LU?m`B+7#|$ootEgaq$c=5xo~QzBUV}Fa}Tp2n|qBggbuG z{7wS#rLnX51$S%>05fO7&4$M`1{Z_q9hZtsHiw{S(dHN4R;T96=7|_Ouo^0>c&!z? zE?bKLSpXU^S6x#e+qH6`gZ;pf8awsRMyZO;BW*)DNzkN$XvVyOm_EoxW8&A5&+GQq*FR* zaOHQB8A&12EQB4)1?CGKB*O#U-AQJ{PW4OI`-zb#*H72tKH;>LUB3 zpmzqNadF#4ZuLPI*#He-AEc`jU1UU*K`=}8>WVWyZUK&KiFfo>$S8dcQeXde0u0~o zcCyoS^4LkTHJsaO?VT__{Ok7ohiToKu%9#P?ySbS7c<)5Rd(XOtvw?Euv8i%Uobh# z0+9z12c~{x(e@Ax9!3)c!bKPWUUIT*nQF??5Wx#&L4Km^z$G^9O4-4{t|Clwb~3`tBuVH;2|mqvU7YPI8kflJj?DAtNH5#6@Lw zmxWlj@pvHE3H1G|;K7yzGbqgPI_QVVf*roRyXd1ip(RYNF58yct^+M2$|ng(y4nuPpRW{7>{Vi z>3Fs$NYx)|>@b-R=c|Tvc@gmqX^)_9G~Kis_mVB)4T|_y4rA)TIj51S)d=3I^aJB| zj?7FjPRVqHdz{L2JNSyaYdB)HKGX|>#&PvdFR6p6Xm8u)145h7Sr{=%u@;0mviY%F<8uf9R}xgOkIiacU)cwpZ|Mu%M;pe!8fM!F z<7>dcR8jq8lN1a+0=vPA!$(R17Ie+RBU09JBH9UUMU!!2*1%&1y?I=7D)2&`D4ZXbwh zN7dSa5I|p3_8`fCW6mJG9M=qzI_{nRA{6__+T{f*7(ECZ14E*hkcnTjWsuZS3E}F5 ze4+-N6O-#l5z;Z(^ak4Ta7A=C3a=~x0QCNG=y%AC^4MUrQ5uFfN~)=q>TVR=htL~E zdv|i9lu+Xl-YBh4)f?rkQ)_RO&Z_)W%xQ)C6NP5C3{sa3kqOam6YiFIe2BMY+L*B| zai{a^kUDnH@c(w>v{CO3m8stDS>UxfROU1U#zFRgUuc4HTAk+tqy1?f@OfXr1O6NX ze7g1n_{Gpj0B$#)<^i8>1I#&inrs<;^i2RK+E9^J4M}%m4LJ3+4-x@)Jxn~vIF^$* z8xMc#)wn2YhRJ4hwguu!hhNS@y@sY9s9Y@8mJ6v@%qvbc#onqR`iMIUX+ioX9Iqmpay;!4g~uQ1#B1oz<78%TCc@MN~RS8WynkaGBrC%aj!O!}#SjuGg|7 zR{6Ez5-LRX7v8Kwem39!3^|g59f%(6J0yCv@h(0?w)LQ9@F6J_mk?v%K{Cjj0_TjD z!%Yq$m>ArwE;v(;N!Nri68M<_x`{TusT{Rb<#5?l4IU#~tBesc4!f*)jBI0QD;>_b zUgwXHEg^LPo(P4k9e^}YJ;cCK$=vVcf;=%o>VSm&I$Rhp`szIiFBf1%p+<_|Mo1ly zka0J3ALot)PV6F1MEP+7)90G&F8ny5&zD&1Dwi|{ryxpLJO<*Ct^`eS(B0vPHb>1TpchvQSyrDV+hH}gpH*`;fh?D{38O>?VraTS zMI#({z6>=A=+di|7dRe1Tju>YIFwTb7A`%|sa>1~RL}+KsG36oVmYdEluYhb6T85) zz~k{3%L)2MMhs+-RgE#;fL(Glc(e=xkAZXNS{l*v)OVw0UUh8a(S-iueCM zbFTipIovby0x|Fx!~?;b`-ux= zpKN_juO*{Zlj2lxtn6E~9)@as%rxw25%vzLU_m7GQt&+3g5U5wAW4K^T5;!BVN`I75!QoEzu*&6kBRh}T)w*c>a%p$)l zh3D>4*E^9#rla+I$v>lLDCOvo@FojrCLk0%my-}?;+DV9at}(T+;fgu!=kuaGZv12 zAVsd<2H6Q`yj=HJ$4f@)uRdeoE#JBG@7`IgM^Nn@yihfG45X+Q7=i0-^x)s&Me)Bk zTB}WL7q+>bZAMp{TvG#PKMw3N$c9&fKd5~d%8u4v?IG1;0S#0EjsJDJ1(tqDZ5$MD zP7~u6c(=~L8^Jy5y74kS84dt7ob^_|tth3g^4`%)2=xlEQh) zO`b%GD4e+_S>&`bUgPh-Yif7Z8`4qXB=?&0;}%nzuXmC2ftyS-&Nr{R$$I2a!g=0J z#%ru~?st)mRQApkxh$&vevTm1+0Hy;tkK$IXsPKADbpd; zMujNC0{QuU-7RYAY}u=cmiMR>FXhm+oh%BrES>sH9hohM2{-``x?GNFTFx5UKF0bw z#rm502KT8=m&@kqH-cb6*}`aCG=h3}dwKReak)&12crQPxjjP>B?ksKDC>BITyI5k z6o}P!;6L&Y@Av*I1vtT{Lr(#i78csnefav{RQe}>njmp+NL>1mn zW@>{ZtLzV_fD=yfHm?j{9d;IkQ>?ixoYFmoQ+%(yTB_1Zd2`;$3<6=5Wu+mcGnM?V z2GN`CYp0yWU#o4)WZ8xlxsn||SR?60m?%~vV)6~TC5)9l4 z%c65keX$Z})5A(W0v-9ny(;Gs*`c#HS5(IgX^5=EQ2CuhL6mes z-SvpTrLu7ORPm%QNGa0a)lL?EO@Wo1`TXl+lTXffsOmkcOWixc6Fc@>5|w zF~1R9S`<2g;6`{#0}oj|8UEVlX{tjUj+&iC;Eec*i zyl8JoFn9%@g%X{Rgz7L9m>jZC&4AT2fDR`^9UcfiufBakW}jDvLbTyN9?};Etl;y4 zBS8~cUXvj?NskV6YJ)xyr-GSTf&PFm>izkoY!zIOPxi4*Ne*p0TW~vFrgTSOH<*WJ z&j>y(F2ykA?5uzjZV~ICTf~g3x40?5W^Y(6Tcp20(A$^}Vqo(95U|DgUA%61F*}`AiuU~p&cgo$j z^^L{=2M!c)wk&kPK!9Tqv}6R!MOGj|JNRqN!q)kB%o0wNi&|>q8krus7R%t2t1s8c z;Vr_Q1b7AqYkEd-_?TWG(~^aP2>z@Z@szx>L#glvI)isFi7Yio%Ir9acYp_c@2{t1 zRy{pr+E}S#2N2t>mCcHPERm?POrQtpqURuPC&GRbmR2)-ECW`9a>t8U6z7D+9S4_> zD*$LY+pJ(_gb)4#@V91XAxMn|K0pmjpGo=?!3J^BB04S;ifr}nTA5X}99U^KDE!NW z9=HLu*?l27C`)7j?7Ec*K{hei8V$dd!)0CDUuyl;?pZ~b~3TmE#Wg8<*k#Ax-Deh ze7C|fCYZz8OZ|yeOfZKfD|JE@ufqUW^EWeCu%3z4Y7+{&mGk#Hw_t-mv6%_x@RbUG zqLPUUC7zQn7cBrmbmrh6*5cDS=DxCoiTQ2`pW$lDm{{nR@ENYQiixFe37_F=rA(}J zOZYU^iZ~snR=Y)fhU=9xvCb{wGhA&m6C2zTKEu^2{3T`|>rDZJwAmGz!sFalD7qsw zZV)ESz9GjBa1Tf7eFmx-i?h+>keI9`2C!ZNX&dZNGNlM_ft6xQp*^=@j~Zkm+@(+{AqMZ$}T^Aq1LggC6vM9W*Eqw=o?0oidqW?NaBJ$?Rxv7HVFZY(CD{2Y`T- z;idoz6kCKv7HoZlvJQ$#a;TXB@&Pu;PFiI00721&)8!q&fChn6sS?)9jI*_j0yUPQ zvVaDwYLP%!CEfN&Dwtmu@f+u<0I6`KA-{YX;C18-L}sxIMIlO`RYmJ%X4D35Zg7al z*2|pX%dk|qkvEB=9E2m%cvw}D6$rirg6?uqv~vaUD9k~HkArFn#wWgnUXWe7dlNuQ z!R6sWft$NHfVf+R&Wb{bp<#xh7$Y24sJmZ~8ATN$3t!dMIG7cj>`Vm7u7(XEiy-v` z;84t@K^gem8@f#lCE$*^=2aSh@PSX_F|SbSANZuEi`jIlty)6t0(61*>TxBCh~+>r zIXS#XvJl@{h6)g*?J@c0*w!ulZ`+X93sl-V29{ugCidxHqRq(U#r$p6t7$LE zOv*ZB!QR#cwC$nrzv4~>s!%@g;NdMQgdi;iYjlKAV8ByDE^zt$zcz6yCjB>UAYPhw zgbc~J&urW(U_GuJL__`$)O}8q9$*z^F&rPpY>-VOUnVKss;=K4bHjV!sSUDW(K2&a z%H1v!DkZ(Sv>zhdhKTYKj%-*w+}TCgLCWRPIIAHaU$$~LF;Q5AceLg>1eFIq;wu5h z_FTAlo4XAH7$QC?E9=*|&-E{@-E@Vr{xGlz?BHoH%huu1FMC<$jN=X_0I>JH7SW(@ z3TVcg1f)=RM{7BfhZR>QhBYL7CXo)NJUdHx2a?>4vRiAQ15T})2I)~&qd~sO1z%Km zY?Mzn+X7aF3*Lry0SENtEsTq27aS(eenoD~)s?tLnKoC>J1&6vU|1%e7FOelxn#k1<+a(Q+lksiGm&Dt>)wMq8qPZ^Bje>45hsrdFhq_4Q;QP6q< zA6@|>;K4&F(Z*ueSk2mKbL*ymM;rKUX)0TVHu|gvWWbu#i8koUGKhoKaOoizOtXU8 zh=Z8r)e*;))6c{lh;MZuPMqe(#7JuxP|L?h!C+lF=$)Z5g+~w(O-8-(syrz>%yp}3 z`zi&nPL+sbBpYRU#N4Vy%=Nho0<<~@^+p;V3cC-6lpYTmIS_nUOeWU5eBT@IP-Gn> z`WIovG~OC0@+gKI17@Wuk>iA`-g>S2R!C9xDrAF3W zh(o{h(EX|k*=^u*sHr#*{)18Tq6(KLgi`>><|gQxjg7 z`Q0jhE=Nm19GoloG@%(VLv#UshdJ#-16sS9diQnNoZ{Jkb&f}a?&4|<5u3K5A(BHA zzy+~25Q@SuL#l_Qs~*zFY-|zqz%8O>0lGNCMcO z<_8o@AiPu+@$rz3+vMV3$R6N|M?`sBZwhtyo3d%vTEWAsX(x;Cp*iTC(XQJL+@Rl- zsd;4>HCQ*ukW1n~=#7M>buijN1zR=&8~})yyjgY$)8OHoWzIc*YbCs0BIbZ;o6K;k= z0JouyOUJ(($;%}5ekMCa6$;ndxzf27Kb{vEAUPO0Fd|q`0_qH-I(boCE>!NK5Zj8; zN=zgW3)Ixr@;Sii;6k`_LVV^;~N;QV)F~>m$f9HS)Yn6ffnVCPzr?1m=w!OC~=M zmyVV|6j$A&LLbVMggFO*Q%TMeJYXs7{h_=sa_=wr{gL|SLz$ff=rG_c7Slv`c~_-= zB!?B~hNWp3=m)BYK6x!?{(dyq5ork8$Iyj|&MZ2w4R z#Og~Xx&vix1qnQ;dTo{Mist`{7q?+SE-_x^2(BaGRSquYEJcyugTk2TA7?Ig#qfkE z<;y!U=Ma2HfaCO(DEF0b_R4+1CR`Aw%R(^IfZDfJb{8vuSFJyW1!a_vQFqU4r#@V=b_}vbfnYt5YL^gci3#|cD0jI}xccMUZJI;1|^ zCHrBwHTzCZ!S(I=-^td=gnANyLoq{dOgs3Adiy(hDr|MB-{TU^Hg)Rv@aNvE?)qL% zv%Xg+zLzR;|L+*?r)udB@`A`>4*k>hYqQiev&Oj z=^^#aPjZG>c1VrfBQv9yoAxbrAZRyM_wA8|kq_&v#XrfGUgJx#b89z#^A8sdnqe4IH zNB^I7=4C(2^N^|E`ubh~eTJ9(qS5V?}Ub4xo$X*K&Y5KdYPe%h9kV?$|HWG8WSgNS{{=cMyMj zX4|F*AAEVsq9R^IRKWxAZC|W%56J7%SPwVlLV;^h|2x!|&U^%7+p9Jn04Z3gwjaPk zFIGvv!Zr(Q>#s7@Wg)~0(6+~%f|=a{6Yv6d@O-SI+08(Au%G$3b6^^r_+iuWTDJA5+-5~C)d}^?ajfeR_4#p`g~##Z0K^fM@t16pdgOLvCUfFuhXjn7*n_j7 z^gHb@5XfVy_%C4Y5%uI>xL9{Yz44bU1euRIA@j12-L}bfHi&SZj&SCq8TT@@)67|_ zQ|jy!GGELuUbNmmNo_m<8_}1=i;mkpa=t9yghRO|5fW$E2mIccY%mpXp45(U) zZ&KqdyR~@k=0)e)C-b4~W_+x-`-mHE(JkF@ORbhnR<)K&=jxWMkJNn2?uN&kmVMd8 zy(a)C?O7w8hlQh)AA>+RhR!?3SguJu*WF)xExZm{Sa)scrEcmvC@zjXk68SPdO+B7 z-Bk(%Pn6|J`&Y}_RThe{BV_urqvRJL#~MFq;U}iRoWDc$ind3kZ~go7r=#s;M4Ede z+MbY5MN{EOqCSYXlNxrEtMAjfy81Mzly^=Gu*zK++dU(}B=_MJ(3yTM~9 z61y!{Z?bu@_5p0=tK;lUJeJ1UqwzQtXZLFE+t_4ZnxRr~i-DCqyjw=c+mq|=@B4Ur zO5G*16YOi6Rht@V9^s01i$TY^4HFaXt2_KlB|_JLf>&zECMwj6iFQ-#EA?5Tea+u- zxJmWwbB6pQhwFX9y6J!6a!Em;^oHBjDM7mjzHf4M&>lh>zd48-Kg$oPJwdyTRjwK) z*{4`O-z&ueNi2EZ}eVJl6ROd9XSEkRNId1B#izm#SJ?(;V7hN=S!mL^2E}M4w z)Y*ZTRQqJRW3#=1V4z+g5IBlw0-m#Gj=yNatl6_B%(#5Q)bSJ4kp_0ttU(u!A2IQ= z3DYj0ec`m(m(Iq|S+mDoHvNLBWn0<0q?|lI_76c>hexw09w%5l9ci)5cT1 zn`~dB2Bg>*s;5%yGqM7oA+ACu3NFWAI{v)$IbK?2rrKx6o+pEWWMp-h>c&)iaQj!0 zW_ug(jKuRfJfrY@9M5<>7vdR>=iPWpJnvA)Q|%@N_~M$o-Bw^^BdV| zYG`9SN=<2O_g3#VvO6%D7H+=1I?>3Ej_PyixT#YoOflX3oM8`FXd^@Y-q_CbwTstN z)tGd9fGORaVb@cW($O{BP$`YcDli$WKUn>C?J zr*5G_by`!qSK*2fyCR)|(!N4guZgxIhQ<=moeRVd5;DCMGHFp!5NUuhX|7z#9Q zqMFeSYur5BZfjknhG*MZi7Ou_&a_3PJXBIQWZPYm3hD;~kl6x-_+!fjYI8QAuu$#I zwr>Y7y|TG|fmNWkHMf7u?1yrWj+?GO{(9k$|8YUG@K>Prwy?YRUzr>Xv_`V#8g4^A z>B|pz{@ofLK^fQZhh)8mF^yA9I!`TaX%`huL2@LDKg9dZ@buE#YNWqFn(*<;zphcf zt48@xHOlwZDF4lr7lj)>qG6(*6M^)+kS^Q9c!uX@}c63|JBO zZoJCOv73jXA<@}MzS%O}+?TeI?pY(9>q}>%oIv-W)f#DkIn$}W@_bWX1r288_$uTf zO+xN9*b!-e2M*GSzVg0Ex2ln@?@JFrIk$(`-YBFS1o~8ET#O9=h_6K258fM*_7C7T zq`8r&s9SRF@wt7|f`Jjf_8&m8e|)RF=2ZRGcCQ3)7>n^rtSWD54^wMe+i6x%y@6sp zBHP&QBDOXP27;3Z zeEZaJb_T#>vUA(n1FRuxMmxJ59?RR=MIt+-vI^{;nLR?mKo`6_$fd%wCSEdi-0aI| zf`U(*dD*zx*Qy%|>J2fIzom8eC6zEIuW0TWxTp6*~b zg#O?yrgo_xJJ=b*&Q_5f?emi^$~J6#GM*GHW~j?M+9$=VLXseTUOm?lCgDmXNzV4* z$u4Dc^K6JGg@C5bRqsyrVC!aeM<=_LvkKWEWDl4yb;8Vv<3pO!BVCDnqH6DPv&UcR z=I%xwS|kbFMPB+k{LW%pJ$bU-ETR(C5{b>HsQ7Mn%aq+npO51A z@D~H$v90JJlY|F{$ORv(Dc$U=0LJgT+1-m)w>D(?UQ{Iy^3u=acgGs(kS|?^-`#4Y zIUn!+!}!gm_0q@io6O3e#-bL5GmfK>Naj^wnuzPA8vs-DYorMhuRIy${&ZZ8`b_)F z6OgXQz2-F#U!y`jFRgm_KiQmbMx&K&4V(Ag@(Ao|^-K@DUD8gs_#mF_?YR22 zhutwZEiV{ogQT~EF1!lj57I-BPYkN6e%dMaUDjh|U*Zv!H>4fJAN*~}4+iGrZwUV4 z`MVSTI^wSb{@UZO0DtPfes(+O>&^y++oJjX_)YxVi6%|#w9jd@ zy{i$lUdNMLeHEVU{PD7%2inpSiQUw1gX|6|qfR!Poz%hmJw$aIY@Zr4y_?x@3)G#1 z?LJBC+++u|l8L`{>YKs#FwwcY>UgSsh|e}d?A}S!djtbKy96P~QMAK?4FN4%t)3cU z_sQLkQWCnK@#N0If$EY8A;@*1iBm6{aAhcTiXj0%tMs9uIfY23qS{&Nw4ped%~m(! z5wi-pr0TD#jYI8QBOg7EebrG7Kg~{8V^6bfHTg6Urd{f$)9n1DAA1@?a1c+nG)ldC zn%$;R^InD$b->d`b{9Meh*2tXnB6_od+SnUw?y`xcv3K3j3?>YD0Sg5pjicy+-=;k mT$zfphlklk5t(Q93uW}JA>RI)idS1Pt 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
  • sigEriLA=E` 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 R&IMmOE0&1}I;#L3|34gin^FJ( delta 36060 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 XJAWab35idFHy#tKL Date: Wed, 28 Apr 2021 15:08:54 +0200 Subject: [PATCH 43/56] Monitor WasmVM cache metrics (#503) * Start collect WasmVM cache metrics * Review comments * Integrate wasmvm metrics * Bring all together --- cmd/wasmd/root.go | 10 +++- contrib/prometheus/README.md | 8 ++- go.mod | 2 + go.sum | 16 ++++-- x/wasm/keeper/metrics.go | 72 ++++++++++++++++++++++++ x/wasm/keeper/options.go | 7 +++ x/wasm/keeper/wasmtesting/mock_engine.go | 10 +++- x/wasm/types/wasmer_engine.go | 5 +- 8 files changed, 121 insertions(+), 9 deletions(-) create mode 100644 x/wasm/keeper/metrics.go diff --git a/cmd/wasmd/root.go b/cmd/wasmd/root.go index f8bca81e77..c2f5700a08 100644 --- a/cmd/wasmd/root.go +++ b/cmd/wasmd/root.go @@ -2,6 +2,8 @@ package main import ( "errors" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + "github.com/prometheus/client_golang/prometheus" "io" "os" "path/filepath" @@ -199,13 +201,17 @@ func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts serverty if err != nil { panic(err) } - var emptyWasmOpts []wasm.Option + var wasmOpts []wasm.Option + if cast.ToBool(appOpts.Get("telemetry.enabled")) { + wasmOpts = append(wasmOpts, wasmkeeper.WithVMCacheMetrics(prometheus.DefaultRegisterer)) + } + return app.NewWasmApp(logger, db, traceStore, true, skipUpgradeHeights, cast.ToString(appOpts.Get(flags.FlagHome)), cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), app.GetEnabledProposals(), appOpts, - emptyWasmOpts, + wasmOpts, baseapp.SetPruning(pruningOpts), baseapp.SetMinGasPrices(cast.ToString(appOpts.Get(server.FlagMinGasPrices))), baseapp.SetHaltHeight(cast.ToUint64(appOpts.Get(server.FlagHaltHeight))), diff --git a/contrib/prometheus/README.md b/contrib/prometheus/README.md index 7c8d36ea3a..398973c617 100644 --- a/contrib/prometheus/README.md +++ b/contrib/prometheus/README.md @@ -18,7 +18,6 @@ prometheus-retention-time = 15 `retention-time` must be >0 (see prometheus scrape config) - * Edit `$HOME/config/config.toml` ```toml [instrumentation] @@ -28,6 +27,13 @@ prometheus-retention-time = 15 # Check out the documentation for the list of available metrics. prometheus = true ``` + +Test manually at: +`http://localhost:1317/metrics?format=prometheus` + +Note the `format` parameter in the request for the endpoint: + + # Local testing ## Run Prometheus ```sh diff --git a/go.mod b/go.mod index 30182d1261..d3d221cdaa 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,8 @@ require ( github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 + github.com/prometheus/client_golang v1.10.0 + github.com/prometheus/common v0.21.0 // indirect github.com/rakyll/statik v0.1.7 github.com/regen-network/cosmos-proto v0.3.1 github.com/rs/zerolog v1.21.0 diff --git a/go.sum b/go.sum index 175015787a..cc213ff392 100644 --- a/go.sum +++ b/go.sum @@ -220,6 +220,7 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= @@ -445,8 +446,9 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.8.0 h1:zvJNkoCFAnYFNC24FV8nW4JdRJ3GIFcLbg65lL/JDcw= github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= +github.com/prometheus/client_golang v1.10.0 h1:/o0BDeWzLWXNZ+4q5gXltUvaMpJqckTa+jTNoB+z4cg= +github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -462,16 +464,19 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.15.0 h1:4fgOnadei3EZvgRwxJ7RMpG1k1pOZth5Pc13tyspaKM= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.21.0 h1:SMvI2JVldvfUvRVlP64jkIJEC6WiGHJcN2e5tB+ztF8= +github.com/prometheus/common v0.21.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= @@ -693,6 +698,7 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -733,8 +739,10 @@ golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210309074719-68d13333faf2 h1:46ULzRKLh1CwgRq2dC5SlBzEqqNCi8rreOZnNrbqcIY= +golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= diff --git a/x/wasm/keeper/metrics.go b/x/wasm/keeper/metrics.go new file mode 100644 index 0000000000..d271335e49 --- /dev/null +++ b/x/wasm/keeper/metrics.go @@ -0,0 +1,72 @@ +package keeper + +import ( + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + "github.com/prometheus/client_golang/prometheus" +) + +const ( + labelPinned = "pinned" + labelMemory = "memory" + labelFs = "fs" +) + +// metricSource source of wasmvm metrics +type metricSource interface { + GetMetrics() (*wasmvmtypes.Metrics, error) +} + +var _ prometheus.Collector = (*WasmVMMetricsCollector)(nil) + +// WasmVMMetricsCollector custom metrics collector to be used with Prometheus +type WasmVMMetricsCollector struct { + source metricSource + CacheHitsDescr *prometheus.Desc + CacheMissesDescr *prometheus.Desc + CacheElementsDescr *prometheus.Desc + CacheSizeDescr *prometheus.Desc +} + +//NewWasmVMMetricsCollector constructor +func NewWasmVMMetricsCollector(s metricSource) *WasmVMMetricsCollector { + return &WasmVMMetricsCollector{ + source: s, + CacheHitsDescr: prometheus.NewDesc("wasmvm_cache_hits_total", "Total number of cache hits", []string{"type"}, nil), + CacheMissesDescr: prometheus.NewDesc("wasmvm_cache_misses_total", "Total number of cache misses", nil, nil), + CacheElementsDescr: prometheus.NewDesc("wasmvm_cache_elements_total", "Total number of elements in the cache", []string{"type"}, nil), + CacheSizeDescr: prometheus.NewDesc("wasmvm_cache_size_bytes", "Total number of elements in the cache", []string{"type"}, nil), + } +} + +// Register registers all metrics +func (p *WasmVMMetricsCollector) Register(r prometheus.Registerer) { + r.MustRegister(p) +} + +// Describe sends the super-set of all possible descriptors of metrics +func (p *WasmVMMetricsCollector) Describe(descs chan<- *prometheus.Desc) { + descs <- p.CacheHitsDescr + descs <- p.CacheMissesDescr + descs <- p.CacheElementsDescr + descs <- p.CacheSizeDescr +} + +// Collect is called by the Prometheus registry when collecting metrics. +func (p *WasmVMMetricsCollector) Collect(c chan<- prometheus.Metric) { + m, err := p.source.GetMetrics() + if err != nil { + return + } + c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsPinnedMemoryCache), labelPinned) + c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsMemoryCache), labelMemory) + c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsFsCache), labelFs) + c <- prometheus.MustNewConstMetric(p.CacheMissesDescr, prometheus.CounterValue, float64(m.Misses)) + c <- prometheus.MustNewConstMetric(p.CacheElementsDescr, prometheus.GaugeValue, float64(m.ElementsPinnedMemoryCache), labelPinned) + c <- prometheus.MustNewConstMetric(p.CacheElementsDescr, prometheus.GaugeValue, float64(m.ElementsMemoryCache), labelMemory) + c <- prometheus.MustNewConstMetric(p.CacheSizeDescr, prometheus.GaugeValue, float64(m.SizeMemoryCache), labelMemory) + c <- prometheus.MustNewConstMetric(p.CacheSizeDescr, prometheus.GaugeValue, float64(m.SizePinnedMemoryCache), labelPinned) + // Node about fs metrics: + // The number of elements and the size of elements in the file system cache cannot easily be obtained. + // We had to either scan the whole directory of potentially thousands of files or track the values when files are added or removed. + // Such a tracking would need to be on disk such that the values are not cleared when the node is restarted. +} diff --git a/x/wasm/keeper/options.go b/x/wasm/keeper/options.go index 8d9872d891..85aa835f71 100644 --- a/x/wasm/keeper/options.go +++ b/x/wasm/keeper/options.go @@ -3,6 +3,7 @@ package keeper import ( "fmt" "github.com/CosmWasm/wasmd/x/wasm/types" + "github.com/prometheus/client_golang/prometheus" ) type optsFn func(*Keeper) @@ -74,3 +75,9 @@ func WithCoinTransferrer(x CoinTransferrer) Option { k.bank = x }) } + +func WithVMCacheMetrics(r prometheus.Registerer) Option { + return optsFn(func(k *Keeper) { + NewWasmVMMetricsCollector(k.wasmVM).Register(r) + }) +} diff --git a/x/wasm/keeper/wasmtesting/mock_engine.go b/x/wasm/keeper/wasmtesting/mock_engine.go index 0e8fbb0c4c..dc8a4c8ca1 100644 --- a/x/wasm/keeper/wasmtesting/mock_engine.go +++ b/x/wasm/keeper/wasmtesting/mock_engine.go @@ -33,6 +33,7 @@ type MockWasmer struct { IBCPacketTimeoutFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, packet wasmvmtypes.IBCPacket, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64) (*wasmvmtypes.IBCBasicResponse, uint64, error) PinFn func(checksum wasmvm.Checksum) error UnpinFn func(checksum wasmvm.Checksum) error + GetMetricsFn func() (*wasmvmtypes.Metrics, error) } func (m *MockWasmer) IBCChannelOpen(codeID wasmvm.Checksum, env wasmvmtypes.Env, channel wasmvmtypes.IBCChannel, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64) (uint64, error) { @@ -162,9 +163,16 @@ func (m *MockWasmer) Unpin(checksum wasmvm.Checksum) error { return m.UnpinFn(checksum) } +func (m *MockWasmer) GetMetrics() (*wasmvmtypes.Metrics, error) { + if m.GetMetricsFn == nil { + panic("not expected to be called") + } + return m.GetMetricsFn() +} + var AlwaysPanicMockWasmer = &MockWasmer{} -// selfCallingInstMockWasmer prepares a Wasmer mock that calls itself on instantiation. +// SelfCallingInstMockWasmer prepares a Wasmer mock that calls itself on instantiation. func SelfCallingInstMockWasmer(executeCalled *bool) *MockWasmer { return &MockWasmer{ diff --git a/x/wasm/types/wasmer_engine.go b/x/wasm/types/wasmer_engine.go index 501d68714f..7a7d08f72e 100644 --- a/x/wasm/types/wasmer_engine.go +++ b/x/wasm/types/wasmer_engine.go @@ -18,7 +18,7 @@ type WasmerEngine interface { // be instantiated with custom inputs in the future. Create(code wasmvm.WasmCode) (wasmvm.Checksum, error) - // This will statically analyze the code. + // AnalyzeCode will statically analyze the code. // Currently just reports if it exposes all IBC entry points. AnalyzeCode(checksum wasmvm.Checksum) (*wasmvmtypes.AnalysisReport, error) @@ -220,4 +220,7 @@ type WasmerEngine interface { // the implementor's choice. // Unpin is idempotent. Unpin(checksum wasmvm.Checksum) error + + // GetMetrics some internal metrics for monitoring purposes. + GetMetrics() (*wasmvmtypes.Metrics, error) } From 92641762acc9c5939ee434965dbea546c3d43d07 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Wed, 28 Apr 2021 18:47:38 +0200 Subject: [PATCH 44/56] Fix *.a sha hash --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index a4ccafce39..70c29d96f4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,7 @@ COPY . /code/ # See https://github.com/CosmWasm/wasmvm/releases ADD https://github.com/CosmWasm/wasmvm/releases/download/v0.14.0-beta5/libwasmvm_muslc.a /lib/libwasmvm_muslc.a -RUN sha256sum /lib/libwasmvm_muslc.a | grep adea8f977601daa8daa9885e02b31ca6dd0ab6d4dbbd8ba2ccfa447ffebda37c +RUN sha256sum /lib/libwasmvm_muslc.a | grep 0a90493799f19f95d39910d4ac5b6d9fc70d482dabec1f3ffb7c81428c125d4c # force it to use static lib (from above) not standard libgo_cosmwasm.so file RUN LEDGER_ENABLED=false BUILD_TAGS=muslc make build From 3d4b3d184f896549028f8ce015cebecb467c10b4 Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Fri, 30 Apr 2021 08:26:41 +0200 Subject: [PATCH 45/56] Upgrade to wasmvm v0.14.0-rc1 (#508) * Upgrade to wasmvm v0.14.0-rc1 * Update contracts from cosmwasm#910, re-enable test * Fix parsing in query type Co-authored-by: Ethan Frey --- Dockerfile | 4 +-- go.mod | 2 +- go.sum | 5 ++- x/wasm/ibc.go | 25 ++++---------- x/wasm/ibc_reflect_test.go | 9 ++++- x/wasm/ibc_test.go | 10 +++--- x/wasm/keeper/handler_plugin.go | 5 ++- x/wasm/keeper/handler_plugin_encoders.go | 25 ++++---------- x/wasm/keeper/handler_plugin_encoders_test.go | 18 ++++------ x/wasm/keeper/handler_plugin_test.go | 12 ++----- x/wasm/keeper/keeper_test.go | 4 +-- x/wasm/keeper/recurse_test.go | 10 +++--- x/wasm/keeper/testdata/burner.wasm | Bin 145925 -> 146222 bytes x/wasm/keeper/testdata/hackatom.wasm | Bin 200760 -> 200997 bytes x/wasm/keeper/testdata/hackatom.wasm.gzip | Bin 65153 -> 65171 bytes x/wasm/keeper/testdata/ibc_reflect.wasm | Bin 282139 -> 290806 bytes x/wasm/keeper/testdata/ibc_reflect_send.wasm | Bin 293679 -> 293145 bytes x/wasm/keeper/testdata/reflect.wasm | Bin 302407 -> 298196 bytes x/wasm/keeper/testdata/staking.wasm | Bin 260102 -> 261956 bytes x/wasm/relay_pingpong_test.go | 20 +++++------ x/wasm/relay_test.go | 21 ++++++------ x/wasm/types/types.go | 14 ++++---- x/wasm/types/types_test.go | 31 ++++++++++++++++++ 23 files changed, 104 insertions(+), 111 deletions(-) diff --git a/Dockerfile b/Dockerfile index 70c29d96f4..157ddcf43a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,8 +15,8 @@ WORKDIR /code COPY . /code/ # See https://github.com/CosmWasm/wasmvm/releases -ADD https://github.com/CosmWasm/wasmvm/releases/download/v0.14.0-beta5/libwasmvm_muslc.a /lib/libwasmvm_muslc.a -RUN sha256sum /lib/libwasmvm_muslc.a | grep 0a90493799f19f95d39910d4ac5b6d9fc70d482dabec1f3ffb7c81428c125d4c +ADD https://github.com/CosmWasm/wasmvm/releases/download/v0.14.0-rc1/libwasmvm_muslc.a /lib/libwasmvm_muslc.a +RUN sha256sum /lib/libwasmvm_muslc.a | grep 46b77410f55b3d70ce77088aa70f8c54c574c19471437d28409cb584c0062c4e # force it to use static lib (from above) not standard libgo_cosmwasm.so file RUN LEDGER_ENABLED=false BUILD_TAGS=muslc make build diff --git a/go.mod b/go.mod index d3d221cdaa..7714ad9555 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/CosmWasm/wasmd go 1.15 require ( - github.com/CosmWasm/wasmvm v0.14.0-beta5 + github.com/CosmWasm/wasmvm v0.14.0-rc1 github.com/cosmos/cosmos-sdk v0.42.4 github.com/cosmos/iavl v0.15.3 github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b diff --git a/go.sum b/go.sum index cc213ff392..794637cfd9 100644 --- a/go.sum +++ b/go.sum @@ -17,8 +17,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CosmWasm/wasmvm v0.14.0-beta5 h1:lYe8tQr/m/utoAPyfp4vbka59CT7GH25QDUA0sZ4xN8= -github.com/CosmWasm/wasmvm v0.14.0-beta5/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= +github.com/CosmWasm/wasmvm v0.14.0-rc1 h1:otpTbV93S2J5Fk67LB8On8MV/nFS1m2H4ULn9tGihCg= +github.com/CosmWasm/wasmvm v0.14.0-rc1/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= @@ -573,7 +573,6 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4= github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg= github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ= -github.com/tendermint/tendermint v0.34.9 h1:9P2MXDEPOcPW0NBcHQ/HDSfvczZm+q5nUUw7AZ6f1Vc= github.com/tendermint/tendermint v0.34.9/go.mod h1:kl4Z1JwGx1I+u1SXIzMDy7Z3T8LiMeCAOnzNn6AIMT4= github.com/tendermint/tendermint v0.34.10 h1:wBOc/It8sh/pVH9np2V5fBvRmIyFN/bUrGPx+eAHexs= github.com/tendermint/tendermint v0.34.10/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= diff --git a/x/wasm/ibc.go b/x/wasm/ibc.go index f7d162a6a7..e935598795 100644 --- a/x/wasm/ibc.go +++ b/x/wasm/ibc.go @@ -244,25 +244,14 @@ func (i IBCHandler) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Packet) } func newIBCPacket(packet channeltypes.Packet) wasmvmtypes.IBCPacket { - var timeout wasmvmtypes.IBCTimeout - // detect set/unset - if packet.TimeoutHeight.RevisionHeight != 0 { - if packet.TimeoutTimestamp != 0 { - timeout.Both = &wasmvmtypes.IBCTimeoutBoth{ - Block: wasmvmtypes.IBCTimeoutBlock{ - Height: packet.TimeoutHeight.RevisionHeight, - Revision: packet.TimeoutHeight.RevisionNumber, - }, - Timestamp: packet.TimeoutTimestamp, - } - } else { - timeout.Block = &wasmvmtypes.IBCTimeoutBlock{ - Height: packet.TimeoutHeight.RevisionHeight, - Revision: packet.TimeoutHeight.RevisionNumber, - } + timeout := wasmvmtypes.IBCTimeout{ + Timestamp: packet.TimeoutTimestamp, + } + if !packet.TimeoutHeight.IsZero() { + timeout.Block = &wasmvmtypes.IBCTimeoutBlock{ + Height: packet.TimeoutHeight.RevisionHeight, + Revision: packet.TimeoutHeight.RevisionNumber, } - } else { - timeout.Timestamp = &packet.TimeoutTimestamp } return wasmvmtypes.IBCPacket{ diff --git a/x/wasm/ibc_reflect_test.go b/x/wasm/ibc_reflect_test.go index 8abe168cb1..fb5e04ec84 100644 --- a/x/wasm/ibc_reflect_test.go +++ b/x/wasm/ibc_reflect_test.go @@ -12,6 +12,13 @@ import ( ) func TestIBCReflectContract(t *testing.T) { + // scenario: + // chain A: ibc_reflect_send.wasm + // chain B: reflect.wasm + ibc_reflect.wasm + // + // Chain A "ibc_reflect_send" sends a IBC packet "on channel connect" event to chain B "ibc_reflect" + // "ibc_reflect" sends a submessage to "reflect" which is returned as submessage. + var ( coordinator = ibctesting.NewCoordinator(t, 2, nil, nil) chainA = coordinator.GetChain(ibctesting.GetChainID(0)) @@ -96,7 +103,7 @@ type AccountQuery struct { } type AccountResponse struct { - LastUpdateTime uint64 `json:"last_update_time"` + LastUpdateTime uint64 `json:"last_update_time,string"` RemoteAddr string `json:"remote_addr"` RemoteBalance wasmvmtypes.Coins `json:"remote_balance"` } diff --git a/x/wasm/ibc_test.go b/x/wasm/ibc_test.go index 1510f740e1..25106d42ee 100644 --- a/x/wasm/ibc_test.go +++ b/x/wasm/ibc_test.go @@ -14,7 +14,7 @@ func TestMapToWasmVMIBCPacket(t *testing.T) { src channeltypes.Packet exp wasmvmtypes.IBCPacket }{ - "with hight timeout": { + "with height timeout": { src: IBCPacketFixture(), exp: wasmvmtypes.IBCPacket{ Data: []byte("myData"), @@ -34,7 +34,7 @@ func TestMapToWasmVMIBCPacket(t *testing.T) { Src: wasmvmtypes.IBCEndpoint{PortID: "srcPort", ChannelID: "channel-1"}, Dest: wasmvmtypes.IBCEndpoint{PortID: "destPort", ChannelID: "channel-2"}, Sequence: 1, - Timeout: wasmvmtypes.IBCTimeout{Timestamp: &myTimestamp}, + Timeout: wasmvmtypes.IBCTimeout{Timestamp: myTimestamp}, }, }, "with time and height timeout": { src: IBCPacketFixture(func(p *channeltypes.Packet) { @@ -45,10 +45,10 @@ func TestMapToWasmVMIBCPacket(t *testing.T) { Src: wasmvmtypes.IBCEndpoint{PortID: "srcPort", ChannelID: "channel-1"}, Dest: wasmvmtypes.IBCEndpoint{PortID: "destPort", ChannelID: "channel-2"}, Sequence: 1, - Timeout: wasmvmtypes.IBCTimeout{Both: &wasmvmtypes.IBCTimeoutBoth{ - Block: wasmvmtypes.IBCTimeoutBlock{Height: 1, Revision: 2}, + Timeout: wasmvmtypes.IBCTimeout{ + Block: &wasmvmtypes.IBCTimeoutBlock{Height: 1, Revision: 2}, Timestamp: myTimestamp, - }}, + }, }, }, } diff --git a/x/wasm/keeper/handler_plugin.go b/x/wasm/keeper/handler_plugin.go index d39b51a492..5de2256ef3 100644 --- a/x/wasm/keeper/handler_plugin.go +++ b/x/wasm/keeper/handler_plugin.go @@ -165,7 +165,6 @@ func (h IBCRawPacketHandler) DispatchMsg(ctx sdk.Context, _ sdk.AccAddress, cont if !ok { return nil, nil, sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability") } - timestamp, height := ConvertWasmIBCTimeout(msg.IBC.SendPacket.Timeout) packet := channeltypes.NewPacket( msg.IBC.SendPacket.Data, sequence, @@ -173,8 +172,8 @@ func (h IBCRawPacketHandler) DispatchMsg(ctx sdk.Context, _ sdk.AccAddress, cont contractIBCChannelID, channelInfo.Counterparty.PortId, channelInfo.Counterparty.ChannelId, - height, - timestamp, + convertWasmIBCTimeoutHeightToCosmosHeight(msg.IBC.SendPacket.Timeout.Block), + msg.IBC.SendPacket.Timeout.Timestamp, ) return nil, nil, h.channelKeeper.SendPacket(ctx, channelCap, packet) } diff --git a/x/wasm/keeper/handler_plugin_encoders.go b/x/wasm/keeper/handler_plugin_encoders.go index 9e6bb28ed1..5cba58ebf3 100644 --- a/x/wasm/keeper/handler_plugin_encoders.go +++ b/x/wasm/keeper/handler_plugin_encoders.go @@ -265,15 +265,14 @@ func EncodeIBCMsg(portSource types.ICS20TransferPortSource) func(ctx sdk.Context if err != nil { return nil, sdkerrors.Wrap(err, "amount") } - timestamp, height := ConvertWasmIBCTimeout(msg.Transfer.Timeout) msg := &ibctransfertypes.MsgTransfer{ SourcePort: portSource.GetPort(ctx), SourceChannel: msg.Transfer.ChannelID, Token: amount, Sender: sender.String(), Receiver: msg.Transfer.ToAddress, - TimeoutHeight: height, - TimeoutTimestamp: timestamp, + TimeoutHeight: convertWasmIBCTimeoutHeightToCosmosHeight(msg.Transfer.Timeout.Block), + TimeoutTimestamp: msg.Transfer.Timeout.Timestamp, } return []sdk.Msg{msg}, nil default: @@ -281,23 +280,11 @@ func EncodeIBCMsg(portSource types.ICS20TransferPortSource) func(ctx sdk.Context } } } - -// ConvertWasmIBCTimeout converts the wasmvm ibc timeout type to cosmos-sdk height and relative block timeout -func ConvertWasmIBCTimeout(ibcTimeout wasmvmtypes.IBCTimeout) (uint64, ibcclienttypes.Height) { - var timestamp uint64 - var height ibcclienttypes.Height - - switch { - case ibcTimeout.Timestamp != nil: - timestamp = *ibcTimeout.Timestamp - case ibcTimeout.Block != nil: - height = ibcclienttypes.NewHeight(ibcTimeout.Block.Revision, ibcTimeout.Block.Height) - case ibcTimeout.Both != nil: - timestamp = ibcTimeout.Both.Timestamp - height = ibcclienttypes.NewHeight(ibcTimeout.Both.Block.Revision, ibcTimeout.Both.Block.Height) +func convertWasmIBCTimeoutHeightToCosmosHeight(ibcTimeoutBlock *wasmvmtypes.IBCTimeoutBlock) ibcclienttypes.Height { + if ibcTimeoutBlock == nil { + return ibcclienttypes.NewHeight(0, 0) } - - return timestamp, height + return ibcclienttypes.NewHeight(ibcTimeoutBlock.Revision, ibcTimeoutBlock.Height) } func convertWasmCoinsToSdkCoins(coins []wasmvmtypes.Coin) (sdk.Coins, error) { diff --git a/x/wasm/keeper/handler_plugin_encoders_test.go b/x/wasm/keeper/handler_plugin_encoders_test.go index 5088141e92..28af7f6bf0 100644 --- a/x/wasm/keeper/handler_plugin_encoders_test.go +++ b/x/wasm/keeper/handler_plugin_encoders_test.go @@ -9,6 +9,7 @@ import ( clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" "github.com/golang/protobuf/proto" + "github.com/stretchr/testify/assert" "testing" "github.com/CosmWasm/wasmd/x/wasm/types" @@ -17,7 +18,6 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -32,7 +32,6 @@ func TestEncoding(t *testing.T) { valAddr[0] = 12 valAddr2 := make(sdk.ValAddress, sdk.AddrLen) valAddr2[1] = 123 - var timeoutVal uint64 = 100 jsonMsg := json.RawMessage(`{"foo": 123}`) @@ -427,7 +426,7 @@ func TestEncoding(t *testing.T) { Denom: "ALX", Amount: "1", }, - Timeout: wasmvmtypes.IBCTimeout{Timestamp: &timeoutVal}, + Timeout: wasmvmtypes.IBCTimeout{Timestamp: 100}, }, }, }, @@ -447,7 +446,8 @@ func TestEncoding(t *testing.T) { TimeoutTimestamp: 100, }, }, - }, "IBC transfer with time and height timeout": { + }, + "IBC transfer with time and height timeout": { sender: addr1, srcContractIBCPort: "myIBCPort", srcMsg: wasmvmtypes.CosmosMsg{ @@ -459,13 +459,7 @@ func TestEncoding(t *testing.T) { Denom: "ALX", Amount: "1", }, - Timeout: wasmvmtypes.IBCTimeout{Both: &wasmvmtypes.IBCTimeoutBoth{ - Block: wasmvmtypes.IBCTimeoutBlock{ - Height: 1, - Revision: 2, - }, - Timestamp: timeoutVal, - }}, + Timeout: wasmvmtypes.IBCTimeout{Timestamp: 100, Block: &wasmvmtypes.IBCTimeoutBlock{Height: 1, Revision: 2}}, }, }, }, @@ -483,7 +477,7 @@ func TestEncoding(t *testing.T) { Sender: addr1.String(), Receiver: addr2.String(), TimeoutTimestamp: 100, - TimeoutHeight: clienttypes.Height{RevisionNumber: 2, RevisionHeight: 1}, + TimeoutHeight: clienttypes.NewHeight(2, 1), }, }, }, diff --git a/x/wasm/keeper/handler_plugin_test.go b/x/wasm/keeper/handler_plugin_test.go index 6d0dcd04a7..7bc6f48dad 100644 --- a/x/wasm/keeper/handler_plugin_test.go +++ b/x/wasm/keeper/handler_plugin_test.go @@ -251,9 +251,7 @@ func TestIBCRawPacketHandler(t *testing.T) { srcMsg: wasmvmtypes.SendPacketMsg{ ChannelID: "channel-1", Data: []byte("myData"), - Timeout: wasmvmtypes.IBCTimeout{ - Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, - }, + Timeout: wasmvmtypes.IBCTimeout{Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}}, }, chanKeeper: chanKeeper, capKeeper: capKeeper, @@ -271,9 +269,7 @@ func TestIBCRawPacketHandler(t *testing.T) { srcMsg: wasmvmtypes.SendPacketMsg{ ChannelID: "channel-1", Data: []byte("myData"), - Timeout: wasmvmtypes.IBCTimeout{ - Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, - }, + Timeout: wasmvmtypes.IBCTimeout{Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}}, }, chanKeeper: &wasmtesting.MockChannelKeeper{ GetNextSequenceSendFn: func(ctx sdk.Context, portID, channelID string) (uint64, bool) { @@ -285,9 +281,7 @@ func TestIBCRawPacketHandler(t *testing.T) { srcMsg: wasmvmtypes.SendPacketMsg{ ChannelID: "channel-1", Data: []byte("myData"), - Timeout: wasmvmtypes.IBCTimeout{ - Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, - }, + Timeout: wasmvmtypes.IBCTimeout{Block: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}}, }, chanKeeper: chanKeeper, capKeeper: wasmtesting.MockCapabilityKeeper{ diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 616b412d9f..be8c61da11 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -283,7 +283,7 @@ func TestInstantiate(t *testing.T) { gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x1229f), gasAfter-gasBefore) + require.Equal(t, uint64(0x122a0), gasAfter-gasBefore) } // ensure it is stored properly @@ -516,7 +516,7 @@ func TestExecute(t *testing.T) { // make sure gas is properly deducted from ctx gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x12916), gasAfter-gasBefore) + require.Equal(t, uint64(0x12917), gasAfter-gasBefore) } // ensure bob now exists and got both payments released bobAcct = accKeeper.GetAccount(ctx, bob) diff --git a/x/wasm/keeper/recurse_test.go b/x/wasm/keeper/recurse_test.go index 2b65d3c2da..58434407b2 100644 --- a/x/wasm/keeper/recurse_test.go +++ b/x/wasm/keeper/recurse_test.go @@ -59,10 +59,10 @@ func TestGasCostOnQuery(t *testing.T) { const ( GasNoWork uint64 = 44_072 // Note: about 100 SDK gas (10k wasmer gas) for each round of sha256 - GasWork50 uint64 = 49_763 // this is a little shy of 50k gas - to keep an eye on the limit + GasWork50 uint64 = 49_764 // this is a little shy of 50k gas - to keep an eye on the limit GasReturnUnhashed uint64 = 283 - GasReturnHashed uint64 = 258 + GasReturnHashed uint64 = 257 ) cases := map[string]struct { @@ -80,14 +80,14 @@ func TestGasCostOnQuery(t *testing.T) { msg: Recurse{ Work: 50, // 50 rounds of sha256 inside the contract }, - expectedGas: GasWork50 + 1, + expectedGas: GasWork50, }, "recursion 1, no work": { gasLimit: 400_000, msg: Recurse{ Depth: 1, }, - expectedGas: 2*GasNoWork + GasReturnUnhashed - 2, + expectedGas: 2*GasNoWork + GasReturnUnhashed, }, "recursion 1, some work": { gasLimit: 400_000, @@ -221,7 +221,7 @@ func TestLimitRecursiveQueryGas(t *testing.T) { const ( // Note: about 100 SDK gas (10k wasmer gas) for each round of sha256 - GasWork2k uint64 = 273_566 // = InstanceCost + x // we have 6x gas used in cpu than in the instance + GasWork2k uint64 = 273_567 // = InstanceCost + x // we have 6x gas used in cpu than in the instance // This is overhead for calling into a sub-contract GasReturnHashed uint64 = 262 ) diff --git a/x/wasm/keeper/testdata/burner.wasm b/x/wasm/keeper/testdata/burner.wasm index 6413e515535c73de6234d97f132895c073d9c0d7..16ed88b7135d6d666ff70ea441e9567b8bd9e99a 100644 GIT binary patch delta 24975 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 delta 25202 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 delta 37164 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

    l< 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 XBt4-ql$RwOzWMVHBh=YKI1mE>+@0iG diff --git a/x/wasm/keeper/testdata/ibc_reflect.wasm b/x/wasm/keeper/testdata/ibc_reflect.wasm index 82a11df2865ca81c239bedbfd36111c81b23ac9e..481783a9e5ed98d47e751ce7712e212f1a02f58e 100644 GIT binary patch literal 290806 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%0A_vX_{ouI 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 SM#Tz2($fIxALbyYMF4OKOONqKGqZT$i@g5 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 IlU%C0h0yd$@UuP^o1N~R&-g*~Ug}F)i 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�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≈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 diff --git a/x/wasm/keeper/testdata/ibc_reflect_send.wasm b/x/wasm/keeper/testdata/ibc_reflect_send.wasm index 2ce39a1cf042ba3a3ae295bbecc7cebaabc5aea6..4441f94db7587e99847313719b063253ec701b2f 100644 GIT binary patch literal 293145 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%0D3Td1~u0)@02R6 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�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
  • _W1RxHAaSsj+dNC}BJVN*c_|7^F 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 F{|}R++v)%S diff --git a/x/wasm/keeper/testdata/reflect.wasm b/x/wasm/keeper/testdata/reflect.wasm index aa6455c982333ad9f09d929604475ddf080192e8..8fa02741546890ee6b8999091db3d8cc2ac3a029 100644 GIT binary patch delta 103391 zcmd4431C#!**-q!&YsC66G9*f+npgm5F(rG2wXJcir~JWfQUj+HqmOUPEb@3t>{$` zuEo|?{M@j(;DW@hqGAhb6%`c(DpsxNXZv9l{XNfn?wy%HQ0v!z|G%`EnRCzj?&m%4 zdGGUoFMHwfR?BZt-TrRmZqB!Skbh5rSVdyus;yJNxAfkZao$Y=B}RUA2c%GopLTwn#l zbEeEX>w>_AiD@&=nLBC5+-Z~MP6=ETopSz^$>-wR#o^iKPMLE-ARC)>)>$(r^WoE~ z==3SMU(cwrIa6kzJ8jOCb0(mJIcKuUvno|sIKBO}8E2xfeA#hoR$i9uKIx2BNn={Yo*SG(OslQdL)SO-FS!>#J>Us4C^@3WXUQ{os zm(^PJiu$AalbUhX+5fNxysDi2+} z(|_8d>JfFfx=Srnzf+G{uDSs&u2)OcP3jtTtvd6Kv(&T=>P-}$`JDB!b>`G*->9$g z>zCHF`PL=YrPg<9p5{$PD%J#MYFrhTVg zu{Kz5Sv#$_t#_=A*8f;vSw(-ix9q>Iw_+-s?Hq7=yYsp=xHDQcxQ#u3zG6nJ2}*tK z+Lg225v|XOJY)qDsfXQUkBs|v>yplklpS$W4K_Y%EjuG0wW&|#vnDjsR;fj9qGEEG z&3@|m`G$^`3C!?IO(Ran1iu){?z~=nm z`-Hm(1F273r^h7q(293D-fxvX-`EtW4Fm=R0(Q^|H8?N2H>W>T54)v*$P|UxU#%5L zrQG{76V*fR%tQzExqEfuSZm28E4C)KHfwH~=5Lj}hvq9w&mOU9QBz=mbugwCbOtpH zuuiZ>;@fk924}I`#NpNi8dA?&T#bCkXjoq@|MUhd^y;UrwrY`kVQS)-?dZxGXsS8O z(AxRrs-{5dWq`*Huw7jsl-f=JIhz6vHG$HEjmf77z6Uy4;jFqC2-*~wo(a|jtdZ`j z>!p*+}BbfF`_Ep(nhaH74Bd5D|yJ7B)H~jo3v>Wa=-Z-FD z^hm6eeW$}5Ipjp$b-H&8-Gy74Mkqgx-tI}dUG2SjyoH=#gY!WCcf^S`WI}cbV_}fn z^yHs7NTvJpCDp|wfOOaz$$#2;U$yORbq~hUF*{sq#Xz}XpdD34V|6GAq(jA_gsmLa zkOA==l8o3&zgHG)pH&9W1nnM>2LcFrw)Y^vF3@0G-kMWMU|>Ulqoje1TI-l}h#zAe zC8H8?0hxy_nB>ILN~Tetj1(sl?6_;obG5v=hB()-tz0MB-aUC$QTE49(nrisoFvDu zPlk(&NNyviV-q*s(Jqa6(0k&68xFLfXk}*I!b1C|<*vMh+GRleJaqO^m zX@&KLzK2~rLB(Ek?2?5t`KkP3W($_#1U;4^0x+d{^K$AzQNCY>-$Hw2IEWb~3IdDD zX2^S(cpeH^y|w%5t^dsG8|>`Aef7?-zYGi|0T!&&0u@qofm1E&Z{Zr1YGntHp@f3S zYk}2*V|V9AOE5>B6YL%w>+>Sj4VWG*nfi!IC)ME2>sX=3ex{>k&P!r_kBMx z7=7`Rh+$8S@6&>;IOs3=|6b*D9`)dqxNr(Z;vS4f5l6`Eg(kvwEcM9`Fvt&61O@>; z?8W40W*z}z|DT#imXRtdHo&R`9~hD2&b_5W&*C69EVQo$T)SG5D&V(#qin(nB#dpxE>n1YbK3Kv7Yl8e`~R>00DEyLgmcKs)36kLaaK^BH0l zkO-9K#oorm#=a!6;*roQvn^}wE{ML0J=MvvA!^5p8)G#JKc0wpQ7LzG{0!?u$Fntk%|L$0Kf&bo^b!!t7Gb2a=-#bs4rFxscmj;@BLEmv9K{$xY0eUcct3q zUeU3NyR0O%XyI_H+pjh)YpP|B8?kUGWo|kg z+tc|m0Oj=kW+kK+^frILzh6zYp_x=AC2;vDbyRMIWp0Q5l|Aph467(IkK@L|&AroQuDJ{AELKz&baL zt8jY{9T!RwEqdHe*XRiq>}{c+_V2lhpfL8%Z{dYSx#VdB3)v~>g`nhoTRc- zBv**`m=hh%pH5-TbVKC_qLJOJNdKkvb{qo->^KHywY5NwyL?Es`_{-}>&;)fACA1z znt#1}{-`Nxll$JNwzbXtDxs0i-rOd7R_EZU*0P`4w9Y;B0J8q%1IDZO+@=F6$Oaa9 zL#6)WZaQGUcJdqcacERvRMDtF>RZc(*PwDNNZws~U_1BF18dY@+?fYXs(JxFQBNgU zHFV{u)Hay%>7f3+%IZ{6GQbKIgTNHUj~Hw!wN>9yu3Ec&>Zii|??wn}2J_#&hnoxOPyJMENbKf|$XT~_mYM~-Su>S{GgYa47dB{T8 z*r%R%A6+`!J?*gCek6hrwjOkE8P#lYk&xd$qS>ICd(165-jn9bElTs17Nz;1<9i!v zzARU`(LMk83|4!~@s}IET7pL@)U7+AD?o9~33Z_1OHP=ND$x@=n<~pgtg_V|aAHHn zmMg(D5ikvQuL;|Nbb)YpA3kw38t*!>3mSJmX>q4qElME>u*D(A;+7)lpf6{O`|3$u zs7Q*JUVsw%lss-LuQYY7|PVR9h9|I4gX=0}`iBu_=vEAja z+#~RO0^?PZnb(CHQY}2ktc%;qJl$_j?b6OBn3jezR(-OZU+)ZM68vgmoM96>lweh@ z*xRyjgY(29_sj_+F!Ws$x|_M86m#9`Zk%vZ?1@DNL+VzafGq^Oxs!`7hN#3+wufZI?JRO9oYnAmrH`01VS_f+|N z@#*it=sIc2IE;Pols@W@?t4>?$M*qe^veUV3;;a$jB_hqC5aaaiNki_!%Hb1X?@o7_27Uz%@AyHB>9M1ridXpl)Q<3mR%W z3s~t@t@K6^Cn{Zu9Aj*zHR?UrFw+<`aBuMU@af%Rs}^9@w7ZTxvx9r(^h$u&R_Tb~ zP^fOH;a`jBHJ8wpOFI!a@&dpgdKT1U-J1`-KO%Lv?# z^>z_$0dy!jIZ|)8G2Gn-vl}~mNFg%teckL1==*Q8@5kbAn{%19#pi|&C^+t%ek$!= zdCssrttC?*xUZgb5L#BvJraKnu`Zn3xr~T~B~oEVtH5Zh=5{EtjqLK-bNk$@(eHWZ zE)_Zu9;=7_08$br+vmI!F`N14oe!neCl+k$w*J{LWxL~k)&WD!{F#lvi+}bqP&xkm z6NW?bI2(fE#)R;p+j*n>;&(_NOGd7>)&?n?D5lqWkD=-@yD!dfRPVdzTrj2+JKALV z9npy1D!-t&rRJs!I;ur0zPq48S?jKG+x+4z%m2- zCyl!d^V~GlZwjl%6(nTZ4BHy%AcM_v5A>*#&eq!m4nNh)+ODc1{#vR9Yivsph9_n^H?nab6d|WO5zIWWdU2mwdip+`QQfqoftXjGd zK4w3(GHAx8K6l4wXBBNGG1DR~ac5))uPAMN%POOhRCpr$;fk*=`KwBh?%|6lZb)@; zKmTR9t1cTDdr+FEK3y^LGDlgTEBEHBN33|}@^`IPRPA0TA^PoCFIw^7Lbw=qta#(f z{`52yUsZ#n+&)(ghW46%)uPCD&Tf;t>7h1mtE&%HAG)VpeYM)|eth*8{_*jaUmmWu zujqZv0)=%xwzxC7^}WTX6$z}w)#Dy|?HlMieO-<9slt(Qdws^k!6EK#*Ik2BY#O{$ z_Xc-+lC6wP4cig7(`y}8+;#mQtum_5?t#F-KtS9S&f6<4*WEbn`i)p5P7`O!@Aqc5kN$Bc`}n^9y1DMY|A%VpW2NWa zt18^o3%1(F?ejvp>fzSEu)1fSBuPJ@1c>yW+!|TJ{48{qUjlN9rM_@`uQ^t&bT40X zj4F2ftm*3}Uo2_!ksOH%QRjQ8bNjs5E%q$iMc@#c_~KuHs?jf<5PL|YD1ol-dTIaI z)+P86l73rX_wr!%kvrt&?y=RZ0@t3qcujBjmX}+h`2LqaMEe`pW&rcY)?Nrg8SqMH zOJBF*VPO zuYY6EjUT8a!Xey=Zye&yM9L3sX*Bn^4Y|Rd98KRN%eI5zf%)g&!V{7xW1oz-8-!+fM;Vm>UZqo-2Yvw1mz(>XM zf2!#^^-mQII@et4uKeJT7UxxQX>Y68NaaRfDyKenPr2h;>)tEfQ+_=zFH9f#^A9kw<_*KJ+%ow z5IC9K2kvg~zI6XkNV&)ZQ`LtnW;RWtnk2^_YU4u?j4XI-H z%Ex=r{Df8gZ! zc*R$%-muC(%PR=+^Z$>#sma7E?c?s~TIxBvA(hZatU}3RQh`Uh3%)KhrRDf~ulZVquggt^ZushM+w{$db~!2-_e3owwMAECd;%zi554dAmF^8XC-aPLcyS8EJx($lv zo1*pvNMj^j&ChSb>9%;ZjF^EZN1(RD;<-`CX#!!(BRX;eaKeS^0!{86A7-*oTNw-S z3H10`PUaw-k{6|AyJM=uYWEPqjx)unf%uKlO&2~cRCmm)GoCb>d4Xa%AM_kM4~`FP zo-p25VF*6cS#b(pmk@WS`{s^=LAc$~W?*m)L>tkJ))kxm|e2vQt1%8 zaeTkS>o6$v`+6M5Mm(JbB=9vZU+v%k!_n3Ni|j01P@LL~zM28WCjrU>59)|ss?CxN z2xhYTAfEMwoNuDJalrHi<9x}+7>5$bp>vr~HDFl6S#y?kftxI6R{(^8Iy<85l!2V) zD@jQp57!pK>{z1!CP|7(}2iwhvQ zm~(-DM@FJXs0&;RS_N$gicun70Rt*HCInOqBJdgkWb-3w!i8MoQ6*>Si4iFCJ9d=2 zV?Hj*dNcG+m@FG!B)E^UYIu)@2qI3HCrn{~EmD))Z%a;?{Ly{FhKiRHU4zsjFi3OC zCO|8}vli=L)mraQ^(#Y0UF0NU#q0+=0)Ic4$9elu_htj5VY? z;S(~1(ybI<0bCrr8fHe3jju1q-OK-Wh!J=^fZ_Sxvxexan45EZB`I> zqIc+OMVBd0wh8FF2RA_%LA0S1;y>6hGBv1B3K|GqF1zp_DejUxYA0_ffZqnr#TR$j zH3Fn>sl2#DNs-ZL1Qh&)0D7(U!{W|evST>*{%`K+3`3R;MHn>VywENb2DV75odA%p zZYZfh6%gtosp3WspkYpcv>>QF2(&1uvW7>EqT(pfvVyn#yhId;m?*FVL@o$>v#H^# zbp?Q1=hJ@(9ny5I3#?bpJ4B`^3KR+CMuW1Ync=Cm+>pUULJ`)yM$WR(lMxe5exI>4 z!kp8L4~TIqkG`LFM|?40Dok`VhQ;k{4Wz!dV2L@4rD#Dow>u#48e!Qika*D~`bfgg ziei><6_pueuEg*-GZPM4=?}_g@7@O3Mo?!P$#S4=Q8H$!byLb-hel znZ@2Ki>5<;NExu!XkgJLrGhTk{jzh4qwS>A7QsH~ zXPrCoA8kt42m@@0iOgIRcR&8J_7om#`iox7MGKQ65(d&A5WAL4nvCN5kHM%>S%y8g z$Bfe33cbWxZHoDN3gOB4y&>k#`ukBGy+w;(AL`4w(19W1aC_~>mfq zoIS9T#bnM|KvFhrgomf=!KIn7UFrjmuq*W#+*kH%;=Z!SDtsm{A(JCqGH;1&;N? zV(^4;o*0@fm3$$n|KBVXd-or^)FB2>veYR*uvG3z*95WDBqs^V#3+U~88?;3sFlP% zuk$F2A!&wJJX|+hDaDOv0BwP?H}mk37U~aTR*@MA~a32Olcs8>Wa=^Z@~ zs>TR=3$3S@;7TYCtEAi1Tc{{Db(S02WCU|c8GQ#H%0HEdkg|A4C=ua!$R!ublZ=&W zKFQsuL>9yAcgNRlNeRtl znOpW%>+DYKRGO~>CaN#GDD0Yxt~GH(I7TkY9>NGcZx2CP)q;o=2BvCqcH%&mf*)Yu zP9Ph&z!(STQwJav!9jEj#JKG%8r&9?Rlt$QP7?K;tf)7MM-qvU8Z2;H7c`0i9uBc= z)&$d_0S*e+ouPu9VPR+F^zhOw3?uXySObqiV-!dKGIAr@+Zd5MG8;448Mf1=8`A;k z74|-CsOW$|!0v$iiR|N2`4zHLLjpV5K@I$o`~)j*$ES#$GSB20@#pF6 zz(cX~+A)|r-45Jip*MWRWazV{WC@I8B9Y-J;4F@^?U zs_HDbsOXwctKdkG@?cpCop?!S=fw?~B&nF8ECQK&J6JzwPBM~(FC4xPk&nhS-z4BL zCiy`)MF4EzUlB5Ze+Bd+TlTOF+v0HTWVm)M4Tr1J98J_ZqpXTjt%T!bw?55)W$F!g zsxH|dyBw~Yv4&=*nBlp=+6K`mgl*1S*r4jO}mEjcGk8Z&{Bab$fer zMsxXl^YK6xLpK0~6J%db*8*{hJF(Imx8yXA>H_1)H1jKU@`{VvKJ0mfHQ9Z#uewlQcG%qJ%bIS4M(T!jS(@YmxomA9^#U=S=sCX zYeY~Z6bFm45v&U~QwZk-LM!!WAyuWSbUdv3XDJzt6KJFCt0++No7WgwRYG?|jN@T9 z>;kuXyqQP^l$52hy11Nhz8ipH<&bm*+Yeei%aMO0~#f9Yse^xrHpCDM3=x2GD>2*ellVRDL*wVKp@0@06b{|@F=A| z*tISYrzofkz;pz012(YvaOD?j#)Og!P5BlU(CE8CecEhhM?sE)5^R+PSz+#^7D(_Y zilST*2n4oRP7820%C_V<+7huW>#nE&n_7Tf8M#>l5;VrH2TzH@5)5TxEl}!#pfZlS z=V&D|T8SBr1F%~x&y1Y^jd684hI|@A<}khlNJ?z5K!C8qsV}2I^{Fw{em^b_T5gZU zC1p6H;;7T%?+$^)N#!gMX?}1(USC;p{-8 zw1K@{2ZSzm99BTg#`&N$2qS0(p8Gf(a7D|UCO}d(g07t=DdEu%N9Rd#mM78v4>=2h zpWcr6GvGS$6w}R>;ON%wW)8mZ#Mde_9?pF2E~fN)e62L&V*U%F1B2vayL^DP6zj8F zL91|`I8L=&56H@FH{g4PY0_qZ^*V5ExA*L}YI7uJxAl(1mIyZ&dLRj;;J~1$Dhdl< z78vvy2N8ADFmou-97x$81*QKSkl=44mVW?B|2ZIuKiC(jgwpy5ZlG|iTH}#=$oVj{Ff^sV@VJ}u7sz}{z(=1)zBX{j&Q$# z?ZoDTL||-+NF5;!a4Z*qEv^@vvN)KJO@R^V#jb#6%mraK$3_ZGOlXQ1=5%OA>HO8A^egY=Q-WlAcL=w&#Voo|$=qmJEfc|FxypIEtW%qSc3&o<_tar`y% z1PjMh@FZ&bjwYz#sBtbTRkc}$r+6BtxdmxV#?`-U3OIB|)7s!E-BRw>9bh%XsE`b_ z6BoEdN)aBC!R_pTzZnqBX2LANZk|}96=mF4F#5aLVO!UvRAp8?1@IV%i3KgeJu;E* zMG--EdfSP7K$0NZ3rK=g^-d2!=>g`JNw3Q&dyxy*ou=H~N zG>H4(AQkg6NX=8!@*>G><jP_fVc-z8tdx<92saEPLO#il4Y9Kyl zd}USZ&sr(m`_Rd9)gi>N1O2N<-R zeK651aVnrjOHKvL*{LT!Y*k8UCESHGkV0mZUs2+lhzjN*5!T04s2*5*V}%-p58S3` ztKY6r+9G|Fqgy(jvgwPeW?D2V}08uzs*oRpZ*rS~eN4qgCn-UR4d?*~xl& z73R9PD=|;qWJUDx)vBz&7s$8^azHHHTqGmTIU*P}FjNI77jglOC=cuJs#P0p-;7R< ze839pr>a$P-)22w<5k#GsKuW2H`QvIb^Ri}w4K`Lx{H$D*M4#z%tEw1G9SFG-*2Y| zL^dEgCv}-_*Iq3JaGq?h&R4s1{|;&&^|+qcL3PE)6&=)X66CQmAio6A>E97ss6~2e zN5#ARi#w|0OYs;+dL&onA05?TJnP*_;TDEIv6DI=h$>ojQl0cuofPlP;8}&<(n*!$ z`~P%OJMgjHR?p(&-n43ukJ29Uk@~Y$jbAFGhK}Sc!c18QTEt{{13cmMM(}#0%0wyI z!%i`@6hB|U!l1bL6*6o-KkvCg|01J~R-3e4qbgE3_%s43?BE18^}PNvqYlHvk)2gl zu|!V#52kchr>ocWOP$rRrg2rf!spapVcuZ~^Ty9geN2tQl`(xwjd}(j@ApvEa#uLa zumfHemKoE*=id{SahhEe4kZ3Z-_u3a`1m=Zr#cvYb?mC9R}%=>AR?Uwk17~xnTgp^ zL>lkX?dnt)V9cpg-SF{wS2b}MSsn?k(gCo20N%fV>_S1xvNck&6XTT>b`z+V$K+XT zf`RF)yQ$+b?8JRl#ZT=BW22)1wW?MUO|&qSh*qd+eNipAZjoM6t2%cELV2YVyZ8at z>G*h1&^Zy`fX(sv05adLRYw6Iy}PTn2@fAO@wl#+Iuzx%bytT5KnH3EM z#W3u#J=6#cdqWS^6CWPc^#s;H^f>f#DnVZl>2W>O0ejRUZuc=ni4$VMt)~pabn)(n z((nE~C>=p3D8Nebo5w0W%ET&tx-DSUNa8)P`oHMw`w(kJ`+mfh8pN*r_aOEc`mx^X zgnvJFyZ$)r>R2Ps??*H;Zv-7t}d20;LC)t0J#>W*yR8P~(b{@K5cB_ZT>^2NhGt2`szoV?V*8dYPQF zR6jKoic4nLGc9Ks#ndr&3bIJ97<;!tWr%IMeweBqfalPCQDh~7gOm9Ja6y`N)sCo@FS4(pnCU4P4+5Y@vsI4?D{p7$2K;uftVO9UY}=Y6ySiUV#IeM^n|vZ~(bn z4Y<-%IVV{K@9H9b;YEWi~#iH;9ypn>(GOLCsVPLzWM;wCAYdnv(?FTb^Cf*UH^Ks zy4>XV7&~LS#A3YFrOoOv+ucwqli^t2>TFrvWA&HsDV^Qyqp;?>l<4uYM$ zMRypjPK=ns9M6{N-;7oj?IacmOtizw#BoRk!ZrE9z)_FBhGq)FyY3K$GzWU)A?ie7 zA)tYL1QrS#uwg3!uq7~=kg(8+hbsFR%n9X1!diKFgZ;=5A=3~CIHm&jnq)CX2AQ7N z!mtoVW0odM;QY#=s{M&(wR`Cqr_t;P?6sE)0ja>v55ilba>^!$?In;QqYhL1n1mWU zVfV$&T#+_BP6nW6iLklmFkcn$#FyeHemD$f5jOiVcMCJ2P)j+hwVr*rD5?KCT=i;$ zM{PyOGhYlqmTW_bu0K0m&|h_g^7B^ZML0LFcOQX`k|6SsavmHDo=o>3ickSoCyY_8 zP;<^0^)YaE>XE7o#>}l2hiE|_!*a1V9jVeL85&L*{Iw2~wc@N4OC6L!@-zL;k?JIq z)}R*0S11@c7DTmKPaF%6!#2HSEOy$cH5P!!&eo`A<}uUPj(`@h$H^vn_&C+sOOmoQ zn2GDnBUE>Ny9!)9Ob){fhR;D%}FOXCG#k-$WR~y35AyP6zFk!+z9b_PKXy#hh1L8C-SEG4_sHuRRd~t39#%4eRvOq+P0UpFj0&_|JkvkZ|FOUpw zvQ_f%1gSWJW%+{}N%7${J^J0z>QjXc&8NqzYO^s#f(fzS%8yeM0S|OtYdr~1L(GP| zOJ91NI@$X5wR+QW>JiTn+<~J%bT5WrBfp`&+585b9Y{j;yk2#@8VX$^o-|}Nf#*~l zY4Dthj}rsXr5WHo{rq?Vj>n(Qj!?7hk6C3iUzi?;EMY(3z&gJr2iEz8*?KSY1yauVzyv;N~pK zS+ae+>K^e-u=Tftkw%`PqDbFE14PDmzPS`qA*u1ORuBCZ46MysWig3ar@#_k{W}$r zt$(r}hKc0Qg6&~BD`h5NrXEMd)A+- z%CNTMPc=HsfFc1qwDA_zN3S|n_32?ICOJn+A)_S|N!T+dO(_mUFbeKV>8c5;e`T%# zQ;{&OqqjgkbD7$=xSaFGc_+ZKMK7J8?kmV41Y+XJv8fLmedgV&S4pepO-B3-UZm9% zR7}4#5dt=?zn!3Z>7J7mlA`I4XR6`4X`u@1+a}4j<>N^Z@!NFSX=<$g`g~PZ23g^y zk}*hcr8`^z|5PhX=Ec+C0otZ3CaZl6o_QMDiuNnAmRx1<%p+0Yc|im>BDd+&C#$Ij z&pdBr$%e_IQofz6Msy@^AmgOF=3)xFPzTHKHK+sOd1R;qm{z*Mrm{ixN4iE_(h*LG8_T8CNa<2T@~P=U@|o#{ zU?a&NKV6;BH@AFAI2mFTnIxGqavaLTOE_7SgQ(s-9p>N`y>q%c(K0Zq(~W1TgaH&1 zWa?+nDuhk~(CK%!K<9$9)d_h1>e;GSTapW6=gvzP(=!bBfw!j08LGykM=9~>kq0{# z&+&yG!Qp})d1Kn zFU(Y(F?F!gVpO|umXh>q$ft-d5e%!Jn57Qlz5|?O;7hG5WJ>#*>45SX{yYTa_2^z& zL=DZ;Bc6IspE6rb5zXQ?7xPb7UZd*tceCMB-ll8knEgHoNM^NBPn;wB{R`%(v&^dC z?11v$razyfCU}XQ3>mM~r<^0(e0`4U=L=PEDn_Jf0b=qNy7e4YCr)z+)DFUN9pI*x$*np%m+pc8S|{4!%wqWzj%e}UDisJ4l~~w zps&{@zru=|E>vYnUQUJ>L@NaM>C#`QuE0WZYY~K?A0$+y!lKm2tu1}zFT_(a?-#qX z>k*eiLw)!Q)gk7me$~!GRSrJlPC_UXiveT)|O0rEPcwXudZD5BO6W+GV0g%|tW*MxGGynnIJ zee`$@$>K=kJ$-yu7PK&1$bS*=-}0>R-;S%mtKVfsek2-&32$u_&%hgvKGpL87<17j z^MvZV&GV^#0Ui(+znTYoV>vxYaheou3HgdP#Rjq>xgn<=ldL9Jp-d0D#5X*8W(ICO2w&oG+ z8D7#u>};{zp3yrl0Xc2cm6x`F__4jr)M0MXTfPq+-`qsOc$e+`pde7UL>XEF4B z^EAOC&qb^-#|R1jy~};&w@FHjJm1R91eVE3f@@-yD8F7;_{wh`suHhvT;cQBezYF3 zck%eEIjX^Aq8I5E=9mXAP+ik|XEMft78l2J`Z1v&SfCuv&2NvgQoHh8cZhy@A<`7BC;0Z&(JRIID8`)6de33N&>~fPK!GNNl7T=rt6;_f zq&ut&EVmeI3Wo%~KPVS_;ERwOo&bh{sh+t=IAg&gb%N0cOmje<{A7{OlXZINRVq=l zP3$|#HNd;z=o3i>a1+?;lg{gqc4opE+IW>Jt2Nad%@lw#xxS72e>`2uN&e>SOmzxQ zK182#wHl2@{`P7yN?*QOjiJ{PqS=rQY1L;qak-Qj)_`NeqpPH0U~r>Xkmu;Vbdl#< zuSJpR!n1?*;dcTXfA}TxQ7xi|Jr2{Gd5t=_a9cT}L;Pm3uQPD`DvpWLYlWT%UaNc;jG(m)o)LJ~iWdCuUI?h6` zV_ae0W`x&X|H)O$(8>AN12M(^sWleS@OKwdn>}RPX7~jjE4FK26{_pMsy3>!U$5&XEtDh^O2r+Ti*d#Tr|A zqbPzyv{24W4HdFT-=S4&#E4J|&}@22s|hIWxI_+CE?9!y%<=m9CA)8OkN1!X2Mss5 z9d81oY|#U6l1=V;H>nXOv_#S^Zq!XTsR}INjhob|rW_t63ZfA=%SH#v-fU4@Lvh0( z%o$OlUa0i<1j3!St8Pd)r(d~U?ME9E5HRE`<_?dNa$ESk-lNXTyTB~D zIzrIg@GG@X4{txnI%S6WVJziUrl(C)e5C*SE9`lpAeXiPvp)L5rK)=m9~{^VmgM*D zOAwgsWf5hf7DyfL-PbKub(OgW&G+tNFxBZ>m%%&`&3BakdYL+0e|m>1?Ud_|2Tn=! zW?(PS|>j^aFRQTMXYf zViW6A!u+U^!cMdEZ;T2p%>1qI;Xxh^p@mO=3ybSo>ck)os_s>gRC#f2K=Pw~Ja7h( zlf+Qljsb*qey3{1$3roQ4M^UnkoWO;?w^!to-zu3%w4kKop@KFgv|MPKqsYo?WroW z7e|j-(!cEJ@wPKUCns0sIw6VVT|C!{i)YxLtohHoVg7oqop*k%%Jlw|R2jqTeZjCB z^^ESj!Jxrh)r3-hD*~@LJ~u>i_XT|FS&phCpHBCvG-Go-@}W}o#8)1mhHN0Dw`BCvYgr@BtKoCY-l z4Nu7M^;Aw5yicG};X6zV<#cFpKD{QF{!k&Hz}a5-JJsN9D*TPe%ngOV*IlC@xKB;1 zK+2a|Ydn3q49nx`G}z_%gV+gg*GK#wQByb*eh2F7@A{43tJlLI=+cDV z{0G%nZ(gDHg%dRO5cJq;J?bHKYUVL^PJ0#e>&-v=nG9yoH&PCSJ@b&UoF!$fDTMJH zsteSBBlyM!HnW*jSeHMn7E)iy6(ttj^{^Nke|lIA!w%kLaiK|Qx_MveO%JOc%-{?= zBanNH^aT2pM-T_GP5=H8BW4kOi)L}CrfrX?L;B_@TT~NnzVPB9qaG1lBpcBva#HYT zF4KXY_^9kefA%OG_2~cgN5vv(wNibCVXVgh?}v2n$JDk_Hf9G4!~|zSm>}F-eo?S6 zvRU>?wbtv3;mXB$4BG^i`CT3td(d9^xEfa_$n#b#Cn*mCR>s>WJ> ztv>Gwb-B7z?|K69laJ`WPpb2PxkNIgJFb!ltu;@=?TQ%OCly06+pm&1y}_#xg|JAU zuu63hzbC?BO_p)KXoF~(kByoow07S!s-3=nl`7{ck)^+V(r>~_d@%>Hw!q6uj>tWv z27XG0N z$rKRi5{qxCi6ys+5Xmh;j->N%JS@{>1PFsT++zDLr9yyTcS2}LPHw&U8G#vKj`Zq! z<1+$_T__~*m5h(_q0dUK6P|@P@^Ss(vuZdKWc$1hYbW)&{_a_IvATd9eDGXiKT4J5>jcE>*Gb{$>r@{?I;nTO zBISQYWfm0s1^fOS^ob{hoA<2Fdmb2k{gh4dfaP#rmgpuXr08F&L8q34|&WKY(oSuY;YL*6;jYEztjb zUiB`<`8RHDqC0}LAa9AE-flX7heV2K2Id`_Ry-ohq4pQKpW$AR<}j(nqiUL`9>X4WJ1g z)(pG9+?Z^hbNfLyWr}mVAk(_F>I$YbZ=Q4ecQS~V4BQ)k*j`hC|6p!)&F+v^-XwfC zK=G!bo^WS>P@jCh5jE)4K|1O3-7~)DpCUHFAozPzy>Iy_pX&Wd(p~fH>nFx8Ux-4a z&o{}^mm^vFfx73Gy~6Dqz8Z(Q)d@G>^S$%~HG+-mn?r7cUsuwof1ro|P1P5D#=<05 zr#JtP>V-`5#Uxi-_uc|?Vz=z-kHQSbe_pEkXV|njms%Y;^vA_M| z{Z#dmxZTTB?@bwr;|J|6J-+oyvKhPHN3iXl(R~Gx#Pxa-y_@)6p>sxg|=S94lfh+>}py>_^5yF5k!o_C|6afNG9)06m6;}oC zsEF86zN6ydxV68E`FYRv7-fw^;&Xk6vJPyX`CK2Vtld(d>wPV&Z!Y)wqf;%b8&b#X z#X)Pd+WzQ8PP4$MHgr^Z(FnPJ#A9ZEe>fX=n%ak23*WZ+rM1bwp1=}-h zzvdVI{^lxuPS_gH_tIF*-(cYd0@#(j8@77Yi0=vhF)1^r0X5vbazg{>lP%F}y(5s+M<8d>WNL+X;F)w-N&LCgk%Uxo_liXZHsP7KgO(~*wPop zt=lo?-Epgvd4&s3b7gCUGju4ax8qh%3t)*AS=X1s+C&r)ylRx!sn74ar^pJHabA-6 zhzb)COK<8YlXw;D!}`t=Yd_G@TP4;^=*2@yt&v#im8D2%jsEU0wO+x`3sY8=WSM_N zKi$r%(kt*Akq)nB5J2F*t%-Mww6Z+9h%DuUi5x2OTc4PS!ixTIJun#3~>-1`W>t0&;QB zdnd~-eM_Zvp#O%JUHZdH>*v26(68rNKKv;;L_PAy++^-jFft(lji>Q_&_wk8OlHpCZFG{yawQ7vHXVQM^N2rj>;O>&PcJ(mj@y+IY| zT#pPK@IO>j8(c+iH1|~uazL$xQBf79mo3mP2u_P;!c1NSnTo_6ezQb63^3SXeRM}_ zgr2#N70E^-;ZP8l=_$fZ2d9|!X5av_tYJKJ8yj!^_9w!$M5ka*@b=~$!_3`B_i88|3c|szmo8CNSvj~dAUM_ZM2Al_hXy2XWDpJf@m>&( z)XgMQUhQN-Wh{ z*NeQu+lHfLFF_SRO6oU4hbLIEWR`tfBlG{{9$mzVj1FZT1uwe~e=$WF?Sms>IdSoP zf%I`i=yz{kGYzp$&yExo&$pQ7^Eq+`QrR~(XGcsK z#RktgiuLDM^&@FS#1&y?IoV~%rrEg=E+X$dGHVfv65?k7jP#fS;8G93@-7JzSQ|zT zF+6NSaILpqXKgsgLx{%Z5FtB@I?siHp%`OQxG+qPACQ3jkbtI`CkTZ9n9B^j=jAd( zelCeWV$7}xUzLu6`S5rp6CfIiB-vR}^jH}B%4Fva8&WFD;$`gM0beamu&rK!t3@1N z6ZKxkfQCXdnP59o79zBxNXLyIaWsQ&;6mss@i0wk3o^K1dB2OX7VCgFfU zfT7KZTT)!&@AJvD z=`tCDae>#=AOaicNr%D^4#A*)>M+$ki>(kr2!_Q31N9a{$-)v5Y1t)Ef$}augarVA+*$Kt7d}x8dh~+F zcrgMn%H>aoD8K>s158dBw4LL;r3#iV!}Cn@uXzW64?rH zQp^hKAENwEkPZz6$<+jrHDZ(@Oj53QAYNFg4H^QQG??dzDW`ZdoU;?TGTf=OnO5pVcyhoj)Ped+jZuf`d zOVmj~b%Bo<>Ry@-jS8l#gETEmB++vS6(9{VnCx-GOvD?RdQS+%m!Z6yy}C1%jM+(~$bE znZVyexHp&W1ZWGgJtv{FNF<3W9F`X@aZ!L1GuOi?uDLDFOKWQ1J*D*qpWbrPdIMq4 zkr6Z$@}zaaFuvSIQ8qtxTQf9*);WbA5aHh=!R?AP3~@?vNN!M$k>ur|0Hi8tCU>yY z$oj_2?t+I^jUFUZ?I!$LK;fT+@Rw{CKuH1Vt>f~I@HeE(y)a&&6Y{P4Txsj9AzX@^ z)_W>|-6f1j1>dZXrTuQe=&+ETU^))IG87)B`!uS8K`R&x1QSjcrb&T}he-!f>?kLT zgoSjfZhdC`qR2rk#$F`rT#U*dW%JS-)hf_Qoq>QG8jc#HM8*si z6-A1Q0uayz<0a7pn6Ekbt6*F~6p9#c?OA&NiWqN6iUTMx0!8qM1=$+!PlF^Q%&6v? z%Ww#2&_5nSLIXpT+_1z!HWeapXtOkv=H*`93R;DEu#HYaU2?Z*h|3cwRYn+7M-?m% z=9aLeucJg26euaYh5$yl3G_zl*}do~qy7xhq&X>{CYrAg8^hfxC@w3b_LP++WqiN^ zJ_7+m3BA_^xaW;U%Ddd^JgTV5gV=JGA!+2q=F`Y;5%LxdhVh^+8xh!hfWPdW?u@3( z*nVj=o#N-MQM~IEpRk468sj2eZNTaEyLVeN;c*2#mx7KQ@ZrMqQY)L4Vk)p*vU@RJ zU@SB@UT7N_ev_UJT4nNvWSPR>a`sf@f&fwEetXf;ykkez3BELYycgv@SY2R^Cp%=U zgx#i|*WgRM?9rk$Y#0RGazk&}xLD2z1tY%AUPx?Br^%Pepvt;HljuT-h>$Qii=H+n zK$frbDzpK3$B(-l&?CIc06<~`@Ma(GA;8#xER}l8WiVVJVxtFT zS+*#hl?5LNp3w*?W&e3ey_{eB|=m)Ss~n@G>(C znbF;z`iH)ucq~x=&J($9Ora+5B!5mz3fV4zH7eXA!j8#_42AhVi2}dX-pSLzx*aVD zOihenkE60bvONf<(k`P3VY2nnRZw72&~#%)Ayi8cX3QsG)H#g@PHgwxA`J={8QHyV z7ymVj0v0PEW6~HDZcKK9dD9~3XYK}A3U-1^eLBwB7E6g(!XA5T z-?nIRMBmD2@geWX5q?NRBA@UNP@?U1%lLiv2HbkSycA%lbm#>9yjfS7n|>7JF&ZEA&q0*$uAm8$-Ssm%+M909tHsz4SRTINAwY-WktG#j6F^r% zGpj>>!$K+Ng!5*G2jVIt?{mxe$*X{W)|`eIFB;||wt!Kh1&cA~XL)a+%ymyQ!*6cP z3@)jel>t{~0X@)w$}%OK!H{{O^~x$I4R1m@s@X$xuC<;JYu)XV#WhCtXxw zKa}YpXGpMD=+~y-K@6Kc?V1jErP~r&If~~|XTqi~;L5Xw%AiUtB(Y#yGOt>)so*8> zH+lwckm+`7oFw{koq`_)Df$;g?%J*85&Z7J&XR02jhCX!8rq=)(R8Fm9|%$lWSG;1 zc;s!6AUJ(8$@%_$KJvXed-oH;_v4G9Ygm6J?%2mTPEJq*=(C7j%eH^=vMjs;P4%@ttRQiOtnU zOfI9~Jd-QTW4DM{SFjF)JUkH>1Kd?aB)wMVh=kd__>=OCj%xz0G1id5XV&wu8O6(nFDu0lL9gLAmUeVx^L+e<`gG7r~c!o^c^3Gw< zBr71ZMPSst#zt(>#OcT?m=rAb-Q00VOd;;L2;6ZIV-Ia8AchSj23p8dNvM>$a7zY# zU!0V9Bm|s-gp8rQG;U7QZ;cybSR%wAL}Ba!=nonUIG;eDp0I?MjOTzleGsFPx(5QI zzWn0pd;W3HZI68t80UG{E_O)J9`$)fZx|i<-nEW%osMGkhQ-weqZh${aw941{Gy>G zWQD^4I%%5seiUyPlfXeAhBC7xO&+cM7}AuZ<>j(`qrzbdBXp*juZk38OyMQaCX_wb zQ>y@()Gj6i#_0ZVprmV;P%-Q)JC7nBk>Rc3vvVx z)+{DJ6#$a=U}HG|tXhx-Z-##?0C1QX_3~c*yMT}d{op(rp=F?u0sy25$A19;Y$^Z{ z*BAgGhe`kdV-R3>2pk0Kpk0H!#YA4#V9yt0z5%u*?#Et$YvrI0h|KxA3Z|U%bMYl< zn1P{)W_~V;9PhwN1g02dTrQ2Uk&a34BXMG4g{_AqCiAWH7!vz7T=&ffFav=I#3`0b zHxRUvfobf$R*~CqXi-n&Iu~IEGfK2y?!Ycc%gU2iOikq9slUn` zls2LWBQ6Lck`9os@IuNO1v&^_!zlBD`til8S}&Y|Tce*XR;{uOSi?GY;ufwS`?eE| z?Q77la2yUR3LXI?V9a`rN-^tYXhv?QK%oF=Ql(%#Z}qYIWQoz9eoT&^E2xsL56`dL zVpA@MN2n4}h~%1BGFFDma$L*~&XZhU7xKK3IpRH(el-Xlz4C>Jd%0;3Kk)|URgZ0gdX9Lx;*y^ z=8HL^Pb+VU(@ho6I`Q1ueJ-k4u0bQSs+`>e(EibV1eN*I2c)?}0P2Vr9NjY((u|w& zkDGH_GHP93d)WkX;wp6- z#@~BXmTG6jr$lAp2k4)CV?-p&y@-mYLRKjo%Fs_ivCTaU)9(1hpHV zk(Xtqz={5S)M)fEZfsJP=viZ}4qX^x;R}jl(|d8k7bT#38vY4p|ES3_Rh+-JC0v^? zB&hb_eub_9MN2d=O8%EZBEJ=f{Pl!HG$$l-$z}E~BqWVbK53tYn(`Le|CEq`ZJHMn z-u(UrArUnU@t+YA4Db_moy>b@f25FLQxWU`W+6eEaTa?N4PQ{h_K*7(5THW z4Ip)cx4VEi&r3{^>vGk@H{g&v*;kai-5Fqv;+}T~vQ Xf(_fC-(BzSivO|t{{_@ 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 au#?g{eT8)T(qFiG0b^N(#oO{-9|Gx8` zbD#fpyJx>DUwxbE_l5Pj6^~i*xMkr_2!EAQF-uu0%1)Yv*w*WRq8GwNCOoO)huQZK0AsTbAxv(EdgHS85N zvrgr%TCVO;cd7<;m%3fuqwZFX>YTHesr?>OuUQuyFmsLirTUrrsk%@7ME%NIs%}+R z-K1P~o4Qfmtj>8|&3xlj^?P;IIUB5xtaHwt`HlKoU3G&sv(Eab`cC~r{g1lEYOt1A zw^~0@->R!nzRLQA^^o=ruC)u2kVd47VB@;S5|T3 z_Vnl0noFvlu+-P?+>#FN;R9Y*tKF^xN2yQOoH($z!jCJe`>0ZPdG*=WpOt&?pe}B& zLFMWZ_kcmiM^{^+iDlw{AnIDij(P3fYzusdbv& zMIGPApl5eFe@x?z8$!dZ!_i^b8BsgTnqrN`w`W4N&Zb*8gz$A!s5ZUP;xyzt#>K>{ z_-9D^W4F9>g<9n9(|P)VP3XuOZYnv=XzSd!cta@tJQihRTsvGHiljf_x}4@vZSPQ7 z(vDy~T=bd^kw*>4=DOSC7sgnYe#D)T7}9HzvSU~cmL99J?5uoLr9YO>-k6h0FLKu= z&QPn@Y$#f7`q-9lpLH)!l~~)A+ca#tjI^;>MRUDE&e+;)*nPFA!rgh-G43(HsZcS! zKqyN9@=eqG)v zI?UQ1z~sYW))20?q81Hj{JIZ1Z|9!ZrF>uZWJhbW5oaY3(?1j%4#Y&9Xsz=|{&&nt zpoSemKj{6bbT{|qE@h<_2eWFkaXWHED&&5CPu1QHS|lxNQlSzHkhMbYjrZDBiVIM{ zx79x!8mEpE6l1n3{TC$!=nUbH9quE)ZLi0Ep?c`G|E28IjU=)JC@E2!PP^q#57eu_ zRnd;98+NK{9hZ+|cnlg09=B5;==0G-4@b#}pq>gxjgO3VFawSSO6wm^xJ&k}Y!`OM z&Jyy7+7Ut8FV~cR^jGC>EnC;FfRe*P$#rh|4V~Q$=~qF{4dnyCS`Bx0bBBC#sBqH< z(z0E7OLT>ua`%g}pO1Jv5A85!>%4&9)uGTRU?YshIUDoO1sh-yVxt_`*et_k-Matk z+|d9lLheK>fHJ*ZCH-lDFmD*t7GWN`Z@Klc5T?xZ`878WTDcqjR=JlBEB6M7aR6XH zQHx1{^X?gTdKnp|BxHwB0z^ITmJRQbeoJBY^@`YNP_^l8?&#tBr{88_T~N5iT`;^t zZFBD&enE*m+8L^~i&3}Zh`wrpd(emj+Ap$7%1OOVL8JHFg(D8^u?QqsQj;pTlj+^7 zyyLz%Vn9h@6}Q94dDgcJ-TIM(G2Xh7{mgjmwK(1Eelqg3#J3AUFwyib_qb90AWJSE zHK@`rvQqJ+T_kjg77qH^IBJC2>i&Jy0qAYWfmIoqeHA;~f+bdm24*6dw2jq6NM#dP z(q#wENlGnHHh-7S@8lLARC=1B({x2iBx$$zsh^`ZDqHvpcA^j3G$m^(Xq^RFz4aX$GcC%Gpb+<&k? zh?R;aZ7eU}qxYne0BPASHnv7-cf#1wYU`RC#+E5y;7;c@tSPggqgyj>5=dsk*g@{I zy#(r8gt82Bre@;kc{56YohjKAuyM*E9tA?p*erPSkY4INch@0< z+7*zOv+5eaIPN+ls@xfe4nY4m9a;d*6rj1`&{K{uwbHvRCp12pDYX+dcDiO>O4(`B zDx^%piI3+`uRl{WQ<}6(pYNo1H?uME%SkQMh>oDND!};qE*BG}OFxe18m=w99JjB8(ogi=d-k96#84_9pk+@i$oOUH7IV z&Qgu;XNPyLYN2Ey4)>%*-RdKzSZhKxX`%baiR3z-BCv!q5kA9JZeVebFf3HL+x2vt2Z^fN^et; z>tX$ct$MoMClr(4C=2nVSv$vuJGh5UIJazmHdd1YZN+R@DCw`=Cnp?V3{`~T9hF|~ zc00O1rg+%V=U|wJj~DqO8*y9*{>0CM?a;u5t@ z&zKPIW9o{DD*diI>DWc+?yX~cQxf^b&2G`8gMr^8CLN=G z<5u6_AG3|tqyQVt6;{gE?(37r17#22-zh05i$K+-H@dIhKgPZ6xT^h#?}(?js9%%l z8H>UfAERv0!Yp$Cd3o1T5!RwPM^IGvyJEjm%!+yxe^9i=J@<;fnC>lCToec~%IVVi z{nXFgVe|J(fv`(Rh~O&cUiXsuqX3Ra=8v=%S?-txwjRlw z0VY3VDWp3~lXepFD*|@-?y7-3gZdS zUU8*+<@`Qr5qKhA#A@y7I&~+b`CWC_V$PWb69f?bggLRUxG-lNv-#PAYU`n!-8U9o zhT0Rac2K+F>Z+bXA0Q>sEmn1?8;}Z~uwc7ni-3ebUOhFSbp9T5%^)>>&H2})6gs$K z;ox?}KiZ677w?kThPcxnu5jO2I2AJ)dTqZrun?!Ed)l?PqvXG@t-{})*9{uD?QkoT zi(UmL+Yp_V4THV93sMx4S&bi3gki18LyUf35fpB5$4$;+5@$`m&fuvLkJ707 z_2j{x(aat?rH!8hQq;sH-608(^uz!oxh#wR4xd?8H8mTS44a*6K)BIUUER;1oFZ z-pt-Uu|{QF`=sLy1ITQ$$#llO`lOM-%KDS$W3nTsRKWl#DNZ_(i~<57;pe4_Y~au; z!Jx_X+iq@3cT~K4%06aQ-#{@Y!A8HILN@yQlq*f~b`(?FTyyd)@XO~X4=Bsp-D>P; z%{=P$C|2A5lrd;Hp#CRSI~|e{@RX zZyt8s#MCV4Wx&+xO20_V1j9;RKXa#60eW{%-50&RJkyI`tIwuDfG)U$=BxyhFAG`Vmvz9uZt_=Zf9_)B2$0G1L0>5pe}G2rZ40zfWZn zSVtp@(5gvg%hBas(_AwKOj4T#qfV<*H@Iha88!yyxD3+F&f~kEad6 z-^BEu_**4^51;-HJm}stCSmMLW(-x=xhrOzq_*99`hIyRl>_l46BPh7_*k#wc|iy6J$(Py*=d?uaoLeHQ<3U*vn)=C(9#isVDXO^P&d1unX z`RSRS^|=!=u-sexMOZl%4OTuUTY+_cdgj??Zt!_+7EC*9IDmWmS;u2lpPa?DCC~2N zf%?M&(Fh69WMb7r&aN^x6h&HvH^T8^;L=*c7{_Kipx(`AUtpBO*jYAzC(h|-eFXt? z&Vc}~tuisepitI_*SJ@mGXf<4*g1p6PVWK32hwSg``2?m#iF*J+Yb8>Ql&f3ZQC=-D77}rO3D- z7a3!#TUWcLGU$z>zBp)uB~6%h5a3@|dyKnf*7^8$*m<-<-#xEeR&;KU8oL+*0Wu3K zqME3&I~lg^gz0oSe^epN@%_&8yQ7nJ=Rb^2&Y68JzVDb#MzJs0PxW$-zu=%eS*6nN zyUQ*(42}ML!7=!2$a3ZytIE=8s1=S_yd=z3vyj56{<8-Gu^@I_#(??qEkp1X+UcVE;4f7f4B zr`~Z#Upx`zi!WyRgBPQG%?lTIRMtl~yUmwCSKoeYcvzsNJbUcO#0S?Kgt^T>9uxe~ zZyg)H)cW*#JtJ!k_dfU0vwvq5q3hIT&9TEZsW7ZE2tQcU@L}z6dXD?}<>TF>uj^d)5mja# z^aE{4gdr}xZcedLKxmR)v*WsU;c_Y+FSI2AfqU1aZ}^L{KDgff_QuJHkGV`M{qdTU z7CXw?q1;E79=ztQo8Gh9QDS=SA`B#aeZ!hf4G7SEx@O0c0~n|4<@QEU?QnM_q|DXs zjp_rpbm>{@&+bJ_Z^C!$w!ivOroZ1dL4B}h{O$D$(Acbd5%OQ@(~CvSOnoJG;A=-|<2ikM*=I;bD6AAH#_xC<4?_WhF4zTkec1uk$r`-t||joFXWQ z5+N>e>zcdo>Bp%)d+$*SlPq68+yY}Cxjaj@pS}ECOz@A(PiKH}?oYb7C;Wr~#&dph zJYo^+e{xSa2wfDri+)}@)C*tG`iB;x$p#w-A12&}4+*#7vo|T0@wVrFe!9dg9%<81 zKKuT*4dtmvl2d-5ksL~1GsG&%DVjocmgjJ!KXU)}>_3U)zdbi8kK+l?j}#ntfBT>{ zPjA{{l`pt4fLqv!*E;oUR=!9SyRW@8Q8lcwUrrNxLtmNVQ&lknR-;}S=sxwzYrxl% zS9joVZu6Jzc0lM24uuYsz>rnze16TEYhObsejiZgCZ*>*Yjt#&zkXaCnjjla4{-nf z`WQ9P9r^pyfrw?lKUe*EP4tcS5e!_p z-x}HrU1h>>s-kwW(~zsp7N_7!grasd>3pZ=!oN-b*=>I74Gi$Bw?Fo&<-T_wBoQ9- zUe?;x;9mIN8HNbMjH9h-ey^Ppsyn;L>PfS7@zr3CMEWzg=hlhVjz#VTTb+~ zQy=xnnp^(#2dn)4JpD>s?HBGPAAS^2;lB=`r9RSmqD{E3{-tu@Q|Qu(r$142UlDq9 zo?}6b1(*m6JPG$nVJOZ$bwwBJBjqli+(FNIFdWgjgcWsfUs2I<5W^^9sZ-XVImGf{ z_vsZ+Rp)K^{F5Oih@Dsx$Y5arN#&*=+}GXqKvpevBM%<0%J6$XckzR%P9G{pRay-& z)cwVS{qkUa|3QNF*@vbiKD`}_Ndhx{R*p_AYs8NTe$=i!8kktOvVY=hKF1>6(g%mQ zm8;sJc;Kp!5;9eYQ+M-26%odH-Qf?<2R*EPxR>?whBa?Jd?p3knAN=!*AkVH^vC+U zf2xmBw&6Dix;H=4Jz?;f{!G91xf-6>PV7c8GUC5(-P1kvPG#A#Ei6slw%poJANz?) zCCD5ONK7yJT8&j7>Pg?KzJ-+-98M1bjne@(df!wY#JDl$&cN_?Ok&PjP>fz4u?Fa+ zI}{}*r~0#&Q`L2!t4WFF9J9oq=UV=Xx0)xyH^;0SAyc%zT%b?;L>=KxPM#du*0}B) zkNd+ma@cqwgicF5%RnVY1w0OLr>^hV(O@+!VRGkDJ}on|&_lMX9`0l7?bs@o77rHLpeX?vtrZYc4hUr?FxW5XfReSc3*wsNHzhDdxPA@CZ*mK&UjL$K+ZE$ zSS*9#>Bgt4&HCNuN1}Rq*h;An*VH{zLj32!?4G&7U+(o>ZaBZ(V}E;c;u8Y`F1OVz z{>mpQGx2~hicNhGdBh#_jKg{7XZC^L*T$zWv_84o9rg^cvHOg2`C#^cse;J%A60V4 zDOS&1jCx>a@vLkFE^)-!4BJ4ZU#8A#rkP;A?!?!y`PvXe2&>B4jJSCfHtEuxt+B2C zo-3XD!Sf&dEZZ|flO_{UBIsTV-CIWq|r6oy{c zSy{%REeus1TJ3j;0JmdFIFiMW;Hw?QSeYm(7VFHA4ZsmjWL_pE>v9j;d1Oui#&8L?M^+u78x*vhZ*LzhFNvR(l6)z9{Lif_(1WoP2TsQ z9z&I}#5loB&K|*iIFJg=5^o&vcfmNzAY>ejLt*1I8K~;Hxo{UUGeiqI;8wf&N(vDu zBhWyQ5;)}UrbMQf6Jne|aO>Q78zg)*O(=N;*=ma347nPB7Xw(dOS4fYOQf}T(stB+ z|BKWa3_SWkY$Oojoy!Dhw^fJkuuKDD86~n2VWWDwt-llZ2iQXD7Sv1{?eo-L(-OP{rH0#l6If`Yo}a5!@$;I zXbSr155gV}8IhuqD5M_{J}^*UB$`^t0us(2iL!4mfQZeaRN9~l1Zk^Wp1n9+Fi;9? zN(Q4MBLM1)z@frpfT%ygWSbLQ3J6jSG{nS87BQ^ST@4tq9gjt#L(m?P16^q3z;56# zN#n6#1SBUIf!>pLvYR9f1yqU%GqVHu(8O6ZHpVgrTciNX-bD}mV!YIH7hi*gb>X1f$$VKy<5WkBk%VMiRn09H*DYd!pfS!SX z*5VCeWISN}nR3Voj(T5kP!e&@)uHPHNi^J)d7_Ac311W~lxaE)HUkiKRu+3S=+X4~ zjXU_OPABhDm=t^Wr<2KG^gH6UneJRTKA{ACQA9gpaZzoiCq5wqD4oh!3q_^;1aYCr z#@B0#-Fv<|!U(LL7@h-j);qDOHWwRM{Qd=o7F$dx^IOR4q!C!(;H!}-HU!p})b5~; zo%|%I_g-M-e1WwSxEaBSUc~t{KhE|R<9y(a)67o>;(ax+opa_Kt3w|v=YJ^vQKMP9 z1j&iKQbt~Fhc1De`bb_3v>|W21@EQ2F<8paA}1Uz%nrTnYbarF;Zmw3!!lb6;Iu{P%v0SoDyu_p zDd(L)b)(1w)MjaARQDSUY`}Iw5th7J_6Um66Ol{v<)B?%V7{ERYgi6;GAhFCbv_NH zzqViwIgL_;fU$2N5>5@#;o*h|&DsiG=YpGFZ@EAuBWebCP1{>Jw2@>Eh&?T2!uX%8my$9 zuy8ATtt-xAg)(53u>>jB>@vZi`_Mmnm2xR2K{Ua-?mM4EHnDHzDNXQU9lVf zw(3;wBKfOs=Q{~Rup_TWkmGn4KBSc)q}h$x?%@BU{6 zxY<|GfQQFTn6uB(rR3;npwz+5iz)OWeqlw3vNUTE`@g;@P|nbmqA7_X_7U_@>LJKc zVnZAVmMF?pjZ>MvWZIaI-CY*9w>;b%0ZVLnP-wX@vWB3#aA94)XJPKp-G{5E&L~$c#a{JZ`KMT&Z5;Eaoj5vM1JxfVTWHV8l^Y%VWV$Ynv%@ zfCU2SZCE4I%L9D@)zueryh{2?{d(nm<|(MQ5OshB@Ef^1gfUj>(P2vDe~5lIU(Jq-$cd0%1y;Er?gRBfIA*S zZswoDx5HC{Nx~d&irG^L@T`??Imy;jBA&pm@OWd?9+>|1B1c4oS;FAKaHPBbN%EP8 zU_HT7c8>GN!8>%ZtY%Y$SNg25j?QM)m@5#mt8e(<^?HPa*n*@{$6CSA!aVFSzcOaS3 z$4})~#7>V2HL}~@uuu5eD~C8Cz6e2;dm(|m4~KrhBY0k@u*6tGd>}p2zzyaQY?Zu0 zgj{lE_W(iyi>QZuYoL+U+Jc&ZGMG?Mf{mpfM7y&Z0wH%S1Rb9^&^aT z>N!z0L^bH;QDsl_2>>odeKD2_pQ4VR2_zz)$AAcN4x@p2efS1CNyEv5*_p@y)Bs?D zLO~F!XaFm;o1FpMgzco$pnJx^Ty%ZBg)0zt_)^p&8DU2CFl|EkS&yHk{#2cBkSQUC zUst9>XSzD1v802qm`!!)G9!mB71ILHg?z4o-U&ngtqx=mOjysEJpi%+!2nSy-{Z~N z;Z%&=$aFVOy*aKrOyTf|A~-v*s?DabohNAn0-GA_gU_3niXm)`V1)=&W0xaojD#TO z_+i+6C9u4B2;v|@*Gpsiv^dm<>AkD;-nFgXab|?Q3%fIAg`N)Nl33hx4HV|+U&mD+ zpp*0M+s1r}NG4sG`C`X9y-45ENp;kN6DpQt;*0OgoeO~a5j|rk&unQXdtNltVtg<9 zOb`WgU$DyQ;z2|9$@Hdpoq6f1K-LX*x&bbndAXd1bRsF4Dib) z06&?h@&f*ASNfPJr$WkvURyAso{$sJ~CBYfv z&kDsN!S66aUFxG9IkYjB1)Lht8|5esMd~EP?!)AEm`9Kh1~~fH=<_!?xUYSoEL-a3_s^cj`^B$}1xw)R#TE)7?iyJ6n*cSS%LTVz| zMz_m$Y@EIY;K!|btKPFaZbtt2Il&AwrDfCPv=L7gldPa%r%*?I`&jzt0c2ePW z54;Q&?_m|#?2o}&is?vt*qrPMxZr=A8JP4=A=h{K) z6!9C%fT2yWYw}X=85&3MS~rl&$be=K>K#uq1U%RV>pC046rExLj-AEki0(Aw)L44G zv_903$XH>w)y7r}*X9C^zAj#yCA~L<^Y#vSy)HaFOd(ElcOk@$m>=SVi_ZoD3%|k& zi4U|A;DY3V#OA(=vlfG!eH)0S72HQzCMDcjG4mT{<+!Qq|1f(kSamFz6+{%CV!A;I zc0uiaW)FEizE+y?R^w|QQ@RpgE6li<|B5(7Bi3cNA7-uNXFJS=>%`Wi-C>w)O*#$u z-qAGa1a>P%wQioZ)x~T%*`2*DCu$`Kg@TYFfds3KyUt>L`m(^F&%|_KTBZ*&!T6Ry z%Iy`D{&PTrpGS%QFQ6nS{f_|2+kD7FX|(ZnT0-eR2c+Ep9Vz`=K+64Fq%?*`3|IsH ziERH!kcw<4`33k~R>XZ7!w*bEpg6g&pbYGiCB3f96%?*RAvt4hzKq(DvCW2@(>yHOOY?xN z@uGhKsBlJ*=HbJjuDBEuPrMZ@2WcOc1aGR~i)BMKbSSuKjb8XYBzg>TRZ93=kmfxv zS5kpQFT=sc+}=?gcfwA~>!}K7;e&2qIzY=e=bwF$f5s=9L3sNbyHZXNt)*LZYrkxRjNf;!Y?Y-aD2?^8t$Tx>l#MF z`|Yn;_^W%oW_9a{$s-Mcx#YP=;dJw{}zG@Nw*B%;D2+3Wv(f_vzi$mH7UCcZCFfUD-oE zI`vdY+SfQZa2!4ahTD3m{qfyXJ=H&0bVZeF315fbc1AG>{Y}7 z!O(#!M7a>;^rAef%d@JJem0{z@7tn1Jg36;%zN9ty)MnFnX#9+#}n3*er5I3xk=%Y zf`Yzs>Ol_3SV)ZT9ZLRAf00$gVhzZPNiWdVy;Ku`^hz&vsoJH-_lAS?sGiqb^~DFW z{C}DRzU*?~yc7r=-$(6>%9r<1*h7!06!(%#$L6t;bH4@L7`y!NbQeV{`-)Hqz zhv4HEeT94R1ZM+vQ9rd4AAj$MD^eEeC#zI9e9ZWp#gEN@R$cJXzP~!~U=APUB_5zX z%!0?ClgP&T`es3Rj!U1h}k62!d?y2uMI{x4|>{@-! z0EI(1`r!e%CT5YIJ5Y6zv$s*E(eu&>StTQP{<&M3W-D3q-}=dcs<)5K8T+Zj(bv#w zH47hiSE~x(bnyNNggvU?tycZ;apnGMdRGbo+&hv9K@f!C9U>DI-XSO*{#tI3>XbAh z0M0Ow-ZV&^6b97wq(Q3v-Zn+=XnMq8RYhqAO(4cQ^s9_Tks!hqidr`e7HmH>7R1-1uSEnfUlvP&ysofYGV=07AbQtd8qtAZ`mjnQ}S=&k!E<;cXL}XAesg9noZ3AsT zr1|%u&Pem`MO~Re-Om3I>aNhQ3|CYB@A21n@9?MBj#MKvhWx5*i$*WcQg4DV9cES7 z3g0Vg)9>igQQ*Bs-EWlIZ@+gWtHE*x*3#6*H3MEEbV2)iB>1#wf72+{yX0k_pJ!Gq z(!uo;qttrzc=>^Y0`@*Y&rJua4TVRkS-MTnIY`Y`Z|kiGspHjFz5i%+G_Do6 zdbIM6NHe>#6n76iG8*&TrhhkDP4`Z2{ zz>{OtDQH=Fu*#a2v`$NKOTvufm8}mxR2A#F2P>R@)yoe?A6xYc2dfj%W6!ZruUqvg zW7T_Tj$rN?_*mwsf#&?}c5Zoi2Sh(r2%Ln?u_Bz>RoOVk-QlR&W9 z$4FP)UZeWxC&sA+FSp>ndzfakvw%nOk)wgf{TQ#2QVb+Z+pi0epN8a-!E4H_^5Qmn*jM$^OKQ|${nTNq8VK5Pm}uNp7v z8YkhpcSY0=o82@^uz?#lw=OWHh~%(!ypO@v1sFuS5TaKO(}OVM)dqt@4p-NEB!hBd z@Y%y*cD$!|9NIFC?vdsNN2(OSdgYPo$o)O4A`ulVxwmQFTPRMRc}wplOaI4_s%k1G z*n5xT_c9$IqrzKy)+{}{+tMY(&(S>)WCR4cqg3ysFha)fU^n2}W&|Lq6^w!oJuLKO zMg7@PstUwo7L;tUSedIHIssB>kv?*QSz0jj-3HE@fw2;AX&JLLOtlqOWhNZUTbeCP zdu4)I+U_&==|*O3mEc%mTT5ey-qL!=(ncSxaMz1I2OoJU7;yOdqgC(YJoHPJHtq-D z6$}xO8#a_k*`Pm|JG?*wVHZOvQWIMzNH1>>Q3J+LNMg5o1N~Cksbm(qt=eRMdbF-USwz#6%)OR9`@iy@<+rpgzz*K;AWEJxIJWg%5xM(<84KjnClX$fis>gwZe>9d##b1 z=B+;%Z+|Hg_UC{AHERS-cAF8h*Fjy*ajGMhdeU*qyQc}ZY@k9e68RI{V?beZ-*LVI zX+}ks^q33_S;WskJ!i5?bik;*DMB=dIiYB{w^TB@!m_nXq4(5eHMkO$JLgFocVKi9 zRZ!ANk3Cv-m5o3-U&)aM9S`*br_x8IXiIv#PaY4?N)UTu%#28B-CtjF0+75_FFHYe zf;C=vqUzI$BFmG&a^Jw%St5WRK2c@N9b(uk^)={0vV0y{tg=S%4l%v+M0JX}VxbCK zTPQf;BzV(C!+^Un{lcT{&z(X))-1epPu?MTpdjBa3C-n8?DXJGH_~R++ z7F3R(toCF6qFEpALVzvujz02aH8BD(CG;0ZsmdV%zVqnzq=8xAmA2?MW)wX!fY9*iaYq1%=AH)|-^qep~g9-OgA#N(b zt1k&g5>tQ;$OSR66wDQ7*d&#U5`s-4{L){ZqRPwsjhnFZE)@2%$2$B-?NI%Up}844 z6zwDe+f04>k{?SAJGiz6Hel7MYB~S_>{VIo5q(J52!ZLwQ`L{GKR4*FPF0V>bX++t zZ#u$|K(p7UsROZmiKOAy2l!+XNCUGk$ zN=Zx?w-AM}rx($$P7Y`H5Y4)C7vqBC)wZh|@V+tZ$)@4T(Y^v^MfGaZTf%Cz?rlUuh9cnsUhVR zyhqKVDI!BVTlD#>)JW?+rR`bZtfy9~u40jE@ZZrfjvwhkXR8A$f(E<@g;yH-tGME9#D2Ew=~t?rx_Pxq=$jvaVfxRrTN|d_ zEjDdFHE(SQMYlmn#kLQ{8{$W8y|pG>YPif^!6XCF}mp*71bB~6w%am z=c@6D%FTrM-lqG`g!MSt23@U)%a%M2+=VHAC2P`jr?TzRll7f5;lyv%@6S|6q1`^U zN-h(!oO%Gb9h{=+wc-?AR;$i6So{VXkjQ<}J8DHyw4bF8mfIt7Z4)`X+#mpl+bm}% zsSBR}9Ho}vv9L-zR?)worOv|aMxIxQH2PPw&qIuX z{z8DQQs;J~f`!12EBbAjZ{%(?)v(XCovpl(35>>Tmv zuA8F@J@Yx9Ze|>SUbxCZKS4C!vGulk}Dg3jvb^U=F`X0CV$2Y6_lz zbdeg|8F+@ogx^%c05AgR-U6#HhNCZ{qTYkksTT{JF1c8pQiwct4qkh`e^(LyNc}cgDQaZ)@BNbQUSz>mT}tc&xr% zRqMYzgn&Vh%P`Mvdh}&Vq5%-AGBqSEfvaDlOoK#45hU%VNEWxi>6Ay}dHFX|)145Txho+yueb`vpvb+B`su6GHRy4CPE`ryaN8d*h6-^8I+sH% zWt;wWPMxSPnW@UlWp^VW0H`$G2w4|KG8?5`cYRwOV({Dab9I5p!>Xam^tW|FbR8F% zI1p|>L8OArxnO|=fZo3udaIq$TR3oQAiGNcX1VI7n{HI?c(NDdh(^>@gb+>ZzopNIPe#O1PNG8hTnFzUz*P)H@`?+20NB2@BuTLh0fn@2EZKmz(7*9#D;Z)gkc z?hUHv;8hEOb{t%y1=_{Cf^)H7)-{PeC*w&|N-<`(?FQAiZ$TqcM^IlbK+OwsFknah z<7?FZrI1W{6K0kEtU*<$jD&84mP>+h#GKi1C;0NM#V}{$i`996B`OZmCq1BWsb|X? zF9KOVyGd0^Kp9FuxHvbj07TwwM<|cH^0%9O#5PNbLF@;-5x{b`pa_UX_5sm&=*_COTJbJUwo%{3pRJbudX9A&v^wCg`n9j+!{0nwed3J<8B|E-&%kFrYnDC+7k`s&M zw6zmF%yZ(2N+61>hbi5J>sFxi%3D=cp+bbhfyVdXG38ce8#Y`~0FRXh9t>Lp9xE(i z!@F-)Qw#_3Y(Ci#Z%6P|WC0uMV_b;-ZF;IJ{CAnFs;jmM|I}GbRYgn$`elK|6L{P_ z*#lEn=VfL%{hvx2Z`GB2cO)VtNa2SBLW&QbYPG8%>{}-@aWP zhE-&==z`<4atsg|xQ#*=+^aYzt7VpI1$4TVsl&umoPsB5t( zLw8@_u5WIHZM024->CY+iJ{>}y^UL`%gkf}p(yx2eg}N8ZMx=;LOMfqL0^7{Ivexf zh6k8r@=kT4cS%&bQlHWY6KEJ<5orXp2cdz1}$<6n|@iR`rnyo+~@XgEkD17bR0gb^YaK50_Zj0cUF4#mRp%f(Ltj(X|3pQ~hh3U5+l zVBI^SyNRel1FcLioI)j*pc;aDBGFOc)0k-M@;E}0a!%CZ-Fh7B^q-iJmM>hzs~oDI z`-$qludkdfvAmJzR>ON~VR^%s6g7?nGjo-NUsHR+W8hEKi3J+GO0WJY(Rrjg6y#zXp@A)e6JOK|wdw|cm0w3pRzCz@g3{Lv-pQ(PaFBd?;MD>tWh_jXb zT*WCtv3_5I!nPTt?^=a}k_C=A)Mo)>Ly?L~6h*pOCb3OVxYWw%7k{pb#78Gsq5R5C zMOaBedtYUy`AC2FbMeuu?{5>D?>wx^bkqH+%K#rx@c&Bl-nv*Iekm7wPnBH9=2ZtctU6ilR<18gDgCVK4(S51#0s5*bpf#o8fp9MQM|y?jp$2fjbaU5I467sL5-m8uHp18zhiS=*GlZz%Km{h5{>Lv>B?9<-YeK#>pgcn_(K%>}>lik7bneIeGU7u6(v;O`|->$I1k-d5>PA6IXnuZ_P( zhEuif`y1%Q-{>j7QPZ-&VwX%vz^sPw&;Cq2i13boDF=eK{KlBG5pE-xLa41sb*MK4 zp_~#zGn<#r>;CK2^;BDOO)CqYSg)9D@ZoxO5Vv6DN)%dlrki(^{_pi_0QXy9RD^=Z z{)ztzz4J-cSKs>tHmtYlO-~p>iX2q*Py`+Rk0;a-M+B5A8YxQCix;me*f;1Gj%6Iz zKk%pDtJ#c$Ji$8@@YwHetG?+;1lJ)6{_-RYnXS6&DfKyqt=Iqrtk#EZP#?lq7`Ra~ z5Rcp_;g^{k0soKm7aLV)XqKYiN}A)@zg4}h#kc6izg5?%g}VLINM!t_KKyBQ2~hCV z)6($$rx6cWq|2Yd(O42IAh^)tOC6ZDi+l_uG4VS^{xQ!;i`mb}z>A-ew7LhLQG?Ka z3)qx3td)w07-L5Csf@c3u33-lYUpH(x}ue5p&^V*<$zKX1a+n-Y%Fx7{i z!~WwUz2i9q@eq@HUd9;myvo=}kFc)bEqGe(qo3WR+D8G2R76jFL9)jHqMo|* z3qr;NUXVFVctI9F^932C{sn)n4z4@GB$z%Zhx!)6!L&ri0#04^`{;z=vGkyziNG86 zNvl4*l{6XhI~i-z?_{jmzeB+9QT_by)R;o{gVh1{D|%gJ^spDzsp?{V?_+9|e&t2b zig4iRSSXn<_O~T4Nh3ej)h3gz3-u$2{=U0K>y@Qa|}B;wH!$+^j|u33E0J z65?;GY$fFmtyr8f&V+e@T`)*(v~{zZ25Pn60%87A&wWkR7p~Wc8?1LemU`Xmh+}`C zKYd+smB;*EWs?sw-MuSdxh14;dP!ZQzx%y9La_Ub_p#JV-w-q|#??A#@$eh6pqJmk z`WNZxe}sryr2D-o7Qpy7rOHfPtboEBOyPrXs-Z++O4mX1AhY@pQrG^2v|PSLex3OT zwGd7IqhoB`QV68UZ>g&Y;NQRH1DI64@7wTpJcfGgZDA-Nm5GQY?*QmnhW_Ghq41;d z8^!0pqq_7b_X=8Ic!rAZ1gc@)aAUb-)6u$PJ z0e)CloAQ3|OXac6(sY*jb>sUo_|Esu;E=9HLU856NcOk(RFzD^u)JYcH*w44A3k`El){p)P zVIGe|7jt_v6L9E|66`PI_#`-m;BJ|~{K=n%beSFsFBywuLP76Pa&4LZ?th?T+rGh= z7uK#_gi*YEfN%Hj(+#dG9$ReGm~A;}-S9Pb$L{?Lw#0fWE1q=zaUGgQ@Ti-f^B0^H zZE@*tBm3ob%!T(L7yp!{3^(z*+x_*yU#moFh0FkD$W>0e&ND-$xYfX>ZgIho(=F>j z%lU=g=VLV@xUsk81-jSyYs1yPg|{p73g*;JGC>TBRNXxe>$G*@?!UZg`D+1;f77y= zb1O)w*LAsN)x`L2J}0K_kMJJF{I$b!A9T_@Bd}`SCBNL`&Cdh%iodEiJruXTf|)3O zvL0jb&T^n4K=ERUZ{m*SgX0(huN`csmwcthv_#@sw)8Gr4(=?D1x@$UbziHp2pa=$ z(iXzPyH~lvZ%g3c$shUquhsqf@UM|GEzQ~l@sM4?W!8TuqDq2mmd$0>_wywMl|G0! z@K=Y{AePIlTSK*Q_ItWY+j^2gtW5WkLHkpnf;IX~jD8^sQg3eaRVdeV1j8kZ;5sn5I2}kE^-2Syp?+ zd#q=*b$j(=xFlRDbKf~msJjQ>(NRAYwUV)qxd~sTGjW`V`6z0=oRm8}V3YL^+j{z6 z5q$e&41t?PtcFMoK4@0sgn{>#1AO+TBbHwDSl75!?qD6h>X{&w?%@bbpO8tv6tG7P5++sG@vE|l181VCQtEYLf7B)}C3&B=2l!)EV z8fXCq6Wdu!`Q{KL+90$<22Ss||BH53xSYLKh2$-`^2(1}wAIPNdkFMjI$8Uxk9E(^ z)&)>rx8Ra+EOT>bE6e`A>}x?4YaSc z2I1qMxY^qJpibM{a7(_fv<^%*NM=9s7#&ORJS;q3_wHg1@>1HT$cYSG6*9~^7Zu*f zAITtFZN&Sx@`qVaQg|{#|9pIyuG7XYp!kNaR{MQ}eS6R`PE3(xu?t9Roz_jroQA?T z<#@Nad$X;(#>{q~Zq~^e?^O>tXca+|I*TW;7#(svnY>Hi*UcK7@TAEu{Z2O=Yg?(m z?FOoD^SsySepl9(hC^}1J#EK(%>ZX5o{n<7R}Jj4+%JA?>mR*{;!Z z=UO|jG4H7{pXNO^cz>Nfb~?O@@5^)2JKqG?;S|-I$Z`6vCj`y+)$VjskQHSh2&oZH zpJWaPerB_ETL;`m>$;3p?!U=lm%bxo9h(33VaB>#HRb?4)0CwK%4-D-3UshWhQ&IdE5`?v=E>QHV8z`>#plCh~6bsM2Z6|3}>Mgyk z&Sx5BDZ~^p2a;PTZ407eyOaAT%2zjXe#kfIr7-QN}qzNIDngpSYz=o$NjImVm}=S7lHS; zLb$LU5%h({jN8B$;1Jv;E0#E^=>?`Ys^Dt0u(?+nXSai9$&9{moz+oKsIms@rYpjw zIS2$?ToH>#!j=kQ?U(@qu!!m*fPg$zbY73dE$^quD>6r zJG$JDTa_@ZmoO%4MA9rq5Loe^>hFgXu5M`)Qh1*&va1cKVg^)vCx8!O26}O_>k=e~ zx0(tfi~=+(&XzOgok$;GwvWCw35yJ9 zV?y7=m_|bcl)!BSOmN>aF44!HXghxYB8IJAtG(WQy;Y>A-D;)v*JoN~IUKgcZ7i0< zdq~SuHctvj5ipR>7p2YU40&@5_P5>i4Zgs|$T7I7AS!Gi2w=OIYhNv=0rr6L18}FR z^_r3BJiO3(Ioez)yL#hWvU7zvK=Z`SlEb#ZlGNT#sKcoV{Ob@j7~tL;vtj zTsgpwnuR}%7-H^ob*PziN?7Br>=>>%;{{LH)4;VAQ^6*=Fpmd$ze{=qd`9f^wNL?g zcojz&01FC8PT@jmk<`L)c7qxu8@^vCC?Mg`_Vb~DC2M;n4zJe%cKrda7UBy;jaMju zu_!%-le}!*Hrb<)Y{(r{U}1UtLDrUcnqu1yp^ZS?pQ{EC4%Bcqa->|^={dT`dx z31^CO7R3hsA!HAWENO+!e<~abC!L&w(4`Y(DtE<8t`Qi^Ikcud*}`O5UQmqEt56#3 z44@R^49J(zr(NWP=RyUA595};+`JTx^YUD(GmaZ8GXF)2LTFboCT}M;o1+wH-c%}0 zZc&{8!Bd}!Y|`Uw-29lJQsCMbCbGDa4A-dOjz^quCpW--YT)lKylExZLRZ+l8OvZC z(Cz92k6Rg#XMqH53)BEEs3rvfcj3EB4LTtGd3z-!BtC(T6eENMpi4z^;A``)p%xOm zk~9Qi(e?tlEQ(?Zb#h=ms8@K9S6sER)`^o^g4uM#))ACXe5Jy9ve0@dh)En$J z61&uX#O^|mlIvO;IUZKMo(6cf9!cGeam|YvV)0`4wGGx)7_Kqb-GsK_~ z)KrIFgONcgzFEW+?vKN!B8+6DT6=b9+z9+lFtY;7lblo?dLi1Dj(@^SR$U*JA_Yfvu6oTUhr zlCduN(@O{8y>LjOgowkL57S;O%LmXNzyxMZYNr8%v7_=}5c8jar#$j-0HBG>6NQDC zk_5e+mlK3O99JTVVw8I5YqO~U8$2foAGixiz$Tgs^K9Zgjb*VsDwYMT9b5rRDlWyl z9ypz%OawVO_?mDcIhNO?N=^C}l6#mMW8-9t)PhhZpz}SLax{(8t=)qzFA`lY$)b4o zL;%7@PR�qNeaxf@m(#<1F$3Pk_psLa@{ZI*9mOTukiZ0&j5;1&S&D_T9=9AQA^o z{C}bw!%p#dTw|?xFN+6V@0=_MK$69BAXsizk~t!%&7Uo*W@xh@`a&8t^9sDul%aP_ z0{$K-ODs)lonl`u;W94To3uM&ZyIf5IKbw70is+$LjI`K1bcygVlBz+6R{HkE;Fqa ziEL4z?NzjC!UliBB8GFAu)vXW7?!ioFfiIZ`BeoF0=fpjsKk>k7is28CkD93vt| z$>3bIZw=Xg7s1O&yE59@DYyiS4%A|53Gk>C$d4bqIFA)8}2EEyw@Bge7{|7G!#YF)vBq9YOM7SpqBPMDG-DK#w zy>Wg5VfeiYN^Z6XGN8MBNtjC$I}n8(NG5q$j!!`u-nL} zfm_EYq-4|^dg>LB3!(Wh*28wP9&zBHivd4bP7#$^0THACF>oc{IAbv6kw>nQo}Pgv z!e6+vaoP_VpZX4dMlt+Jd^Q$)4rDQ2`i9?NiV|`AiZfklP85(|3R(e@;kaBdA&)XE z>7Dtw4OBZpEaG!Z0i$m5MZD1?Mhv|b@m_D^_aQDL>BDpYoBRM6f!)1%<@~63jN`Uo z?DzR58?UtlL&J+_5CWK2 z!>tbV`dTj>L;Y^t#LXVGu}ZPjU!w+vAm1z^GQ`v)tQ{90FvS+{eKUp|Y9|O2oFeTY zsWL`?n2@&t0}pzN@}T~~d(#RrNz)GQSfs$gK#^w<@HnV(FsiH#G8j0q9W;6p^X4qnQq{3A*F|-SX1d8XMNLf2O+UC^{Jfr_>LL4#&oeDZ3P5!3VlP_Ce%tY>1-IFUtCZBwu~O_AED(2#Bz3oo6UVklLkLMsy70K<1| zL99#=cplMFk%aSx2`EQ&L}z|NcKHIQz%ZfF9Fu-2C?a-6`ZQd|3zn8ki^!3ThT}o! zT>3QOPYfZ?&$p?lO!=BdkX%Q^*0|i>nXiG4P>C(qR zrFQ}xv*aL{4EFADbWntyfQ;tG-m7P5Wg|w(O#bBIcp(lKD3iQ$F7Sc{s*8)02+RZD zqS;$m9Gy5V=!lNgh?JaN0lIR7?-0l_g`}k8`rHQy?Jn zc2jPpv8yXhk`Y<$->{otYhqN`OJZLvEv9EH)FkD!FQ_LWjq(F~_7My=stk#JwB)Ao zjHbyuMt!B%=qnp48U|yif$nH&AcfOy8%RAp@QBF(aurPl`I1w?;9?-jbHmQ#@#-iV zIRe(6Fp#?CZI3YCW`Y&^wg+`kVMw8c=^^Vg@{OVzsh1+(L>R8)K7hP>Lc$Y#XGF;K zA(aZ8VU@7CDi%=Ljz%hH;mAPky(oY$5oR#alb=1p%T2Mf|8&o4LGP2 zY{u?|4mKpZE+0Md0x1~SUp2@oWloObf(cQ!u$GJ=C6^nD+J%C&JJ`6XiTTDxCC7$I z;s62boneA_GL?;eg-j{DlNGyU#)80GG!SIoru3`htsc5=4iZGdHHfvDx6Ts_0o6-^03OvHN>$q z1Dh~~FeT_lj5l_%gI(}FzSs`?{w~;q@mqF^xZjklMXsZ~)Y+trm^=|l8S&CV;8YOV z07;I1v}!6iD}6O?Rf;*k(=3KD9De&QP~y-b5R9acmpJYoP*i1pim zD51RSRr>TO8Rw{}4ZL4*=Zf0Wh_b8@LTVxBDkK0PgL&MSf8F@de?N5hR|4)~jC2S}3hljU+y zfes?GHt}G(7l51O0}r0?R)WdFn%W)ul5>J_@kl~&K#YWrfS6*kSk&iiCR+OTu`qnj zaQt2Z0Gn%ZZ>KU1^}3(i@3>IVeFem6tSL1 zUObC!Gm{PmoCz_@>+onq#tU}0m^VU1B5x!>9PlPnHoXco#1=CYVRqbi&oC3VK_&jLpbx3Z?q+k!m4d;l)#V(?ymwqLr`Dajx=wXA`%q@rv zQw$@^3WU$3O`{v|GNB0VDY-Wg3t2!hOq1T{8W^@7*T^n<5G@2$^6i`r1@dYG=WI;O zjZmH5>(9MKn4m1Qco5r)u*ef&yuL}^D2kaZ4l|v=sY4NnrCx4&QqDe>>A6k-gR4e4 zXDVno<8w2KFyLnX*-`B*P#tm!iCQsp6Cry9(fCvL)#Yc>#HhZpr*FNT_hv}Q?Q_Wl8GZ5>V?W)?2T;HXpA)A$8GrWsbZ)bAs*xd z7OcOS>o=P}+>|FswpqTmkrEGR$j2kpjJiRf8%q%XSe9N84iG-_i7<>I3j-yhCt^-f zuqnRSzwpYtK?Qdgw!A?lfyxNWMB#@NRAm&Fhjl48%)E@y2l;xb+6EtV5NQF3i&h{u zWK$d#Ww0q8|JPqBLDAeRGvk+2O45{8t)2t}*xQVEI`uWd)0z9x0?Y8-fdw(#?q&wR~nE} z@Xu9j=<9EsvXy*b(G!6vE;uVi|A`D6%kOg-GYR8MqqrPQNCL1PWQ>^(a~)wuh!IR5 zu9Up*R}jqGcW~38NX<wC}$nYFoz9R*58kW zvkUlDht^5I2=?Lo;}rf(uOc1E)@Wzl<5a7=`}wrk?LW3sIock;i<|~Z@?cgzo+Cf~ zeNT+$hoM)S{zck9g8oUAV08*7yPR=ABe3t6XBklG?2!-#JE}<2Em`h zARG}r1zSd9;t)k;&}c&b3qkG`4hpg=7zyv^CC{_BZJlwAj%!hkKZd)%AXy>=C`3RW4=kR* zR8!RBd*fN18CA zlF>+Wg*x|Ns@xnXB(EBgh+lY5>(2jI-J5_}RUGZ(_nhuo?+kN?bzoTT9kyW^7C}Hz zoCCO^A`o1oMo>@~RsjVgdO;CT5y3$l6?IJbl(-~ABn~Dd4qwO@Oi(ew1Qit&6%`Z` z5>Zk9?^}J&oihudG0*>be)yc)jambS*2JC{S;nUm(8CJHh($(I!X7r{sRzv=rDl&UUtH+lQtEm z(N3^VN=(ChzhiN^WSw=ARrsr;J=3VQRt9Gpx4@)0BbcDnipbN9jN>ebsnZNTWAC44 zB*9YvURe~io1V_w{-K&_>shn>`558bdDhvk{bvj{DcsMl8C<{O^4>szO2<+S9SfQ{ z!Xb~b{Bgagfev3)!JSX)frsVsW42*jkkRQ>myFtDG*@TDWgGIGyFSjT(cHtlm74n zQhA7i17+X$UNwSBEj&Z(hCRB#ve7RXd;N6-g=M{?n{bjJMgxuxr7rczy~=Qqo?|y8 zx!i~ZzajkbH_+Cawnl30X6;1qInrQfwu1ysVG~?Jco;N(PH1O_n*2oozV7hTE&_0P zm=+(1>xqa1__o1SB72BMfIZwIb&?ljn}^=k-jy|0rLL)b+G+k>_#=%q)GcmlId`1&V{m!iufzK$A|r+%yp|BI z&E=Cn`#x;``*Zo^_hR$kpUaCD1U6v*8JiFB!vB!VW2b9b6=eVK&gQ>AmxrKm!u{K^ z*?e%Hm<;$>+k@kCdAV&PR*wG(oB#e?K6#wY!HL=YiMc#qt_XAa$H+Iq>?(v5Bhg&D zldD8FszS%jpmPsgd3FP3c^sjLgH2$V8{pXn`wm&I_394`q6U*|q|Q__luS@@iLss4 zH0gxHha($9M@r4?VmHaNgH(R7rBrL#wl!$=8cfcz$zVIFzZ$?+U0brA^*I^P&PUCJ#1l|OH>J+ne`HIvKAF&2`|Lih#NH0i0bTbNJR`k0)6GfB<5#OJ z5`|0_><(j34uV-6jyugHVe(lSvDtzrlB}R<3!bs)KLJ6;E!iK zLnXux)VwM6>7!gdr+)=$vUq;$W*o~Cpr z4yW?lC?9Hc4*1Q_vOe!eRI!cDtA!a;kKQpTP}~TA9gMY7&#y6gM4; zPnlXC(x4%FV1!E0TBSC4ek0yF4ukp7L>coymurGFb3^hp6%#f8bK-6c6BEn`a6JlS z57uU}#EFe3O4=<7@Ykm#*b6m6Ht2_H5uFNhi{)Rf;~t^5)CLN5+9{GngapS0k$737 zz_ptl(P#Opbkg3jj(bE^CC)xEeD-q&hHY0Yp1)*JsZhs&2s>-h?SwWL>CrLJhy~9E zDcM}$sh|YF!8&nvc3n}ne>D!a!E!aOm%mQ>%ClYscdl%VdZXcNm=c*s&f(%1&z933 zUWJE#2gV#&w&Z-@zw<_>le+WfYb~%ea1mzX#Zs~Kqf2ni&*jQalnNcJ)G;Qqo6L~Y z9Y}1jMn};`UfOIRQx;Z{go9mBDV!?Kqt?#4Mz;?R_^#2B6i2SO^2Wjk7_9xp>OL1W z$oeaGP`$NpJcdtt#`GKA*6?q(87cN_HyIxC?0bWg2gI&AQ1uJWN8o@lIV+Jz4bl=<| zq_7cl2l%o*1NS3%V^yAv0ar~!W(ET!u+M;G!s%6J!)8@-gBB4FL zfz6`l#Gn*01TBXw9x~w#5ashlUh)VSMUVEX`m-ia13OY`EIYxT>urcMMqT<8D7JJgV=_6Fph2HysLgy4vYm)BovF^z8t8>{cYC zp}rm;u1dJmm#npNd3NP0wX_8oi-16*f!cgA%rNB9o)bx?!V{szK#ih|AZrwP71nxG zPS{(Xc6ZDk`fHngBoUA#EK4E<=ok8eUoEZt8EgolrtuX!@szR$Y8qd41G!DEtI2ke zJ2tyr6i>Xc#DvBsH!upcw;n}d15+s+FxF+9-AOcHv3=mMado%Hh#a?3BTP5Wd}DlC?Jl_0}}DP%|1IQHUWpk3V4} z-vTu|0}Hucvk{lb1~FJ}5L>v&Kx~Y$o>X*oJ3u8;%7sKVEP~ynuK`gc4?l z*yiylZyzAP%SLsd*O8(o2D-%kMV)%rJd z>5#j*%|QR|a<5x9OMypsNWpOLE(}ma2j9T}@63kRd`=0R#Mrw~xJVa>4ByUIyQm!g zpYhdhT`Uj+)~|wpUHJbWU+rr{ykadWN|)M48Gc4T?RMva1s{IeMLU{#g{4G@&`|pP z*Il!lyryItFVv3w9VS?4c8U6_FU= zUIBDVHkA}UC2wQEM>}3%z$QA;9Di^cD}2lPv+yc>9%vbyl@2N_2+0Et)_m*idO<@?aBM`^jxel750tOfBG9XpJ zrNad7L2FjoAR#w4LAWs*4_pcD$pD88-;fhthu-eaNVyWCQqFeEO6->W&ZPQMe3*wI z%b3+7xbFi;BU$g|7Y9;%_=P07D}!qinX&Yk?9@JwCs$7zoHkgy)tR>(yROyml;9`3 zVE1sicAe^+EwU=KPOYk0Fw&7~C+varlsh|HeW5%of*OP23SSS;fZbCBPT*za~C4S;DRe?|ZBpxo1yQCH%a;}wf z2`^ZRxs?Ic1Cehqn{ot?BZJ1Nc@I3lTYc5ByPfis@1RWbwvf*t5yQ2FdK}*Yw2qm9s>Kt$6d(@;t_fo?Z7nKn3LBgHW*k__Oah(L^KiN|^&0686Kw zGn)D%YGMIq`!1$tw%cdIH4Sp^qgx4jq7UP)wfwP6H07@dOjOjK2Y~&)OOSo|X+3}N zT^Qdx2zd~Bk!8ZR^#-|44buVsgDg?IPk$JZtTD@dUII*kE*ECV6ms!hPQC)63u>86 z$W$;f-~$kuc40#Qs3&F*&_DhJ(XfB~N$16=JwJ{H`9l^NSi3eoBi=-$wkF)7f>Gs( zl>@}MlxUb;Uo?yqVLt)~0KQ~sx3j)vm`%wrTMlUINrjLIAqdZmqxD%lxKE07h|Lqi zvR2Ndr^yy}V?xG+%{z~feP<#|du*HW6Yd*}2ROm6P5TA^Q`hwoEvl1Dm-CB2G zGAnhsh8l4tsZnlY`a_U|KYyP=N0vBXJ0klG-yiz{za_SDK-z%FjNb=QIkye@T6Q&< zmK1FU+XvKEgI>vF?h#lE+|wgB$gI`|l~Q!Rnl zKHpU9H6r_ZQ|LV+953$R#J#*6oCEj|QS1uw zh+Tw`JqQT+j2z?xUc1wR!+=^TKBFN@2M<3$`Uhn+C|AkRVb?&cz{>zWGh-uQyEs?D zeLYcih&Z2Nyk~GDH}rNA6d_!h?0ZcG8hoz_+$4}q zYu;)s3*xyPBA}?)u>r^z znIKRU@ny@fM3|CpMX5cXw+=bNKsv)H@$7@_S8zultCMLsz|z$o)X^_@b8vv^~VYSdaQ6^}WN&32_p zz~ADjmDAW~EaCrwh|IN}T1Dxt+?NcA<&CTotD(Md{B`z`6aeIXQoEQ07>EsSFgHPw zV?VisX{!6=QVl`+m1Fkf+5XwSop^hdqM>(}&`WuCsiqR&llhK7+!5&!7al0tfTQg2 znGFR-3`kVa+#@uh#xNUFo3Am1=WnYr{FZWIR8-KA1>q=?8bj+f6QZbpVnSKR9+_aT z3Y%MKSs^bXqrHFai-hpl4jG;DZ<2_VFWtitPLK^{t+6jlQt=W9lbB(z8X^g(jnY7B zmD_+gra>%7i7Azcqud4=B^9?8aiCbfFlpnc#;8Cfm?xK^RK`_^qsRf-B#5JMGC#Y& zf?Kwbr5_f&h`9Qs4Fn3T$pQ*@K_g@>S1f!)vu)Mj#Z8=A{4M;%SJx=^KD~ZbQS8JAG8mC+iV^8oM-|lW(7DvYMqmQUM zfg)a|L?*E3@;2C?aHj87+n?~w+r?dzm1q|iADh_AN<4=qcFMjdPFS`1?m3H7PCaq# z<=Z^su*>)PiPNlB{b4tO!Z`P;F;B)`ECSR}uz!v4Af0{ooo>_sFFBevKj@^*96 zmAYPK4ZpiQ6i+IrMKUt{$E(*buC`BV16>?%Q4rz-+hAZAIbRmWFFaDrv?yOkPBZyM zPV?ce-B2h`YQ!7O4z!$(cbpoL-cXIEQIRt#eJkr%X7sPz&L%lp<%A+S$$Qd8Bs>>F zE@1bra#YfG0K!BB2qQN7=G9l+LOh1O{}s0#KDpc6A^42ihIiLDzT!4Y!@J(FA9&>z zw@pKt`Xlm%m)$lR@O7jrg(l5G)LDQZ4Nchb-rCMSKQ&)w`g87Oo$kzavy+-nF&~Ho zPcg%wo@caXa&#Y zrVm>KXxDawf_!63Yso8%T1li!>Lg8GEBEz)IRDM?ub_2E=maXk88TXqi)Rql#6x7F zAAYt>IA-(T+=1moE^TH?t1&8vDn+>pg|=d_N=DE>izYSsouT!g??*1*w_FZRxdxPZ zcP#({Sl_FqlgR?8b-*nI{3Kh>4P`B7)^zb%Az9%7zE)nB7Zo!6qnH6jPHaP5drr6iIS$kY-Mw$0szi7Ix_X0M9fVH`=ZTWYnjr=lH%20#^^Yeo-qnmgLO zu)|Hnd9WcyGU=WV3yQ|zMHGV5V~fjwJg`-|qM)5-;;*~iihbZx2&xBMk^Xjxsnt7X z>>F;|EQ@txiyZUd>u&obnB}P`h|d7a?*LujM>x9XYuV6OlBW-1&Ih<9=Zmm#ut5-5RFGa0aX7~%5iA$h>d~zGt=r^O=)AdVDNse>8+$%&LdHl`^TZ@68_(O6utz&QB0vT~$e^&{;& zfq@$ql5~!6U_|awIyH||(L0JP6;4@#1yb)*r4pe0a+t*lEM(~!*6iQv_A|G<;I_mv zy6Octkr4ZLGEASd^_3X`cf{=XD&hsuH(qcTMI{>;AS2fO4HtTDsdk$?JI#I7Zl8Rt z1!7fOI@vo!u9IdStadw@qt$NIdCNpMxtC$pxOS6!0~&pMliS(WRyrBA?J}|db;oqG z#pHP{QJz}gz`h?5k}c?u7Blb-Y?l46+r6d$cWaqs?x0z}bvy9*nwYh4m+kdow2>OL9 z48V@{_L$O_ zK!JPA#V@(t+Aepd2phn}}Be5nsq{NoyjF;Vx82RLvMR2_9Ww#GP6b2yz=9$E+U@D8N2EFRu?5IjN zVpg1@+n61Hard=AC>mQwb_kEk;4HLqa$=vGH~;Eh6Wwxebp%mR>}@jVZFl!J4d>=I zDefZc*{`{63xDNf?zWU@2*xX-;coNkS!#SEAyUp900l-h_H1<~CiShI0m}hf!}~ra z?=80@D}_fa9pQ-7e00^W(SOBB#?Uj zD!qyvZhP^oFTVulr*FGIMmv+fq@yc=s5yeVvL|u8XYWUhY!h6} zxojW6upIAy86S&%VZPag)pz^-CcYam-e)$o0`zCS=eC+~*L?(5iWt8_0SV#|KjO{T z+=vKPEe3J;`9$sDw<0vLFI9-G&v#i!nkV_NkQv+w&95?MY$vym8ME8%j6U478!Tnp zO0ynavVft012H-UnBo**x(9%1^salkv;EoXpFF6Xb>++Ri^}JJkbV+`V5}r=Y%wm$ zaU+Qjg=qN{$3Bv82ha~Uag>-d%gSGQ{8V$}UN@d3a{OO`o0fFAN7&|0E=ubViSwPO z^;iaZ4=@`V%(ZTrw;Z5~Euh=I`MC0z=2f~BGPuIyqE>%31D~`mYOUK}&9x=)FYlD4 z#YW&4Zbai0CCyv!^1OgzE^2kkdK5vG;B5>=Rw5%V#(0}U)u-XfB-FdgF{AHwo1z-H z?sd)BkAPW=&21lnKo%S4V>i(SeZsI^pjWDEkh+Weqg$wwH)UlkvFFUWAG>{$5=(K) zkLBRDIc2dA`GanfBbRvYmP`*WbfEJ)C>mhC%W1sk=cV0rV=GbF*86Xdahk%jE2Z5mFQya(1{0yjUqQ@bZ<4SuZj0GZ@4W-fa0&1c43C)NlRVob21J{R*}@phMIumn9f(ZhZCFlq ztSEzA5Wkx8D}E7eO6#HwIps|Q7er6}RI}-TTLxfvKj@CE4SIxLIq0^ao~1m0Z7X-N zYaaWjJGds(xPQ8>`-y;8>=qZHLT)U(+q$tXP!&dzg2JlybkHW_k5eJ4-!#B!1px_* zLu{RS^q+32-=q~Li`@dYMfTO&*6G-`oN)K7cIZ8)0A;rva#y841P&2fV6OR>Tb{iT zw-0=wUj5s>3R$lCH&Cj`Jo34ysDAyqASK6#v~BM>6ue44cduxQt^=4@gEOhaRS+m* z$0&7OcPW*3*zK6}5^h-5bp+s3!05zx`R&U#H0uAkc8gRb0L20uns|63G5Rt zfZ$HP&`w-2-M?}#>$VGn#LNSdTQ)fJ3M^%gS$xDj z+HmLKzr0rGp8VRq0^rR2Mx?poZ`?Vpd>mpge2hi)K+D*N=J{{j1MZ$X%u`3*D>6T# zVDH90`c+Jw?Ku0ZE_GC)%3lCjc8Ns#MomC(DX74S^z%GvtYLT!)RlXSOs} zuV?Pz^uR;8IryC0%>1s2dd*p9RyI|0oUJCOnQGq%VmJI!K+4t_*m84PGsvWi&BA7i zYS+@{s)c#GnW854n`X+hQT?c0O*5~wP$wbcnday&BGS#W=8D{TzaNnnM3l6U3P!Y0 zZJAM<%9c*c3_+_LWnO6Gu+(+!9BOp8wooVI!y<9cHxCBDg($lz1gsi~zbV*y1u7xb z9?KVy;Zh#h>6|GXeD`tn-JIcW+*2he* zA`@C^-p*;~k7PiQm&&74?MQ5ey$hxJ(S-u$8HI`fTUIClV+EpJ=fOz`V15O`kwYD5 z-_y=%oo6RPz(ex|Gqp9qliFSpJgZwP^7A)aOZ#87R@_<4^%N)f1 zUt87QUBA?P(pKGc<^k-Tylz0iCFB9+2<%z}mhneRN=}Se?Nxv-z5d7qr{~@-mRPei z$b>16Rhp;UsWvTM;&p#)8PQw$2?-c7`b%b4JM|l9m08e9H8quRh@T^@QBiY=9b0u= zz2M-1yo6eL>`bQ=shjd%XZ^C7V#(d+_eH8l9yV->dT3kSj{DoIX4ptIZ?CT6MvB`D z$m6@sZS7T0Xp)|7uS%N$(;$c_VTrcbnUC<65NCDdb^-fT;_4g^(ZtC7=H#CE;N4S?OT$X)eqgp@l%d zY}(kFOFN^xyUiV)RcGprY+uu`@!Z&1T{3(*#dGfdLz{AJG8*4XS&`Tv4npb(Wi|Vs#4ku?LHRsJl()F6ydqt8bh8x~MaVU0u}0Nbl2C zbw_AySJl(~^D?udtJ>r*gImy5)DAhmpNsoK0$jUf;3u{jo6L>f)Tt=@TsPGVpAWmK z_QFGO_zSy6uEg}rBzN!Z1J*bQHeI``Ld=c7UN3hjG+-78J^m0egh7HY;+rUjXSa)4 z&|RGcZu(+(b!lH8Fv%)1;@mA*dNE zW>E7sTk~T*F+W?)n>|&h9(IPE)WAWN4)w!XXb6P8~jztAq+Ph58UaDPe>nbkw z;8t=X8@x)I-iggKf9i#` z@N<*iTNM>D*D%LnuGr+FbnK+lsiFbR-DZaN2AAS&;;ICDxYf+;4ZbwbJkcA>?sK!H zxB5*&lsYczmGv_XBaj~u{7HnFP~5CJ30(U&^Y@cfN2x8t*0#cA_5q;hnL&M2VUu~Z zVzS#Xz}P`GH=D_Q)Sunk9W(GlH8i9Xf(%QIK{~2l@gbJ>r}~0t9yEXMt2(w_3LpJg zx}Y<_HjNw^J1ATZn{$V0y+_4!4?lnu%oHTh*fO*CWL2EE1hwTz6lZd&Y1dEnO0NAS z@@2=~hB^SUS{(PyKwPZ-my&=VIc45P{Elsg3>t$L6FM3y^#9HD{MbA8Iu|!6jA+gX z@Brr6%7~_jKrr?a|Fxj)W&4m|FM911MI?TG;^IOAo(%c003BjunFQ_V6> zSmp#nuNlY+Gi-n=NiKXIC2=$*iZ@nucPhfK`_5E^U-#l50&N4V4M8;p)B|;ZdN2U$ z$8Pj|(3N>%fNFN~A=a2*g98=;ZvQo6VHrpS*!pM<0{9J@O{c16X}jI%GRJHjpbDlg zXDzukwP5dSD|(m-G%7(wYw=q!DGrW7G~2*LTnMSvN}TshZF+S>>9IdUd8?Xe<3!&z zH?C3b%-GgWnknt4wApqFgrikv_aN0L`KBzz-2d65Gx!^MkgN*#9B?!&?eEygh)gmx z5L65$h#1E!vAJFeY+f5IkqjDnx?U0D*6|uyxxQ|eN%p_adLKp`m{`p#U(tCgoA{(?ROA z5E`5adiCKg{OUM}Qy<>P0$%q34eCP= z=-T@6-<%HFYrg4Ls!n4CX|{sxRY7aEf(}R$1n%qmopXmk6V?H}SzRY*4sr_Un-Vh` zc`6Z|AIdV&Q+=34U|o}C$8$C9F^fVLlN_v?N7tuPN@OT4-jt%mtI+IMyQb$5?o_Hq z4uL%A+-{Z*#fGiYtjpK!%>JP&4_n}`hpNubBJ;bC)R^dcETibX9PzaNSQQ|C^)Pj^ zyY~^Z;|w*yUHV}8XJrqQ21?!^d>!lj+0xQP){Vr3-!c2eilU2 z?|Jz2L-$F?9C^zfW}@dP972|#IpSL9-SVH07?}A6<)cR}Mn$iW z>QHl_jbqO8tkI`Ci_3?P9%<&B4*_tG8{K9`z2g?3!n&tg2B%tAJ5QP!Bh|d7@7A}^ zlS92iud`{-?x!U5ixO~@~!Kr|GeUzG;wFhh(+N`yX$^VnvyLPZcz0>p0 zjxpkT$HsQF1?w6d?K($H63rtQsQzcX!oK0y568n4Q9cZUbr1D!wPFzS$)O(X2$?kx zC3BT&+sQ4+{E877{t;f*Di%oN$i6OgOU&{MRbFf}1m9zACR*1{thJf=*rZ>iE{o19 zf@Lz9LhPSr>P2c6h=2D*s#8M5{zj09b3ACvGGd3}R02}LzzEf5i41RHRq@5@`mE&g z)#y@d@6b;`$Q!7g@FQ0KG>F)SBroBuPeu4SHrI{VQ#ayJD#EX0<(gEb6y#B9GH4gq z?0ogew#Sjw!<$bj{}1SqJ*cK&wvhEbk0|UXa=bOE5bXQB?Wqu6?(i0}q2DrRHgZbH zmV>1lZ|UYHaQgt~YVoRv#;HFzJ-30G^>fe0PQOP#F!oGu6*|EMClkNpU__VT3y$Pf zAU?Ly+;g>hJ_WkepnSkA{2$~ISo*_WlZx2F^#TK1w{dH9;<0gjo^hE{J)Zs zRp#t#RIec4novH?d^job*4um!hVpF=$ubjl$I5_qB)>j;@G?*zRs?^r%A#~Xut7r znJRR8o9D|^w<0TP7Gu4lSuCs|@rAtVFa0nR*ksZttBFv6PzI(%krzcR0TuddJ>=A~ zS_|yz$?Dwb!k>{kP&b5}o2H5s+jxrVRQxO(gIsfx6@^dr9c3e%Y;Gtu;Vi&gV#ZE^ z-1VlpdkXX>i_N+zszaA=S$5aY%(yAo_P=SmPL;yvPsMAm8|!q)d(%xstdT>Ya24Tjn%-Nj)&&sXW*OneCw;OA`0v)b5r-*i zkxG5T9Z`^+J{`*RtIarka_1Fsy^4A{&^FC8E2gVZ1Ds#>pm2C#iP+iW#Em=5&?Jr6*-ZP-;14c@=x9n8Cx|0#N6upFzpyW~z31^NL_?h@CL(VIeJjZYIuD zU6L#o&{C@Px=;&EAo{dSxsElS0d+g1Zu`IAQyN)n3sL#Nt9P8<=e@Y)0AwC^OqhMs zWEK?Ni_HhKaVD|7Zntl`UbSQo#WXjK$M8`5T6dEO zytz25m}l;p3r;xCRL)f=o11S?!*Y)R6TJc6`br|CdHDu4vu+@=*IaPkLZjYOKC_Qj2=gP&FmBYLF8A-&2pn7%(&sa{otde!SPi^;_$M;#mC&jAg>T!!|28{DEy^lJ4jYAm;&=m_E&lbMA4@|Nk5RDJVsIzrco z9*mYy&2DpDQgwn=LQX5*K7@;4KGiDD$MNC?9QvDeN!29lZmO7d>~Y69OH^AkxLjqL ze6!Is*7!ngU`eX+^)MoEqBhxfy`pF8L1e=r}NcCK_yT4m3(ub$}w{ms9dDS z?pEDQLK5 z;R(QVKtdws1Wi0+-dc!5{M{yTJ4gz3*vBbg?viHD197BjF27y1X@;JsfsmYNf=CO) zE8x^_v+Q=9ZNFijx*aE%zc9ORS6A{bK?Y|V)PuVZEI)dYYRzc4QekNa+hRuFvIxqO zN^}1rMPvJpi&Y1Uf;2b_Q1FO@4H(D*Q9!}N4mPH{&9uepVmpU4?qkfWi&es+V0Y7Q z2`(V)HrQK-v zcL@bObyouvG!4TWxilc2;mvU#PjAAtDhpFmqbxo$VUY%hL!_vF0LEE&H$Y6MnN4@A zrr(mHx|#ONRP%tWXuLoGowW?o6E0;e6Jvr!%aq*S(B6Cj&<^vvWl%xxHh*6hKo$qK zxE8(J48KQp%6f;u$V{;la)Kt=7JwiRJBXZ^FsvR)jN1C+f%nC1G!C#!roE_<@48T; zEQw6Sy(Pk@Br-`H%{lU{qZ9;6E02zcP(ce@0pHOM>g5au$<1wYFpEI#oW`js^z~bh zhne7m%W+J<+x&UCHAApnZ$!SZTurJ`f=yomP3>Z1R;V8FKuv~wN8vg3qk}mW78|`6 zgz}ClxEIIfyUmz;Rc8`;suBEzp91U?gedM`3dy|kUeyh9ELbJ9+hmnI#Qo%6)jfcD zsQv;}UHO0-ZNW+I-6-~q$$e0jnBC>71caZr67>I$ng5^~Zf2|mcYe~$TPb+;>`K)M zGEC?dLOVw|kiG$EkL?gRkewiNbfqfh9VkuHlzL1w$w;B4(U@pZXEinHo#B zpvt=YfGS(8wk-fUP$kACOd4R912kzHOebfVj*@~*(BpEMn{>ZwH%7Q;&1}PY6tlt2 zPlL!1v&p!0DI|@HpgdR;=z9&}f@8!arMGDS7fv=07}cj+YVHdYF7~pXy@TbCk$12F zQF=<_g{RMrD)}zRQno5UmYz`o56u1v*LADD7232g9Uo9lPp^YJSjxc0@R!Z8!<^Sn z2ehHUFWw2W;P9hE$Q5lQ?m+C~jI(HB+U1U**AH9D8l4Un3C|6*n+-5pP>rk{Sk~?S zhg3GOKKhU<%#~fQ#+F=`v_221(b)Aw>3u5`W<8;K6eCbt$pkDzGStkZ|7d2-qXT{f z{8JJYaDUcD)T<)bA_Gv%W+<(fBgf_dyYTA-0s2_zN7S%52zzGeYIPdYQ`yBivRS@b z(N_G))#_F#L`oip^BD9Cxm@h%;jz}te^|9ABGaZRioq+}ECivNp8K9{Z3fq7sA)** zA^HU!6<4_C-w#7Vs50FjQ4e*tN|G&Dh%q;?^MbJwetVl?@g>?OnO3NqK7B;JFq)ka zr;FO#rEt6n6@ag5l5AmJ6J)c~psJv1A~WHLt|EbR^ST@OqmQbg?M0Vx{OygIP@#q; zSL2`=mw)Qpf2?H!{dD2fz7oH2YA<(nu^~P{fi~|1W#;3kj%6sDq0BaxiPb9uPgUWD zb|DuF`PLe~aYp^lea6mF_giC|K%+Z0^gJ61n;`@SEe(}P$3rkIw7Twy@b;{j2Ry|D z-#lSwU<47zNc{9?neIc$PbW>X&J|3G)*G?wg*%e;Eh_?JliQ`e1`63tMC}m+ZQ0O2 z2#m}I%6!QL`JZxS0`1 zioF6QT}vq{nm+y`^?)8DX`XU1-0|k z97vgQYt$XdMZaea#awopmUCaFZ?D z$+}2=(GM0|x1;y^!T#3y<0sXUIq7v4uTtK#HtY=$3iiHw!PYgv-im(75B9Jxt^LXm z76?UokNZLK3F>+e`oSDQbMNTyY*mHUAYe}_NZd?#_xa&hBKC~`bpdIycdFGzSD38F zRS%eH40v1>fn#6xxEh^Xf!V?d-2DFo8f>U~{&6+VXiRR))XA@#;|nwLNwv|LSC#ve%5~G1qTyIoRs0!Mk>aw;K%pgZ{%q}5j7iDPdRnz=A)uHbPz<(%sta}C}8(*%Rw8M>hdGJAv#%*+s zb*?!$+-+603h7nf|PJ-#dJUpb5IFa55Hp>R%I|rwP5F->7+9Y6&?Wai(9K-9LwyCCkkPNJAyL-6 zKhK5Q=a%w=ZxvKM_qzIdTJiw846Lktkv%5{`Vrew5!K9*@D8LR{2cTDRHsNq5P`vh zDKfv0D9YQF3S}d0Ide){4sgt?^n>Qr%iLz=)iY(duFA*;wkm0SHby+erix_T8H@gGddyK0lWYpXf%F7||Pn#6n9wQV$?y{mfn zsgI6NzeMZ{q2n5fsIlTR)$c*@-HuqVkGJz>X<_esunzv0EFnKy{Wek}$6i7XykpTD zmY{YC*)0($5j%t>q|QQ7iQ2*oMcDqipmt(th1kDGb#3);)CS7w9yX++tE`=Go8Irk zDEv)x$@@6FI3&TQX2tue?a2W=PzcTPFwVAt^GBZKvG^A05xo6yN^mw8d(-TBU-cbO zFXMKbF_jJ12-qK7u*HEO&nNxPjQW6`shabFN_RpeTie+ALRegV_@TlHSOcb3Us_YE z`MauXnOcqb((xkE+vo}k_?d|lX2AGXo`l69)09JOI2Sy`{>Bvpx73ToegZRU;2D!A zdrkeXWHAdqR?VGqv+85jzPQ}=ZYqmM&MlN2MG(JjHD!3v0!{FE5M7D=)V%kx>X`pi z7fXfT4p07!Y558CWDlAFpQ!d%JOsH3dHv6Aa$CTOJ?NqaCuUGr&|OtFf^lF>6*xYX zAGT0j!OY!Opkk;1<$l6fI#G++@QFI9N$u_?w6}es`T7%_#P3%57fFcs*k=g#)_ zEb`$%h@%e)1>mi5iz4tvg7r}F!XXmX#|z-e;iET|d2_DwZidZ(R}3Lo@}XWF$WS^R zUKkfxLD7iYyQl&)uw$X=`>7h$G1W2$s5{?3F1z&#lshWGzN;l~J zb?iPdsc!cf9aSg;>>!?v`AiihWgOrIIDEzxz7$~NdZdR_N#xa&M;6ljst7-cTj?mf z&_&bAAIfl&4kxNCwptc&X2jG{I(dYA`KUwcf_=#iMNZ8;;qhn8PBRN|7f9mFF0#(8 zF;`g!)Sza!16eK6!K}-bo}<^79#CzAUZdMVx6;0Cx9AcfghDt%#MIU9T3r+h^^xE& zax%mTH~RVYf%-UQkJbH-LtV6Iv5!=MDX1pEP7*fo+3}%>Bw&L;7=(c$BK%A4xNuuU z5S+{d;JOxPfqwgXA+s>#prwSZz-Q8c3kcNDkM8VUY<3@1ExLf2MJ9uwiE?E=H>=@P zxZ^Q@zD82)XD0Cv)g*a{U5dgup(xwqZ;%O&$*~N0huJ>=5y~NMfp-=n#VzIk-T|A0 zp&!AoL_`s5al<{6{^n396NCgSS`20R62B5J0!y99$U=&7jErZ}#Q-!E`0X8S$5xjx znr@@L`TUj5U#vgQ3-I1v5VG(C1`aT=2mdg@Zz|<51N;0GepA`z-;Tf`KLuaxSA%>@ zm~_NX;y0CVIa3zmA2!5qD%&asmij6Drm|Hqu+mTAHeJ!C1_l_zl=b02H3N)c%0>wo=bx(SxXt{{2qtV}fH4eg4F`5Gz!;`%4+nNJz!;|N z3b@A&R@pG+WV5y(NZz@{_ z11tR$epA`jGO*fD;n!Pf#vW2l<7>hR8yI-n&&98|#wkra|eMFt|urm`ENvbOcoP}!Euc+SnT!4MNRL+s<})BKtO>;M#T5# zFi+@#4;(CPMZ`etnj&_pun>#H0Bt%D*8+~^MYxdiWZ(fi4wokf4;2PG#oYuv$&S)) zDIjmm_QNWXv7KB6%gd3&s<`z+OsmEg6*3z{7vd3?>kLFiVvm~AFI3Zn$WIAa`k;*E zpg59_M<8Ma>(rB9saEEmFI4M}LB~-+?DkY=u=M)~kjNr*w|$|S(W_3@xs=OOOxlaE z?JTss)-B5LakMBl*_(v5pcdN1;qwKkj~y?&;ZCpm;@EzCSa^b!19c!3hbaf5s+pup^)0y_}C+=S&tgQK?H$s zQ)XbQ3{GxDCmL7L*XeJJoQU%QS&;t&DIO5kLw*9m5!;Jj98qmE9wQsvx7chyqKb$3 zh%HF!-2&F9ZkTf&dQ6iLij`zx&^&1pg~DC$8cB$)L5g|Q4E|cRNUm}z8u%z1cT>bG zD@85h1s)P4EbbF;ie%4%iM0@_lp^tZ{DteEaKecYxdQe9F85gw`N4QFN)czx_ODf| z6qSzDx|zxTMl~5nQYBPC<)KzWqp(*?IS%BcS6E8MB7SmzYkjI??)zL{+=!@; zWUGc-X)bq=veG=@=r+Ya1vX%&xpO7%0HXZA0o-}p(fy_w=us@*QcYX%FrE0 zRk)sb@YS$RpIrtrk*>+EE7*F0ATuYI74cco+R_q5oAh{wNK3)a%*@Tu-G`RD!=V*` zF*WJV{(yoAf(3O${M^P%X8{t$HJhUX6QB(%3bbNZAC>ai29&VM#X+b znD2~u1}X6t@ODjZ0Rs`Fda%a8pZ0kdJp&5^7KIECa&&AJJjCN;%%n`+FNIEzXX@f4 z(J7D)sB?gnjXGKEgoE<&8bTDvCjDIKZBUBLYXP-!7@IKtIQbi9D2`bZdq5hrr|M7E zhFUxwej$9BgVl>PZy5>4g-&6dbc9Q7$b+!R&=6%nLy8(e8*SSIK6rDzc|eQ@-9j*& zRQq6xJWY?gQ66o$?Lf;g$wrUGABYqCsq5YZfu=ylQw=G@^HK*6jJAjWpJ_4p^ z!ipPX^poZTv2g~{J6jk2UUp9>0XAMxM~Lw7(6n4)b9u}<(GFbL1VMj=8b?X9wG z9j8L5je#Kxu=9w)fdi)4Ta5^~+j=BhcOJS5&G&Pg!uY`cig}xDZBT(F&jYJsFb--5 z=OPj?=xz10D4q1SEHs%>-QC^1(DaMy-njiZF{-CVeI>43n%NcA^w-opN1u~3&n`7$ z4{E07=t6hHZgXdjo?oj(vs@{0Zmw?AVgsN+ddKXb1L%rei{Jr*C~1;VRR=iEfW80_nMc4=|JGS2*;W+(eJ;D@`fe6mSnPU~3dwP}J*#FhuH| z{Jnv7(=XFO^Jx>^qVq;TnZgAQCyU)2I(b7-+zQ5|7W@NOT6<0RrnF=K)PS_W8V-ff}#B;{fR_z|?8NcbH47l08+f)#~&JK_~_CC|Sk zGH0<=iy6)h@588!qN z;GN>>0{sIlbVmz7GaF6smb#6*1s;4`>MjT#Oz6|xHTz7jBHhc`SoLvBJxFJ4VNHiW zGu_+jeQw18v#gy?m_hCIXm{sXx7E_K^YITShCj1vA)5mFb7%ch%p!>Hbc7 z^(P#OX9{PDLzPI+)o%nsSx9-UAtG#sxen0oWZBDZB!%otdGyW$h z0oeF%J;~<#hyN|;qt9dfHGOP-%lhau7=Epf9@G187-^YhH{f-Td<^ik_BP@pB-1n! zkARZ_PIyNgUnlk#b7^0FX{#@JN&+*<$dJg8zwCbUjr~u&xcJ`)#J)6J`|6f9y>xQi zsh@tdufDk-%Xd++cw`>xc^?M65ZmFFY@6$rV&?V2Q9yI$eS!O~y~tIUI^L8r2n@eG zS@$ilWzm^BWz9DyW5qiRXHB|gYhe)D#1%v{M#8(!k)B=anFPd2c z_2!)2Vu;W2!DXO+Vpey-UFk4C+0Te!6}neLnH_ zH&subu6H=;%Ozlzc)BzEWmI}VxTWTxr<+8@?=)75*`7qSX}5xfy`KKmK9)nOt<3~)ei+h{biUwt@ysf^=h$^z*t^~~ zV0bjjHIZ}yroKSC8aEfgUa+Sx0IoS+Yjek$`Z|ANBeD0Y)LHr;j=OhX)#qpH%`P0M zZah~{N7$5{r!RD0++!A=hZPUs-=C+S;&;XfJ&fPyM(Er8aDf?fzV4C=+<(3v!zJ^R z^L2ZEVp%Cu2)XJJl1L0!^?3tp1f{^+(_Gm+@Fh`OK)ypoT4NjCLJ6^{E79+n6n%<-I zmi{#>8ax?r9pKEt)FHHJ5(UJEAN?a)hPU7J8m%W3ow%^68m*V*3uA;ud^#9kw(!G? zexMJM-3}iEAmTfDjJ|~5KaA0XJA~LT!~>B;uz+h1FU~>q^VwDB3!o+a79CiBfu8bh z@(sCA-_)+b`q1WlN8|^y^FsaOJ}1aTncTvwHE4iHzvF9j$3?mg#F-~9(l<3vfw`7! zVg_8SFFUW{G~pcXGw}Uz+jo&m-nke8$+oXe^b)8|wwkjq(dS`ZzV8xQmp5F31$Fz^ z<^v?UZ+&e#T&fc%eE^2$QPzRLT21EW3#@?+^g*WkuGo%9x|wsSK0A;g9AAP^-aS>X zUaI>#x&OM&$%x=!t2z?By|rn4neKDal~+xfe)Z(plcr9Xe*Nq#`JFX;+|(JfXO5dT z>zWBOXHUO!-1zY`C(N2PZtC>wr_GK;&M{YB24QyNW%}_h9i3Q2MSF-?A?+o$bCwpPZOty>MAFn7lEnX_m0m^q6zs#qj}@Add=6$)QgC%h>L zoAMv&jzv=^T|0B!>EkC{IcfZ)X@KRl*^>}EZv50q)6Bsi>82fTLiGgN z9RIr>Ujl6vzEOM^F>D51sjnS=EckwjEQCotI0JO7da$mX4F`HQT~}}b~^VUo-=W}sT!*XxvSDl*+hM3?C(fE7t#NN zDdr5A1y|{DX4yDBID7VuGbYR$IPi>VH<$re>E0&eYCXezag}alx{TLFCT+Yv$sD*! zXPIr2^l6McH}Y<<5!KFHKAYMf$_MxYl3c&6>a)5W zt`j|G#)PXUjhiAvn=xtHwXJjPyi75-U8}Foy&S<3l;+fQGE;BX?M=Z%-QBs|oH0?i zcXG_6iTW<*T=TDq`pV{Ob7PSa$T%5)4)l_%LA>kI&5>($YqMyQ-V3RGdYK+n)FCex z>54p4C(W9LCgayknlNR2eC*gu5Kp?fHc!BpH5XyR;ac-qneLpm+7CWs+D+EUlRgcD=^25&?N7|3Q*@UUAQal^9~vmb9YSG^@ZdV(E}?J&=>&HG zsICZy(-|hO3etPn^cp}gqBxYH1YvTepg3spVwnPmj;K{_2S-4nHs+ ziL5pGGj#jx&B)RM&A!>x44$Fe<{m(pfPNF-G~xPfXHB?z_N3|4EZZ+=7K;=iovM@1;EK&1H|X|Rry_}i8)JTTgKpPxB7y}B;tRZv#HUT49lr+a^?0li z;2->Nx%uJ-!0~C*WsdHay%RZGBld8i`OzHR7Uw57&(STMUgo|zx?P*ITU%INg!S{9 zNmq{}l!C=`qIq==R2Ic1Yp(9xcnflJ@p=VcN&v65Hbds>epxwf?CRXgESL-1&b|ne z35~>;-MQBP-h?lU-)eGig!bg4Hs*&nLTiy@7Tl;?bm`mH$_Ycp&Bh$dY85#Taa<*_ zY(>W6H-|gaY`Rf*bCy)?zfsRpV2I;x#z@zi6*ucK_`H9!o}Q>EibbwKUeYenJqX{7 z-<|FT1&AK*XnF9( zNqq@AT$$8^k~tkL_j~~P$=rkRbNJn-PBqjg5OYx)CyxZ zlc|WWk=QSkf#F0b+yr>pqfVGm2^wgM^l&&@CqKjC^jw7VBJFD`$f=VdF9@5Q1$xlQ z+dA6CYWUO{)3ID#HDyA4=7g!^CQTbZVW#e6X*=jkz#((Yyal>veyN{)0lw_Q74VV) zh1*}kZ3Ii*q&#tSji@HX5jw?Yw@QML9~eNRS@r;B5eDfsJ-zkQu!k*D!D z1%LZW@YfxG-SF2He_ilbY$n{Pdz|L=w8+{$9*K;?Z=zl)z8G5SJ2pOjW_)Z-cnZ=< z7o}#~oq95~8K>T*llfzMS?c=)MY(8=FH*0*KSOl?=g=XI}Jv4uKadvyzU@26(w zy}IMLiTz`dHpqM{{wRnB;T!Rr@j>|JI$>--WIRE7S)KF=LAp77ukN4!HJTx>$Q)q% zcD5-k*WFqUK#&X2nfPja&%u|FJ=-iS*Mky4sdu{<0G<%9kwuY@`CG2g!l=WG{7PE)ggMkN}t=N*lI_HhyCo)5S)*R&cdh}}A{vv-fcUwZXm z8v-%CZ~HGAR_yG3b0j}gD2o^I=4yHyM#%3M@gepcon~gk91jc(MDtZEDy|**j|jf3 zu;PkwgPnjvNQgG9u4>y`pSFWL)C*aByUv`C`Ss$v=7e)nMTq!F?EFH;NeW18-I%w@#(KXOvS#n@_pj%+ZGK2jTSiVfd2L*-%dZKa5 zh-yb3CUP`Tusl1i<`GOH&S02?hg$cKH@~n!sTyRm*g)>e5fzWGxJg(Oa0NQ9Y#yjs zVo#=P;OED>Rh(S8o(E#{Bhw>IHZ$JIxNtgRfNMS8E7Wa7VCAwNke;Kfd+5m`ePB%s zmOv9vjj(GAvwNQT`BF4+Vrm(IT}yg+RblQ-LuB&qhUntx?K#O}-F6FZJ{|ZZkj>nI zloEqE19z-#8Sjh%=dwJX+i;DFb4!*c+697Z=cEyQSe!dHrlE03XmWugt9!D<)qw$g z{Ud=#)?6Cs8c4+kn|tkPbl1e|TJgcUQ>?Mz3YqjsaGX<-pvh&+|RqWU~k?|iNt8l+CC7Ks6ub8=SuPf~gKogDr>-N<1Sj-Ta`Zb+Kh&UHz>4#w{jyCQDvpldNq|3km+)u1?iaK2d-!z zQi0HGwic^&c>cy6F|iKAk;xqf^E?;WcVJxG&5wo@3^Sog)`#Z-0LA(0@WSzqz|8#k~HFPEzF)nZtjqov6}TdRcy@tY3Ncs!Rh>uPoQqL^d2%C`&dhj&T)nd+?P8un@_^C z3Nyj_1AlskS1%6?c;`g35E^KbmMI8yuBt(Kh5N`nB6g zSFkYNsN-RoU4chG$xYHI&oua8mcv_t@+SkIeA0uRtw^l>hOvKF)PLHKC-YpMiy@I~Tz5+)@ki#u`zK_L&mSUgVy8XtlJIlcry&j9KPLH)G=Cjwj#a1wgY zhW3asBC_}imLov##{Z0nOkM-WVFa{81XP_78P-JP<_H5|ntl`+MQBx;x0-CEVNWpD zuqTyZc>LB(5{=&)yz!8I^DqFG-DKGA217^QWIeihYB2~C;hBZ(S(u>+@|AqRsI|J} z95G!jQq=gd$~mZzO0{61wlO?u0TJdYYMIGX3B#GZl`qQE9nd=T6rCmXSf`MQp-eMi zOw=-Ob9&aW!E8L(NO#n1u)}Enj4w9bNJa_|m*Mv8VL%6U;>W~wdyUxPaW2fPS&k^j zL<~%HZ{rC?0<#fjIm`2O!}Bo4x9A_DXfn%pF9?P$$vZyp$$|6;?t?Y+$kQe;g(wjv=K$Of!@kI!uG`cfyfJ zlTrYMUPx*P;Gr7O>5Bf`5gQqUyaE~*BZ5a0p_w9r!WfYn=x>C4XeS%}ia*cla#|R9 zBfutBMaUhAM{}@uEc0Vr!y*yWB*KG86jW=)x(FSj&{{c?`ACMbh^9z>7)7WY64{6% zM5T*S#E;5~6j3H9K|BNc(4uJ4z>gx0rUuX#CT>yLv|5`OLkWG`6x(8@Xzz1tT~MZA z5Ez142mp?9eZWE~3)6lwWNKG~`qFG_&gSrcUkv$!NsXq+; zp9fWQ{STuSDvSf~w&0j0HVu4@v}GwKmQVC2BIf4sB3enUl3t;0tXjGu6eH1+2|4C5 zAQyWOz0yoP_o91ecmt3I~}VM2#|ErzA|i?nMY6evU#q4Ti*pxWg0EfF|d zh;V2fbPzioz(HyJZd1M3`VPbf%&UnRrtnG`X}o;INXQ#C-14DGti?=is$8ThwITb@ zWS|9Kj0gk|BSDBb5KAW!0mdj!w(Z6`$bAWHyS;Hy2(i7>;5{BTGnofh22ZwQZ4o>P zI@_}etoiON9_e?Jdsye3>2tz8begsD&JN7yD&u)RmwdVd>)6gRHBNIcCtXk=Y~_Ou zX%;`pp?u}19axsXmTTY5NwR0SEa9VCq7=2D5R@MkOQS%Bm#=}Yal?;tnx_Qye2T^l zwTjIVHG($1@O{v_7HMjR-x`tU>8at!l>+91(0JssOcvv<#?T5#pkmPyNQZx0D|`rn z(E3iwJ(;YNr-0Kcyb)Ab&%9BxE|aCQC>fQ-+W604cFHt32lE`P5Y0|u1DnljDVdPX zw_;jI!L7~ag*sj4M7j>;fEQA_j8fH3nhmDyIYdos)jDew-AMnUN|va0(n=9^f~HZ7 z(vKJh+6CC%fbl5@CE_%9^9C0OZ00m~gaP2*IL)oHHj7mbs&tZo%8UQjqooZ?<= zEvQd&Sc#Hxa6IV=%I+1k2XT1a^l%ax6icijmWU;m@SD{(PoSO;{s2uk0;ZLEfG7toouhZvN%#g|VD|PQyT3%tuUWAP5 z%wqhsTzi4kRXI>da}7fQNd^2z5WN8{W+hVz>|#>;*fkynlv7%2@Hls zD;HVi{B_8}s$i3*iyNNaaO{gb>A1+##0A_uzOtLEZM$PvZJ5)r_; z*e)$G;*5kP1>=TcbD+um0viUUg4OyVXvoCD6?bC)Vz@8_WKDUko(e|Ycc+_? z<=C#Q>t%bLT3ARnGzw_!W(}5K$q``>xYI+_+5KVXsz!*d4?*&|h7@vp7DXCzv00?| zXA9-4-PqOfg!<5$%VgW`ES;6g{@q!7e`tM#DyLcH%roIb5#4tn=}}42IQtd7l*S>+ zq!OiZ!2V@KJ8&v#n8P})w9PhxYHb5C(AtLdDTrj+`o>Em0qOYFf@-rBu{9C@tYke{ z%Y9Ve0L?{GJ89N>#wj6yXNG0RsP&S*CfP$xjkw0LgY6$yq7+=F#qvbf zEMeq`Q`D#iWwAz_XRpErNY>nGR;v0a@$^6qCGs+{7fXge<}_ilLUx+SNgAnM**M$I zXiLp4(c;*i#|(#Zy61!?uXFzk65l?zZiPC`- z?MsY=!G4F~dBzu!Zp4HBco5zQ!6^4=;1DJ(x2Ft!W%61-_eJRab!d^K6Sraz3MPc^YE7=oUZ-X$46nCL zq2aL+BEt$y*>11=(4 z2{EX|llHc{TeFt5Fv$e%`7NKY(DwZRg(lX7ChoC4N^A?2N2!AiO3OM;e;HLJ z_mTWry}ea@O5p}t9R?@nr@=Mnkh0I_r>((@@ImZG z!fxZBRqer}ZMZT6wx2>hs_i!vnC#n+wPLk$+_kK~Ebhlz8&zss1oahV?Wv&}evfw% z?$OAY{_KcX_e2irf7#W4<)|df_<=0iZ=G{#j9TYh)^XpT{C@d><*Q! zh=UY?oDJJIH;EvC@F{%ox|OwXle1q6fg@-26hs>wp_<_rmId241^4=?H)sTGtL^O? z&!vAb7i(w_3^$x?j2R)G-K(y^6KBhhcYJi>Pbd`1E0L zG~8qtwcq77{n$d8(8lP99Iw+H#lNvE-Nn%lCAfh0=2! zYZhA^0+jHzOV~ttQ!cw&UOI%e8x89i@;u$NEwOaBj!DqoB?N%1fNC~C4-Sl~_z+># z?m3U0qHuuWSG8&DL7L1LX}KD1>J%^_)E6CsVPwD%Ch$dtV3kV#-DVM>u^}FDX9446 z)%6TcS@8q6a&;P5$(`j_Ys02d^APMoq{bHj`O1!vjX=j9b##R-ls>M~6Kp&+dr~pR zMJ7VMs%d~x!fYlMlm+VR?FCGT+uRT2g`GdR8*R=NdPAFYy|}&BUIqi~r&I1w?Ct-M z?irW=pUvxk$a8sq+Mg@72qUK=(_tbLMSz@i)IpIq_jr*`brCyj*A zhQ(5}uW*wuTSICQ>an&#CDK%Jl!+#Ax!{VTJ2JI+Lfk^UobRGlT3)?hIWd+5)uAh5 zT;Vb5-iaw~hlNvV? zNwxcNXoD@ChXMyGbfv~r^El1Dgb@e;TGBL0I1Hu#s1vP5q4nU<*tCKgrNAv|RFGTg zDK(TuWHm>^ZjRW7C=jjA@1l4ah^|O~_@boW%SdHG;J^Yl>7l3;kuE}f=wRY0gsWi2 z8zF(zTmurw92kCJp-gQQ7+Ka#c~Oofva?T7+|tOg=9raq!-L<5`pTNOgJ zF~^G0&<9_R=m&d+Uu`h-*2InRv3cRNDJgYoQcx|9I8lhZcoxspZh%^;^3k;YC+m#v zltt0ZrUn8OG6VZUlveC<;QkkzgZr)`~_(=x8KS0+caB(Mb3N3ISkEtjz~!A4oBPJ%0ho1N?`4ONbzX z=no#aq9v%B@Qg1Sr|LMHQ_)D93{!9ZOUV5LgmS@7Fnh6BI|zwEks~Ie zg;A;A45-N{LivD5g3}g8jYo8)`v;*B$uCh7+*tX=8=mmkqf(xU#8stEZxT90_y@6< zIEt}=1H)`aDcKAl80ASuqAJf4g?>bX07VpuCYywy5?Kbip#ctndO%R1pR63G=CL*o` zcGPht;tK3M0G&b)`ZUN<{k-rVmpmU{1n}&FG3r ze10OCvT9&cN?ybQDP;tDhUqf9Kg^0~M52zyG)a;U3P>YM;uPM!B0LSCy`|yUqGD^U zQ~~4xy_51*d_=N{AePPd`AUx9DkFxaGyr}>CQeSioOSg#_6U7+bpg`dXzOtj9=hqm zF#)<&9csbUVu{gfFgmS(HXgM!6N8vwZxb6qEi<`+U<4i+z6fn05c9V2s6{W#JIK|Y z{yqZ{W*^`WTIL}Vo&(qkk1+F)N+ZIuDeK_R5+HL~n03HB=?oL3X|N8+h0umHOgb&Y z_6<1bhp9F;4pxlH)*m4Q0UGNt54AFP`@vfjZ_&u4i1P&&qEz`IP)3-xZ6S&k45Cjk zi@iVrZ6ILlbjY7nf`fMIs)mY2foTW^3h9&5<~mLSlGLgVNh~IH(kY87SSwk66^rvg zn_#9YuCF*qMXmf9q3bJj%^7My&&Q=vODhYXb%SccpoK22h%ufDV9|J_=gCQL6u`oU zlXNVYO(DB96u@#DH(;&B;5KX5co+<>^o=?yA)zFmB7uaXgJ0|_DY_Lw%T_K@1o=g& z0KhGx%M0pQ05k^=%UxHq7C1V{;dCFPJ2eNIHHE@%&5))?&}u6&PMO-lDjou8H-U5< ztDKS`Ejc0-N+Kr&ka8C`u_QDqj-}{r)=(%((;jY#9~p8p)ZUpktg1a23?LoIvR01u zS^MESJCvkkpW;}go-z0~G@`++&cW5$d_PSLcJ+jkTywuYAwX4+{@*pYnzP!BUwm*d zx^k+)96tLt2#8^`t}iCU_dt9hSc66-B9uh|{q?l|I(g+aEY(k|C2!57yDuhXpp!kM z!!cd+Y0^(%6>M*)O|_CQ1gTUl^LeGc4B9zZaVsUjqyvCgb+1HOU&>G)~YyYb~Z){ksgUbV5ShDQCgk`D#hu;Io(z@E~(Lrrb zSWx?73I!(D&QvI!9QCULPi`TX@PYZ!KtYERdc zB>&a!QMS4PaeO`WZz5a#Z;V8tA>~m35h2QI+A}U+yMeWiZ$x1(EBoW_7@}VxyP`zO zbm)DPwoLG=32D}jOWQB)jD^|LQYUS=3b9H5-3C?JQ=)*=R%{%5ey$xZuB+H{H7>5x%_QXjdJwk9t1n?UhiDVv1T`$pjnhGS z^d>eQ%EP#s4T_CMAv}AOdShhX&FmNsxCY+BGP?+A>PN1+g{9p5IaGHS2i}4pJ)N0neuTXBiXC0_Gv5!-W1{bb=kY4Y z8{v6Gi2oR#uaK@u?8e@qnT6ty;59gtq{hHx>i(?KENb7Se5fS3W)eG}6$a4N(J)1) zTERUctF5|-kozaItsN0r@Fr@6h8${j#icPqF|=HND@*rdaCLe|D8m(Cdf=jfI@?tn z7hI617nH!n)GcAR89h=7n;gv7>=|4uG1E*&*L>rcN~z0s>KHlENTw|j?dYxr)|1uG z_;jBu9oxEOK*l1KOdAmzM2Fgl9Spp9KtqC(aE{>BVp^$michy*lHie{f!ga+!_X3N zY$RWt%KFE-^~tR|P4virO=TT!gv*qVQz>*f7?ATJTu%y-ALRTcoO~eX zkKy^R!!kPu8%qcC0&lW>U>Yk(2Qo0rZQQ<-2J-`ylE3Ma@wc&5zGjWgyp8op0!8a+ z-uckGh-=`Yznpm+y94GB?G2bN8^3hMrmrL@M5w(Zp+LKniilc^(W7LK>8yPlb+rileRW{0x!+0R zP)OZ1lQXBYkt|m3p3bgHQ9|M(mQMw?!0*lQh>)#ju$JxB8IM|SKBs;3LW2!fHkpAr z;Bu?jRD`^72D`f%NrUozo#auUrnMiGU(R475|w`rw84F)1(;{#pgfSPpjb}KVhd@-A34Ev|Dg~&hzR*f9!tZ^T)*V8+#KuPwW>sCpJ29Ki!14P6U+}ck?z>92GhU$J*x1#1+{{xq2phHa&Wn5jSieUENaF#fTYZ#Or*FESt@i$dB$|E&D0f zSwyU37El0%I&+#uNCFSU5x7>n2oF$dAqt4|v})WbyWPpIU>^CvoootAl%L+oF2ln+ z3!x{~)Y4bLin^XY4Dpv(c#e4OO7jSm0&atZM%KfrkrVaEm`m8mN>)iH?_`D*8`4s$ zm>$Z8#6E`D-AIH|R3ZxwC?>v0k_Tt8tTd%7ZK8t(!Ny7fCQ4k;P3{T^X+&sAOLMA? zjh0L$jq2KlC7BL6U^Z*rF=ChzIcy#zRY&Rm6VBD0T)43J)4j0d*0?^z8`(WYWy|cz zYv!l{;3fGipEp|!1=Ya01*8=Y%6*I3b?l5xe3-Q)PVMqAyBXOcE4%GsHjY&Ve|ebQ z@3b!utE*S`@%LfR(`dD{mcv2%1?^eT*_bdC_9v%s;BEab zIjZ$|jD5nFuMH-xWLp@=P%jm;fh=~5n+v~7z4FH7ud7%;*?%>=$xpXTttc-{1nJ7K z%TAemj2CQ^$;aVBDjp*hlS07g29dtmMAyz-26}+gj2iG45YhF_Mlkw8t4q0}V3=GrG%5yL)3W zgj1nu0Swz1yaG*cQc!*B2)C27M5Z^|h#Uv3MGb~LJ>wJUXv~pUQ5VBuL<26;b3~-! z(8^l*JrVMz0Bh3&O>_wcBQb`)h|(#j%IJ`2$52XjD*qHc!(V5CILcd)18^GW+bG?hk3lyy7UW%6G;S#*M_)g4M; zkUb40wWQxpJkPdpvIY6O*aM6m4xWFJeaI8(4ed;a`kaEBKBurg_{AQ4P9M z4zN$~nU1yc@EdG&q*mje=JJQbti3c3vT^on=L*zPR^Zg#e&^f*{qrCulD{@M7`eTQ|Csc*5Pwy98nw8H>crh)*$mT$9}%&p&S*KPLxi7jU9g8koNNrLZMA;%tN zTU+UfWF@{1fGcNb>9$TaeJLP!rdd!NOn8?a7wNi6ZbOZ6sBluy?YH3hWB3?N_Z`I` zQYSzw@nTvHW$Knx>JK5tu%yuvINs8@%cRb|x+(bjy#XqC%ax zfw2*oQXanEK+<;Ed)x zokfwmjYCl%lapKU=5k94AH|oK%I{M6HSzk}2B?5jK1{?L!~4qs>@Ryg%Hr@C! zwEeN0ZX4GfXvGJ6f}i!^*D`ib@X}tmufm@$lIME!`{OMZRXVID8VCk00G zO2hdo@JPhr@o?VA3oy=2sc&hNe+;GPI zxF_hD>2qW_Fw;5xdHY0a2UiiJc+kppj0mpE<^SO99{I=+{$TK@LA;Df*HHdwz6V-?( z031#NJpVEPi3Gq#h5)4mNFe|m8UhqilVk!!(PxqXDR@~HkKiNZ+2Oo@`22?c=KL-g z%<8*gutr^{$mzp*OaF;Vj2!3rS;dnnx|#~cBh-CO1yL3rkXCpwz!y|lZ~%poy0GNQ zP$6)p%Zn~n4kV%lQ8MOA#x%9Z`#2(V^i3GNT0-ltq?U;d^U?jiM^JcnM3m5YVf{6H zSEfMTJCb)9TurkVVJQDg2wP-8_he%)T}45p>u|AGGh$Sk~fUuZ3&xbQ$MZ~! zmuL|=veio7PL3bVFNx`;*Oft3d}uU~y$y1qVSVNH(R`@<^m3lryiP%h1Za=}u|l2B zvTZ%ASFh1LF?eh|*`IouHi2Kq%H`Y%{5D>*J}|3SN=E&rN^F?OAw{IgnQPX9r_CG< zG52pq=H!OZ7wL}wkDAI+*Yf_n;7PgkTK?bwO^b_sGe^xN?3+2(O!PN%^h|=e*YVMj z><2k^3hx^5{PPc~2+!aI5qoSaY6Me-ZDSb=JoL}8^2S?v&Vco=V-23rhjc3JEM8s2 zxB8s@nL~fI=qME=t9pX;I5YEKm+#)nz3eUdoA%wt z@8!pLX#2W@?5mWwb8mBvv)`ug-*4wRjF)^B>^y@ni1ODyfu*!Ew>}L$O{Uhg00%>W ze56dTc`^jBYMf~bD0!wyA6r8JtB->rKwX*Y^tAsetBsL>z&(ZQ&HU{s>S~tb;rR#v z&ztzc1r=`YrV)=&4sQ;c$3r>tgbJu@RTgJNo4YCZ9@UISO_kH_5J8SWpeD|XTO9b9 zoe|tPpTEgEmTnL?gv)F0XjN zx6o=$kr!$Ww~cMRrYWwqiJW*pe_7T&2IHs&EKK_*E#iyN*UCja1$y)8MSMk)rH|++ z$x@7R$OF72rer6vRVFE4In&QGr29eM-vdPq(>EB0L7h=j`n(+fAb&KWF|8tg5Y|L(D;~fh8s?`BtvQ`5{3Se(L#+40^BC>z@ce;>4D5=!_$164 zoI=PhOZdu*O@E5)x|ByomZBleLS`<8AG~BK&yHM02B;Gx^o^x_Sl2>S!0teAD=>}x zhLP0A1kYk&S^Ddx47YBwAK`N&?KR669^o%rbe;}u=Ewzwd`PR)=pviX0RVygJMhq) zpliHe$QQQ>0jQ9^@wSlXBJ_$6(m{392j?&2V_CAr8=SU<7IOqYSk9fy9{;%fbOryQ zA@^z#KLGy9e^l|8e3W06rU$z4BZKvlKgM707&3#Y=_89C2Lhk)=OghzWK#}Y z$vfMq+b!p=20O3fw+i-VaAgS}!rUJn1VLhD zkBx9GzFWgDcYj5I1OjxIcdq5_;(jJT6wD_)w1sljM&3pK32^qS{C+K;c(LMq$z$S{ zy=gUT7HS5#Oa4jnHty9_7#|w7oorvqJMd+1%CV)qXWV`oF(Pclp25meJ`o@33#P5( zrJNm;&zJFQ0%hB?WcMd{(EWy9MBQe1!Fy!qjhNO2ee{j1p?#qX-P$wiDbZ~+*=iGS zdtv=9!Mir`zKk6RVyppl9P{mFAnaM$Z40`8o)$o#khPK0*Zs_Xa=het$-7Bo3s&0D z`31GRB+`~e-NWMMtLV#ah%v7TMsDS4biCtxieF=K(M0%wwDY1b5_0uL!g^W!6kp%K zs9yKxC}S%4Z4DLgt>C+5)gJzuJiVJIrP>`_(0$4t z{u19Bl-+joSLBM9c=B&oed#6sr^p>ajNR8f87vHfRqgB7#{PN)Nmw6_$OR5`6x(9dsks>!wO7RMxi^q&tc}KbF75)_4B!|6< z@izqlistS&!6K$pKJ;gv72HzE$20!se!1uf?-6YOI-ktanl3+tZCUmP9Q`MQXW!r} z8QUBze3J_d7%V!(XSv*Okf&>Pn^lEw*&D(8kMND${T!7ZFpNDX54_LUW5An^^LE@_LKPx(cQ1U%tE}$M zrs|gPwbQ-yI*j=syf&9v^16Jq2Fmp!{mbOP@b6pe{=yFS)E89HP7Q;3bd)3i%I{#C zCC2X({Oqs%TamDHBT5U^ks88;JLHLv`G!_n*B-{<7(#itp|^Tj@(KT& zEhsnx1I+Rl3TpZM-{yvdPx(mqacuISA1ScZs+Q7jNCaXSr;tWKg>Dj3&||+W`jn@( z4zE##s1nt{-9D=E_$%_jr@VzXyvh!%iWQjBaVRyGm$ZpV-eg0(ggzKTJuOBnGfq$G zV$~?ZfNIC(ji2$8Za{o1?rg4#YVAWJH^ygqkX`J|3NoaMCh!n{G6x8 zhvPhdzx?uZelxFoQ{LNNv`H#HN)7`ot=U?KN`I7hpQNwa9a6itfB3i%p{J5i8p&Hj%O~TG{ki+*0Lcz{<9bO`z;|f6{H+)4d{YzG-DM zW8*0Mn3c_mjiu~YZ>!3Fvjg30=jIDKZ}wH(Xa4iB?yIk2HS=vN+f{pmyR2-gVjpvh zl}(^cGB?*+*;vH@=DD|YSLrJ7Y1W3aL|LD?%F4g1E-iBNgG0Ld06Kx@=7vM^$uD^q zUUEnt`;yO(DmwxqwleeI4PN;bpT=5-@?bf&AqxTIkyHGm3(E7D+iwaldCISU&6~5Z z4r{;R$MDJGBf;I@@vRY&)ijb9QaI@!e6FYXT@0YMl6a%eEPhvh`Vam>LK#8Tb~6&u zkh0*WpZQ!D%{8f>4@)jkO9_i{RlX~~yF{eQ#r3@0?tfdb-@kEsVQ2RSe>l&}eg6FS z)H*AV+3T_ZwIM)twVGf4`%P*THwBd20PNtHSxp^S3lU~rC>M>gGODTf(r&D$(#}fn zbeVtjoR})a}OQ}k2C`Sijb)g*jcKOG{YZixcYNSw(+LbrTRoXezT5~l4h`8Gr z^XOM;$%%#Bt~?>}ZzDDH-ArtCJls5qI#a4`ruI zL@)WyB_bhd|A)kHVMN+3PhTQBMxF%R?1hbMoA%;*wnHv#FWM&Me@&H1u;XpPezv`6 z#Vfxe!Ny66rvoaVmU$h-XkKti20MtMNtItIj@Fwr`bu?;jLQ_mE`* zDVDRu73VPnr{}1885Ac9=VeAmaWC5@H+B@gu$E&TMTfM*_}^n7PL7*#*#B1P%rM-6 zJseExBqnfP{B>}87crRg{8G82o9ONdV(5j{koY$~HWCHSH=rPK{`;R$lDfEFZf~(;k2^ey~Gr+TC~@tCZoIOCNtOqADc@TN-?v& zy+rv?drgckkkFd&^IK~Q>&9$5H>{@}y+xnyP1Xn`BdX%SB7Gtb4vsw#?!1h}_@(P* zVjtm)RrsJAWCXdak1%>rKPsASH}Pt$SrKk@xr%qwAYG%=Q9`>|o@;K0qTm1u+=o?xJenhBLpXZ$6>09X1VR9%FWTiljx+(N_ae&V%T*|Fmr%Me zxUsLeg!#`<<`jOY7Cp^cD^pLIIx9oZP_=?}$eguG=ozY3L?!w7q2A~js#X|YqFDgP zhuh>|FBM%|mk@e{5sjN+GYvk|U^5NJOdqieC?QYv6C>DOd1pW2f61!(7G zRNYU+glZ^OS2c)z!Kd=70phBNd?E-0>$w49q9uPkO#TqG zG#m?j4qN^*28yvU*0|m%Oyt3V;(3nYx(*U)wD?hj6fRZ`63My5RQl?9JT#kGuCqBf z^NGj3Ud(kjAivFtiWyXkV`Ct`yi`VAaJO#jr2?{Pc&ts#DU91mz3Ww zL$E6sIvQgAaIVMHgqg@hWNNK|@4~2-3_@=JLiN;+2lYkbykJ*i z>eH?IM*Sf}#mn(TQQ}ehilkX7V}^+Vu(%_KiRl+ZVMoGV+;GwTItzOvKqpEX7vhfM zkBx9=n<_&w^F?qM1FcgsT=XF(d}p|r7-9%q0;Qc2q%JSd$FGPZKCoqTn;bbpT;9#% z9doZPxB}Fnq=|235lvwHa8k9~vihLUfe~T!IX@ztK1#B3M~YS#p${1|vA`#6`aCdF z40J2STq!F@ik26l)wd%>$MI*SMl*a0oS9w@ToXiNt==l*AOZLcn4}x-h*z!RUasna zKyf;y)&t{FFK-(qd}-9wvlL%#qlB{Wsy==;j}pz;S^3f^(e^eP%I*i_6Hyp~&A1J~ z$*F<+Wzx5=5pK@^7U}XIDy^GSd#MOte4(PcZ;-D1?V@Vg|8mhX^^9JOx*LmwjROuk zigsXrcU~?g!Gs*WT--{QWHg+vC*^aaMfxT6KawlwF&yUScy`8<#-&pt)p!g51!v^9 zqeUOKUwX%g78zwU%}#*RAyO4(4x$egku{GaWwwBedE*#x(&6vrj?toJM#C5G;!GGnHmuz?gIWdNQUDbrB}7`+hyAm!?@BD>xGGxm&^(HwKkN<2Kpw1k61G(_=( zJI0E7hIrz$<3(F{4JHJC`RI6&)$2Fug(@^7Y!|)4gOeJZ2CH@8(eWzrf{$|GOBF_f zZ-S+mmzwo>=(8~3NuIk3UVO^M)!l~;>w@WY|2 z#lUtJSy=;F&k`{x&`xK~FspU4{RA-)jN_jW#yA>BokKX9sBtt#

    veuhTT4i0T45Am5Px`5a5&$fv(RHuSG}I)| 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 W(`jXfX(0}U#+>A6(%CV2^#1}fjsZvj diff --git a/x/wasm/keeper/testdata/staking.wasm b/x/wasm/keeper/testdata/staking.wasm index 43f7445e33a92b2500a0dbced78773d10cc61dbc..dd70d8fff3ccbcaf579a6fecf19d21c7e4cce885 100644 GIT binary patch literal 260159 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%0D;%KG=!PkRiJr3!5bZQ-faZuWlqCaf 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