From d677927c6d88dbafd7ad99a38d892d5dcdf611db Mon Sep 17 00:00:00 2001 From: Alex Peters Date: Thu, 5 Nov 2020 10:12:23 +0100 Subject: [PATCH 1/4] Implement IBC contract support --- app/app.go | 21 +- app/app_test.go | 8 +- app/test_access.go | 57 + app/test_helpers.go | 443 ++++++- cmd/wasmd/root.go | 8 +- doc/proto.md | 440 +++---- go.mod | 2 +- go.sum | 24 +- x/wasm/alias.go | 8 +- x/wasm/ibc.go | 271 +++++ x/wasm/ibc_reflect_test.go | 102 ++ x/wasm/ibctesting/README.md | 2 + x/wasm/ibctesting/chain.go | 1025 +++++++++++++++++ x/wasm/ibctesting/coordinator.go | 799 +++++++++++++ x/wasm/ibctesting/wasm.go | 139 +++ x/wasm/internal/keeper/genesis_test.go | 2 +- x/wasm/internal/keeper/handler_plugin.go | 123 +- x/wasm/internal/keeper/handler_plugin_test.go | 189 ++- x/wasm/internal/keeper/ibc.go | 55 + x/wasm/internal/keeper/ibc_test.go | 82 ++ x/wasm/internal/keeper/keeper.go | 127 +- x/wasm/internal/keeper/keeper_test.go | 132 ++- x/wasm/internal/keeper/options.go | 15 + x/wasm/internal/keeper/querier_test.go | 12 +- x/wasm/internal/keeper/recurse_test.go | 27 +- x/wasm/internal/keeper/reflect_test.go | 5 +- x/wasm/internal/keeper/relay.go | 233 ++++ x/wasm/internal/keeper/relay_test.go | 608 ++++++++++ x/wasm/internal/keeper/test_common.go | 203 ++-- x/wasm/internal/keeper/testdata/burner.wasm | Bin 124009 -> 133341 bytes x/wasm/internal/keeper/testdata/hackatom.wasm | Bin 170947 -> 185008 bytes .../keeper/testdata/hackatom.wasm.gzip | Bin 60493 -> 63745 bytes .../internal/keeper/testdata/ibc_reflect.wasm | Bin 0 -> 245383 bytes .../keeper/testdata/ibc_reflect_send.wasm | Bin 0 -> 252765 bytes x/wasm/internal/keeper/testdata/reflect.wasm | Bin 184657 -> 228787 bytes x/wasm/internal/keeper/testdata/staking.wasm | Bin 199890 -> 234303 bytes .../internal/keeper/wasmtesting/messenger.go | 24 + .../keeper/wasmtesting/mock_engine.go | 287 +++++ .../keeper/wasmtesting/mock_keepers.go | 72 ++ x/wasm/internal/types/codec.go | 2 + x/wasm/internal/types/errors.go | 8 +- x/wasm/internal/types/feature_flag.go | 4 + x/wasm/internal/types/ibc.go | 40 + x/wasm/internal/types/ibc.pb.go | 600 ++++++++++ x/wasm/internal/types/ibc.proto | 28 + x/wasm/internal/types/tx.go | 40 + x/wasm/internal/types/types.go | 4 +- x/wasm/internal/types/types.pb.go | 189 +-- x/wasm/internal/types/types.proto | 1 + x/wasm/internal/types/wasmer_engine.go | 150 ++- x/wasm/module_test.go | 2 +- x/wasm/relay_pingpong_test.go | 398 +++++++ x/wasm/relay_test.go | 496 ++++++++ 53 files changed, 6911 insertions(+), 596 deletions(-) create mode 100644 app/test_access.go create mode 100644 x/wasm/ibc.go create mode 100644 x/wasm/ibc_reflect_test.go create mode 100644 x/wasm/ibctesting/README.md create mode 100644 x/wasm/ibctesting/chain.go create mode 100644 x/wasm/ibctesting/coordinator.go create mode 100644 x/wasm/ibctesting/wasm.go create mode 100644 x/wasm/internal/keeper/ibc.go create mode 100644 x/wasm/internal/keeper/ibc_test.go create mode 100644 x/wasm/internal/keeper/options.go create mode 100644 x/wasm/internal/keeper/relay.go create mode 100644 x/wasm/internal/keeper/relay_test.go create mode 100644 x/wasm/internal/keeper/testdata/ibc_reflect.wasm create mode 100644 x/wasm/internal/keeper/testdata/ibc_reflect_send.wasm create mode 100644 x/wasm/internal/keeper/wasmtesting/messenger.go create mode 100644 x/wasm/internal/keeper/wasmtesting/mock_engine.go create mode 100644 x/wasm/internal/keeper/wasmtesting/mock_keepers.go create mode 100644 x/wasm/internal/types/feature_flag.go create mode 100644 x/wasm/internal/types/ibc.go create mode 100644 x/wasm/internal/types/ibc.pb.go create mode 100644 x/wasm/internal/types/ibc.proto create mode 100644 x/wasm/relay_pingpong_test.go create mode 100644 x/wasm/relay_test.go diff --git a/app/app.go b/app/app.go index 73fd5fc518..582aeaf8ef 100644 --- a/app/app.go +++ b/app/app.go @@ -226,9 +226,9 @@ type WasmApp struct { transferKeeper ibctransferkeeper.Keeper wasmKeeper wasm.Keeper - // make scoped keepers public for test purposes - ScopedIBCKeeper capabilitykeeper.ScopedKeeper - ScopedTransferKeeper capabilitykeeper.ScopedKeeper + scopedIBCKeeper capabilitykeeper.ScopedKeeper + scopedTransferKeeper capabilitykeeper.ScopedKeeper + scopedWasmKeeper capabilitykeeper.ScopedKeeper // the module manager mm *module.Manager @@ -240,7 +240,7 @@ type WasmApp struct { // NewWasmApp returns a reference to an initialized WasmApp. func NewWasmApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest bool, skipUpgradeHeights map[int64]bool, homePath string, invCheckPeriod uint, enabledProposals []wasm.ProposalType, - appOpts servertypes.AppOptions, baseAppOptions ...func(*baseapp.BaseApp)) *WasmApp { + appOpts servertypes.AppOptions, wasmOpts []wasm.Option, baseAppOptions ...func(*baseapp.BaseApp)) *WasmApp { encodingConfig := MakeEncodingConfig() appCodec, legacyAmino := encodingConfig.Marshaler, encodingConfig.Amino @@ -281,6 +281,7 @@ func NewWasmApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b app.capabilityKeeper = capabilitykeeper.NewKeeper(appCodec, keys[capabilitytypes.StoreKey], memKeys[capabilitytypes.MemStoreKey]) scopedIBCKeeper := app.capabilityKeeper.ScopeToModule(ibchost.ModuleName) scopedTransferKeeper := app.capabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) + scopedWasmKeeper := app.capabilityKeeper.ScopeToModule(wasm.ModuleName) // add keepers app.accountKeeper = authkeeper.NewAccountKeeper( @@ -355,7 +356,7 @@ func NewWasmApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b } // The last arguments can contain custom message handlers, and custom query handlers, // if we want to allow any custom callbacks - supportedFeatures := "staking" + supportedFeatures := "staking,stargate" app.wasmKeeper = wasm.NewKeeper( appCodec, keys[wasm.StoreKey], @@ -364,18 +365,23 @@ func NewWasmApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b app.bankKeeper, app.stakingKeeper, app.distrKeeper, + app.ibcKeeper.ChannelKeeper, + &app.ibcKeeper.PortKeeper, + scopedWasmKeeper, wasmRouter, wasmDir, wasmConfig, supportedFeatures, nil, nil, + wasmOpts..., ) // The gov proposal types can be individually enabled if len(enabledProposals) != 0 { govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.wasmKeeper, enabledProposals)) } + ibcRouter.AddRoute(wasm.ModuleName, wasm.NewIBCHandler(app.wasmKeeper)) app.ibcKeeper.SetRouter(ibcRouter) app.govKeeper = govkeeper.NewKeeper( @@ -503,8 +509,9 @@ func NewWasmApp(logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest b app.capabilityKeeper.InitializeAndSeal(ctx) } - app.ScopedIBCKeeper = scopedIBCKeeper - app.ScopedTransferKeeper = scopedTransferKeeper + app.scopedIBCKeeper = scopedIBCKeeper + app.scopedTransferKeeper = scopedTransferKeeper + app.scopedWasmKeeper = scopedWasmKeeper return app } diff --git a/app/app_test.go b/app/app_test.go index ed33131dd9..a36dd79c48 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -14,9 +14,11 @@ import ( abci "github.com/tendermint/tendermint/abci/types" ) +var emptyWasmOpts []wasm.Option = nil + func TestWasmdExport(t *testing.T) { db := db.NewMemDB() - gapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, wasm.EnableAllProposals, EmptyAppOptions{}) + gapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, wasm.EnableAllProposals, EmptyBaseAppOptions{}, emptyWasmOpts) genesisState := NewDefaultGenesisState() stateBytes, err := json.MarshalIndent(genesisState, "", " ") @@ -32,7 +34,7 @@ func TestWasmdExport(t *testing.T) { gapp.Commit() // Making a new app object with the db, so that initchain hasn't been called - newGapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, wasm.EnableAllProposals, EmptyAppOptions{}) + newGapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, wasm.EnableAllProposals, EmptyBaseAppOptions{}, emptyWasmOpts) _, err = newGapp.ExportAppStateAndValidators(false, []string{}) require.NoError(t, err, "ExportAppStateAndValidators should not have an error") } @@ -40,7 +42,7 @@ func TestWasmdExport(t *testing.T) { // ensure that blocked addresses are properly set in bank keeper func TestBlockedAddrs(t *testing.T) { db := db.NewMemDB() - gapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, wasm.EnableAllProposals, EmptyAppOptions{}) + 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))) diff --git a/app/test_access.go b/app/test_access.go new file mode 100644 index 0000000000..3332dcb5fb --- /dev/null +++ b/app/test_access.go @@ -0,0 +1,57 @@ +package app + +import ( + "testing" + + "github.com/CosmWasm/wasmd/x/wasm" + "github.com/cosmos/cosmos-sdk/codec" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" + ibctransferkeeper "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/keeper" + ibckeeper "github.com/cosmos/cosmos-sdk/x/ibc/core/keeper" + stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" +) + +type TestSupport struct { + t *testing.T + app *WasmApp +} + +func NewTestSupport(t *testing.T, app *WasmApp) *TestSupport { + return &TestSupport{t: t, app: app} +} + +func (s TestSupport) IBCKeeper() ibckeeper.Keeper { + return *s.app.ibcKeeper +} + +func (s TestSupport) WasmKeeper() wasm.Keeper { + return s.app.wasmKeeper +} + +func (s TestSupport) AppCodec() codec.Marshaler { + return s.app.appCodec +} +func (s TestSupport) ScopedWasmIBCKeeper() capabilitykeeper.ScopedKeeper { + return s.app.scopedWasmKeeper +} + +func (s TestSupport) ScopeIBCKeeper() capabilitykeeper.ScopedKeeper { + return s.app.scopedIBCKeeper +} + +func (s TestSupport) ScopedTransferKeeper() capabilitykeeper.ScopedKeeper { + return s.app.scopedTransferKeeper +} + +func (s TestSupport) StakingKeeper() stakingkeeper.Keeper { + return s.app.stakingKeeper +} + +func (s TestSupport) BankKeeper() bankkeeper.Keeper { + return s.app.bankKeeper +} + +func (s TestSupport) TransferKeeper() ibctransferkeeper.Keeper { + return s.app.transferKeeper +} diff --git a/app/test_helpers.go b/app/test_helpers.go index 78ee06748e..624caeacad 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -1,53 +1,444 @@ package app import ( + "bytes" + "encoding/hex" + "encoding/json" + "fmt" + "github.com/CosmWasm/wasmd/x/wasm" + "strconv" "testing" + "time" - "github.com/CosmWasm/wasmd/x/wasm" - "github.com/cosmos/cosmos-sdk/codec" - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - ibctransferkeeper "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/keeper" - ibckeeper "github.com/cosmos/cosmos-sdk/x/ibc/core/keeper" - stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmtypes "github.com/tendermint/tendermint/types" + dbm "github.com/tendermint/tm-db" + + bam "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/simapp/helpers" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/errors" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ) -type TestSupport struct { - t *testing.T - app *WasmApp +// DefaultConsensusParams defines the default Tendermint consensus params used in +// WasmApp testing. +var DefaultConsensusParams = &abci.ConsensusParams{ + Block: &abci.BlockParams{ + MaxBytes: 200000, + MaxGas: 2000000, + }, + Evidence: &tmproto.EvidenceParams{ + MaxAgeNumBlocks: 302400, + MaxAgeDuration: 504 * time.Hour, // 3 weeks is the max duration + MaxBytes: 10000, + }, + Validator: &tmproto.ValidatorParams{ + PubKeyTypes: []string{ + tmtypes.ABCIPubKeyTypeEd25519, + }, + }, +} + +func setup(withGenesis bool, invCheckPeriod uint, opts ...wasm.Option) (*WasmApp, GenesisState) { + db := dbm.NewMemDB() + app := NewWasmApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, invCheckPeriod, wasm.EnableAllProposals, EmptyBaseAppOptions{}, opts) + if withGenesis { + return app, NewDefaultGenesisState() + } + return app, GenesisState{} +} + +// Setup initializes a new WasmApp. A Nop logger is set in WasmApp. +func Setup(isCheckTx bool) *WasmApp { + app, genesisState := setup(!isCheckTx, 5) + if !isCheckTx { + // init chain must be called to stop deliverState from being nil + stateBytes, err := json.MarshalIndent(genesisState, "", " ") + if err != nil { + panic(err) + } + + // Initialize the chain + app.InitChain( + abci.RequestInitChain{ + Validators: []abci.ValidatorUpdate{}, + ConsensusParams: DefaultConsensusParams, + AppStateBytes: stateBytes, + }, + ) + } + + return app +} + +// SetupWithGenesisValSet initializes a new WasmApp with a validator set and genesis accounts +// that also act as delegators. For simplicity, each validator is bonded with a delegation +// of one consensus engine unit (10^6) in the default token of the WasmApp from first genesis +// account. A Nop logger is set in WasmApp. +func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, opts []wasm.Option, balances ...banktypes.Balance) *WasmApp { + app, genesisState := setup(true, 5, opts...) + // set genesis accounts + authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs) + genesisState[authtypes.ModuleName] = app.appCodec.MustMarshalJSON(authGenesis) + + validators := make([]stakingtypes.Validator, 0, len(valSet.Validators)) + delegations := make([]stakingtypes.Delegation, 0, len(valSet.Validators)) + + bondAmt := sdk.NewInt(1000000) + + for _, val := range valSet.Validators { + pk, err := cryptocodec.FromTmPubKeyInterface(val.PubKey) + require.NoError(t, err) + pkAny, err := codectypes.NewAnyWithValue(pk) + require.NoError(t, err) + validator := stakingtypes.Validator{ + OperatorAddress: sdk.ValAddress(val.Address).String(), + ConsensusPubkey: pkAny, + Jailed: false, + Status: stakingtypes.Bonded, + Tokens: bondAmt, + DelegatorShares: sdk.OneDec(), + Description: stakingtypes.Description{}, + UnbondingHeight: int64(0), + UnbondingTime: time.Unix(0, 0).UTC(), + Commission: stakingtypes.NewCommission(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()), + MinSelfDelegation: sdk.ZeroInt(), + } + validators = append(validators, validator) + delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), sdk.OneDec())) + + } + + // set validators and delegations + stakingGenesis := stakingtypes.NewGenesisState(stakingtypes.DefaultParams(), validators, delegations) + genesisState[stakingtypes.ModuleName] = app.appCodec.MustMarshalJSON(stakingGenesis) + + totalSupply := sdk.NewCoins() + for _, b := range balances { + // add genesis acc tokens and delegated tokens to total supply + totalSupply = totalSupply.Add(b.Coins.Add(sdk.NewCoin(sdk.DefaultBondDenom, bondAmt))...) + } + + // update total supply + bankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, totalSupply, []banktypes.Metadata{}) + genesisState[banktypes.ModuleName] = app.appCodec.MustMarshalJSON(bankGenesis) + + stateBytes, err := json.MarshalIndent(genesisState, "", " ") + require.NoError(t, err) + + // init chain will set the validator set and initialize the genesis accounts + app.InitChain( + abci.RequestInitChain{ + Validators: []abci.ValidatorUpdate{}, + ConsensusParams: DefaultConsensusParams, + AppStateBytes: stateBytes, + }, + ) + + // commit genesis changes + app.Commit() + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{ + Height: app.LastBlockHeight() + 1, + AppHash: app.LastCommitID().Hash, + ValidatorsHash: valSet.Hash(), + NextValidatorsHash: valSet.Hash(), + }}) + + return app +} + +// SetupWithGenesisAccounts initializes a new WasmApp with the provided genesis +// accounts and possible balances. +func SetupWithGenesisAccounts(genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *WasmApp { + app, genesisState := setup(true, 0) + authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs) + genesisState[authtypes.ModuleName] = app.appCodec.MustMarshalJSON(authGenesis) + + totalSupply := sdk.NewCoins() + for _, b := range balances { + totalSupply = totalSupply.Add(b.Coins...) + } + + bankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, totalSupply, []banktypes.Metadata{}) + genesisState[banktypes.ModuleName] = app.appCodec.MustMarshalJSON(bankGenesis) + + stateBytes, err := json.MarshalIndent(genesisState, "", " ") + if err != nil { + panic(err) + } + + app.InitChain( + abci.RequestInitChain{ + Validators: []abci.ValidatorUpdate{}, + ConsensusParams: DefaultConsensusParams, + AppStateBytes: stateBytes, + }, + ) + + app.Commit() + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1}}) + + return app +} + +type GenerateAccountStrategy func(int) []sdk.AccAddress + +// createRandomAccounts is a strategy used by addTestAddrs() in order to generated addresses in random order. +func createRandomAccounts(accNum int) []sdk.AccAddress { + testAddrs := make([]sdk.AccAddress, accNum) + for i := 0; i < accNum; i++ { + pk := ed25519.GenPrivKey().PubKey() + testAddrs[i] = sdk.AccAddress(pk.Address()) + } + + return testAddrs +} + +// createIncrementalAccounts is a strategy used by addTestAddrs() in order to generated addresses in ascending order. +func createIncrementalAccounts(accNum int) []sdk.AccAddress { + var addresses []sdk.AccAddress + var buffer bytes.Buffer + + // start at 100 so we can make up to 999 test addresses with valid test addresses + for i := 100; i < (accNum + 100); i++ { + numString := strconv.Itoa(i) + buffer.WriteString("A58856F0FD53BF058B4909A21AEC019107BA6") //base address string + + buffer.WriteString(numString) //adding on final two digits to make addresses unique + res, _ := sdk.AccAddressFromHex(buffer.String()) + bech := res.String() + addr, _ := TestAddr(buffer.String(), bech) + + addresses = append(addresses, addr) + buffer.Reset() + } + + return addresses +} + +// AddTestAddrsFromPubKeys adds the addresses into the WasmApp providing only the public keys. +func AddTestAddrsFromPubKeys(app *WasmApp, ctx sdk.Context, pubKeys []cryptotypes.PubKey, accAmt sdk.Int) { + initCoins := sdk.NewCoins(sdk.NewCoin(app.stakingKeeper.BondDenom(ctx), accAmt)) + + setTotalSupply(app, ctx, accAmt, len(pubKeys)) + + // fill all the addresses with some coins, set the loose pool tokens simultaneously + for _, pubKey := range pubKeys { + saveAccount(app, ctx, sdk.AccAddress(pubKey.Address()), initCoins) + } } -func NewTestSupport(t *testing.T, app *WasmApp) *TestSupport { - return &TestSupport{t: t, app: app} +// setTotalSupply provides the total supply based on accAmt * totalAccounts. +func setTotalSupply(app *WasmApp, ctx sdk.Context, accAmt sdk.Int, totalAccounts int) { + totalSupply := sdk.NewCoins(sdk.NewCoin(app.stakingKeeper.BondDenom(ctx), accAmt.MulRaw(int64(totalAccounts)))) + prevSupply := app.bankKeeper.GetSupply(ctx) + app.bankKeeper.SetSupply(ctx, banktypes.NewSupply(prevSupply.GetTotal().Add(totalSupply...))) } -func (s TestSupport) IBCKeeper() ibckeeper.Keeper { - return *s.app.ibcKeeper +// AddTestAddrs constructs and returns accNum amount of accounts with an +// initial balance of accAmt in random order +func AddTestAddrs(app *WasmApp, ctx sdk.Context, accNum int, accAmt sdk.Int) []sdk.AccAddress { + return addTestAddrs(app, ctx, accNum, accAmt, createRandomAccounts) } -func (s TestSupport) WasmKeeper() wasm.Keeper { - return s.app.wasmKeeper +// AddTestAddrs constructs and returns accNum amount of accounts with an +// initial balance of accAmt in random order +func AddTestAddrsIncremental(app *WasmApp, ctx sdk.Context, accNum int, accAmt sdk.Int) []sdk.AccAddress { + return addTestAddrs(app, ctx, accNum, accAmt, createIncrementalAccounts) } -func (s TestSupport) AppCodec() codec.Marshaler { - return s.app.appCodec +func addTestAddrs(app *WasmApp, ctx sdk.Context, accNum int, accAmt sdk.Int, strategy GenerateAccountStrategy) []sdk.AccAddress { + testAddrs := strategy(accNum) + + initCoins := sdk.NewCoins(sdk.NewCoin(app.stakingKeeper.BondDenom(ctx), accAmt)) + setTotalSupply(app, ctx, accAmt, accNum) + + // fill all the addresses with some coins, set the loose pool tokens simultaneously + for _, addr := range testAddrs { + saveAccount(app, ctx, addr, initCoins) + } + + return testAddrs } -func (s TestSupport) StakingKeeper() stakingkeeper.Keeper { - return s.app.stakingKeeper +// saveAccount saves the provided account into the WasmApp with balance based on initCoins. +func saveAccount(app *WasmApp, ctx sdk.Context, addr sdk.AccAddress, initCoins sdk.Coins) { + acc := app.accountKeeper.NewAccountWithAddress(ctx, addr) + app.accountKeeper.SetAccount(ctx, acc) + err := app.bankKeeper.AddCoins(ctx, addr, initCoins) + if err != nil { + panic(err) + } } -func (s TestSupport) BankKeeper() bankkeeper.Keeper { - return s.app.bankKeeper +// ConvertAddrsToValAddrs converts the provided addresses to ValAddress. +func ConvertAddrsToValAddrs(addrs []sdk.AccAddress) []sdk.ValAddress { + valAddrs := make([]sdk.ValAddress, len(addrs)) + + for i, addr := range addrs { + valAddrs[i] = sdk.ValAddress(addr) + } + + return valAddrs +} + +func TestAddr(addr string, bech string) (sdk.AccAddress, error) { + res, err := sdk.AccAddressFromHex(addr) + if err != nil { + return nil, err + } + bechexpected := res.String() + if bech != bechexpected { + return nil, fmt.Errorf("bech encoding doesn't match reference") + } + + bechres, err := sdk.AccAddressFromBech32(bech) + if err != nil { + return nil, err + } + if !bytes.Equal(bechres, res) { + return nil, err + } + + return res, nil +} + +// CheckBalance checks the balance of an account. +func CheckBalance(t *testing.T, app *WasmApp, addr sdk.AccAddress, balances sdk.Coins) { + ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) + require.True(t, balances.IsEqual(app.bankKeeper.GetAllBalances(ctxCheck, addr))) +} + +const DefaultGas = 1200000 + +// SignCheckDeliver checks a generated signed transaction and simulates a +// block commitment with the given transaction. A test assertion is made using +// the parameter 'expPass' against the result. A corresponding result is +// returned. +func SignCheckDeliver( + t *testing.T, txCfg client.TxConfig, app *bam.BaseApp, header tmproto.Header, msgs []sdk.Msg, + chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...cryptotypes.PrivKey, +) (sdk.GasInfo, *sdk.Result, error) { + + tx, err := helpers.GenTx( + txCfg, + msgs, + sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, + 2*DefaultGas, + chainID, + accNums, + accSeqs, + priv..., + ) + require.NoError(t, err) + txBytes, err := txCfg.TxEncoder()(tx) + require.Nil(t, err) + + // Must simulate now as CheckTx doesn't run Msgs anymore + _, res, err := app.Simulate(txBytes) + + if expSimPass { + require.NoError(t, err) + require.NotNil(t, res) + } else { + require.Error(t, err) + require.Nil(t, res) + } + + // Simulate a sending a transaction and committing a block + app.BeginBlock(abci.RequestBeginBlock{Header: header}) + gInfo, res, err := app.Deliver(txCfg.TxEncoder(), tx) + + if expPass { + require.NoError(t, err) + require.NotNil(t, res) + } else { + require.Error(t, err) + require.Nil(t, res) + } + + app.EndBlock(abci.RequestEndBlock{}) + app.Commit() + + return gInfo, res, err +} + +// GenSequenceOfTxs generates a set of signed transactions of messages, such +// that they differ only by having the sequence numbers incremented between +// every transaction. +func GenSequenceOfTxs(txGen client.TxConfig, msgs []sdk.Msg, accNums []uint64, initSeqNums []uint64, numToGenerate int, priv ...cryptotypes.PrivKey) ([]sdk.Tx, error) { + txs := make([]sdk.Tx, numToGenerate) + var err error + for i := 0; i < numToGenerate; i++ { + txs[i], err = helpers.GenTx( + txGen, + msgs, + sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, + helpers.DefaultGenTxGas, + "", + accNums, + initSeqNums, + priv..., + ) + if err != nil { + break + } + incrementAllSequenceNumbers(initSeqNums) + } + + return txs, err +} + +func incrementAllSequenceNumbers(initSeqNums []uint64) { + for i := 0; i < len(initSeqNums); i++ { + initSeqNums[i]++ + } +} + +// CreateTestPubKeys returns a total of numPubKeys public keys in ascending order. +func CreateTestPubKeys(numPubKeys int) []cryptotypes.PubKey { + var publicKeys []cryptotypes.PubKey + var buffer bytes.Buffer + + // start at 10 to avoid changing 1 to 01, 2 to 02, etc + for i := 100; i < (numPubKeys + 100); i++ { + numString := strconv.Itoa(i) + buffer.WriteString("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AF") // base pubkey string + buffer.WriteString(numString) // adding on final two digits to make pubkeys unique + publicKeys = append(publicKeys, NewPubKeyFromHex(buffer.String())) + buffer.Reset() + } + + return publicKeys } -func (s TestSupport) TransferKeeper() ibctransferkeeper.Keeper { - return s.app.transferKeeper +// NewPubKeyFromHex returns a PubKey from a hex string. +func NewPubKeyFromHex(pk string) (res cryptotypes.PubKey) { + pkBytes, err := hex.DecodeString(pk) + if err != nil { + panic(err) + } + if len(pkBytes) != ed25519.PubKeySize { + panic(errors.Wrap(errors.ErrInvalidPubKey, "invalid pubkey size")) + } + return &ed25519.PubKey{Key: pkBytes} } -// EmptyAppOptions is a stub implementing AppOptions -type EmptyAppOptions struct{} +// EmptyBaseAppOptions is a stub implementing AppOptions +type EmptyBaseAppOptions struct{} // Get implements AppOptions -func (ao EmptyAppOptions) Get(o string) interface{} { +func (ao EmptyBaseAppOptions) Get(o string) interface{} { return nil } diff --git a/cmd/wasmd/root.go b/cmd/wasmd/root.go index fa0c932e2b..6b010c1c38 100644 --- a/cmd/wasmd/root.go +++ b/cmd/wasmd/root.go @@ -198,12 +198,13 @@ func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts serverty if err != nil { panic(err) } - + var emptyWasmOpts []wasm.Option return app.NewWasmApp(logger, db, traceStore, true, skipUpgradeHeights, cast.ToString(appOpts.Get(flags.FlagHome)), cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), app.GetEnabledProposals(), appOpts, + emptyWasmOpts, baseapp.SetPruning(pruningOpts), baseapp.SetMinGasPrices(cast.ToString(appOpts.Get(server.FlagMinGasPrices))), baseapp.SetHaltHeight(cast.ToUint64(appOpts.Get(server.FlagHaltHeight))), @@ -227,14 +228,15 @@ func createWasmAppAndExport( if !ok || homePath == "" { return servertypes.ExportedApp{}, errors.New("application home not set") } + var emptyWasmOpts []wasm.Option if height != -1 { - wasmApp = app.NewWasmApp(logger, db, traceStore, false, map[int64]bool{}, homePath, uint(1), app.GetEnabledProposals(), appOpts) + wasmApp = app.NewWasmApp(logger, db, traceStore, false, map[int64]bool{}, homePath, uint(1), app.GetEnabledProposals(), appOpts, emptyWasmOpts) if err := wasmApp.LoadHeight(height); err != nil { return servertypes.ExportedApp{}, err } } else { - wasmApp = app.NewWasmApp(logger, db, traceStore, true, map[int64]bool{}, homePath, uint(1), app.GetEnabledProposals(), appOpts) + wasmApp = app.NewWasmApp(logger, db, traceStore, true, map[int64]bool{}, homePath, uint(1), app.GetEnabledProposals(), appOpts, emptyWasmOpts) } return wasmApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs) diff --git a/doc/proto.md b/doc/proto.md index c32ecf6109..00714489a7 100644 --- a/doc/proto.md +++ b/doc/proto.md @@ -10,6 +10,10 @@ - [GenesisState.GenMsgs](#cosmwasm.wasm.v1beta1.GenesisState.GenMsgs) - [Sequence](#cosmwasm.wasm.v1beta1.Sequence) +- [x/wasm/internal/types/ibc.proto](#x/wasm/internal/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) - [ClearAdminProposal](#cosmwasm.wasm.v1beta1.ClearAdminProposal) - [InstantiateContractProposal](#cosmwasm.wasm.v1beta1.InstantiateContractProposal) @@ -17,19 +21,6 @@ - [StoreCodeProposal](#cosmwasm.wasm.v1beta1.StoreCodeProposal) - [UpdateAdminProposal](#cosmwasm.wasm.v1beta1.UpdateAdminProposal) -- [x/wasm/internal/types/types.proto](#x/wasm/internal/types/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) - - [x/wasm/internal/types/query.proto](#x/wasm/internal/types/query.proto) - [CodeInfoResponse](#cosmwasm.wasm.v1beta1.CodeInfoResponse) - [ContractInfoWithAddress](#cosmwasm.wasm.v1beta1.ContractInfoWithAddress) @@ -68,6 +59,19 @@ - [Msg](#cosmwasm.wasm.v1beta1.Msg) +- [x/wasm/internal/types/types.proto](#x/wasm/internal/types/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) + - [Scalar Value Types](#scalar-value-types) @@ -175,6 +179,55 @@ Sequence key and value of an id generation counter + +

Top

+ +## x/wasm/internal/types/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

@@ -289,186 +342,6 @@ UpdateAdminProposal gov proposal content type to set an admin for a contract. - -

Top

- -## x/wasm/internal/types/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 CodeID | -| 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 | - - - - - - - - -### 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

@@ -1007,6 +880,187 @@ Msg defines the wasm Msg service. + +

Top

+ +## x/wasm/internal/types/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 CodeID | +| 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 | + + + + + + + + + + ## Scalar Value Types | .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby | diff --git a/go.mod b/go.mod index 3b6f401cd8..55926415ad 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.13.0 + github.com/CosmWasm/wasmvm v0.13.1-0.20210125204657-16df1fdaf712 github.com/cosmos/cosmos-sdk v0.41.0 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 81da5bcc78..f2ca7e3c1a 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.13.0 h1:AP8LVcCxI3KLtHY24qLhzVe+ChOXwcR8MNm8Jxkuhwk= -github.com/CosmWasm/wasmvm v0.13.0/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= +github.com/CosmWasm/wasmvm v0.13.1-0.20210125204657-16df1fdaf712 h1:8gMCeYi0In+3R+ox44SfXoY9a7KXngH8sDwsg+eLwB4= +github.com/CosmWasm/wasmvm v0.13.1-0.20210125204657-16df1fdaf712/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= @@ -101,16 +101,12 @@ 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.40.1 h1:gjrtV3MQj/CMeyXN4+sosHMG6Xwa2uH6HITSjSNL/0E= -github.com/cosmos/cosmos-sdk v0.40.1/go.mod h1:vlgqdPpUGSxgqSbZea6fjszoLkPKwCuiqSBySLlv4ro= github.com/cosmos/cosmos-sdk v0.41.0 h1:U614TXkI/+T8HY6V9krC0/mKaDm6qSs9EMFSIKuomCo= github.com/cosmos/cosmos-sdk v0.41.0/go.mod h1:vlgqdPpUGSxgqSbZea6fjszoLkPKwCuiqSBySLlv4ro= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fjHb6JFYmeUnDORVwHNkDxaQ0ctCVU= 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= github.com/cosmos/iavl v0.15.0-rc3.0.20201009144442-230e9bdf52cd/go.mod h1:3xOIaNNX19p0QrX0VqWa6voPRoJRGGYtny+DH8NEPvE= -github.com/cosmos/iavl v0.15.0-rc5 h1:AMKgaAjXwGANWv56NL4q4hV+a0puSkLYD6cCQAv3i44= github.com/cosmos/iavl v0.15.0-rc5/go.mod h1:WqoPL9yPTQ85QBMT45OOUzPxG/U/JcJoN7uMjgxke/I= github.com/cosmos/iavl v0.15.3 h1:xE9r6HW8GeKeoYJN4zefpljZ1oukVScP/7M8oj6SUts= github.com/cosmos/iavl v0.15.3/go.mod h1:OLjQiAQ4fGD2KDZooyJG9yz+p2ao2IAYSbke8mVvSA4= @@ -169,7 +165,6 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -188,7 +183,6 @@ github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+ github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -209,7 +203,6 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= 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 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= 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= @@ -227,7 +220,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ 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/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -447,7 +439,6 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= 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 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= 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= @@ -465,7 +456,6 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= 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 h1:RHRyE8UocrbjU+6UvRzwi6HjiDfxrrBU91TtbKzkGp4= 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= @@ -474,7 +464,6 @@ github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R 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 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= 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= @@ -552,7 +541,6 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -570,14 +558,11 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4= -github.com/tendermint/tendermint v0.34.0-rc6 h1:SVuKGvvE22KxfuK8QUHctUrmOWJsncZSYXIYtcnoKN0= github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg= -github.com/tendermint/tendermint v0.34.0 h1:eXCfMgoqVSzrjzOj6clI9GAejcHH0LvOlRjpCmMJksU= github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ= github.com/tendermint/tendermint v0.34.3 h1:9yEsf3WO5VAwPVwrmM+RffDMiijmNfWaBwNttHm0q5w= github.com/tendermint/tendermint v0.34.3/go.mod h1:h57vnXeOlrdvvNFCqPBSaOrpOivl+2swWEtlUAqStYE= github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4= -github.com/tendermint/tm-db v0.6.2 h1:DOn8jwCdjJblrCFJbtonEIPD1IuJWpbRUUdR8GWE4RM= github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI= github.com/tendermint/tm-db v0.6.3 h1:ZkhQcKnB8/2jr5EaZwGndN4owkPsGezW2fSisS9zGbg= github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8= @@ -629,7 +614,6 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY= @@ -734,10 +718,8 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed h1:J22ig1FUekjjkmZUM7pTKixYm8DvrYsvrBZdunYeIuQ= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211 h1:9UQO31fZ+0aKQOFldThf7BKPMJTiBfWycGh/u3UoO88= 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= @@ -748,7 +730,6 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -852,7 +833,6 @@ gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/x/wasm/alias.go b/x/wasm/alias.go index bd22f274d8..6ae30298f6 100644 --- a/x/wasm/alias.go +++ b/x/wasm/alias.go @@ -60,7 +60,7 @@ var ( DefaultParams = types.DefaultParams InitGenesis = keeper.InitGenesis ExportGenesis = keeper.ExportGenesis - NewMessageHandler = keeper.NewMessageHandler + NewMessageHandler = keeper.NewDefaultMessageHandler DefaultEncoders = keeper.DefaultEncoders EncodeBankMsg = keeper.EncodeBankMsg NoCustomMsg = keeper.NoCustomMsg @@ -77,6 +77,8 @@ var ( TestHandler = keeper.TestHandler NewWasmProposalHandler = keeper.NewWasmProposalHandler NewQuerier = keeper.NewQuerier + ContractFromPortID = keeper.ContractFromPortID + WithWasmEngine = keeper.WithWasmEngine // variable aliases ModuleCdc = types.ModuleCdc @@ -115,6 +117,7 @@ type ( MsgUpdateAdmin = types.MsgUpdateAdmin MsgUpdateAdminResponse = types.MsgUpdateAdminResponse MsgClearAdmin = types.MsgClearAdmin + MsgWasmIBCCall = types.MsgIBCSend MsgClearAdminResponse = types.MsgClearAdminResponse MsgServer = types.MsgServer Model = types.Model @@ -124,7 +127,7 @@ type ( Config = types.WasmConfig ContractInfoWithAddress = types.ContractInfoWithAddress CodeInfoResponse = types.CodeInfoResponse - MessageHandler = keeper.MessageHandler + MessageHandler = keeper.DefaultMessageHandler BankEncoder = keeper.BankEncoder CustomEncoder = keeper.CustomEncoder StakingEncoder = keeper.StakingEncoder @@ -134,4 +137,5 @@ type ( QueryHandler = keeper.QueryHandler CustomQuerier = keeper.CustomQuerier QueryPlugins = keeper.QueryPlugins + Option = keeper.Option ) diff --git a/x/wasm/ibc.go b/x/wasm/ibc.go new file mode 100644 index 0000000000..b887b772ce --- /dev/null +++ b/x/wasm/ibc.go @@ -0,0 +1,271 @@ +package wasm + +import ( + wasmTypes "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" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" + porttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/05-port/types" + host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" + "math" +) + +var _ porttypes.IBCModule = IBCHandler{} + +type IBCHandler struct { + keeper Keeper + channelKeeper wasmTypes.ChannelKeeper +} + +func NewIBCHandler(keeper Keeper) IBCHandler { + return IBCHandler{keeper: keeper, channelKeeper: keeper.ChannelKeeper} +} + +// OnChanOpenInit implements the IBCModule interface +func (i IBCHandler) OnChanOpenInit( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + chanCap *capabilitytypes.Capability, + counterParty channeltypes.Counterparty, + version string, +) error { + // ensure port, version, capability + if err := ValidateChannelParams(channelID); err != nil { + return err + } + contractAddr, err := ContractFromPortID(portID) + if err != nil { + return sdkerrors.Wrapf(err, "contract port id") + } + + err = i.keeper.OnOpenChannel(ctx, contractAddr, wasmvmtypes.IBCChannel{ + Endpoint: wasmvmtypes.IBCEndpoint{PortID: portID, ChannelID: channelID}, + CounterpartyEndpoint: wasmvmtypes.IBCEndpoint{PortID: counterParty.PortId, ChannelID: counterParty.ChannelId}, + Order: order.String(), + Version: version, + ConnectionID: connectionHops[0], // At the moment this list must be of length 1. In the future multi-hop channels may be supported. + }) + if err != nil { + return err + } + // Claim channel capability passed back by IBC module + if err := i.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { + return sdkerrors.Wrap(err, "claim capability") + } + return nil +} + +// OnChanOpenTry implements the IBCModule interface +func (i IBCHandler) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, channelID string, + chanCap *capabilitytypes.Capability, + counterParty channeltypes.Counterparty, + version, counterpartyVersion string, +) error { + // ensure port, version, capability + if err := ValidateChannelParams(channelID); err != nil { + return err + } + + contractAddr, err := ContractFromPortID(portID) + if err != nil { + return sdkerrors.Wrapf(err, "contract port id") + } + + err = i.keeper.OnOpenChannel(ctx, contractAddr, wasmvmtypes.IBCChannel{ + Endpoint: wasmvmtypes.IBCEndpoint{PortID: portID, ChannelID: channelID}, + CounterpartyEndpoint: wasmvmtypes.IBCEndpoint{PortID: counterParty.PortId, ChannelID: counterParty.ChannelId}, + Order: order.String(), + Version: version, + CounterpartyVersion: counterpartyVersion, + ConnectionID: connectionHops[0], // At the moment this list must be of length 1. In the future multi-hop channels may be supported. + }) + if err != nil { + return err + } + // Module may have already claimed capability in OnChanOpenInit in the case of crossing hellos + // (ie chainA and chainB both call ChanOpenInit before one of them calls ChanOpenTry) + // If module can already authenticate the capability then module already owns it so we don't need to claim + // Otherwise, module does not have channel capability and we must claim it from IBC + if !i.keeper.AuthenticateCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)) { + // Only claim channel capability passed back by IBC module if we do not already own it + if err := i.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { + return sdkerrors.Wrap(err, "claim capability") + } + } + return nil +} + +// OnChanOpenAck implements the IBCModule interface +func (i IBCHandler) OnChanOpenAck( + ctx sdk.Context, + portID, channelID string, + counterpartyVersion string, +) error { + contractAddr, err := ContractFromPortID(portID) + if err != nil { + return sdkerrors.Wrapf(err, "contract port id") + } + channelInfo, ok := i.channelKeeper.GetChannel(ctx, portID, channelID) + if !ok { + return sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", portID, channelID) + } + return i.keeper.OnConnectChannel(ctx, contractAddr, toWasmVMChannel(portID, channelID, channelInfo, counterpartyVersion)) +} + +// OnChanOpenConfirm implements the IBCModule interface +func (i IBCHandler) OnChanOpenConfirm(ctx sdk.Context, portID, channelID string) error { + contractAddr, err := ContractFromPortID(portID) + if err != nil { + return sdkerrors.Wrapf(err, "contract port id") + } + channelInfo, ok := i.channelKeeper.GetChannel(ctx, portID, channelID) + if !ok { + return sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", portID, channelID) + } + return i.keeper.OnConnectChannel(ctx, contractAddr, toWasmVMChannel(portID, channelID, channelInfo, "")) +} + +// OnChanCloseInit implements the IBCModule interface +func (i IBCHandler) OnChanCloseInit(ctx sdk.Context, portID, channelID string) error { + contractAddr, err := ContractFromPortID(portID) + if err != nil { + return sdkerrors.Wrapf(err, "contract port id") + } + channelInfo, ok := i.channelKeeper.GetChannel(ctx, portID, channelID) + if !ok { + return sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", portID, channelID) + } + + err = i.keeper.OnCloseChannel(ctx, contractAddr, toWasmVMChannel(portID, channelID, channelInfo, "")) + if err != nil { + return err + } + // emit events? + + return err +} + +// OnChanCloseConfirm implements the IBCModule interface +func (i IBCHandler) OnChanCloseConfirm(ctx sdk.Context, portID, channelID string) error { + // counterparty has closed the channel + contractAddr, err := ContractFromPortID(portID) + if err != nil { + return sdkerrors.Wrapf(err, "contract port id") + } + channelInfo, ok := i.channelKeeper.GetChannel(ctx, portID, channelID) + if !ok { + return sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", portID, channelID) + } + + err = i.keeper.OnCloseChannel(ctx, contractAddr, toWasmVMChannel(portID, channelID, channelInfo, "")) + if err != nil { + return err + } + // emit events? + + return err +} + +func toWasmVMChannel(portID, channelID string, channelInfo channeltypes.Channel, counterpartyVersion string) wasmvmtypes.IBCChannel { + return wasmvmtypes.IBCChannel{ + Endpoint: wasmvmtypes.IBCEndpoint{PortID: portID, ChannelID: channelID}, + CounterpartyEndpoint: wasmvmtypes.IBCEndpoint{PortID: channelInfo.Counterparty.PortId, ChannelID: channelInfo.Counterparty.ChannelId}, + Order: channelInfo.Ordering.String(), + Version: channelInfo.Version, + ConnectionID: channelInfo.ConnectionHops[0], // At the moment this list must be of length 1. In the future multi-hop channels may be supported. + CounterpartyVersion: counterpartyVersion, + } +} + +// OnRecvPacket implements the IBCModule interface +func (i IBCHandler) OnRecvPacket( + ctx sdk.Context, + packet channeltypes.Packet, +) (*sdk.Result, []byte, error) { + contractAddr, err := ContractFromPortID(packet.DestinationPort) + if err != nil { + return nil, nil, sdkerrors.Wrapf(err, "contract port id") + } + msgBz, err := i.keeper.OnRecvPacket(ctx, contractAddr, newIBCPacket(packet)) + if err != nil { + return nil, nil, err + } + + return &sdk.Result{ + Events: ctx.EventManager().Events().ToABCIEvents(), + }, msgBz, nil +} + +// OnAcknowledgementPacket implements the IBCModule interface +func (i IBCHandler) OnAcknowledgementPacket(ctx sdk.Context, packet channeltypes.Packet, acknowledgement []byte) (*sdk.Result, error) { + contractAddr, err := ContractFromPortID(packet.SourcePort) + if err != nil { + return nil, sdkerrors.Wrapf(err, "contract port id") + } + + err = i.keeper.OnAckPacket(ctx, contractAddr, wasmvmtypes.IBCAcknowledgement{ + Acknowledgement: acknowledgement, + OriginalPacket: newIBCPacket(packet), + }) + if err != nil { + return nil, err + } + + return &sdk.Result{ + Events: ctx.EventManager().Events().ToABCIEvents(), + }, nil + +} + +// OnTimeoutPacket implements the IBCModule interface +func (i IBCHandler) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Packet) (*sdk.Result, error) { + contractAddr, err := ContractFromPortID(packet.SourcePort) + if err != nil { + return nil, sdkerrors.Wrapf(err, "contract port id") + } + err = i.keeper.OnTimeoutPacket(ctx, contractAddr, newIBCPacket(packet)) + if err != nil { + return nil, err + } + + return &sdk.Result{ + Events: ctx.EventManager().Events().ToABCIEvents(), + }, nil + +} + +func newIBCPacket(packet channeltypes.Packet) wasmvmtypes.IBCPacket { + 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, + } +} + +func ValidateChannelParams(channelID string) error { + // NOTE: for escrow address security only 2^32 channels are allowed to be created + // Issue: https://github.com/cosmos/cosmos-sdk/issues/7737 + channelSequence, err := channeltypes.ParseChannelSequence(channelID) + if err != nil { + 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 nil +} diff --git a/x/wasm/ibc_reflect_test.go b/x/wasm/ibc_reflect_test.go new file mode 100644 index 0000000000..4ffde0ba3d --- /dev/null +++ b/x/wasm/ibc_reflect_test.go @@ -0,0 +1,102 @@ +package wasm_test + +import ( + "github.com/CosmWasm/wasmd/x/wasm/ibctesting" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/internal/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" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "testing" +) + +func TestIBCReflectContract(t *testing.T) { + var ( + coordinator = ibctesting.NewCoordinator(t, 2, nil, nil) + chainA = coordinator.GetChain(ibctesting.GetChainID(0)) + chainB = coordinator.GetChain(ibctesting.GetChainID(1)) + ) + coordinator.CommitBlock(chainA, chainB) + + initMsg := []byte(`{}`) + codeID := chainA.StoreCodeFile("./internal/keeper/testdata/ibc_reflect_send.wasm").CodeID + sendContractAddr := chainA.InstantiateContract(codeID, initMsg) + + reflectID := chainB.StoreCodeFile("./internal/keeper/testdata/reflect.wasm").CodeID + initMsg = wasmkeeper.IBCReflectInitMsg{ + ReflectCodeID: reflectID, + }.GetBytes(t) + codeID = chainB.StoreCodeFile("./internal/keeper/testdata/ibc_reflect.wasm").CodeID + + reflectContractAddr := chainB.InstantiateContract(codeID, initMsg) + var ( + sourcePortID = chainA.ContractInfo(sendContractAddr).IBCPortID + counterpartPortID = chainB.ContractInfo(reflectContractAddr).IBCPortID + ) + clientA, clientB, connA, connB := coordinator.SetupClientConnections(chainA, chainB, ibcexported.Tendermint) + connA.NextChannelVersion = "ibc-reflect-v1" + connB.NextChannelVersion = "ibc-reflect-v1" + // flip instantiation so that we do not run into https://github.com/cosmos/cosmos-sdk/issues/8334 + channelA, channelB := coordinator.CreateChannel(chainA, chainB, connA, connB, sourcePortID, counterpartPortID, channeltypes.ORDERED) + + // TODO: query both contracts directly to ensure they have registered the proper connection + // (and the chainB has created a reflect contract) + + // there should be one packet to relay back and forth (whoami) + // TODO: how do I find the packet that was previously sent by the smart contract? + // Coordinator.RecvPacket requires channeltypes.Packet as input? + // Given the source (portID, channelID), we should be able to count how many packets are pending, query the data + // and submit them to the other side (same with acks). This is what the real relayer does. I guess the test framework doesn't? + + // Update: I dug through the code, expecially channel.Keeper.SendPacket, and it only writes a commitment + // only writes I see: https://github.com/cosmos/cosmos-sdk/blob/31fdee0228bd6f3e787489c8e4434aabc8facb7d/x/ibc/core/04-channel/keeper/packet.go#L115-L116 + // commitment is hashed packet: https://github.com/cosmos/cosmos-sdk/blob/31fdee0228bd6f3e787489c8e4434aabc8facb7d/x/ibc/core/04-channel/types/packet.go#L14-L34 + // how is the relayer supposed to get the original packet data?? + // eg. ibctransfer doesn't store the packet either: https://github.com/cosmos/cosmos-sdk/blob/master/x/ibc/applications/transfer/keeper/relay.go#L145-L162 + // ... or I guess the original packet data is only available in the event logs???? + // https://github.com/cosmos/cosmos-sdk/blob/31fdee0228bd6f3e787489c8e4434aabc8facb7d/x/ibc/core/04-channel/keeper/packet.go#L121-L132 + + // ensure the expected packet was prepared, and relay it + require.Equal(t, 1, len(chainA.PendingSendPackets)) + require.Equal(t, 0, len(chainB.PendingSendPackets)) + err := coordinator.RelayAndAckPendingPackets(chainA, chainB, clientA, clientB) + require.NoError(t, err) + require.Equal(t, 0, len(chainA.PendingSendPackets)) + require.Equal(t, 0, len(chainB.PendingSendPackets)) + + // let's query the source contract and make sure it registered an address + query := ReflectSendQueryMsg{Account: &AccountQuery{ChannelID: channelA.ID}} + var account AccountResponse + err = chainA.SmartQuery(sendContractAddr.String(), query, &account) + require.NoError(t, err) + require.NotEmpty(t, account.RemoteAddr) + require.Empty(t, account.RemoteBalance) + + // close channel + coordinator.CloseChannel(chainA, chainB, channelA, channelB) + + // let's query the source contract and make sure it registered an address + account = AccountResponse{} + err = chainA.SmartQuery(sendContractAddr.String(), query, &account) + require.Error(t, err) + assert.Contains(t, err.Error(), "not found") + + _ = clientB +} + +type ReflectSendQueryMsg struct { + Admin *struct{} `json:"admin,omitempty"` + ListAccounts *struct{} `json:"list_accounts,omitempty"` + Account *AccountQuery `json:"account,omitempty"` +} + +type AccountQuery struct { + ChannelID string `json:"channel_id"` +} + +type AccountResponse struct { + LastUpdateTime uint64 `json:"last_update_time"` + RemoteAddr string `json:"remote_addr"` + RemoteBalance wasmvmtypes.Coins `json:"remote_balance"` +} diff --git a/x/wasm/ibctesting/README.md b/x/wasm/ibctesting/README.md new file mode 100644 index 0000000000..1c9286995d --- /dev/null +++ b/x/wasm/ibctesting/README.md @@ -0,0 +1,2 @@ +# testing package for ibc +Customized version of cosmos-sdk x/ibc/testing \ No newline at end of file diff --git a/x/wasm/ibctesting/chain.go b/x/wasm/ibctesting/chain.go new file mode 100644 index 0000000000..67216b3888 --- /dev/null +++ b/x/wasm/ibctesting/chain.go @@ -0,0 +1,1025 @@ +package ibctesting + +import ( + "bytes" + "fmt" + wasmd "github.com/CosmWasm/wasmd/app" + "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" + ibctesting "github.com/cosmos/cosmos-sdk/x/ibc/testing" + "io/ioutil" + "os" + "strconv" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/crypto/tmhash" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmprotoversion "github.com/tendermint/tendermint/proto/tendermint/version" + tmtypes "github.com/tendermint/tendermint/types" + tmversion "github.com/tendermint/tendermint/version" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" + clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" + connectiontypes "github.com/cosmos/cosmos-sdk/x/ibc/core/03-connection/types" + channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" + commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" + host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" + "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" + "github.com/cosmos/cosmos-sdk/x/ibc/core/types" + ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/light-clients/07-tendermint/types" + "github.com/cosmos/cosmos-sdk/x/ibc/testing/mock" + "github.com/cosmos/cosmos-sdk/x/staking/teststaking" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +const ( + // Default params constants used to create a TM client + TrustingPeriod time.Duration = time.Hour * 24 * 7 * 2 + UnbondingPeriod time.Duration = time.Hour * 24 * 7 * 3 + MaxClockDrift time.Duration = time.Second * 10 + DefaultDelayPeriod uint64 = 0 + + DefaultChannelVersion = ibctransfertypes.Version + InvalidID = "IDisInvalid" + + ConnectionIDPrefix = "conn" + ChannelIDPrefix = "chan" + + TransferPort = ibctransfertypes.ModuleName + MockPort = mock.ModuleName + + // used for testing UpdateClientProposal + Title = "title" + Description = "description" +) + +var ( + DefaultOpenInitVersion *connectiontypes.Version + + // Default params variables used to create a TM client + DefaultTrustLevel ibctmtypes.Fraction = ibctmtypes.DefaultTrustLevel + TestHash = tmhash.Sum([]byte("TESTING HASH")) + TestCoin = sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100)) + + UpgradePath = []string{"upgrade", "upgradedIBCState"} + + ConnectionVersion = connectiontypes.ExportedVersionsToProto(connectiontypes.GetCompatibleVersions())[0] + + MockAcknowledgement = mock.MockAcknowledgement + MockCommitment = mock.MockCommitment +) + +// TestChain is a testing struct that wraps a simapp with the last TM Header, the current ABCI +// header and the validators of the TestChain. It also contains a field called ChainID. This +// is the clientID that *other* chains use to refer to this TestChain. The SenderAccount +// is used for delivering transactions through the application state. +// NOTE: the actual application uses an empty chain-id for ease of testing. +type TestChain struct { + t *testing.T + + App *wasmd.WasmApp + ChainID string + LastHeader *ibctmtypes.Header // header for last block height committed + CurrentHeader tmproto.Header // header for current block height + QueryServer types.QueryServer + TxConfig client.TxConfig + Codec codec.BinaryMarshaler + + Vals *tmtypes.ValidatorSet + Signers []tmtypes.PrivValidator + + senderPrivKey cryptotypes.PrivKey + SenderAccount authtypes.AccountI + + // IBC specific helpers + ClientIDs []string // ClientID's used on this chain + Connections []*ibctesting.TestConnection // track connectionID's created for this chain + + PendingSendPackets []channeltypes.Packet + PendingAckPackets []PacketAck +} + +type PacketAck struct { + Packet channeltypes.Packet + Ack []byte +} + +// NewTestChain initializes a new TestChain instance with a single validator set using a +// generated private key. It also creates a sender account to be used for delivering transactions. +// +// The first block height is committed to state in order to allow for client creations on +// counterparty chains. The TestChain will return with a block height starting at 2. +// +// Time management is handled by the Coordinator in order to ensure synchrony between chains. +// Each update of any chain increments the block header time for all chains by 5 seconds. +func NewTestChain(t *testing.T, chainID string, opt ...keeper.Option) *TestChain { + // generate validator private/public key + privVal := mock.NewPV() + pubKey, err := privVal.GetPubKey() + require.NoError(t, err) + + // create validator set with single validator + validator := tmtypes.NewValidator(pubKey, 1) + valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) + signers := []tmtypes.PrivValidator{privVal} + + // generate genesis account + senderPrivKey := secp256k1.GenPrivKey() + acc := authtypes.NewBaseAccount(senderPrivKey.PubKey().Address().Bytes(), senderPrivKey.PubKey(), 0, 0) + balance := banktypes.Balance{ + Address: acc.GetAddress().String(), + Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100000000000000))), + } + + // make a temp dir for the wasm files for this chain + tempDir, err := ioutil.TempDir("", "wasm") + if err != nil { + t.Fatal(err) + } + t.Cleanup(func() { os.RemoveAll(tempDir) }) + + app := wasmd.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, opt, balance) + + // create current header and call begin block + header := tmproto.Header{ + ChainID: chainID, + Height: 1, + Time: globalStartTime, + } + + txConfig := wasmd.MakeEncodingConfig().TxConfig + + testScope := wasmd.NewTestSupport(t, app) + ibcKeeper := testScope.IBCKeeper() + chain := &TestChain{ + t: t, + ChainID: chainID, + App: app, + CurrentHeader: header, + QueryServer: ibcKeeper, + TxConfig: txConfig, + Codec: testScope.AppCodec(), + Vals: valSet, + Signers: signers, + senderPrivKey: senderPrivKey, + SenderAccount: acc, + ClientIDs: make([]string, 0), + Connections: make([]*ibctesting.TestConnection, 0), + } + + portKeeper := &ibcKeeper.PortKeeper + cap := portKeeper.BindPort(chain.GetContext(), MockPort) + err = testScope.ScopedWasmIBCKeeper().ClaimCapability(chain.GetContext(), cap, host.PortPath(MockPort)) + require.NoError(t, err) + + chain.NextBlock() + + return chain +} + +// GetContext returns the current context for the application. +func (chain *TestChain) GetContext() sdk.Context { + return chain.App.BaseApp.NewContext(false, chain.CurrentHeader) +} + +// QueryProof performs an abci query with the given key and returns the proto encoded merkle proof +// for the query and the height at which the proof will succeed on a tendermint verifier. +func (chain *TestChain) QueryProof(key []byte) ([]byte, clienttypes.Height) { + res := chain.App.Query(abci.RequestQuery{ + Path: fmt.Sprintf("store/%s/key", host.StoreKey), + Height: chain.App.LastBlockHeight() - 1, + Data: key, + Prove: true, + }) + + merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) + require.NoError(chain.t, err) + + proof, err := chain.Codec.MarshalBinaryBare(&merkleProof) + require.NoError(chain.t, err) + + revision := clienttypes.ParseChainID(chain.ChainID) + + // proof height + 1 is returned as the proof created corresponds to the height the proof + // was created in the IAVL tree. Tendermint and subsequently the clients that rely on it + // have heights 1 above the IAVL tree. Thus we return proof height + 1 + return proof, clienttypes.NewHeight(revision, uint64(res.Height)+1) +} + +// QueryUpgradeProof performs an abci query with the given key and returns the proto encoded merkle proof +// for the query and the height at which the proof will succeed on a tendermint verifier. +func (chain *TestChain) QueryUpgradeProof(key []byte, height uint64) ([]byte, clienttypes.Height) { + res := chain.App.Query(abci.RequestQuery{ + Path: "store/upgrade/key", + Height: int64(height - 1), + Data: key, + Prove: true, + }) + + merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) + require.NoError(chain.t, err) + + proof, err := chain.Codec.MarshalBinaryBare(&merkleProof) + require.NoError(chain.t, err) + + revision := clienttypes.ParseChainID(chain.ChainID) + + // proof height + 1 is returned as the proof created corresponds to the height the proof + // was created in the IAVL tree. Tendermint and subsequently the clients that rely on it + // have heights 1 above the IAVL tree. Thus we return proof height + 1 + return proof, clienttypes.NewHeight(revision, uint64(res.Height+1)) +} + +// QueryClientStateProof performs and abci query for a client state +// stored with a given clientID and returns the ClientState along with the proof +func (chain *TestChain) QueryClientStateProof(clientID string) (exported.ClientState, []byte) { + // retrieve client state to provide proof for + clientState, found := wasmd.NewTestSupport(chain.t, chain.App).IBCKeeper().ClientKeeper.GetClientState(chain.GetContext(), clientID) + require.True(chain.t, found) + + clientKey := host.FullClientStateKey(clientID) + proofClient, _ := chain.QueryProof(clientKey) + + return clientState, proofClient +} + +// QueryConsensusStateProof performs an abci query for a consensus state +// stored on the given clientID. The proof and consensusHeight are returned. +func (chain *TestChain) QueryConsensusStateProof(clientID string) ([]byte, clienttypes.Height) { + clientState := chain.GetClientState(clientID) + + consensusHeight := clientState.GetLatestHeight().(clienttypes.Height) + consensusKey := host.FullConsensusStateKey(clientID, consensusHeight) + proofConsensus, _ := chain.QueryProof(consensusKey) + + return proofConsensus, consensusHeight +} + +// NextBlock sets the last header to the current header and increments the current header to be +// at the next block height. It does not update the time as that is handled by the Coordinator. +// +// CONTRACT: this function must only be called after app.Commit() occurs +func (chain *TestChain) NextBlock() { + // set the last header to the current header + // use nil trusted fields + chain.LastHeader = chain.CurrentTMClientHeader() + + // increment the current header + chain.CurrentHeader = tmproto.Header{ + ChainID: chain.ChainID, + Height: chain.App.LastBlockHeight() + 1, + AppHash: chain.App.LastCommitID().Hash, + // NOTE: the time is increased by the coordinator to maintain time synchrony amongst + // chains. + Time: chain.CurrentHeader.Time, + ValidatorsHash: chain.Vals.Hash(), + NextValidatorsHash: chain.Vals.Hash(), + } + + chain.App.BeginBlock(abci.RequestBeginBlock{Header: chain.CurrentHeader}) + +} + +// sendMsgs delivers a transaction through the application without returning the result. +func (chain *TestChain) sendMsgs(msgs ...sdk.Msg) error { + _, err := chain.SendMsgs(msgs...) + return err +} + +// SendMsgs delivers a transaction through the application. It updates the senders sequence +// number and updates the TestChain's headers. It returns the result and error if one +// occurred. +func (chain *TestChain) SendMsgs(msgs ...sdk.Msg) (*sdk.Result, error) { + _, r, err := wasmd.SignCheckDeliver( + chain.t, + chain.TxConfig, + chain.App.BaseApp, + chain.GetContext().BlockHeader(), + msgs, + chain.ChainID, + []uint64{chain.SenderAccount.GetAccountNumber()}, + []uint64{chain.SenderAccount.GetSequence()}, + true, true, chain.senderPrivKey, + ) + if err != nil { + return nil, err + } + + // SignCheckDeliver calls app.Commit() + chain.NextBlock() + + // increment sequence for successful transaction execution + chain.SenderAccount.SetSequence(chain.SenderAccount.GetSequence() + 1) + + // TODO: also return acks needed to send + toSend := getSendPackets(r.Events) + if len(toSend) > 0 { + // Keep a queue on the chain that we can relay in tests + chain.PendingSendPackets = append(chain.PendingSendPackets, toSend...) + } + toAck := getAckPackets(r.Events) + if len(toAck) > 0 { + // Keep a queue on the chain that we can relay in tests + chain.PendingAckPackets = append(chain.PendingAckPackets, toAck...) + } + + return r, nil +} + +func getSendPackets(evts []abci.Event) []channeltypes.Packet { + var res []channeltypes.Packet + for _, evt := range evts { + if evt.Type == "send_packet" { + packet := parsePacketFromEvent(evt) + res = append(res, packet) + } + } + return res +} + +func getAckPackets(evts []abci.Event) []PacketAck { + var res []PacketAck + for _, evt := range evts { + if evt.Type == "write_acknowledgement" { + packet := parsePacketFromEvent(evt) + ack := PacketAck{ + Packet: packet, + Ack: []byte(getField(evt, "packet_ack")), + } + res = append(res, ack) + } + } + return res +} + +// Used for various debug statements above when needed... do not remove +func showEvent(evt abci.Event) { + fmt.Printf("evt.Type: %s\n", evt.Type) + for _, attr := range evt.Attributes { + fmt.Printf(" %s = %s\n", string(attr.Key), string(attr.Value)) + } +} + +func parsePacketFromEvent(evt abci.Event) channeltypes.Packet { + return channeltypes.Packet{ + Sequence: getUintField(evt, "packet_sequence"), + SourcePort: getField(evt, "packet_src_port"), + SourceChannel: getField(evt, "packet_src_channel"), + DestinationPort: getField(evt, "packet_dst_port"), + DestinationChannel: getField(evt, "packet_dst_channel"), + Data: []byte(getField(evt, "packet_data")), + TimeoutHeight: parseTimeoutHeight(getField(evt, "packet_timeout_height")), + TimeoutTimestamp: getUintField(evt, "packet_timeout_timestamp"), + } +} + +// return the value for the attribute with the given name +func getField(evt abci.Event, key string) string { + for _, attr := range evt.Attributes { + if string(attr.Key) == key { + return string(attr.Value) + } + } + return "" +} + +func getUintField(evt abci.Event, key string) uint64 { + raw := getField(evt, key) + return toUint64(raw) +} + +func toUint64(raw string) uint64 { + if raw == "" { + return 0 + } + i, err := strconv.ParseUint(raw, 10, 64) + if err != nil { + panic(err) + } + return i +} + +func parseTimeoutHeight(raw string) clienttypes.Height { + chunks := strings.Split(raw, "-") + return clienttypes.Height{ + RevisionNumber: toUint64(chunks[0]), + RevisionHeight: toUint64(chunks[1]), + } +} + +// GetClientState retrieves the client state for the provided clientID. The client is +// expected to exist otherwise testing will fail. +func (chain *TestChain) GetClientState(clientID string) exported.ClientState { + clientState, found := wasmd.NewTestSupport(chain.t, chain.App).IBCKeeper().ClientKeeper.GetClientState(chain.GetContext(), clientID) + require.True(chain.t, found) + + return clientState +} + +// GetConsensusState retrieves the consensus state for the provided clientID and height. +// It will return a success boolean depending on if consensus state exists or not. +func (chain *TestChain) GetConsensusState(clientID string, height exported.Height) (exported.ConsensusState, bool) { + return wasmd.NewTestSupport(chain.t, chain.App).IBCKeeper().ClientKeeper.GetClientConsensusState(chain.GetContext(), clientID, height) +} + +// GetValsAtHeight will return the validator set of the chain at a given height. It will return +// a success boolean depending on if the validator set exists or not at that height. +func (chain *TestChain) GetValsAtHeight(height int64) (*tmtypes.ValidatorSet, bool) { + histInfo, ok := wasmd.NewTestSupport(chain.t, chain.App).StakingKeeper().GetHistoricalInfo(chain.GetContext(), height) + if !ok { + return nil, false + } + + valSet := stakingtypes.Validators(histInfo.Valset) + + tmValidators, err := teststaking.ToTmValidators(valSet) + if err != nil { + panic(err) + } + return tmtypes.NewValidatorSet(tmValidators), true +} + +// GetConnection retrieves an IBC Connection for the provided TestConnection. The +// connection is expected to exist otherwise testing will fail. +func (chain *TestChain) GetConnection(testConnection *ibctesting.TestConnection) connectiontypes.ConnectionEnd { + connection, found := wasmd.NewTestSupport(chain.t, chain.App).IBCKeeper().ConnectionKeeper.GetConnection(chain.GetContext(), testConnection.ID) + require.True(chain.t, found) + + return connection +} + +// GetChannel retrieves an IBC Channel for the provided ibctesting.TestChannel. The channel +// is expected to exist otherwise testing will fail. +func (chain *TestChain) GetChannel(testChannel ibctesting.TestChannel) channeltypes.Channel { + channel, found := wasmd.NewTestSupport(chain.t, chain.App).IBCKeeper().ChannelKeeper.GetChannel(chain.GetContext(), testChannel.PortID, testChannel.ID) + require.True(chain.t, found) + + return channel +} + +// GetAcknowledgement retrieves an acknowledgement for the provided packet. If the +// acknowledgement does not exist then testing will fail. +func (chain *TestChain) GetAcknowledgement(packet exported.PacketI) []byte { + ack, found := wasmd.NewTestSupport(chain.t, chain.App).IBCKeeper().ChannelKeeper.GetPacketAcknowledgement(chain.GetContext(), packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) + require.True(chain.t, found) + + return ack +} + +// GetPrefix returns the prefix for used by a chain in connection creation +func (chain *TestChain) GetPrefix() commitmenttypes.MerklePrefix { + return commitmenttypes.NewMerklePrefix(wasmd.NewTestSupport(chain.t, chain.App).IBCKeeper().ConnectionKeeper.GetCommitmentPrefix().Bytes()) +} + +// NewClientID appends a new clientID string in the format: +// ClientFor +func (chain *TestChain) NewClientID(clientType string) string { + clientID := fmt.Sprintf("%s-%s", clientType, strconv.Itoa(len(chain.ClientIDs))) + chain.ClientIDs = append(chain.ClientIDs, clientID) + return clientID +} + +// AddTestConnection appends a new TestConnection which contains references +// to the connection id, client id and counterparty client id. +func (chain *TestChain) AddTestConnection(clientID, counterpartyClientID string) *ibctesting.TestConnection { + conn := chain.ConstructNextTestConnection(clientID, counterpartyClientID) + + chain.Connections = append(chain.Connections, conn) + return conn +} + +// ConstructNextTestConnection constructs the next test connection to be +// created given a clientID and counterparty clientID. The connection id +// format: -conn +func (chain *TestChain) ConstructNextTestConnection(clientID, counterpartyClientID string) *ibctesting.TestConnection { + connectionID := connectiontypes.FormatConnectionIdentifier(uint64(len(chain.Connections))) + return &ibctesting.TestConnection{ + ID: connectionID, + ClientID: clientID, + NextChannelVersion: DefaultChannelVersion, + CounterpartyClientID: counterpartyClientID, + } +} + +// GetFirstTestConnection returns the first test connection for a given clientID. +// The connection may or may not exist in the chain state. +func (chain *TestChain) GetFirstTestConnection(clientID, counterpartyClientID string) *ibctesting.TestConnection { + if len(chain.Connections) > 0 { + return chain.Connections[0] + } + + return chain.ConstructNextTestConnection(clientID, counterpartyClientID) +} + +// Add ibctesting.TestChannel appends a new ibctesting.TestChannel which contains references to the port and channel ID +// used for channel creation and interaction. See 'Next ibctesting.TestChannel' for channel ID naming format. +func (chain *TestChain) AddTestChannel(conn *ibctesting.TestConnection, portID string) ibctesting.TestChannel { + channel := chain.NextChannel(conn, portID) + conn.Channels = append(conn.Channels, channel) + return channel +} + +// Next ibctesting.TestChannel returns the next test channel to be created on this connection, but does not +// add it to the list of created channels. This function is expected to be used when the caller +// has not created the associated channel in app state, but would still like to refer to the +// non-existent channel usually to test for its non-existence. +// +// channel ID format: -chan +// +// The port is passed in by the caller. +func (chain *TestChain) NextChannel(conn *ibctesting.TestConnection, portID string) ibctesting.TestChannel { + nextChanSeq := wasmd.NewTestSupport(chain.t, chain.App).IBCKeeper().ChannelKeeper.GetNextChannelSequence(chain.GetContext()) + channelID := channeltypes.FormatChannelIdentifier(nextChanSeq) + return ibctesting.TestChannel{ + PortID: portID, + ID: channelID, + ClientID: conn.ClientID, + CounterpartyClientID: conn.CounterpartyClientID, + Version: conn.NextChannelVersion, + } +} + +// ConstructMsgCreateClient constructs a message to create a new client state (tendermint or solomachine). +// NOTE: a solo machine client will be created with an empty diversifier. +func (chain *TestChain) ConstructMsgCreateClient(counterparty *TestChain, clientID string, clientType string) *clienttypes.MsgCreateClient { + var ( + clientState exported.ClientState + consensusState exported.ConsensusState + ) + + switch clientType { + case exported.Tendermint: + height := counterparty.LastHeader.GetHeight().(clienttypes.Height) + clientState = ibctmtypes.NewClientState( + counterparty.ChainID, DefaultTrustLevel, TrustingPeriod, UnbondingPeriod, MaxClockDrift, + height, commitmenttypes.GetSDKSpecs(), UpgradePath, false, false, + ) + consensusState = counterparty.LastHeader.ConsensusState() + case exported.Solomachine: + solo := ibctesting.NewSolomachine(chain.t, chain.Codec, clientID, "", 1) + clientState = solo.ClientState() + consensusState = solo.ConsensusState() + default: + chain.t.Fatalf("unsupported client state type %s", clientType) + } + + msg, err := clienttypes.NewMsgCreateClient( + clientState, consensusState, chain.SenderAccount.GetAddress(), + ) + require.NoError(chain.t, err) + return msg +} + +// CreateTMClient will construct and execute a 07-tendermint MsgCreateClient. A counterparty +// client will be created on the (target) chain. +func (chain *TestChain) CreateTMClient(counterparty *TestChain, clientID string) error { + // construct MsgCreateClient using counterparty + msg := chain.ConstructMsgCreateClient(counterparty, clientID, exported.Tendermint) + return chain.sendMsgs(msg) +} + +// UpdateTMClient will construct and execute a 07-tendermint MsgUpdateClient. The counterparty +// client will be updated on the (target) chain. UpdateTMClient mocks the relayer flow +// necessary for updating a Tendermint client. +func (chain *TestChain) UpdateTMClient(counterparty *TestChain, clientID string) error { + header, err := chain.ConstructUpdateTMClientHeader(counterparty, clientID) + require.NoError(chain.t, err) + + msg, err := clienttypes.NewMsgUpdateClient( + clientID, header, + chain.SenderAccount.GetAddress(), + ) + require.NoError(chain.t, err) + + return chain.sendMsgs(msg) +} + +// ConstructUpdateTMClientHeader will construct a valid 07-tendermint Header to update the +// light client on the source chain. +func (chain *TestChain) ConstructUpdateTMClientHeader(counterparty *TestChain, clientID string) (*ibctmtypes.Header, error) { + header := counterparty.LastHeader + // Relayer must query for LatestHeight on client to get TrustedHeight + trustedHeight := chain.GetClientState(clientID).GetLatestHeight().(clienttypes.Height) + var ( + tmTrustedVals *tmtypes.ValidatorSet + ok bool + ) + // Once we get TrustedHeight from client, we must query the validators from the counterparty chain + // If the LatestHeight == LastHeader.Height, then TrustedValidators are current validators + // If LatestHeight < LastHeader.Height, we can query the historical validator set from HistoricalInfo + if trustedHeight == counterparty.LastHeader.GetHeight() { + tmTrustedVals = counterparty.Vals + } else { + // NOTE: We need to get validators from counterparty at height: trustedHeight+1 + // since the last trusted validators for a header at height h + // is the NextValidators at h+1 committed to in header h by + // NextValidatorsHash + tmTrustedVals, ok = counterparty.GetValsAtHeight(int64(trustedHeight.RevisionHeight + 1)) + if !ok { + return nil, sdkerrors.Wrapf(ibctmtypes.ErrInvalidHeaderHeight, "could not retrieve trusted validators at trustedHeight: %d", trustedHeight) + } + } + // inject trusted fields into last header + // for now assume revision number is 0 + header.TrustedHeight = trustedHeight + + trustedVals, err := tmTrustedVals.ToProto() + if err != nil { + return nil, err + } + header.TrustedValidators = trustedVals + + return header, nil + +} + +// ExpireClient fast forwards the chain's block time by the provided amount of time which will +// expire any clients with a trusting period less than or equal to this amount of time. +func (chain *TestChain) ExpireClient(amount time.Duration) { + chain.CurrentHeader.Time = chain.CurrentHeader.Time.Add(amount) +} + +// CurrentTMClientHeader creates a TM header using the current header parameters +// on the chain. The trusted fields in the header are set to nil. +func (chain *TestChain) CurrentTMClientHeader() *ibctmtypes.Header { + return chain.CreateTMClientHeader(chain.ChainID, chain.CurrentHeader.Height, clienttypes.Height{}, chain.CurrentHeader.Time, chain.Vals, nil, chain.Signers) +} + +// CreateTMClientHeader creates a TM header to update the TM client. Args are passed in to allow +// caller flexibility to use params that differ from the chain. +func (chain *TestChain) CreateTMClientHeader(chainID string, blockHeight int64, trustedHeight clienttypes.Height, timestamp time.Time, tmValSet, tmTrustedVals *tmtypes.ValidatorSet, signers []tmtypes.PrivValidator) *ibctmtypes.Header { + var ( + valSet *tmproto.ValidatorSet + trustedVals *tmproto.ValidatorSet + ) + require.NotNil(chain.t, tmValSet) + + vsetHash := tmValSet.Hash() + + tmHeader := tmtypes.Header{ + Version: tmprotoversion.Consensus{Block: tmversion.BlockProtocol, App: 2}, + ChainID: chainID, + Height: blockHeight, + Time: timestamp, + LastBlockID: MakeBlockID(make([]byte, tmhash.Size), 10_000, make([]byte, tmhash.Size)), + LastCommitHash: chain.App.LastCommitID().Hash, + DataHash: tmhash.Sum([]byte("data_hash")), + ValidatorsHash: vsetHash, + NextValidatorsHash: vsetHash, + ConsensusHash: tmhash.Sum([]byte("consensus_hash")), + AppHash: chain.CurrentHeader.AppHash, + LastResultsHash: tmhash.Sum([]byte("last_results_hash")), + EvidenceHash: tmhash.Sum([]byte("evidence_hash")), + ProposerAddress: tmValSet.Proposer.Address, //nolint:staticcheck + } + hhash := tmHeader.Hash() + blockID := MakeBlockID(hhash, 3, tmhash.Sum([]byte("part_set"))) + voteSet := tmtypes.NewVoteSet(chainID, blockHeight, 1, tmproto.PrecommitType, tmValSet) + + commit, err := tmtypes.MakeCommit(blockID, blockHeight, 1, voteSet, signers, timestamp) + require.NoError(chain.t, err) + + signedHeader := &tmproto.SignedHeader{ + Header: tmHeader.ToProto(), + Commit: commit.ToProto(), + } + + if tmValSet != nil { + valSet, err = tmValSet.ToProto() + if err != nil { + panic(err) + } + } + + if tmTrustedVals != nil { + trustedVals, err = tmTrustedVals.ToProto() + if err != nil { + panic(err) + } + } + + // The trusted fields may be nil. They may be filled before relaying messages to a client. + // The relayer is responsible for querying client and injecting appropriate trusted fields. + return &ibctmtypes.Header{ + SignedHeader: signedHeader, + ValidatorSet: valSet, + TrustedHeight: trustedHeight, + TrustedValidators: trustedVals, + } +} + +// MakeBlockID copied unimported test functions from tmtypes to use them here +func MakeBlockID(hash []byte, partSetSize uint32, partSetHash []byte) tmtypes.BlockID { + return tmtypes.BlockID{ + Hash: hash, + PartSetHeader: tmtypes.PartSetHeader{ + Total: partSetSize, + Hash: partSetHash, + }, + } +} + +// CreateSortedSignerArray takes two PrivValidators, and the corresponding Validator structs +// (including voting power). It returns a signer array of PrivValidators that matches the +// sorting of ValidatorSet. +// The sorting is first by .VotingPower (descending), with secondary index of .Address (ascending). +func CreateSortedSignerArray(altPrivVal, suitePrivVal tmtypes.PrivValidator, + altVal, suiteVal *tmtypes.Validator) []tmtypes.PrivValidator { + + switch { + case altVal.VotingPower > suiteVal.VotingPower: + return []tmtypes.PrivValidator{altPrivVal, suitePrivVal} + case altVal.VotingPower < suiteVal.VotingPower: + return []tmtypes.PrivValidator{suitePrivVal, altPrivVal} + default: + if bytes.Compare(altVal.Address, suiteVal.Address) == -1 { + return []tmtypes.PrivValidator{altPrivVal, suitePrivVal} + } + return []tmtypes.PrivValidator{suitePrivVal, altPrivVal} + } +} + +// ConnectionOpenInit will construct and execute a MsgConnectionOpenInit. +func (chain *TestChain) ConnectionOpenInit( + counterparty *TestChain, + connection, counterpartyConnection *ibctesting.TestConnection, +) error { + msg := connectiontypes.NewMsgConnectionOpenInit( + connection.ClientID, + connection.CounterpartyClientID, + counterparty.GetPrefix(), DefaultOpenInitVersion, DefaultDelayPeriod, + chain.SenderAccount.GetAddress(), + ) + return chain.sendMsgs(msg) +} + +// ConnectionOpenTry will construct and execute a MsgConnectionOpenTry. +func (chain *TestChain) ConnectionOpenTry( + counterparty *TestChain, + connection, counterpartyConnection *ibctesting.TestConnection, +) error { + counterpartyClient, proofClient := counterparty.QueryClientStateProof(counterpartyConnection.ClientID) + + connectionKey := host.ConnectionKey(counterpartyConnection.ID) + proofInit, proofHeight := counterparty.QueryProof(connectionKey) + + proofConsensus, consensusHeight := counterparty.QueryConsensusStateProof(counterpartyConnection.ClientID) + + msg := connectiontypes.NewMsgConnectionOpenTry( + "", connection.ClientID, // does not support handshake continuation + counterpartyConnection.ID, counterpartyConnection.ClientID, + counterpartyClient, counterparty.GetPrefix(), []*connectiontypes.Version{ConnectionVersion}, DefaultDelayPeriod, + proofInit, proofClient, proofConsensus, + proofHeight, consensusHeight, + chain.SenderAccount.GetAddress(), + ) + return chain.sendMsgs(msg) +} + +// ConnectionOpenAck will construct and execute a MsgConnectionOpenAck. +func (chain *TestChain) ConnectionOpenAck( + counterparty *TestChain, + connection, counterpartyConnection *ibctesting.TestConnection, +) error { + counterpartyClient, proofClient := counterparty.QueryClientStateProof(counterpartyConnection.ClientID) + + connectionKey := host.ConnectionKey(counterpartyConnection.ID) + proofTry, proofHeight := counterparty.QueryProof(connectionKey) + + proofConsensus, consensusHeight := counterparty.QueryConsensusStateProof(counterpartyConnection.ClientID) + + msg := connectiontypes.NewMsgConnectionOpenAck( + connection.ID, counterpartyConnection.ID, counterpartyClient, // testing doesn't use flexible selection + proofTry, proofClient, proofConsensus, + proofHeight, consensusHeight, + ConnectionVersion, + chain.SenderAccount.GetAddress(), + ) + return chain.sendMsgs(msg) +} + +// ConnectionOpenConfirm will construct and execute a MsgConnectionOpenConfirm. +func (chain *TestChain) ConnectionOpenConfirm( + counterparty *TestChain, + connection, counterpartyConnection *ibctesting.TestConnection, +) error { + connectionKey := host.ConnectionKey(counterpartyConnection.ID) + proof, height := counterparty.QueryProof(connectionKey) + + msg := connectiontypes.NewMsgConnectionOpenConfirm( + connection.ID, + proof, height, + chain.SenderAccount.GetAddress(), + ) + return chain.sendMsgs(msg) +} + +// CreatePortCapability binds and claims a capability for the given portID if it does not +// already exist. This function will fail testing on any resulting error. +// NOTE: only creation of a capbility for a transfer or mock port is supported +// Other applications must bind to the port in InitGenesis or modify this code. +func (chain *TestChain) CreatePortCapability(portID string) { + // check if the portId is already binded, if not bind it + _, ok := chain.TestSupport().ScopeIBCKeeper().GetCapability(chain.GetContext(), host.PortPath(portID)) + if !ok { + // create capability using the IBC capability keeper + cap, err := chain.TestSupport().ScopeIBCKeeper().NewCapability(chain.GetContext(), host.PortPath(portID)) + require.NoError(chain.t, err) + + switch portID { + case MockPort: + // claim capability using the mock capability keeper + err = wasmd.NewTestSupport(chain.t, chain.App).ScopedWasmIBCKeeper().ClaimCapability(chain.GetContext(), cap, host.PortPath(portID)) + require.NoError(chain.t, err) + case TransferPort: + // claim capability using the transfer capability keeper + err = chain.TestSupport().ScopedTransferKeeper().ClaimCapability(chain.GetContext(), cap, host.PortPath(portID)) + require.NoError(chain.t, err) + default: + panic(fmt.Sprintf("unsupported ibc testing package port ID %s", portID)) + } + } + + chain.App.Commit() + + chain.NextBlock() +} + +// GetPortCapability returns the port capability for the given portID. The capability must +// exist, otherwise testing will fail. +func (chain *TestChain) GetPortCapability(portID string) *capabilitytypes.Capability { + cap, ok := chain.TestSupport().ScopeIBCKeeper().GetCapability(chain.GetContext(), host.PortPath(portID)) + require.True(chain.t, ok) + + return cap +} + +// CreateChannelCapability binds and claims a capability for the given portID and channelID +// if it does not already exist. This function will fail testing on any resulting error. +func (chain *TestChain) CreateChannelCapability(portID, channelID string) { + capName := host.ChannelCapabilityPath(portID, channelID) + // check if the portId is already binded, if not bind it + _, ok := chain.TestSupport().ScopeIBCKeeper().GetCapability(chain.GetContext(), capName) + if !ok { + cap, err := chain.TestSupport().ScopeIBCKeeper().NewCapability(chain.GetContext(), capName) + require.NoError(chain.t, err) + err = chain.TestSupport().ScopedTransferKeeper().ClaimCapability(chain.GetContext(), cap, capName) + require.NoError(chain.t, err) + } + + chain.App.Commit() + + chain.NextBlock() +} + +// GetChannelCapability returns the channel capability for the given portID and channelID. +// The capability must exist, otherwise testing will fail. +func (chain *TestChain) GetChannelCapability(portID, channelID string) *capabilitytypes.Capability { + cap, ok := chain.TestSupport().ScopeIBCKeeper().GetCapability(chain.GetContext(), host.ChannelCapabilityPath(portID, channelID)) + require.True(chain.t, ok) + + return cap +} + +// ChanOpenInit will construct and execute a MsgChannelOpenInit. +func (chain *TestChain) ChanOpenInit( + ch, counterparty ibctesting.TestChannel, + order channeltypes.Order, + connectionID string, +) error { + msg := channeltypes.NewMsgChannelOpenInit( + ch.PortID, + ch.Version, order, []string{connectionID}, + counterparty.PortID, + chain.SenderAccount.GetAddress(), + ) + return chain.sendMsgs(msg) +} + +// ChanOpenTry will construct and execute a MsgChannelOpenTry. +func (chain *TestChain) ChanOpenTry( + counterparty *TestChain, + ch, counterpartyCh ibctesting.TestChannel, + order channeltypes.Order, + connectionID string, +) error { + proof, height := counterparty.QueryProof(host.ChannelKey(counterpartyCh.PortID, counterpartyCh.ID)) + + msg := channeltypes.NewMsgChannelOpenTry( + ch.PortID, "", // does not support handshake continuation + ch.Version, order, []string{connectionID}, + counterpartyCh.PortID, counterpartyCh.ID, counterpartyCh.Version, + proof, height, + chain.SenderAccount.GetAddress(), + ) + return chain.sendMsgs(msg) +} + +// ChanOpenAck will construct and execute a MsgChannelOpenAck. +func (chain *TestChain) ChanOpenAck( + counterparty *TestChain, + ch, counterpartyCh ibctesting.TestChannel, +) error { + proof, height := counterparty.QueryProof(host.ChannelKey(counterpartyCh.PortID, counterpartyCh.ID)) + + msg := channeltypes.NewMsgChannelOpenAck( + ch.PortID, ch.ID, + counterpartyCh.ID, counterpartyCh.Version, // testing doesn't use flexible selection + proof, height, + chain.SenderAccount.GetAddress(), + ) + return chain.sendMsgs(msg) +} + +// ChanOpenConfirm will construct and execute a MsgChannelOpenConfirm. +func (chain *TestChain) ChanOpenConfirm( + counterparty *TestChain, + ch, counterpartyCh ibctesting.TestChannel, +) error { + proof, height := counterparty.QueryProof(host.ChannelKey(counterpartyCh.PortID, counterpartyCh.ID)) + + msg := channeltypes.NewMsgChannelOpenConfirm( + ch.PortID, ch.ID, + proof, height, + chain.SenderAccount.GetAddress(), + ) + return chain.sendMsgs(msg) +} + +// ChanCloseInit will construct and execute a MsgChannelCloseInit. +// +// NOTE: does not work with ibc-transfer module +func (chain *TestChain) ChanCloseInit( + counterparty *TestChain, + channel ibctesting.TestChannel, +) error { + msg := channeltypes.NewMsgChannelCloseInit( + channel.PortID, channel.ID, + chain.SenderAccount.GetAddress(), + ) + return chain.sendMsgs(msg) +} + +// GetPacketData returns a ibc-transfer marshalled packet to be used for +// callback testing. +func (chain *TestChain) GetPacketData(counterparty *TestChain) []byte { + packet := ibctransfertypes.FungibleTokenPacketData{ + Denom: TestCoin.Denom, + Amount: TestCoin.Amount.Uint64(), + Sender: chain.SenderAccount.GetAddress().String(), + Receiver: counterparty.SenderAccount.GetAddress().String(), + } + + return packet.GetBytes() +} + +// SendPacket simulates sending a packet through the channel keeper. No message needs to be +// passed since this call is made from a module. +func (chain *TestChain) SendPacket( + packet exported.PacketI, +) error { + channelCap := chain.GetChannelCapability(packet.GetSourcePort(), packet.GetSourceChannel()) + + // no need to send message, acting as a module + err := wasmd.NewTestSupport(chain.t, chain.App).IBCKeeper().ChannelKeeper.SendPacket(chain.GetContext(), channelCap, packet) + if err != nil { + return err + } + + // commit changes + chain.App.Commit() + chain.NextBlock() + + return nil +} + +// WriteAcknowledgement simulates writing an acknowledgement to the chain. +func (chain *TestChain) WriteAcknowledgement( + packet exported.PacketI, +) error { + channelCap := chain.GetChannelCapability(packet.GetDestPort(), packet.GetDestChannel()) + + // no need to send message, acting as a handler + err := wasmd.NewTestSupport(chain.t, chain.App).IBCKeeper().ChannelKeeper.WriteAcknowledgement(chain.GetContext(), channelCap, packet, TestHash) + if err != nil { + return err + } + + // commit changes + chain.App.Commit() + chain.NextBlock() + + return nil +} diff --git a/x/wasm/ibctesting/coordinator.go b/x/wasm/ibctesting/coordinator.go new file mode 100644 index 0000000000..1f4b83b25b --- /dev/null +++ b/x/wasm/ibctesting/coordinator.go @@ -0,0 +1,799 @@ +package ibctesting + +import ( + "fmt" + "github.com/CosmWasm/wasmd/x/wasm/internal/keeper" + ibctesting "github.com/cosmos/cosmos-sdk/x/ibc/testing" + "strconv" + "testing" + "time" + + sdk "github.com/cosmos/cosmos-sdk/types" + channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" + host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" + "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" + "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" +) + +var ( + ChainIDPrefix = "testchain" + globalStartTime = time.Date(2020, 1, 2, 0, 0, 0, 0, time.UTC) + TimeIncrement = time.Second * 5 +) + +// Coordinator is a testing struct which contains N TestChain's. It handles keeping all chains +// in sync with regards to time. +type Coordinator struct { + t *testing.T + + Chains map[string]*TestChain +} + +// NewCoordinator initializes Coordinator with N TestChain's +func NewCoordinator(t *testing.T, n int, opts ...[]keeper.Option) *Coordinator { + chains := make(map[string]*TestChain) + if len(opts) != 0 && len(opts) != n { + t.Fatalf("opts not matching number of instances: %d", len(opts)) + } + for i := 0; i < n; i++ { + chainID := GetChainID(i) + var iOpts []keeper.Option + if len(opts) != 0 { + iOpts = opts[i] + } + chains[chainID] = NewTestChain(t, chainID, iOpts...) + } + return &Coordinator{ + t: t, + Chains: chains, + } +} + +// Setup constructs a TM client, connection, and channel on both chains provided. It will +// fail if any error occurs. The clientID's, TestConnections, and TestChannels are returned +// for both chains. The channels created are connected to the ibc-transfer application. +func (coord *Coordinator) Setup( + chainA, chainB *TestChain, order channeltypes.Order, +) (string, string, *ibctesting.TestConnection, *ibctesting.TestConnection, ibctesting.TestChannel, ibctesting.TestChannel) { + clientA, clientB, connA, connB := coord.SetupClientConnections(chainA, chainB, exported.Tendermint) + + // channels can also be referenced through the returned connections + channelA, channelB := coord.CreateMockChannels(chainA, chainB, connA, connB, order) + + return clientA, clientB, connA, connB, channelA, channelB +} + +// SetupClients is a helper function to create clients on both chains. It assumes the +// caller does not anticipate any errors. +func (coord *Coordinator) SetupClients( + chainA, chainB *TestChain, + clientType string, +) (string, string) { + + clientA, err := coord.CreateClient(chainA, chainB, clientType) + require.NoError(coord.t, err) + + clientB, err := coord.CreateClient(chainB, chainA, clientType) + require.NoError(coord.t, err) + + return clientA, clientB +} + +// SetupClientConnections is a helper function to create clients and the appropriate +// connections on both the source and counterparty chain. It assumes the caller does not +// anticipate any errors. +func (coord *Coordinator) SetupClientConnections( + chainA, chainB *TestChain, + clientType string, +) (string, string, *ibctesting.TestConnection, *ibctesting.TestConnection) { + + clientA, clientB := coord.SetupClients(chainA, chainB, clientType) + + connA, connB := coord.CreateConnection(chainA, chainB, clientA, clientB) + + return clientA, clientB, connA, connB +} + +// CreateClient creates a counterparty client on the source chain and returns the clientID. +func (coord *Coordinator) CreateClient( + source, counterparty *TestChain, + clientType string, +) (clientID string, err error) { + coord.CommitBlock(source, counterparty) + + clientID = source.NewClientID(clientType) + + switch clientType { + case exported.Tendermint: + err = source.CreateTMClient(counterparty, clientID) + + default: + err = fmt.Errorf("client type %s is not supported", clientType) + } + + if err != nil { + return "", err + } + + coord.IncrementTime() + + return clientID, nil +} + +// UpdateClient updates a counterparty client on the source chain. +func (coord *Coordinator) UpdateClient( + source, counterparty *TestChain, + clientID string, + clientType string, +) (err error) { + coord.CommitBlock(source, counterparty) + + switch clientType { + case exported.Tendermint: + err = source.UpdateTMClient(counterparty, clientID) + + default: + err = fmt.Errorf("client type %s is not supported", clientType) + } + + if err != nil { + return err + } + + coord.IncrementTime() + + return nil +} + +// CreateConnection constructs and executes connection handshake messages in order to create +// OPEN channels on chainA and chainB. The connection information of for chainA and chainB +// are returned within a TestConnection struct. The function expects the connections to be +// successfully opened otherwise testing will fail. +func (coord *Coordinator) CreateConnection( + chainA, chainB *TestChain, + clientA, clientB string, +) (*ibctesting.TestConnection, *ibctesting.TestConnection) { + + connA, connB, err := coord.ConnOpenInit(chainA, chainB, clientA, clientB) + require.NoError(coord.t, err) + + err = coord.ConnOpenTry(chainB, chainA, connB, connA) + require.NoError(coord.t, err) + + err = coord.ConnOpenAck(chainA, chainB, connA, connB) + require.NoError(coord.t, err) + + err = coord.ConnOpenConfirm(chainB, chainA, connB, connA) + require.NoError(coord.t, err) + + return connA, connB +} + +// CreateMockChannels constructs and executes channel handshake messages to create OPEN +// channels that use a mock application module that returns nil on all callbacks. This +// function is expects the channels to be successfully opened otherwise testing will +// fail. +func (coord *Coordinator) CreateMockChannels( + chainA, chainB *TestChain, + connA, connB *ibctesting.TestConnection, + order channeltypes.Order, +) (ibctesting.TestChannel, ibctesting.TestChannel) { + return coord.CreateChannel(chainA, chainB, connA, connB, MockPort, MockPort, order) +} + +// CreateTransferChannels constructs and executes channel handshake messages to create OPEN +// ibc-transfer channels on chainA and chainB. The function expects the channels to be +// successfully opened otherwise testing will fail. +func (coord *Coordinator) CreateTransferChannels( + chainA, chainB *TestChain, + connA, connB *ibctesting.TestConnection, + order channeltypes.Order, +) (ibctesting.TestChannel, ibctesting.TestChannel) { + return coord.CreateChannel(chainA, chainB, connA, connB, TransferPort, TransferPort, order) +} + +// CreateChannel constructs and executes channel handshake messages in order to create +// OPEN channels on chainA and chainB. The function expects the channels to be successfully +// opened otherwise testing will fail. +func (coord *Coordinator) CreateChannel( + chainA, chainB *TestChain, + connA, connB *ibctesting.TestConnection, + sourcePortID, counterpartyPortID string, + order channeltypes.Order, +) (ibctesting.TestChannel, ibctesting.TestChannel) { + + channelA, channelB, err := coord.ChanOpenInit(chainA, chainB, connA, connB, sourcePortID, counterpartyPortID, order) + require.NoError(coord.t, err) + + err = coord.ChanOpenTry(chainB, chainA, channelB, channelA, connB, order) + require.NoError(coord.t, err) + + err = coord.ChanOpenAck(chainA, chainB, channelA, channelB) + require.NoError(coord.t, err) + + err = coord.ChanOpenConfirm(chainB, chainA, channelB, channelA) + require.NoError(coord.t, err) + + return channelA, channelB +} + +// SendPacket sends a packet through the channel keeper on the source chain and updates the +// counterparty client for the source chain. +func (coord *Coordinator) SendPacket( + source, counterparty *TestChain, + packet exported.PacketI, + counterpartyClientID string, +) error { + if err := source.SendPacket(packet); err != nil { + return err + } + coord.IncrementTime() + + // update source client on counterparty connection + return coord.UpdateClient( + counterparty, source, + counterpartyClientID, exported.Tendermint, + ) +} + +// RecvPacket receives a channel packet on the counterparty chain and updates +// the client on the source chain representing the counterparty. +func (coord *Coordinator) RecvPacket( + source, counterparty *TestChain, + sourceClient string, + packet channeltypes.Packet, +) error { + // get proof of packet commitment on source + packetKey := host.PacketCommitmentKey(packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) + proof, proofHeight := source.QueryProof(packetKey) + + // Increment time and commit block so that 5 second delay period passes between send and receive + coord.IncrementTime() + coord.CommitBlock(source, counterparty) + + recvMsg := channeltypes.NewMsgRecvPacket(packet, proof, proofHeight, counterparty.SenderAccount.GetAddress()) + + // receive on counterparty and update source client + return coord.SendMsgs(counterparty, source, sourceClient, []sdk.Msg{recvMsg}) +} + +// TimeoutPacket returns the package to source chain to let the IBC app revert any operation. +func (coord *Coordinator) TimeoutPacket( + source, counterparty *TestChain, + counterpartyClient string, + packet channeltypes.Packet, +) error { + // get proof of packet unreceived on dest + packetKey := host.PacketReceiptKey(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) + proofUnreceived, proofHeight := counterparty.QueryProof(packetKey) + + // Increment time and commit block so that 5 second delay period passes between send and receive + coord.IncrementTime() + coord.CommitBlock(source, counterparty) + + timeoutMsg := channeltypes.NewMsgTimeout(packet, packet.Sequence, proofUnreceived, proofHeight, source.SenderAccount.GetAddress()) + return coord.SendMsgs(source, counterparty, counterpartyClient, []sdk.Msg{timeoutMsg}) +} + +// WriteAcknowledgement writes an acknowledgement to the channel keeper on the source chain and updates the +// counterparty client for the source chain. +func (coord *Coordinator) WriteAcknowledgement( + source, counterparty *TestChain, + packet exported.PacketI, + counterpartyClientID string, +) error { + if err := source.WriteAcknowledgement(packet); err != nil { + return err + } + coord.IncrementTime() + + // update source client on counterparty connection + return coord.UpdateClient( + counterparty, source, + counterpartyClientID, exported.Tendermint, + ) +} + +// AcknowledgePacket acknowledges on the source chain the packet received on +// the counterparty chain and updates the client on the counterparty representing +// the source chain. +// TODO: add a query for the acknowledgement by events +// - https://github.com/cosmos/cosmos-sdk/issues/6509 +func (coord *Coordinator) AcknowledgePacket( + source, counterparty *TestChain, + counterpartyClient string, + packet channeltypes.Packet, ack []byte, +) error { + // get proof of acknowledgement on counterparty + packetKey := host.PacketAcknowledgementKey(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) + proof, proofHeight := counterparty.QueryProof(packetKey) + + // Increment time and commit block so that 5 second delay period passes between send and receive + coord.IncrementTime() + coord.CommitBlock(source, counterparty) + + ackMsg := channeltypes.NewMsgAcknowledgement(packet, ack, proof, proofHeight, source.SenderAccount.GetAddress()) + return coord.SendMsgs(source, counterparty, counterpartyClient, []sdk.Msg{ackMsg}) +} + +// RelayPacket receives a channel packet on counterparty, queries the ack +// and acknowledges the packet on source. The clients are updated as needed. +func (coord *Coordinator) RelayPacket( + source, counterparty *TestChain, + sourceClient, counterpartyClient string, + packet channeltypes.Packet, ack []byte, +) error { + // Increment time and commit block so that 5 second delay period passes between send and receive + coord.IncrementTime() + coord.CommitBlock(counterparty) + + if err := coord.RecvPacket(source, counterparty, sourceClient, packet); err != nil { + return err + } + + // Increment time and commit block so that 5 second delay period passes between send and receive + coord.IncrementTime() + coord.CommitBlock(source) + + return coord.AcknowledgePacket(source, counterparty, counterpartyClient, packet, ack) +} + +// IncrementTime iterates through all the TestChain's and increments their current header time +// by 5 seconds. +// +// CONTRACT: this function must be called after every commit on any TestChain. +func (coord *Coordinator) IncrementTime() { + for _, chain := range coord.Chains { + chain.CurrentHeader.Time = chain.CurrentHeader.Time.Add(TimeIncrement) + chain.App.BeginBlock(abci.RequestBeginBlock{Header: chain.CurrentHeader}) + } +} + +// IncrementTimeBy iterates through all the TestChain's and increments their current header time +// by specified time. +func (coord *Coordinator) IncrementTimeBy(increment time.Duration) { + for _, chain := range coord.Chains { + chain.CurrentHeader.Time = chain.CurrentHeader.Time.Add(increment) + chain.App.BeginBlock(abci.RequestBeginBlock{Header: chain.CurrentHeader}) + } +} + +// SendMsg delivers a single provided message to the chain. The counterparty +// client is update with the new source consensus state. +func (coord *Coordinator) SendMsg(source, counterparty *TestChain, counterpartyClientID string, msg sdk.Msg) error { + return coord.SendMsgs(source, counterparty, counterpartyClientID, []sdk.Msg{msg}) +} + +// SendMsgs delivers the provided messages to the chain. The counterparty +// client is updated with the new source consensus state. +func (coord *Coordinator) SendMsgs(source, counterparty *TestChain, counterpartyClientID string, msgs []sdk.Msg) error { + if err := source.sendMsgs(msgs...); err != nil { + return err + } + + coord.IncrementTime() + + // update source client on counterparty connection + return coord.UpdateClient( + counterparty, source, + counterpartyClientID, exported.Tendermint, + ) +} + +func (coord *Coordinator) RelayAndAckPendingPackets(src, dest *TestChain, srcClientID, dstClientID string) error { + // get all the packet to relay src->dest + toSend := src.PendingSendPackets + src.PendingSendPackets = nil + fmt.Printf("Relay %d Packets A->B\n", len(toSend)) + + // send this to the other side + coord.IncrementTime() + coord.CommitBlock(src) + err := coord.UpdateClient(dest, src, dstClientID, exported.Tendermint) + for _, packet := range toSend { + err = coord.RecvPacket(src, dest, srcClientID, packet) + if err != nil { + return err + } + } + + // get all the acks to relay dest->src + toAck := dest.PendingAckPackets + dest.PendingAckPackets = nil + // TODO: assert >= len(toSend)? + fmt.Printf("Ack %d Packets B->A\n", len(toAck)) + + // send the ack back from dest -> src + coord.IncrementTime() + coord.CommitBlock(dest) + err = coord.UpdateClient(src, dest, srcClientID, exported.Tendermint) + if err != nil { + return err + } + for _, ack := range toAck { + err = coord.AcknowledgePacket(src, dest, srcClientID, ack.Packet, ack.Ack) + if err != nil { + return err + } + } + + return nil +} + +// GetChain returns the TestChain using the given chainID and returns an error if it does +// not exist. +func (coord *Coordinator) GetChain(chainID string) *TestChain { + chain, found := coord.Chains[chainID] + require.True(coord.t, found, fmt.Sprintf("%s chain does not exist", chainID)) + return chain +} + +// GetChainID returns the chainID used for the provided index. +func GetChainID(index int) string { + return ChainIDPrefix + strconv.Itoa(index) +} + +// CommitBlock commits a block on the provided indexes and then increments the global time. +// +// CONTRACT: the passed in list of indexes must not contain duplicates +func (coord *Coordinator) CommitBlock(chains ...*TestChain) { + for _, chain := range chains { + chain.App.Commit() + chain.NextBlock() + } + coord.IncrementTime() +} + +// CommitNBlocks commits n blocks to state and updates the block height by 1 for each commit. +func (coord *Coordinator) CommitNBlocks(chain *TestChain, n uint64) { + for i := uint64(0); i < n; i++ { + chain.App.BeginBlock(abci.RequestBeginBlock{Header: chain.CurrentHeader}) + chain.App.Commit() + chain.NextBlock() + coord.IncrementTime() + } +} + +// ConnOpenInit initializes a connection on the source chain with the state INIT +// using the OpenInit handshake call. +// +// NOTE: The counterparty testing connection will be created even if it is not created in the +// application state. +func (coord *Coordinator) ConnOpenInit( + source, counterparty *TestChain, + clientID, counterpartyClientID string, +) (*ibctesting.TestConnection, *ibctesting.TestConnection, error) { + sourceConnection := source.AddTestConnection(clientID, counterpartyClientID) + counterpartyConnection := counterparty.AddTestConnection(counterpartyClientID, clientID) + + // initialize connection on source + if err := source.ConnectionOpenInit(counterparty, sourceConnection, counterpartyConnection); err != nil { + return sourceConnection, counterpartyConnection, err + } + coord.IncrementTime() + + // update source client on counterparty connection + if err := coord.UpdateClient( + counterparty, source, + counterpartyClientID, exported.Tendermint, + ); err != nil { + return sourceConnection, counterpartyConnection, err + } + + return sourceConnection, counterpartyConnection, nil +} + +// ConnOpenInitOnBothChains initializes a connection on the source chain with the state INIT +// using the OpenInit handshake call. +func (coord *Coordinator) ConnOpenInitOnBothChains( + source, counterparty *TestChain, + clientID, counterpartyClientID string, +) (*ibctesting.TestConnection, *ibctesting.TestConnection, error) { + sourceConnection := source.AddTestConnection(clientID, counterpartyClientID) + counterpartyConnection := counterparty.AddTestConnection(counterpartyClientID, clientID) + + // initialize connection on source + if err := source.ConnectionOpenInit(counterparty, sourceConnection, counterpartyConnection); err != nil { + return sourceConnection, counterpartyConnection, err + } + coord.IncrementTime() + + // initialize connection on counterparty + if err := counterparty.ConnectionOpenInit(source, counterpartyConnection, sourceConnection); err != nil { + return sourceConnection, counterpartyConnection, err + } + coord.IncrementTime() + + // update counterparty client on source connection + if err := coord.UpdateClient( + source, counterparty, + clientID, exported.Tendermint, + ); err != nil { + return sourceConnection, counterpartyConnection, err + } + + // update source client on counterparty connection + if err := coord.UpdateClient( + counterparty, source, + counterpartyClientID, exported.Tendermint, + ); err != nil { + return sourceConnection, counterpartyConnection, err + } + + return sourceConnection, counterpartyConnection, nil +} + +// ConnOpenTry initializes a connection on the source chain with the state TRYOPEN +// using the OpenTry handshake call. +func (coord *Coordinator) ConnOpenTry( + source, counterparty *TestChain, + sourceConnection, counterpartyConnection *ibctesting.TestConnection, +) error { + // initialize TRYOPEN connection on source + if err := source.ConnectionOpenTry(counterparty, sourceConnection, counterpartyConnection); err != nil { + return err + } + coord.IncrementTime() + + // update source client on counterparty connection + return coord.UpdateClient( + counterparty, source, + counterpartyConnection.ClientID, exported.Tendermint, + ) +} + +// ConnOpenAck initializes a connection on the source chain with the state OPEN +// using the OpenAck handshake call. +func (coord *Coordinator) ConnOpenAck( + source, counterparty *TestChain, + sourceConnection, counterpartyConnection *ibctesting.TestConnection, +) error { + // set OPEN connection on source using OpenAck + if err := source.ConnectionOpenAck(counterparty, sourceConnection, counterpartyConnection); err != nil { + return err + } + coord.IncrementTime() + + // update source client on counterparty connection + return coord.UpdateClient( + counterparty, source, + counterpartyConnection.ClientID, exported.Tendermint, + ) +} + +// ConnOpenConfirm initializes a connection on the source chain with the state OPEN +// using the OpenConfirm handshake call. +func (coord *Coordinator) ConnOpenConfirm( + source, counterparty *TestChain, + sourceConnection, counterpartyConnection *ibctesting.TestConnection, +) error { + if err := source.ConnectionOpenConfirm(counterparty, sourceConnection, counterpartyConnection); err != nil { + return err + } + coord.IncrementTime() + + // update source client on counterparty connection + return coord.UpdateClient( + counterparty, source, + counterpartyConnection.ClientID, exported.Tendermint, + ) +} + +// ChanOpenInit initializes a channel on the source chain with the state INIT +// using the OpenInit handshake call. +// +// NOTE: The counterparty testing channel will be created even if it is not created in the +// application state. +func (coord *Coordinator) ChanOpenInit( + source, counterparty *TestChain, + connection, counterpartyConnection *ibctesting.TestConnection, + sourcePortID, counterpartyPortID string, + order channeltypes.Order, +) (ibctesting.TestChannel, ibctesting.TestChannel, error) { + sourceChannel := source.AddTestChannel(connection, sourcePortID) + counterpartyChannel := counterparty.AddTestChannel(counterpartyConnection, counterpartyPortID) + + // NOTE: only creation of a capability for a transfer or mock port is supported + // Other applications must bind to the port in InitGenesis or modify this code. + source.CreatePortCapability(sourceChannel.PortID) + coord.IncrementTime() + + // initialize channel on source + if err := source.ChanOpenInit(sourceChannel, counterpartyChannel, order, connection.ID); err != nil { + return sourceChannel, counterpartyChannel, err + } + coord.IncrementTime() + + // update source client on counterparty connection + if err := coord.UpdateClient( + counterparty, source, + counterpartyConnection.ClientID, exported.Tendermint, + ); err != nil { + return sourceChannel, counterpartyChannel, err + } + + return sourceChannel, counterpartyChannel, nil +} + +// ChanOpenInitOnBothChains initializes a channel on the source chain and counterparty chain +// with the state INIT using the OpenInit handshake call. +func (coord *Coordinator) ChanOpenInitOnBothChains( + source, counterparty *TestChain, + connection, counterpartyConnection *ibctesting.TestConnection, + sourcePortID, counterpartyPortID string, + order channeltypes.Order, +) (ibctesting.TestChannel, ibctesting.TestChannel, error) { + sourceChannel := source.AddTestChannel(connection, sourcePortID) + counterpartyChannel := counterparty.AddTestChannel(counterpartyConnection, counterpartyPortID) + + // NOTE: only creation of a capability for a transfer or mock port is supported + // Other applications must bind to the port in InitGenesis or modify this code. + source.CreatePortCapability(sourceChannel.PortID) + counterparty.CreatePortCapability(counterpartyChannel.PortID) + coord.IncrementTime() + + // initialize channel on source + if err := source.ChanOpenInit(sourceChannel, counterpartyChannel, order, connection.ID); err != nil { + return sourceChannel, counterpartyChannel, err + } + coord.IncrementTime() + + // initialize channel on counterparty + if err := counterparty.ChanOpenInit(counterpartyChannel, sourceChannel, order, counterpartyConnection.ID); err != nil { + return sourceChannel, counterpartyChannel, err + } + coord.IncrementTime() + + // update counterparty client on source connection + if err := coord.UpdateClient( + source, counterparty, + connection.ClientID, exported.Tendermint, + ); err != nil { + return sourceChannel, counterpartyChannel, err + } + + // update source client on counterparty connection + if err := coord.UpdateClient( + counterparty, source, + counterpartyConnection.ClientID, exported.Tendermint, + ); err != nil { + return sourceChannel, counterpartyChannel, err + } + + return sourceChannel, counterpartyChannel, nil +} + +// ChanOpenTry initializes a channel on the source chain with the state TRYOPEN +// using the OpenTry handshake call. +func (coord *Coordinator) ChanOpenTry( + source, counterparty *TestChain, + sourceChannel, counterpartyChannel ibctesting.TestChannel, + connection *ibctesting.TestConnection, + order channeltypes.Order, +) error { + + // initialize channel on source + if err := source.ChanOpenTry(counterparty, sourceChannel, counterpartyChannel, order, connection.ID); err != nil { + return err + } + coord.IncrementTime() + + // update source client on counterparty connection + return coord.UpdateClient( + counterparty, source, + connection.CounterpartyClientID, exported.Tendermint, + ) +} + +// ChanOpenAck initializes a channel on the source chain with the state OPEN +// using the OpenAck handshake call. +func (coord *Coordinator) ChanOpenAck( + source, counterparty *TestChain, + sourceChannel, counterpartyChannel ibctesting.TestChannel, +) error { + + if err := source.ChanOpenAck(counterparty, sourceChannel, counterpartyChannel); err != nil { + return err + } + coord.IncrementTime() + + // update source client on counterparty connection + return coord.UpdateClient( + counterparty, source, + sourceChannel.CounterpartyClientID, exported.Tendermint, + ) +} + +// ChanOpenConfirm initializes a channel on the source chain with the state OPEN +// using the OpenConfirm handshake call. +func (coord *Coordinator) ChanOpenConfirm( + source, counterparty *TestChain, + sourceChannel, counterpartyChannel ibctesting.TestChannel, +) error { + + if err := source.ChanOpenConfirm(counterparty, sourceChannel, counterpartyChannel); err != nil { + return err + } + coord.IncrementTime() + + // update source client on counterparty connection + return coord.UpdateClient( + counterparty, source, + sourceChannel.CounterpartyClientID, exported.Tendermint, + ) +} + +func (coord *Coordinator) CloseChannel( + source, counterparty *TestChain, + channel, counterpartyChannel ibctesting.TestChannel, +) { + err := source.ChanCloseInit(counterparty, channel) + require.NoError(coord.t, err) + + coord.IncrementTime() + err = coord.UpdateClient(counterparty, source, counterpartyChannel.ClientID, exported.Tendermint) + require.NoError(coord.t, err) + err = coord.ChanCloseConfirm(source, counterparty, channel, counterpartyChannel) + require.NoError(coord.t, err) +} + +// ChanCloseInit closes a channel on the source chain resulting in the channels state +// being set to CLOSED. +// +// NOTE: does not work with ibc-transfer module +func (coord *Coordinator) ChanCloseInit( + source, counterparty *TestChain, + channel ibctesting.TestChannel, +) error { + + if err := source.ChanCloseInit(counterparty, channel); err != nil { + return err + } + coord.IncrementTime() + + // update source client on counterparty connection + return coord.UpdateClient( + counterparty, source, + channel.CounterpartyClientID, exported.Tendermint, + ) +} + +// ChanCloseConfirm closes a channel on the counterparty chain resulting in the channels state +// being set to CLOSED. +// +// NOTE: does not work with ibc-transfer module +func (coord *Coordinator) ChanCloseConfirm( + source, counterparty *TestChain, + channel, counterpartyChannel ibctesting.TestChannel, +) error { + channelKey := host.ChannelKey(channel.PortID, channel.ID) + proof, proofHeight := source.QueryProof(channelKey) + + msg := channeltypes.NewMsgChannelCloseConfirm( + counterpartyChannel.PortID, counterpartyChannel.ID, + proof, proofHeight, + counterparty.SenderAccount.GetAddress(), + ) + return coord.SendMsgs(counterparty, source, counterpartyChannel.CounterpartyClientID, []sdk.Msg{msg}) +} + +// SetChannelClosed sets a channel state to CLOSED. +func (coord *Coordinator) SetChannelClosed( + source, counterparty *TestChain, + testChannel ibctesting.TestChannel, +) error { + channel := source.GetChannel(testChannel) + + channel.State = channeltypes.CLOSED + source.TestSupport(). + IBCKeeper().ChannelKeeper.SetChannel(source.GetContext(), testChannel.PortID, testChannel.ID, channel) + + coord.CommitBlock(source) + + // update source client on counterparty connection + return coord.UpdateClient( + counterparty, source, + testChannel.CounterpartyClientID, exported.Tendermint, + ) +} diff --git a/x/wasm/ibctesting/wasm.go b/x/wasm/ibctesting/wasm.go new file mode 100644 index 0000000000..3b899c7bac --- /dev/null +++ b/x/wasm/ibctesting/wasm.go @@ -0,0 +1,139 @@ +package ibctesting + +import ( + "bytes" + "compress/gzip" + "encoding/json" + "fmt" + wasmd "github.com/CosmWasm/wasmd/app" + "github.com/CosmWasm/wasmd/x/wasm/internal/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/golang/protobuf/proto" + "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/libs/rand" + "io/ioutil" + "strings" +) + +var wasmIdent = []byte("\x00\x61\x73\x6D") + +// SeedNewContractInstance stores some wasm code and instantiates a new contract on this chain. +// This method can be called to prepare the store with some valid CodeInfo and ContractInfo. The returned +// Address is the contract address for this instance. Test should make use of this data and/or use NewIBCContractMockWasmer +// for using a contract mock in Go. +func (c *TestChain) SeedNewContractInstance() sdk.AccAddress { + pInstResp := c.StoreCode(append(wasmIdent, rand.Bytes(10)...)) + codeID := pInstResp.CodeID + + anyAddressStr := c.SenderAccount.GetAddress().String() + initMsg := []byte(fmt.Sprintf(`{"verifier": %q, "beneficiary": %q}`, anyAddressStr, anyAddressStr)) + return c.InstantiateContract(codeID, initMsg) +} + +func (c *TestChain) StoreCodeFile(filename string) types.MsgStoreCodeResponse { + wasmCode, err := ioutil.ReadFile(filename) + require.NoError(c.t, err) + if strings.HasSuffix(filename, "wasm") { // compress for gas limit + var buf bytes.Buffer + gz := gzip.NewWriter(&buf) + _, err := gz.Write(wasmCode) + require.NoError(c.t, err) + err = gz.Close() + require.NoError(c.t, err) + wasmCode = buf.Bytes() + } + return c.StoreCode(wasmCode) +} + +func (c *TestChain) StoreCode(byteCode []byte) types.MsgStoreCodeResponse { + storeMsg := &types.MsgStoreCode{ + Sender: c.SenderAccount.GetAddress().String(), + WASMByteCode: byteCode, + } + r, err := c.SendMsgs(storeMsg) + require.NoError(c.t, err) + protoResult := c.parseSDKResultData(r) + require.Len(c.t, protoResult.Data, 1) + // unmarshal protobuf response from data + var pInstResp types.MsgStoreCodeResponse + require.NoError(c.t, pInstResp.Unmarshal(protoResult.Data[0].Data)) + require.NotEmpty(c.t, pInstResp.CodeID) + return pInstResp +} + +func (c *TestChain) InstantiateContract(codeID uint64, initMsg []byte) sdk.AccAddress { + instantiateMsg := &types.MsgInstantiateContract{ + Sender: c.SenderAccount.GetAddress().String(), + Admin: c.SenderAccount.GetAddress().String(), + CodeID: codeID, + Label: "ibc-test", + InitMsg: initMsg, + InitFunds: sdk.Coins{TestCoin}, + } + + r, err := c.SendMsgs(instantiateMsg) + require.NoError(c.t, err) + protoResult := c.parseSDKResultData(r) + require.Len(c.t, protoResult.Data, 1) + + var pExecResp types.MsgInstantiateContractResponse + require.NoError(c.t, pExecResp.Unmarshal(protoResult.Data[0].Data)) + a, err := sdk.AccAddressFromBech32(pExecResp.Address) + require.NoError(c.t, err) + return a +} + +// This will serialize the query message and submit it to the contract. +// The response is parsed into the provided interface. +// Usage: SmartQuery(addr, QueryMsg{Foo: 1}, &response) +func (c *TestChain) SmartQuery(contractAddr string, queryMsg interface{}, response interface{}) error { + msg, err := json.Marshal(queryMsg) + if err != nil { + return err + } + + req := types.QuerySmartContractStateRequest{ + Address: contractAddr, + QueryData: msg, + } + reqBin, err := proto.Marshal(&req) + if err != nil { + return err + } + + // TODO: what is the query? + res := c.App.Query(abci.RequestQuery{ + Path: "/cosmwasm.wasm.v1beta1.Query/SmartContractState", + Data: reqBin, + }) + + if res.Code != 0 { + return fmt.Errorf("Query failed: (%d) %s", res.Code, res.Log) + } + + // unpack protobuf + var resp types.QuerySmartContractStateResponse + err = proto.Unmarshal(res.Value, &resp) + if err != nil { + return err + } + // unpack json content + return json.Unmarshal(resp.Data, response) +} + +func (c *TestChain) parseSDKResultData(r *sdk.Result) sdk.TxMsgData { + var protoResult sdk.TxMsgData + require.NoError(c.t, proto.Unmarshal(r.Data, &protoResult)) + return protoResult +} + +// ContractInfo is a helper function to returns the ContractInfo for the given contract address +func (c *TestChain) ContractInfo(contractAddr sdk.AccAddress) *types.ContractInfo { + return c.TestSupport().WasmKeeper().GetContractInfo(c.GetContext(), contractAddr) +} + +// TestSupport provides access to package private keepers. +func (c *TestChain) TestSupport() *wasmd.TestSupport { + return wasmd.NewTestSupport(c.t, c.App) +} diff --git a/x/wasm/internal/keeper/genesis_test.go b/x/wasm/internal/keeper/genesis_test.go index a900bbbfbe..5560a9cb69 100644 --- a/x/wasm/internal/keeper/genesis_test.go +++ b/x/wasm/internal/keeper/genesis_test.go @@ -616,7 +616,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, tempDir, wasmConfig, "", nil, nil) + srcKeeper := NewKeeper(encodingConfig.Marshaler, keyWasm, pk.Subspace(wasmTypes.DefaultParamspace), authkeeper.AccountKeeper{}, nil, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, tempDir, wasmConfig, "", nil, nil) 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 15c9eb3111..25f4dbe2e3 100644 --- a/x/wasm/internal/keeper/handler_plugin.go +++ b/x/wasm/internal/keeper/handler_plugin.go @@ -10,17 +10,21 @@ import ( 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 MessageHandler struct { +type DefaultMessageHandler struct { router sdk.Router encoders MessageEncoders } -func NewMessageHandler(router sdk.Router, customEncoders *MessageEncoders) MessageHandler { - encoders := DefaultEncoders().Merge(customEncoders) - return MessageHandler{ +func NewDefaultMessageHandler(router sdk.Router, channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper, customEncoders *MessageEncoders) DefaultMessageHandler { + encoders := DefaultEncoders(channelKeeper, capabilityKeeper).Merge(customEncoders) + return DefaultMessageHandler{ router: router, encoders: encoders, } @@ -30,20 +34,23 @@ type BankEncoder func(sender sdk.AccAddress, msg *wasmvmtypes.BankMsg) ([]sdk.Ms 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 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 Staking StakingEncoder Wasm WasmEncoder + IBC IBCEncoder } -func DefaultEncoders() MessageEncoders { +func DefaultEncoders(channelKeeper types.ChannelKeeper, capabilityKeeper types.CapabilityKeeper) MessageEncoders { return MessageEncoders{ Bank: EncodeBankMsg, Custom: NoCustomMsg, Staking: EncodeStakingMsg, Wasm: EncodeWasmMsg, + IBC: EncodeIBCMsg(channelKeeper, capabilityKeeper), } } @@ -63,10 +70,13 @@ func (e MessageEncoders) Merge(o *MessageEncoders) MessageEncoders { if o.Wasm != nil { e.Wasm = o.Wasm } + if o.IBC != nil { + e.IBC = o.IBC + } return e } -func (e MessageEncoders) Encode(contractAddr sdk.AccAddress, msg wasmvmtypes.CosmosMsg) ([]sdk.Msg, error) { +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) @@ -76,6 +86,8 @@ func (e MessageEncoders) Encode(contractAddr sdk.AccAddress, msg wasmvmtypes.Cos return e.Staking(contractAddr, msg.Staking) case msg.Wasm != nil: return e.Wasm(contractAddr, msg.Wasm) + case msg.IBC != nil: + return e.IBC(ctx, contractAddr, contractIBCPortID, msg.IBC) } return nil, sdkerrors.Wrap(types.ErrInvalidMsg, "Unknown variant of Wasm") } @@ -92,7 +104,7 @@ func EncodeBankMsg(sender sdk.AccAddress, msg *wasmvmtypes.BankMsg) ([]sdk.Msg, return nil, err } sdkMsg := banktypes.MsgSend{ - FromAddress: msg.Send.FromAddress, + FromAddress: sender.String(), ToAddress: msg.Send.ToAddress, Amount: toSend, } @@ -195,20 +207,103 @@ func EncodeWasmMsg(sender sdk.AccAddress, msg *wasmvmtypes.WasmMsg) ([]sdk.Msg, } } -func (h MessageHandler) Dispatch(ctx sdk.Context, contractAddr sdk.AccAddress, msg wasmvmtypes.CosmosMsg) error { - sdkMsgs, err := h.encoders.Encode(contractAddr, msg) - if err != nil { - return err +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") + } + } +} + +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 } - for _, sdkMsg := range sdkMsgs { - if err := h.handleSdkMessage(ctx, contractAddr, sdkMsg); err != nil { + return *timestamp +} + +func (h DefaultMessageHandler) Dispatch(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msgs ...wasmvmtypes.CosmosMsg) error { + for _, msg := range msgs { + sdkMsgs, err := h.encoders.Encode(ctx, contractAddr, contractIBCPortID, msg) + if err != nil { return err } + for _, sdkMsg := range sdkMsgs { + if err := h.handleSdkMessage(ctx, contractAddr, sdkMsg); err != nil { + return err + } + } } return nil } -func (h MessageHandler) handleSdkMessage(ctx sdk.Context, contractAddr sdk.Address, msg sdk.Msg) error { +func (h DefaultMessageHandler) handleSdkMessage(ctx sdk.Context, contractAddr sdk.Address, msg sdk.Msg) error { if err := msg.ValidateBasic(); err != nil { return err } diff --git a/x/wasm/internal/keeper/handler_plugin_test.go b/x/wasm/internal/keeper/handler_plugin_test.go index 0ade805d2e..f068d7ecfa 100644 --- a/x/wasm/internal/keeper/handler_plugin_test.go +++ b/x/wasm/internal/keeper/handler_plugin_test.go @@ -3,6 +3,12 @@ package keeper import ( "encoding/json" "fmt" + "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/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" "testing" "github.com/CosmWasm/wasmd/x/wasm/internal/types" @@ -16,19 +22,21 @@ import ( ) func TestEncoding(t *testing.T) { - _, _, addr1 := keyPubAddr() - _, _, addr2 := keyPubAddr() + 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}`) cases := map[string]struct { - sender sdk.AccAddress - input wasmvmtypes.CosmosMsg + sender sdk.AccAddress + srcMsg wasmvmtypes.CosmosMsg + srcIBCPort string // set if valid output []sdk.Msg // set if invalid @@ -36,11 +44,10 @@ func TestEncoding(t *testing.T) { }{ "simple send": { sender: addr1, - input: wasmvmtypes.CosmosMsg{ + srcMsg: wasmvmtypes.CosmosMsg{ Bank: &wasmvmtypes.BankMsg{ Send: &wasmvmtypes.SendMsg{ - FromAddress: addr1.String(), - ToAddress: addr2.String(), + ToAddress: addr2.String(), Amount: []wasmvmtypes.Coin{ { Denom: "uatom", @@ -67,11 +74,10 @@ func TestEncoding(t *testing.T) { }, "invalid send amount": { sender: addr1, - input: wasmvmtypes.CosmosMsg{ + srcMsg: wasmvmtypes.CosmosMsg{ Bank: &wasmvmtypes.BankMsg{ Send: &wasmvmtypes.SendMsg{ - FromAddress: addr1.String(), - ToAddress: addr2.String(), + ToAddress: addr2.String(), Amount: []wasmvmtypes.Coin{ { Denom: "uatom", @@ -85,11 +91,10 @@ func TestEncoding(t *testing.T) { }, "invalid address": { sender: addr1, - input: wasmvmtypes.CosmosMsg{ + srcMsg: wasmvmtypes.CosmosMsg{ Bank: &wasmvmtypes.BankMsg{ Send: &wasmvmtypes.SendMsg{ - FromAddress: addr1.String(), - ToAddress: invalidAddr, + ToAddress: invalidAddr, Amount: []wasmvmtypes.Coin{ { Denom: "uatom", @@ -112,7 +117,7 @@ func TestEncoding(t *testing.T) { }, "wasm execute": { sender: addr1, - input: wasmvmtypes.CosmosMsg{ + srcMsg: wasmvmtypes.CosmosMsg{ Wasm: &wasmvmtypes.WasmMsg{ Execute: &wasmvmtypes.ExecuteMsg{ ContractAddr: addr2.String(), @@ -134,7 +139,7 @@ func TestEncoding(t *testing.T) { }, "wasm instantiate": { sender: addr1, - input: wasmvmtypes.CosmosMsg{ + srcMsg: wasmvmtypes.CosmosMsg{ Wasm: &wasmvmtypes.WasmMsg{ Instantiate: &wasmvmtypes.InstantiateMsg{ CodeID: 7, @@ -158,7 +163,7 @@ func TestEncoding(t *testing.T) { }, "staking delegate": { sender: addr1, - input: wasmvmtypes.CosmosMsg{ + srcMsg: wasmvmtypes.CosmosMsg{ Staking: &wasmvmtypes.StakingMsg{ Delegate: &wasmvmtypes.DelegateMsg{ Validator: valAddr.String(), @@ -176,7 +181,7 @@ func TestEncoding(t *testing.T) { }, "staking delegate to non-validator": { sender: addr1, - input: wasmvmtypes.CosmosMsg{ + srcMsg: wasmvmtypes.CosmosMsg{ Staking: &wasmvmtypes.StakingMsg{ Delegate: &wasmvmtypes.DelegateMsg{ Validator: addr2.String(), @@ -195,7 +200,7 @@ func TestEncoding(t *testing.T) { }, "staking undelegate": { sender: addr1, - input: wasmvmtypes.CosmosMsg{ + srcMsg: wasmvmtypes.CosmosMsg{ Staking: &wasmvmtypes.StakingMsg{ Undelegate: &wasmvmtypes.UndelegateMsg{ Validator: valAddr.String(), @@ -213,7 +218,7 @@ func TestEncoding(t *testing.T) { }, "staking redelegate": { sender: addr1, - input: wasmvmtypes.CosmosMsg{ + srcMsg: wasmvmtypes.CosmosMsg{ Staking: &wasmvmtypes.StakingMsg{ Redelegate: &wasmvmtypes.RedelegateMsg{ SrcValidator: valAddr.String(), @@ -233,7 +238,7 @@ func TestEncoding(t *testing.T) { }, "staking withdraw (implicit recipient)": { sender: addr1, - input: wasmvmtypes.CosmosMsg{ + srcMsg: wasmvmtypes.CosmosMsg{ Staking: &wasmvmtypes.StakingMsg{ Withdraw: &wasmvmtypes.WithdrawMsg{ Validator: valAddr2.String(), @@ -253,7 +258,7 @@ func TestEncoding(t *testing.T) { }, "staking withdraw (explicit recipient)": { sender: addr1, - input: wasmvmtypes.CosmosMsg{ + srcMsg: wasmvmtypes.CosmosMsg{ Staking: &wasmvmtypes.StakingMsg{ Withdraw: &wasmvmtypes.WithdrawMsg{ Validator: valAddr2.String(), @@ -272,13 +277,91 @@ func TestEncoding(t *testing.T) { }, }, }, + "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(), + }, + }, + }, } - - encoder := DefaultEncoders() + encoder := DefaultEncoders(nil, nil) for name, tc := range cases { tc := tc t.Run(name, func(t *testing.T) { - res, err := encoder.Encode(tc.sender, tc.input) + var ctx sdk.Context + res, err := encoder.Encode(ctx, tc.sender, tc.srcIBCPort, tc.srcMsg) if tc.isError { require.Error(t, err) } else { @@ -287,5 +370,63 @@ func TestEncoding(t *testing.T) { } }) } +} +func TestEncodeIBCSendPacket(t *testing.T) { + ibcPort := "contractsIBCPort" + var ctx sdk.Context + specs := map[string]struct { + srcMsg wasmvmtypes.SendPacketMsg + expPacketSent channeltypes.Packet + }{ + "all good": { + srcMsg: wasmvmtypes.SendPacketMsg{ + ChannelID: "channel-1", + Data: []byte("myData"), + TimeoutBlock: &wasmvmtypes.IBCTimeoutBlock{Revision: 1, Height: 2}, + }, + expPacketSent: channeltypes.Packet{ + Sequence: 1, + SourcePort: ibcPort, + SourceChannel: "channel-1", + DestinationPort: "other-port", + DestinationChannel: "other-channel-1", + Data: []byte("myData"), + TimeoutHeight: clienttypes.Height{RevisionNumber: 1, RevisionHeight: 2}, + }, + }, + } + 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 + }, + } + 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) + }) + } } diff --git a/x/wasm/internal/keeper/ibc.go b/x/wasm/internal/keeper/ibc.go new file mode 100644 index 0000000000..5939be7a99 --- /dev/null +++ b/x/wasm/internal/keeper/ibc.go @@ -0,0 +1,55 @@ +package keeper + +import ( + "strings" + + "github.com/CosmWasm/wasmd/x/wasm/internal/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" + host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" +) + +// bindIbcPort will reserve the port. +// returns a string name of the port or error if we cannot bind it. +// this will fail if call twice. +func (k Keeper) bindIbcPort(ctx sdk.Context, portID string) error { + cap := k.portKeeper.BindPort(ctx, portID) + return k.ClaimCapability(ctx, cap, host.PortPath(portID)) +} + +// ensureIbcPort is like registerIbcPort, but it checks if we already hold the port +// before calling register, so this is safe to call multiple times. +// Returns success if we already registered or just registered and error if we cannot +// (lack of permissions or someone else has it) +func (k Keeper) ensureIbcPort(ctx sdk.Context, contractAddr sdk.AccAddress) (string, error) { + portID := PortIDForContract(contractAddr) + if _, ok := k.capabilityKeeper.GetCapability(ctx, host.PortPath(portID)); ok { + return portID, nil + } + return portID, k.bindIbcPort(ctx, portID) +} + +const portIDPrefix = "wasm." + +func PortIDForContract(addr sdk.AccAddress) string { + return portIDPrefix + addr.String() +} + +func ContractFromPortID(portID string) (sdk.AccAddress, error) { + if !strings.HasPrefix(portID, portIDPrefix) { + return nil, sdkerrors.Wrapf(types.ErrInvalid, "without prefix") + } + return sdk.AccAddressFromBech32(portID[len(portIDPrefix):]) +} + +// AuthenticateCapability wraps the scopedKeeper's AuthenticateCapability function +func (k Keeper) AuthenticateCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) bool { + return k.capabilityKeeper.AuthenticateCapability(ctx, cap, name) +} + +// ClaimCapability allows the transfer module to claim a capability +//that IBC module passes to it +func (k Keeper) ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error { + return k.capabilityKeeper.ClaimCapability(ctx, cap, name) +} diff --git a/x/wasm/internal/keeper/ibc_test.go b/x/wasm/internal/keeper/ibc_test.go new file mode 100644 index 0000000000..dbf8145e7a --- /dev/null +++ b/x/wasm/internal/keeper/ibc_test.go @@ -0,0 +1,82 @@ +package keeper + +import ( + "fmt" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/assert" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestDontBindPortNonIBCContract(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + 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) + 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) + require.Equal(t, "wasm", owner) + + initMsgBz := IBCReflectInitMsg{ + ReflectCodeID: example.ReflectCodeID, + }.GetBytes(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) + require.NoError(t, err) + require.NotEqual(t, example.Contract, addr) + + portID2 := PortIDForContract(addr) + owner, _, err = keepers.IBCKeeper.PortKeeper.LookupModuleByPort(ctx, portID2) + require.NoError(t, err) + require.Equal(t, "wasm", owner) +} + +func TestContractFromPortID(t *testing.T) { + contractAddr := contractAddress(1, 100) + specs := map[string]struct { + srcPort string + expAddr sdk.AccAddress + expErr bool + }{ + "all good": { + srcPort: fmt.Sprintf("wasm.%s", contractAddr.String()), + expAddr: contractAddr, + }, + "without prefix": { + srcPort: contractAddr.String(), + expErr: true, + }, + "invalid prefix": { + srcPort: fmt.Sprintf("wasmx.%s", contractAddr.String()), + expErr: true, + }, + "without separator char": { + srcPort: fmt.Sprintf("wasm%s", contractAddr.String()), + expErr: true, + }, + "invalid account": { + srcPort: "wasm.foobar", + expErr: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + gotAddr, gotErr := ContractFromPortID(spec.srcPort) + if spec.expErr { + require.Error(t, gotErr) + return + } + require.NoError(t, gotErr) + assert.Equal(t, spec.expAddr, gotAddr) + }) + } + +} diff --git a/x/wasm/internal/keeper/keeper.go b/x/wasm/internal/keeper/keeper.go index 17fe84c9fb..1b597e3de8 100644 --- a/x/wasm/internal/keeper/keeper.go +++ b/x/wasm/internal/keeper/keeper.go @@ -46,16 +46,28 @@ const CompileCost uint64 = 2 // constant value so all nodes run with the same limit. const contractMemoryLimit = 32 +// Option is an extension point to instantiate keeper with non default values +type Option interface { + apply(*Keeper) +} + +type messenger interface { + Dispatch(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msgs ...wasmvmtypes.CosmosMsg) error +} + // Keeper will have a reference to Wasmer with it's own data directory. type Keeper struct { - storeKey sdk.StoreKey - cdc codec.Marshaler - accountKeeper authkeeper.AccountKeeper - bankKeeper bankkeeper.Keeper + storeKey sdk.StoreKey + cdc codec.Marshaler + accountKeeper authkeeper.AccountKeeper + bankKeeper bankkeeper.Keeper + ChannelKeeper types.ChannelKeeper + portKeeper types.PortKeeper + capabilityKeeper types.CapabilityKeeper wasmer types.WasmerEngine queryPlugins QueryPlugins - messenger MessageHandler + messenger messenger // queryGasLimit is the max wasmvm gas that can be spent on executing a query with a contract queryGasLimit uint64 authZPolicy AuthorizationPolicy @@ -72,12 +84,16 @@ func NewKeeper( bankKeeper bankkeeper.Keeper, stakingKeeper stakingkeeper.Keeper, distKeeper distributionkeeper.Keeper, + channelKeeper types.ChannelKeeper, + portKeeper types.PortKeeper, + capabilityKeeper types.CapabilityKeeper, router sdk.Router, 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) if err != nil { @@ -89,18 +105,25 @@ func NewKeeper( paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) } + messageEncoders := DefaultEncoders(channelKeeper, capabilityKeeper).Merge(customEncoders) keeper := Keeper{ - storeKey: storeKey, - cdc: cdc, - wasmer: wasmer, - accountKeeper: accountKeeper, - bankKeeper: bankKeeper, - messenger: NewMessageHandler(router, customEncoders), - queryGasLimit: wasmConfig.SmartQueryGasLimit, - authZPolicy: DefaultAuthorizationPolicy{}, - paramSpace: paramSpace, + storeKey: storeKey, + cdc: cdc, + wasmer: wasmer, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + ChannelKeeper: channelKeeper, + portKeeper: portKeeper, + capabilityKeeper: capabilityKeeper, + messenger: NewDefaultMessageHandler(router, channelKeeper, capabilityKeeper, &messageEncoders), + queryGasLimit: wasmConfig.SmartQueryGasLimit, + authZPolicy: DefaultAuthorizationPolicy{}, + paramSpace: paramSpace, } keeper.queryPlugins = DefaultQueryPlugins(bankKeeper, stakingKeeper, distKeeper, &keeper).Merge(customPlugins) + for _, o := range opts { + o.apply(&keeper) + } return keeper } @@ -150,20 +173,22 @@ func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, codeHash, err := k.wasmer.Create(wasmCode) if err != nil { - // return 0, sdkerrors.Wrap(err, "cosmwasm create") return 0, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) } - store := ctx.KVStore(k.storeKey) codeID = k.autoIncrementID(ctx, types.KeyLastCodeID) if instantiateAccess == nil { defaultAccessConfig := k.getInstantiateAccessConfig(ctx).With(creator) instantiateAccess = &defaultAccessConfig } codeInfo := types.NewCodeInfo(codeHash, creator, source, builder, *instantiateAccess) + k.storeCodeInfo(ctx, codeID, codeInfo) + return codeID, nil +} + +func (k Keeper) storeCodeInfo(ctx sdk.Context, codeID uint64, codeInfo types.CodeInfo) { + store := ctx.KVStore(k.storeKey) // 0x01 | codeID (uint64) -> ContractInfo store.Set(types.GetCodeKey(codeID), k.cdc.MustMarshalBinaryBare(&codeInfo)) - - return codeID, nil } func (k Keeper) importCode(ctx sdk.Context, codeID uint64, codeInfo types.CodeInfo, wasmCode []byte) error { @@ -263,11 +288,26 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A // persist instance first createdAt := types.NewAbsoluteTxPosition(ctx) contractInfo := types.NewContractInfo(codeID, creator, admin, label, createdAt) + + // check for IBC flag + report, err := k.wasmer.AnalyzeCode(codeInfo.CodeHash) + if err != nil { + return contractAddress, sdkerrors.Wrap(types.ErrInstantiateFailed, err.Error()) + } + if report.HasIBCEntryPoints { + // register IBC port + ibcPort, err := k.ensureIbcPort(ctx, contractAddress) + if err != nil { + return nil, err + } + contractInfo.IBCPortID = ibcPort + } + k.storeContractInfo(ctx, contractAddress, &contractInfo) k.appendToContractHistory(ctx, contractAddress, contractInfo.InitialHistory(initMsg)) // then dispatch so that contract could be called back - err = k.dispatchMessages(ctx, contractAddress, res.Messages) + err = k.dispatchMessages(ctx, contractAddress, contractInfo.IBCPortID, res.Messages) if err != nil { return nil, err } @@ -279,7 +319,7 @@ func (k Keeper) instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.A func (k Keeper) Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) (*sdk.Result, error) { ctx.GasMeter().ConsumeGas(InstanceCost, "Loading CosmWasm module: execute") - codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddress) + contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddress) if err != nil { return nil, err } @@ -304,7 +344,6 @@ func (k Keeper) Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller Ctx: ctx, Plugins: k.queryPlugins, } - gas := gasForContract(ctx) res, gasUsed, execErr := k.wasmer.Execute(codeInfo.CodeHash, env, info, msg, prefixStore, cosmwasmAPI, querier, gasMeter(ctx), gas) consumeGas(ctx, gasUsed) @@ -316,7 +355,7 @@ func (k Keeper) Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller events := types.ParseEvents(res.Attributes, contractAddress) ctx.EventManager().EmitEvents(events) - err = k.dispatchMessages(ctx, contractAddress, res.Messages) + err = k.dispatchMessages(ctx, contractAddress, contractInfo.IBCPortID, res.Messages) if err != nil { return nil, err } @@ -347,9 +386,23 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "unknown code") } - var noDeposit sdk.Coins + // check for IBC flag + switch report, err := k.wasmer.AnalyzeCode(newCodeInfo.CodeHash); { + case err != nil: + return nil, sdkerrors.Wrap(types.ErrMigrationFailed, err.Error()) + case !report.HasIBCEntryPoints && contractInfo.IBCPortID != "": + // prevent update to non ibc contract + return nil, sdkerrors.Wrap(types.ErrMigrationFailed, "requires ibc callbacks") + case report.HasIBCEntryPoints && contractInfo.IBCPortID == "": + // add ibc port + ibcPort, err := k.ensureIbcPort(ctx, contractAddress) + if err != nil { + return nil, err + } + contractInfo.IBCPortID = ibcPort + } + env := types.NewEnv(ctx, contractAddress) - info := types.NewInfo(caller, noDeposit) // prepare querier querier := QueryHandler{ @@ -360,7 +413,7 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller prefixStoreKey := types.GetContractStorePrefix(contractAddress) prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey) gas := gasForContract(ctx) - res, gasUsed, err := k.wasmer.Migrate(newCodeInfo.CodeHash, env, info, msg, &prefixStore, cosmwasmAPI, &querier, gasMeter(ctx), gas) + res, gasUsed, err := k.wasmer.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()) @@ -378,7 +431,7 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller k.storeContractInfo(ctx, contractAddress, contractInfo) // then dispatch - if err := k.dispatchMessages(ctx, contractAddress, res.Messages); err != nil { + if err := k.dispatchMessages(ctx, contractAddress, contractInfo.IBCPortID, res.Messages); err != nil { return nil, sdkerrors.Wrap(err, "dispatch") } @@ -446,7 +499,7 @@ func (k Keeper) GetContractHistory(ctx sdk.Context, contractAddr sdk.AccAddress) func (k Keeper) QuerySmart(ctx sdk.Context, contractAddr sdk.AccAddress, req []byte) ([]byte, error) { ctx.GasMeter().ConsumeGas(InstanceCost, "Loading CosmWasm module: query") - codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) + _, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) if err != nil { return nil, err } @@ -475,25 +528,25 @@ func (k Keeper) QueryRaw(ctx sdk.Context, contractAddress sdk.AccAddress, key [] return prefixStore.Get(key) } -func (k Keeper) contractInstance(ctx sdk.Context, contractAddress sdk.AccAddress) (types.CodeInfo, prefix.Store, error) { +func (k Keeper) contractInstance(ctx sdk.Context, contractAddress sdk.AccAddress) (types.ContractInfo, types.CodeInfo, prefix.Store, error) { store := ctx.KVStore(k.storeKey) contractBz := store.Get(types.GetContractAddressKey(contractAddress)) if contractBz == nil { - return types.CodeInfo{}, prefix.Store{}, sdkerrors.Wrap(types.ErrNotFound, "contract") + return types.ContractInfo{}, types.CodeInfo{}, prefix.Store{}, sdkerrors.Wrap(types.ErrNotFound, "contract") } - var contract types.ContractInfo - k.cdc.MustUnmarshalBinaryBare(contractBz, &contract) + var contractInfo types.ContractInfo + k.cdc.MustUnmarshalBinaryBare(contractBz, &contractInfo) - contractInfoBz := store.Get(types.GetCodeKey(contract.CodeID)) + contractInfoBz := store.Get(types.GetCodeKey(contractInfo.CodeID)) if contractInfoBz == nil { - return types.CodeInfo{}, prefix.Store{}, sdkerrors.Wrap(types.ErrNotFound, "contract info") + return contractInfo, types.CodeInfo{}, prefix.Store{}, sdkerrors.Wrap(types.ErrNotFound, "contract info") } var codeInfo types.CodeInfo k.cdc.MustUnmarshalBinaryBare(contractInfoBz, &codeInfo) prefixStoreKey := types.GetContractStorePrefix(contractAddress) prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey) - return codeInfo, prefixStore, nil + return contractInfo, codeInfo, prefixStore, nil } func (k Keeper) GetContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) *types.ContractInfo { @@ -592,9 +645,9 @@ func (k Keeper) GetByteCode(ctx sdk.Context, codeID uint64) ([]byte, error) { return k.wasmer.GetCode(codeInfo.CodeHash) } -func (k Keeper) dispatchMessages(ctx sdk.Context, contractAddr sdk.AccAddress, msgs []wasmvmtypes.CosmosMsg) error { +func (k Keeper) dispatchMessages(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []wasmvmtypes.CosmosMsg) error { for _, msg := range msgs { - if err := k.messenger.Dispatch(ctx, contractAddr, msg); err != nil { + if err := k.messenger.Dispatch(ctx, contractAddr, ibcPort, msg); err != nil { return err } } @@ -618,7 +671,7 @@ func consumeGas(ctx sdk.Context, gas uint64) { ctx.GasMeter().ConsumeGas(consumed, "wasm contract") // throw OutOfGas error if we ran out (got exactly to zero due to better limit enforcing) if ctx.GasMeter().IsOutOfGas() { - panic(sdk.ErrorOutOfGas{"Wasmer function execution"}) + panic(sdk.ErrorOutOfGas{Descriptor: "Wasmer function execution"}) } } diff --git a/x/wasm/internal/keeper/keeper_test.go b/x/wasm/internal/keeper/keeper_test.go index 5704199dba..198251fd78 100644 --- a/x/wasm/internal/keeper/keeper_test.go +++ b/x/wasm/internal/keeper/keeper_test.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/json" "errors" + "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" "io/ioutil" "testing" "time" @@ -18,7 +19,7 @@ import ( tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) -const SupportedFeatures = "staking" +const SupportedFeatures = "staking,stargate" func TestNewKeeper(t *testing.T) { _, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) @@ -278,7 +279,9 @@ func TestInstantiate(t *testing.T) { require.Equal(t, "cosmos18vd8fpwxzck93qlwghaj6arh4p7c5n89uzcee5", contractAddr.String()) gasAfter := ctx.GasMeter().GasConsumed() - require.Equal(t, uint64(0x118c2), gasAfter-gasBefore) + if types.EnableGasVerification { + require.Equal(t, uint64(0x118c2), gasAfter-gasBefore) + } // ensure it is stored properly info := keeper.GetContractInfo(ctx, contractAddr) @@ -438,7 +441,7 @@ func TestInstantiateWithCallbackToContract(t *testing.T) { executeCalled bool err error ) - wasmerMock := selfCallingInstMockWasmer(&executeCalled) + wasmerMock := wasmtesting.SelfCallingInstMockWasmer(&executeCalled) keepers.WasmKeeper.wasmer = wasmerMock example := StoreHackatomExampleContract(t, ctx, keepers) @@ -507,8 +510,9 @@ func TestExecute(t *testing.T) { // make sure gas is properly deducted from ctx gasAfter := ctx.GasMeter().GasConsumed() - require.Equal(t, uint64(0x11d8c), gasAfter-gasBefore) - + if types.EnableGasVerification { + require.Equal(t, uint64(0x11d3f), gasAfter-gasBefore) + } // ensure bob now exists and got both payments released bobAcct = accKeeper.GetAccount(ctx, bob) require.NotNil(t, bobAcct) @@ -741,23 +745,17 @@ func TestMigrate(t *testing.T) { creator := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, deposit.Add(deposit...)) fred := createFakeFundedAccount(t, ctx, accKeeper, bankKeeper, topUp) - wasmCode, err := ioutil.ReadFile("./testdata/hackatom.wasm") - require.NoError(t, err) - - originalCodeID, err := keeper.Create(ctx, creator, wasmCode, "", "", nil) - require.NoError(t, err) - newCodeID, err := keeper.Create(ctx, creator, wasmCode, "", "", nil) - require.NoError(t, err) + originalCodeID := StoreHackatomExampleContract(t, ctx, keepers).CodeID + newCodeID := StoreHackatomExampleContract(t, ctx, keepers).CodeID + ibcCodeID := StoreIBCReflectContract(t, ctx, keepers).CodeID require.NotEqual(t, originalCodeID, newCodeID) - _, _, anyAddr := keyPubAddr() - _, _, newVerifierAddr := keyPubAddr() - initMsg := HackatomExampleInitMsg{ + anyAddr := RandomAccountAddress(t) + newVerifierAddr := RandomAccountAddress(t) + initMsgBz := HackatomExampleInitMsg{ Verifier: fred, Beneficiary: anyAddr, - } - initMsgBz, err := json.Marshal(initMsg) - require.NoError(t, err) + }.GetBytes(t) migMsg := struct { Verifier sdk.AccAddress `json:"verifier"` @@ -769,100 +767,146 @@ func TestMigrate(t *testing.T) { admin sdk.AccAddress overrideContractAddr sdk.AccAddress caller sdk.AccAddress - codeID uint64 + fromCodeID uint64 + toCodeID uint64 migrateMsg []byte expErr *sdkerrors.Error expVerifier sdk.AccAddress + expIBCPort bool + initMsg []byte }{ "all good with same code id": { admin: creator, caller: creator, - codeID: originalCodeID, + initMsg: initMsgBz, + fromCodeID: originalCodeID, + toCodeID: originalCodeID, migrateMsg: migMsgBz, expVerifier: newVerifierAddr, }, "all good with different code id": { admin: creator, caller: creator, - codeID: newCodeID, + initMsg: initMsgBz, + fromCodeID: originalCodeID, + toCodeID: newCodeID, migrateMsg: migMsgBz, expVerifier: newVerifierAddr, }, "all good with admin set": { admin: fred, caller: fred, - codeID: newCodeID, + initMsg: initMsgBz, + fromCodeID: originalCodeID, + toCodeID: newCodeID, migrateMsg: migMsgBz, expVerifier: newVerifierAddr, }, + "adds IBC port for IBC enabled contracts": { + admin: fred, + caller: fred, + initMsg: initMsgBz, + fromCodeID: originalCodeID, + toCodeID: ibcCodeID, + migrateMsg: []byte(`{}`), + expIBCPort: true, + expVerifier: fred, // not updated + }, "prevent migration when admin was not set on instantiate": { - caller: creator, - codeID: originalCodeID, - expErr: sdkerrors.ErrUnauthorized, + caller: creator, + initMsg: initMsgBz, + fromCodeID: originalCodeID, + toCodeID: originalCodeID, + expErr: sdkerrors.ErrUnauthorized, }, "prevent migration when not sent by admin": { - caller: creator, - admin: fred, - codeID: originalCodeID, - expErr: sdkerrors.ErrUnauthorized, + caller: creator, + admin: fred, + initMsg: initMsgBz, + fromCodeID: originalCodeID, + toCodeID: originalCodeID, + expErr: sdkerrors.ErrUnauthorized, }, "fail with non existing code id": { - admin: creator, - caller: creator, - codeID: 99999, - expErr: sdkerrors.ErrInvalidRequest, + admin: creator, + caller: creator, + initMsg: initMsgBz, + fromCodeID: originalCodeID, + toCodeID: 99999, + expErr: sdkerrors.ErrInvalidRequest, }, "fail with non existing contract addr": { admin: creator, caller: creator, + initMsg: initMsgBz, overrideContractAddr: anyAddr, - codeID: originalCodeID, + fromCodeID: originalCodeID, + toCodeID: originalCodeID, expErr: sdkerrors.ErrInvalidRequest, }, "fail in contract with invalid migrate msg": { admin: creator, caller: creator, - codeID: originalCodeID, + initMsg: initMsgBz, + fromCodeID: originalCodeID, + toCodeID: originalCodeID, migrateMsg: bytes.Repeat([]byte{0x1}, 7), expErr: types.ErrMigrationFailed, }, "fail in contract without migrate msg": { - admin: creator, - caller: creator, - codeID: originalCodeID, - expErr: types.ErrMigrationFailed, + admin: creator, + caller: creator, + initMsg: initMsgBz, + fromCodeID: originalCodeID, + toCodeID: originalCodeID, + expErr: types.ErrMigrationFailed, + }, + "fail when no IBC callbacks": { + admin: fred, + caller: fred, + initMsg: IBCReflectInitMsg{ReflectCodeID: StoreReflectContract(t, ctx, keepers)}.GetBytes(t), + fromCodeID: ibcCodeID, + toCodeID: newCodeID, + migrateMsg: migMsgBz, + expErr: types.ErrMigrationFailed, }, } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { + // given a contract instance ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) - contractAddr, err := keeper.Instantiate(ctx, originalCodeID, creator, spec.admin, initMsgBz, "demo contract", nil) + contractAddr, err := keeper.Instantiate(ctx, spec.fromCodeID, creator, spec.admin, spec.initMsg, "demo contract", nil) require.NoError(t, err) if spec.overrideContractAddr != nil { contractAddr = spec.overrideContractAddr } - _, err = keeper.Migrate(ctx, contractAddr, spec.caller, spec.codeID, spec.migrateMsg) + // when + _, err = keeper.Migrate(ctx, contractAddr, spec.caller, spec.toCodeID, spec.migrateMsg) + + // then require.True(t, spec.expErr.Is(err), "expected %v but got %+v", spec.expErr, err) if spec.expErr != nil { return } cInfo := keeper.GetContractInfo(ctx, contractAddr) - assert.Equal(t, spec.codeID, cInfo.CodeID) + assert.Equal(t, spec.toCodeID, cInfo.CodeID) + assert.Equal(t, spec.expIBCPort, cInfo.IBCPortID != "", cInfo.IBCPortID) expHistory := []types.ContractCodeHistoryEntry{{ Operation: types.ContractCodeHistoryOperationTypeInit, - CodeID: originalCodeID, + CodeID: spec.fromCodeID, Updated: types.NewAbsoluteTxPosition(ctx), Msg: initMsgBz, }, { Operation: types.ContractCodeHistoryOperationTypeMigrate, - CodeID: spec.codeID, + CodeID: spec.toCodeID, Updated: types.NewAbsoluteTxPosition(ctx), Msg: spec.migrateMsg, }} assert.Equal(t, expHistory, keeper.GetContractHistory(ctx, contractAddr)) + // and verify contract state raw := keeper.QueryRaw(ctx, contractAddr, []byte("config")) var stored map[string][]byte require.NoError(t, json.Unmarshal(raw, &stored)) diff --git a/x/wasm/internal/keeper/options.go b/x/wasm/internal/keeper/options.go new file mode 100644 index 0000000000..d7fb6b3acc --- /dev/null +++ b/x/wasm/internal/keeper/options.go @@ -0,0 +1,15 @@ +package keeper + +import "github.com/CosmWasm/wasmd/x/wasm/internal/types" + +type optsFn func(*Keeper) + +func (f optsFn) apply(keeper *Keeper) { + f(keeper) +} + +func WithWasmEngine(x types.WasmerEngine) Option { + return optsFn(func(k *Keeper) { + k.wasmer = x + }) +} diff --git a/x/wasm/internal/keeper/querier_test.go b/x/wasm/internal/keeper/querier_test.go index 3df85c2170..b061d6a3bc 100644 --- a/x/wasm/internal/keeper/querier_test.go +++ b/x/wasm/internal/keeper/querier_test.go @@ -4,6 +4,7 @@ import ( "encoding/base64" "encoding/json" "fmt" + "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" "io/ioutil" "testing" @@ -150,7 +151,12 @@ func TestQuerySmartContractState(t *testing.T) { func TestQuerySmartContractPanics(t *testing.T) { ctx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) - exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) + contractAddr := contractAddress(1, 1) + keepers.WasmKeeper.storeCodeInfo(ctx, 1, types.CodeInfo{}) + keepers.WasmKeeper.storeContractInfo(ctx, contractAddr, &types.ContractInfo{ + CodeID: 1, + Created: types.NewAbsoluteTxPosition(ctx), + }) ctx = ctx.WithGasMeter(sdk.NewGasMeter(InstanceCost)).WithLogger(log.TestingLogger()) specs := map[string]struct { @@ -172,14 +178,14 @@ func TestQuerySmartContractPanics(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - keepers.WasmKeeper.wasmer = &MockWasmer{QueryFn: func(code cosmwasm.CodeID, env wasmvmtypes.Env, queryMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) ([]byte, uint64, error) { + 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) { spec.doInContract() return nil, 0, nil }} // when q := NewQuerier(keepers.WasmKeeper) got, err := q.SmartContractState(sdk.WrapSDKContext(ctx), &types.QuerySmartContractStateRequest{ - Address: exampleContract.Contract.String(), + Address: contractAddr.String(), }) require.True(t, spec.expErr.Is(err), "got error: %+v", err) assert.Nil(t, got) diff --git a/x/wasm/internal/keeper/recurse_test.go b/x/wasm/internal/keeper/recurse_test.go index 35f993591a..555cfe224f 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/types" "testing" wasmvmtypes "github.com/CosmWasm/wasmvm/types" @@ -56,12 +57,12 @@ func initRecurseContract(t *testing.T) (contract sdk.AccAddress, creator sdk.Acc func TestGasCostOnQuery(t *testing.T) { const ( - GasNoWork uint64 = 43091 + GasNoWork uint64 = 43_084 // Note: about 100 SDK gas (10k wasmer gas) for each round of sha256 - GasWork50 uint64 = 48752 // this is a little shy of 50k gas - to keep an eye on the limit + GasWork50 uint64 = 48_711 // this is a little shy of 50k gas - to keep an eye on the limit GasReturnUnhashed uint64 = 295 - GasReturnHashed uint64 = 264 + GasReturnHashed uint64 = 270 ) cases := map[string]struct { @@ -86,7 +87,7 @@ func TestGasCostOnQuery(t *testing.T) { msg: Recurse{ Depth: 1, }, - expectedGas: 2*GasNoWork + GasReturnUnhashed, + expectedGas: 2*GasNoWork + GasReturnUnhashed - 2, }, "recursion 1, some work": { gasLimit: 400_000, @@ -126,8 +127,9 @@ func TestGasCostOnQuery(t *testing.T) { require.NoError(t, err) // check the gas is what we expected - assert.Equal(t, tc.expectedGas, ctx.GasMeter().GasConsumed()) - + if types.EnableGasVerification { + assert.Equal(t, tc.expectedGas, ctx.GasMeter().GasConsumed()) + } // assert result is 32 byte sha256 hash (if hashed), or contractAddr if not var resp recurseResponse err = json.Unmarshal(data, &resp) @@ -222,9 +224,9 @@ func TestLimitRecursiveQueryGas(t *testing.T) { const ( // Note: about 100 SDK gas (10k wasmer gas) for each round of sha256 - GasWork2k uint64 = 271_454 // = InstanceCost + x // we have 6x gas used in cpu than in the instance + GasWork2k uint64 = 270_359 // = InstanceCost + x // we have 6x gas used in cpu than in the instance // This is overhead for calling into a sub-contract - GasReturnHashed uint64 = 268 + GasReturnHashed uint64 = 276 ) cases := map[string]struct { @@ -250,8 +252,8 @@ func TestLimitRecursiveQueryGas(t *testing.T) { Work: 2000, }, expectQueriesFromContract: 5, - // FIXME: why -4... confused a bit by calculations, seems like rounding issues - expectedGas: GasWork2k + 5*(GasWork2k+GasReturnHashed) - 4, + // 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) @@ -297,8 +299,9 @@ func TestLimitRecursiveQueryGas(t *testing.T) { // otherwise, we expect a successful call _, err := keeper.QuerySmart(ctx, contractAddr, msg) require.NoError(t, err) - assert.Equal(t, tc.expectedGas, ctx.GasMeter().GasConsumed()) - + if types.EnableGasVerification { + assert.Equal(t, tc.expectedGas, ctx.GasMeter().GasConsumed()) + } assert.Equal(t, tc.expectQueriesFromContract, totalWasmQueryCounter) }) } diff --git a/x/wasm/internal/keeper/reflect_test.go b/x/wasm/internal/keeper/reflect_test.go index 1587e11d07..99bdffb612 100644 --- a/x/wasm/internal/keeper/reflect_test.go +++ b/x/wasm/internal/keeper/reflect_test.go @@ -69,7 +69,7 @@ func mustParse(t *testing.T, data []byte, res interface{}) { require.NoError(t, err) } -const MaskFeatures = "staking,mask" +const MaskFeatures = "staking,mask,stargate" func TestMaskReflectContractSend(t *testing.T) { cdc := MakeTestCodec(t) @@ -196,8 +196,7 @@ func TestMaskReflectCustomMsg(t *testing.T) { msgs := []wasmvmtypes.CosmosMsg{{ Bank: &wasmvmtypes.BankMsg{ Send: &wasmvmtypes.SendMsg{ - FromAddress: contractAddr.String(), - ToAddress: fred.String(), + ToAddress: fred.String(), Amount: []wasmvmtypes.Coin{{ Denom: "denom", Amount: "15000", diff --git a/x/wasm/internal/keeper/relay.go b/x/wasm/internal/keeper/relay.go new file mode 100644 index 0000000000..ac75381276 --- /dev/null +++ b/x/wasm/internal/keeper/relay.go @@ -0,0 +1,233 @@ +package keeper + +import ( + "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" +) + +// OnOpenChannel calls the contract to participate in the IBC channel handshake step. +// In the IBC protocol this is either the `Channel Open Init` event on the initiating chain or +// `Channel Open Try` on the counterparty chain. +// Protocol version and channel ordering should be verified for example. +// See https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#channel-lifecycle-management +func (k Keeper) OnOpenChannel( + ctx sdk.Context, + contractAddr sdk.AccAddress, + channel wasmvmtypes.IBCChannel, +) error { + _, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) + if err != nil { + return err + } + + env := types.NewEnv(ctx, contractAddr) + querier := QueryHandler{ + Ctx: ctx, + Plugins: k.queryPlugins, + } + + gas := gasForContract(ctx) + gasUsed, execErr := k.wasmer.IBCChannelOpen(codeInfo.CodeHash, env, channel, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) + consumeGas(ctx, gasUsed) + if execErr != nil { + return sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) + } + + return nil +} + +// OnConnectChannel calls the contract to let it know the IBC channel was established. +// In the IBC protocol this is either the `Channel Open Ack` event on the initiating chain or +// `Channel Open Confirm` on the counterparty chain. +// +// There is an open issue with the [cosmos-sdk](https://github.com/cosmos/cosmos-sdk/issues/8334) +// that the counterparty channelID is empty on the initiating chain +// See https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#channel-lifecycle-management +func (k Keeper) OnConnectChannel( + ctx sdk.Context, + contractAddr sdk.AccAddress, + channel wasmvmtypes.IBCChannel, +) error { + contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) + if err != nil { + return err + } + + env := types.NewEnv(ctx, contractAddr) + querier := QueryHandler{ + Ctx: ctx, + Plugins: k.queryPlugins, + } + + gas := gasForContract(ctx) + res, gasUsed, execErr := k.wasmer.IBCChannelConnect(codeInfo.CodeHash, env, channel, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) + consumeGas(ctx, gasUsed) + if execErr != nil { + return sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) + } + + // emit all events from this contract itself + events := types.ParseEvents(res.Attributes, contractAddr) + ctx.EventManager().EmitEvents(events) + + if err := k.messenger.Dispatch(ctx, contractAddr, contractInfo.IBCPortID, res.Messages...); err != nil { + return err + } + return nil +} + +// OnCloseChannel calls the contract to let it know the IBC channel is closed. +// Calling modules MAY atomically execute appropriate application logic in conjunction with calling chanCloseConfirm. +// +// Once closed, channels cannot be reopened and identifiers cannot be reused. Identifier reuse is prevented because +// we want to prevent potential replay of previously sent packets +// See https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#channel-lifecycle-management +func (k Keeper) OnCloseChannel( + ctx sdk.Context, + contractAddr sdk.AccAddress, + channel wasmvmtypes.IBCChannel, +) error { + contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) + if err != nil { + return err + } + + params := types.NewEnv(ctx, contractAddr) + querier := QueryHandler{ + Ctx: ctx, + Plugins: k.queryPlugins, + } + + gas := gasForContract(ctx) + res, gasUsed, execErr := k.wasmer.IBCChannelClose(codeInfo.CodeHash, params, channel, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) + consumeGas(ctx, gasUsed) + if execErr != nil { + return sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) + } + + // emit all events from this contract itself + events := types.ParseEvents(res.Attributes, contractAddr) + ctx.EventManager().EmitEvents(events) + + if err := k.messenger.Dispatch(ctx, contractAddr, contractInfo.IBCPortID, res.Messages...); err != nil { + return err + } + return nil +} + +// OnRecvPacket calls the contract to process the incoming IBC packet. The contract fully owns the data processing and +// returns the acknowledgement data for the chain level. This allows custom applications and protocols on top +// of IBC. Although it is recommended to use the standard acknowledgement envelope defined in +// https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#acknowledgement-envelope +// +// For more information see: https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#packet-flow--handling +func (k Keeper) OnRecvPacket( + ctx sdk.Context, + contractAddr sdk.AccAddress, + packet wasmvmtypes.IBCPacket, +) ([]byte, error) { + contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) + if err != nil { + return nil, err + } + + env := types.NewEnv(ctx, contractAddr) + querier := QueryHandler{ + Ctx: ctx, + Plugins: k.queryPlugins, + } + + gas := gasForContract(ctx) + res, gasUsed, execErr := k.wasmer.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()) + } + + // emit all events from this contract itself + events := types.ParseEvents(res.Attributes, contractAddr) + ctx.EventManager().EmitEvents(events) + + if err := k.messenger.Dispatch(ctx, contractAddr, contractInfo.IBCPortID, res.Messages...); err != nil { + return nil, err + } + return res.Acknowledgement, nil +} + +// OnAckPacket calls the contract to handle the "acknowledgement" data which can contain success or failure of a packet +// acknowledgement written on the receiving chain for example. This is application level data and fully owned by the +// contract. The use of the standard acknowledgement envelope is recommended: https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#acknowledgement-envelope +// +// On application errors the contract can revert an operation like returning tokens as in ibc-transfer. +// +// For more information see: https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#packet-flow--handling +func (k Keeper) OnAckPacket( + ctx sdk.Context, + contractAddr sdk.AccAddress, + acknowledgement wasmvmtypes.IBCAcknowledgement, +) error { + contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) + if err != nil { + return err + } + + env := types.NewEnv(ctx, contractAddr) + querier := QueryHandler{ + Ctx: ctx, + Plugins: k.queryPlugins, + } + + gas := gasForContract(ctx) + res, gasUsed, execErr := k.wasmer.IBCPacketAck(codeInfo.CodeHash, env, acknowledgement, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) + consumeGas(ctx, gasUsed) + if execErr != nil { + return sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) + } + + // emit all events from this contract itself + events := types.ParseEvents(res.Attributes, contractAddr) + ctx.EventManager().EmitEvents(events) + + if err := k.messenger.Dispatch(ctx, contractAddr, contractInfo.IBCPortID, res.Messages...); err != nil { + return err + } + return nil +} + +// OnTimeoutPacket calls the contract to let it know the packet was never received on the destination chain within +// the timeout boundaries. +// The contract should handle this on the application level and undo the original operation +func (k Keeper) OnTimeoutPacket( + ctx sdk.Context, + contractAddr sdk.AccAddress, + packet wasmvmtypes.IBCPacket, +) error { + contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr) + if err != nil { + return err + } + + env := types.NewEnv(ctx, contractAddr) + querier := QueryHandler{ + Ctx: ctx, + Plugins: k.queryPlugins, + } + + gas := gasForContract(ctx) + res, gasUsed, execErr := k.wasmer.IBCPacketTimeout(codeInfo.CodeHash, env, packet, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas) + consumeGas(ctx, gasUsed) + if execErr != nil { + return sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) + } + + // emit all events from this contract itself + events := types.ParseEvents(res.Attributes, contractAddr) + ctx.EventManager().EmitEvents(events) + + if err := k.messenger.Dispatch(ctx, contractAddr, contractInfo.IBCPortID, res.Messages...); err != nil { + return err + } + return nil +} diff --git a/x/wasm/internal/keeper/relay_test.go b/x/wasm/internal/keeper/relay_test.go new file mode 100644 index 0000000000..b076257017 --- /dev/null +++ b/x/wasm/internal/keeper/relay_test.go @@ -0,0 +1,608 @@ +package keeper + +import ( + "encoding/json" + "errors" + "github.com/CosmWasm/wasmd/x/wasm/internal/keeper/wasmtesting" + wasmvm "github.com/CosmWasm/wasmvm" + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "testing" +) + +func TestOnOpenChannel(t *testing.T) { + var m wasmtesting.MockWasmer + wasmtesting.MakeIBCInstantiable(&m) + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + example := SeedNewContractInstance(t, parentCtx, keepers, &m) + + specs := map[string]struct { + contractAddr sdk.AccAddress + contractGas sdk.Gas + contractErr error + expErr bool + }{ + "consume contract gas": { + contractAddr: example.Contract, + contractGas: 10, + }, + "consume max gas": { + contractAddr: example.Contract, + contractGas: MaxGas, + }, + "consume gas on error": { + contractAddr: example.Contract, + contractGas: 20, + contractErr: errors.New("test, ignore"), + expErr: true, + }, + "unknown contract address": { + contractAddr: RandomAccountAddress(t), + expErr: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + myChannel := wasmvmtypes.IBCChannel{Version: "my test channel"} + m.IBCChannelOpenFn = func(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) { + assert.Equal(t, myChannel, channel) + return spec.contractGas * GasMultiplier, spec.contractErr + } + + ctx, cancel := parentCtx.CacheContext() + defer cancel() + before := ctx.GasMeter().GasConsumed() + + // when + err := keepers.WasmKeeper.OnOpenChannel(ctx, spec.contractAddr, myChannel) + + // then + if spec.expErr { + require.Error(t, err) + return + } + require.NoError(t, err) + // verify gas consumed + const storageCosts = sdk.Gas(0xa9d) + assert.Equal(t, spec.contractGas, ctx.GasMeter().GasConsumed()-before-storageCosts) + }) + } +} + +func TestOnConnectChannel(t *testing.T) { + var m wasmtesting.MockWasmer + wasmtesting.MakeIBCInstantiable(&m) + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + example := SeedNewContractInstance(t, parentCtx, keepers, &m) + + specs := map[string]struct { + contractAddr sdk.AccAddress + contractGas sdk.Gas + contractResp *wasmvmtypes.IBCBasicResponse + contractErr error + overwriteMessenger messenger + expErr bool + expEvents int + }{ + "consume contract gas": { + contractAddr: example.Contract, + contractGas: 10, + contractResp: &wasmvmtypes.IBCBasicResponse{}, + }, + "consume gas on error, ignore events + messages": { + contractAddr: example.Contract, + contractGas: 20, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}}, + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + contractErr: errors.New("test, ignore"), + expErr: true, + }, + "dispatch contract messages on success": { + contractAddr: example.Contract, + contractGas: 30, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}, {Custom: json.RawMessage(`{"foo":"bar"}`)}}, + }, + }, + "emit contract events on success": { + contractAddr: example.Contract, + contractGas: 40, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + expEvents: 1, + }, + "messenger errors returned, events stored": { + contractAddr: example.Contract, + contractGas: 50, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}, {Custom: json.RawMessage(`{"foo":"bar"}`)}}, + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + overwriteMessenger: &wasmtesting.MockMessageHandler{ + DispatchFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msgs ...wasmvmtypes.CosmosMsg) error { + return errors.New("test, ignore") + }, + }, + expErr: true, + expEvents: 1, + }, + "unknown contract address": { + contractAddr: RandomAccountAddress(t), + expErr: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + myChannel := wasmvmtypes.IBCChannel{Version: "my test channel"} + m.IBCChannelConnectFn = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, channel wasmvmtypes.IBCChannel, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64) (*wasmvmtypes.IBCBasicResponse, uint64, error) { + assert.Equal(t, channel, myChannel) + return spec.contractResp, spec.contractGas * GasMultiplier, spec.contractErr + } + + ctx, cancel := parentCtx.CacheContext() + defer cancel() + before := ctx.GasMeter().GasConsumed() + msger, capturedMsgs := wasmtesting.NewCapturingMessageHandler() + keepers.WasmKeeper.messenger = msger + + if spec.overwriteMessenger != nil { + keepers.WasmKeeper.messenger = spec.overwriteMessenger + } + + // when + err := keepers.WasmKeeper.OnConnectChannel(ctx, spec.contractAddr, myChannel) + + // then + if spec.expErr { + require.Error(t, err) + assert.Empty(t, capturedMsgs) // no messages captured on error + assert.Len(t, ctx.EventManager().Events(), spec.expEvents) // expected events on error + return + } + require.NoError(t, err) + // verify gas consumed + const storageCosts = sdk.Gas(0xa9d) + assert.Equal(t, spec.contractGas, ctx.GasMeter().GasConsumed()-before-storageCosts) + // verify msgs dispatched + assert.Equal(t, spec.contractResp.Messages, *capturedMsgs) + assert.Len(t, ctx.EventManager().Events(), spec.expEvents) + }) + } +} + +func TestOnCloseChannel(t *testing.T) { + var m wasmtesting.MockWasmer + wasmtesting.MakeIBCInstantiable(&m) + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + example := SeedNewContractInstance(t, parentCtx, keepers, &m) + + specs := map[string]struct { + contractAddr sdk.AccAddress + contractGas sdk.Gas + contractResp *wasmvmtypes.IBCBasicResponse + contractErr error + overwriteMessenger messenger + expErr bool + expEvents int + }{ + "consume contract gas": { + contractAddr: example.Contract, + contractGas: 10, + contractResp: &wasmvmtypes.IBCBasicResponse{}, + }, + "consume gas on error, ignore events + messages": { + contractAddr: example.Contract, + contractGas: 20, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}}, + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + contractErr: errors.New("test, ignore"), + expErr: true, + }, + "dispatch contract messages on success": { + contractAddr: example.Contract, + contractGas: 30, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}, {Custom: json.RawMessage(`{"foo":"bar"}`)}}, + }, + }, + "emit contract events on success": { + contractAddr: example.Contract, + contractGas: 40, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + expEvents: 1, + }, + "messenger errors returned, events stored": { + contractAddr: example.Contract, + contractGas: 50, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}, {Custom: json.RawMessage(`{"foo":"bar"}`)}}, + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + overwriteMessenger: &wasmtesting.MockMessageHandler{ + DispatchFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msgs ...wasmvmtypes.CosmosMsg) error { + return errors.New("test, ignore") + }, + }, + expErr: true, + expEvents: 1, + }, + "unknown contract address": { + contractAddr: RandomAccountAddress(t), + expErr: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + myChannel := wasmvmtypes.IBCChannel{Version: "my test channel"} + m.IBCChannelCloseFn = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, channel wasmvmtypes.IBCChannel, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64) (*wasmvmtypes.IBCBasicResponse, uint64, error) { + assert.Equal(t, channel, myChannel) + return spec.contractResp, spec.contractGas * GasMultiplier, spec.contractErr + } + + ctx, cancel := parentCtx.CacheContext() + defer cancel() + before := ctx.GasMeter().GasConsumed() + msger, capturedMsgs := wasmtesting.NewCapturingMessageHandler() + keepers.WasmKeeper.messenger = msger + + if spec.overwriteMessenger != nil { + keepers.WasmKeeper.messenger = spec.overwriteMessenger + } + + // when + err := keepers.WasmKeeper.OnCloseChannel(ctx, spec.contractAddr, myChannel) + + // then + if spec.expErr { + require.Error(t, err) + assert.Empty(t, capturedMsgs) // no messages captured on error + assert.Len(t, ctx.EventManager().Events(), spec.expEvents) // expected events on error + return + } + require.NoError(t, err) + // verify gas consumed + const storageCosts = sdk.Gas(0xa9d) + assert.Equal(t, spec.contractGas, ctx.GasMeter().GasConsumed()-before-storageCosts) + // verify msgs dispatched + assert.Equal(t, spec.contractResp.Messages, *capturedMsgs) + assert.Len(t, ctx.EventManager().Events(), spec.expEvents) + }) + } +} + +func TestOnRecvPacket(t *testing.T) { + var m wasmtesting.MockWasmer + wasmtesting.MakeIBCInstantiable(&m) + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + example := SeedNewContractInstance(t, parentCtx, keepers, &m) + + specs := map[string]struct { + contractAddr sdk.AccAddress + contractGas sdk.Gas + contractResp *wasmvmtypes.IBCReceiveResponse + contractErr error + overwriteMessenger messenger + expErr bool + expEvents int + }{ + "consume contract gas": { + contractAddr: example.Contract, + contractGas: 10, + contractResp: &wasmvmtypes.IBCReceiveResponse{ + Acknowledgement: []byte("myAck"), + }, + }, + "can return empty ack": { + contractAddr: example.Contract, + contractGas: 10, + contractResp: &wasmvmtypes.IBCReceiveResponse{}, + }, + "consume gas on error, ignore events + messages": { + contractAddr: example.Contract, + contractGas: 20, + contractResp: &wasmvmtypes.IBCReceiveResponse{ + Acknowledgement: []byte("myAck"), + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}}, + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + contractErr: errors.New("test, ignore"), + expErr: true, + }, + "dispatch contract messages on success": { + contractAddr: example.Contract, + contractGas: 30, + contractResp: &wasmvmtypes.IBCReceiveResponse{ + Acknowledgement: []byte("myAck"), + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}, {Custom: json.RawMessage(`{"foo":"bar"}`)}}, + }, + }, + "emit contract events on success": { + contractAddr: example.Contract, + contractGas: 40, + contractResp: &wasmvmtypes.IBCReceiveResponse{ + Acknowledgement: []byte("myAck"), + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + expEvents: 1, + }, + "messenger errors returned, events stored": { + contractAddr: example.Contract, + contractGas: 50, + contractResp: &wasmvmtypes.IBCReceiveResponse{ + Acknowledgement: []byte("myAck"), + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}, {Custom: json.RawMessage(`{"foo":"bar"}`)}}, + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + overwriteMessenger: &wasmtesting.MockMessageHandler{ + DispatchFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msgs ...wasmvmtypes.CosmosMsg) error { + return errors.New("test, ignore") + }, + }, + expErr: true, + expEvents: 1, + }, + "unknown contract address": { + contractAddr: RandomAccountAddress(t), + expErr: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + myPacket := wasmvmtypes.IBCPacket{Data: []byte("my data")} + + m.IBCPacketReceiveFn = 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.IBCReceiveResponse, uint64, error) { + assert.Equal(t, myPacket, packet) + return spec.contractResp, spec.contractGas * GasMultiplier, spec.contractErr + } + + ctx, cancel := parentCtx.CacheContext() + defer cancel() + before := ctx.GasMeter().GasConsumed() + + msger, capturedMsgs := wasmtesting.NewCapturingMessageHandler() + keepers.WasmKeeper.messenger = msger + + if spec.overwriteMessenger != nil { + keepers.WasmKeeper.messenger = spec.overwriteMessenger + } + + // when + gotAck, err := keepers.WasmKeeper.OnRecvPacket(ctx, spec.contractAddr, myPacket) + + // then + if spec.expErr { + require.Error(t, err) + assert.Empty(t, capturedMsgs) // no messages captured on error + assert.Len(t, ctx.EventManager().Events(), spec.expEvents) // expected events on error + return + } + require.NoError(t, err) + require.Equal(t, spec.contractResp.Acknowledgement, gotAck) + + // verify gas consumed + const storageCosts = sdk.Gas(0xa9d) + assert.Equal(t, spec.contractGas, ctx.GasMeter().GasConsumed()-before-storageCosts) + // verify msgs dispatched + assert.Equal(t, spec.contractResp.Messages, *capturedMsgs) + assert.Len(t, ctx.EventManager().Events(), spec.expEvents) + }) + } +} + +func TestOnAckPacket(t *testing.T) { + var m wasmtesting.MockWasmer + wasmtesting.MakeIBCInstantiable(&m) + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + example := SeedNewContractInstance(t, parentCtx, keepers, &m) + + specs := map[string]struct { + contractAddr sdk.AccAddress + contractGas sdk.Gas + contractResp *wasmvmtypes.IBCBasicResponse + contractErr error + overwriteMessenger messenger + expErr bool + expEvents int + }{ + "consume contract gas": { + contractAddr: example.Contract, + contractGas: 10, + contractResp: &wasmvmtypes.IBCBasicResponse{}, + }, + "consume gas on error, ignore events + messages": { + contractAddr: example.Contract, + contractGas: 20, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}}, + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + contractErr: errors.New("test, ignore"), + expErr: true, + }, + "dispatch contract messages on success": { + contractAddr: example.Contract, + contractGas: 30, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}, {Custom: json.RawMessage(`{"foo":"bar"}`)}}, + }, + }, + "emit contract events on success": { + contractAddr: example.Contract, + contractGas: 40, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + expEvents: 1, + }, + "messenger errors returned, events stored": { + contractAddr: example.Contract, + contractGas: 50, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}, {Custom: json.RawMessage(`{"foo":"bar"}`)}}, + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + overwriteMessenger: &wasmtesting.MockMessageHandler{ + DispatchFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msgs ...wasmvmtypes.CosmosMsg) error { + return errors.New("test, ignore") + }, + }, + expErr: true, + expEvents: 1, + }, + "unknown contract address": { + contractAddr: RandomAccountAddress(t), + expErr: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + + myAck := wasmvmtypes.IBCAcknowledgement{Acknowledgement: []byte("myAck")} + m.IBCPacketAckFn = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, ack wasmvmtypes.IBCAcknowledgement, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64) (*wasmvmtypes.IBCBasicResponse, uint64, error) { + assert.Equal(t, myAck, ack) + return spec.contractResp, spec.contractGas * GasMultiplier, spec.contractErr + } + + ctx, cancel := parentCtx.CacheContext() + defer cancel() + before := ctx.GasMeter().GasConsumed() + msger, capturedMsgs := wasmtesting.NewCapturingMessageHandler() + keepers.WasmKeeper.messenger = msger + + if spec.overwriteMessenger != nil { + keepers.WasmKeeper.messenger = spec.overwriteMessenger + } + + // when + err := keepers.WasmKeeper.OnAckPacket(ctx, spec.contractAddr, myAck) + + // then + if spec.expErr { + require.Error(t, err) + assert.Empty(t, capturedMsgs) // no messages captured on error + assert.Len(t, ctx.EventManager().Events(), spec.expEvents) // expected events on error + return + } + require.NoError(t, err) + // verify gas consumed + const storageCosts = sdk.Gas(0xa9d) + assert.Equal(t, spec.contractGas, ctx.GasMeter().GasConsumed()-before-storageCosts) + // verify msgs dispatched + assert.Equal(t, spec.contractResp.Messages, *capturedMsgs) + assert.Len(t, ctx.EventManager().Events(), spec.expEvents) + }) + } +} + +func TestOnTimeoutPacket(t *testing.T) { + var m wasmtesting.MockWasmer + wasmtesting.MakeIBCInstantiable(&m) + parentCtx, keepers := CreateTestInput(t, false, SupportedFeatures, nil, nil) + example := SeedNewContractInstance(t, parentCtx, keepers, &m) + + specs := map[string]struct { + contractAddr sdk.AccAddress + contractGas sdk.Gas + contractResp *wasmvmtypes.IBCBasicResponse + contractErr error + overwriteMessenger messenger + expErr bool + expEvents int + }{ + "consume contract gas": { + contractAddr: example.Contract, + contractGas: 10, + contractResp: &wasmvmtypes.IBCBasicResponse{}, + }, + "consume gas on error, ignore events + messages": { + contractAddr: example.Contract, + contractGas: 20, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}}, + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + contractErr: errors.New("test, ignore"), + expErr: true, + }, + "dispatch contract messages on success": { + contractAddr: example.Contract, + contractGas: 30, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}, {Custom: json.RawMessage(`{"foo":"bar"}`)}}, + }, + }, + "emit contract events on success": { + contractAddr: example.Contract, + contractGas: 40, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + expEvents: 1, + }, + "messenger errors returned, events stored": { + contractAddr: example.Contract, + contractGas: 50, + contractResp: &wasmvmtypes.IBCBasicResponse{ + Messages: []wasmvmtypes.CosmosMsg{{Bank: &wasmvmtypes.BankMsg{}}, {Custom: json.RawMessage(`{"foo":"bar"}`)}}, + Attributes: []wasmvmtypes.EventAttribute{{Key: "Foo", Value: "Bar"}}, + }, + overwriteMessenger: &wasmtesting.MockMessageHandler{ + DispatchFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msgs ...wasmvmtypes.CosmosMsg) error { + return errors.New("test, ignore") + }, + }, + expErr: true, + expEvents: 1, + }, + "unknown contract address": { + contractAddr: RandomAccountAddress(t), + expErr: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + myPacket := wasmvmtypes.IBCPacket{Data: []byte("my test packet")} + m.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) { + assert.Equal(t, myPacket, packet) + return spec.contractResp, spec.contractGas * GasMultiplier, spec.contractErr + } + + ctx, cancel := parentCtx.CacheContext() + defer cancel() + before := ctx.GasMeter().GasConsumed() + msger, capturedMsgs := wasmtesting.NewCapturingMessageHandler() + keepers.WasmKeeper.messenger = msger + + if spec.overwriteMessenger != nil { + keepers.WasmKeeper.messenger = spec.overwriteMessenger + } + + // when + err := keepers.WasmKeeper.OnTimeoutPacket(ctx, spec.contractAddr, myPacket) + + // then + if spec.expErr { + require.Error(t, err) + assert.Empty(t, capturedMsgs) // no messages captured on error + assert.Len(t, ctx.EventManager().Events(), spec.expEvents) // expected events on error + return + } + require.NoError(t, err) + // verify gas consumed + const storageCosts = sdk.Gas(0xa9d) + assert.Equal(t, spec.contractGas, ctx.GasMeter().GasConsumed()-before-storageCosts) + // verify msgs dispatched + assert.Equal(t, spec.contractResp.Messages, *capturedMsgs) + assert.Len(t, ctx.EventManager().Events(), spec.expEvents) + }) + } +} diff --git a/x/wasm/internal/keeper/test_common.go b/x/wasm/internal/keeper/test_common.go index 03308ca2ab..b84ddbe1a0 100644 --- a/x/wasm/internal/keeper/test_common.go +++ b/x/wasm/internal/keeper/test_common.go @@ -1,23 +1,22 @@ package keeper import ( - "bytes" "encoding/binary" "encoding/json" "fmt" + "github.com/tendermint/tendermint/libs/rand" "io/ioutil" "testing" "time" "github.com/CosmWasm/wasmd/x/wasm/internal/types" - "github.com/CosmWasm/wasmvm" - wasmvmtypes "github.com/CosmWasm/wasmvm/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" params2 "github.com/cosmos/cosmos-sdk/simapp/params" "github.com/cosmos/cosmos-sdk/std" "github.com/cosmos/cosmos-sdk/store" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/module" @@ -29,6 +28,8 @@ import ( bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/capability" + capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" "github.com/cosmos/cosmos-sdk/x/crisis" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" "github.com/cosmos/cosmos-sdk/x/distribution" @@ -42,6 +43,8 @@ import ( transfer "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer" ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" ibc "github.com/cosmos/cosmos-sdk/x/ibc/core" + ibchost "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" + ibckeeper "github.com/cosmos/cosmos-sdk/x/ibc/core/keeper" "github.com/cosmos/cosmos-sdk/x/mint" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" "github.com/cosmos/cosmos-sdk/x/params" @@ -121,6 +124,7 @@ type TestKeepers struct { BankKeeper bankkeeper.Keeper GovKeeper govkeeper.Keeper WasmKeeper *Keeper + IBCKeeper *ibckeeper.Keeper } // CreateDefaultTestInput common settings for CreateTestInput @@ -140,6 +144,9 @@ func CreateTestInput(t *testing.T, isCheckTx bool, supportedFeatures string, enc keyParams := sdk.NewKVStoreKey(paramstypes.StoreKey) tkeyParams := sdk.NewTransientStoreKey(paramstypes.TStoreKey) keyGov := sdk.NewKVStoreKey(govtypes.StoreKey) + keyIBC := sdk.NewKVStoreKey(ibchost.StoreKey) + keyCapability := sdk.NewKVStoreKey(capabilitytypes.StoreKey) + keyCapabilityTransient := storetypes.NewMemoryStoreKey(capabilitytypes.MemStoreKey) db := dbm.NewMemDB() ms := store.NewCommitMultiStore(db) @@ -151,6 +158,9 @@ func CreateTestInput(t *testing.T, isCheckTx bool, supportedFeatures string, enc ms.MountStoreWithDB(keyDistro, sdk.StoreTypeIAVL, db) ms.MountStoreWithDB(tkeyParams, sdk.StoreTypeTransient, db) ms.MountStoreWithDB(keyGov, sdk.StoreTypeIAVL, db) + ms.MountStoreWithDB(keyIBC, sdk.StoreTypeIAVL, db) + ms.MountStoreWithDB(keyCapability, sdk.StoreTypeIAVL, db) + ms.MountStoreWithDB(keyCapabilityTransient, sdk.StoreTypeMemory, db) require.NoError(t, ms.LoadLatestVersion()) ctx := sdk.NewContext(ms, tmproto.Header{ @@ -168,6 +178,9 @@ func CreateTestInput(t *testing.T, isCheckTx bool, supportedFeatures string, enc paramsKeeper.Subspace(distributiontypes.ModuleName) paramsKeeper.Subspace(slashingtypes.ModuleName) paramsKeeper.Subspace(crisistypes.ModuleName) + paramsKeeper.Subspace(ibctransfertypes.ModuleName) + paramsKeeper.Subspace(capabilitytypes.ModuleName) + paramsKeeper.Subspace(ibchost.ModuleName) maccPerms := map[string][]string{ // module account permissions authtypes.FeeCollectorName: nil, @@ -224,6 +237,15 @@ func CreateTestInput(t *testing.T, isCheckTx bool, supportedFeatures string, enc )) require.NoError(t, err) authKeeper.SetModuleAccount(ctx, distrAcc) + capabilityKeeper := capabilitykeeper.NewKeeper(appCodec, keyCapability, keyCapabilityTransient) + scopedIBCKeeper := capabilityKeeper.ScopeToModule(ibchost.ModuleName) + scopedWasmKeeper := capabilityKeeper.ScopeToModule(types.ModuleName) + + ibcSubsp, _ := paramsKeeper.GetSubspace(ibchost.ModuleName) + + ibcKeeper := ibckeeper.NewKeeper( + appCodec, keyIBC, ibcSubsp, stakingKeeper, scopedIBCKeeper, + ) router := baseapp.NewRouter() bh := bank.NewHandler(bankKeeper) @@ -244,6 +266,9 @@ func CreateTestInput(t *testing.T, isCheckTx bool, supportedFeatures string, enc bankKeeper, stakingKeeper, distKeeper, + ibcKeeper.ChannelKeeper, + &ibcKeeper.PortKeeper, + scopedWasmKeeper, router, tempDir, wasmConfig, @@ -277,6 +302,7 @@ func CreateTestInput(t *testing.T, isCheckTx bool, supportedFeatures string, enc WasmKeeper: &keeper, BankKeeper: bankKeeper, GovKeeper: govKeeper, + IBCKeeper: ibcKeeper, } return ctx, keepers } @@ -356,9 +382,13 @@ func handleExecute(ctx sdk.Context, k *Keeper, msg *types.MsgExecuteContract) (* return res, nil } -func RandomBech32AccountAddress(_ *testing.T) string { +func RandomAccountAddress(_ *testing.T) sdk.AccAddress { _, _, addr := keyPubAddr() - return addr.String() + return addr +} + +func RandomBech32AccountAddress(t *testing.T) string { + return RandomAccountAddress(t).String() } type ExampleContract struct { @@ -376,6 +406,20 @@ func StoreBurnerExampleContract(t *testing.T, ctx sdk.Context, keepers TestKeepe return StoreExampleContract(t, ctx, keepers, "./testdata/burner.wasm") } +func StoreIBCReflectContract(t *testing.T, ctx sdk.Context, keepers TestKeepers) ExampleContract { + return StoreExampleContract(t, ctx, keepers, "./testdata/ibc_reflect.wasm") +} + +func StoreReflectContract(t *testing.T, ctx sdk.Context, keepers TestKeepers) uint64 { + wasmCode, err := ioutil.ReadFile("./testdata/reflect.wasm") + require.NoError(t, err) + + _, _, creatorAddr := keyPubAddr() + codeID, err := keepers.WasmKeeper.Create(ctx, creatorAddr, wasmCode, "", "", nil) + require.NoError(t, err) + return codeID +} + func StoreExampleContract(t *testing.T, ctx sdk.Context, keepers TestKeepers, wasmFile string) ExampleContract { anyAmount := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000)) creator, _, creatorAddr := keyPubAddr() @@ -389,6 +433,30 @@ func StoreExampleContract(t *testing.T, ctx sdk.Context, keepers TestKeepers, wa return ExampleContract{anyAmount, creator, creatorAddr, codeID} } +var wasmIdent = []byte("\x00\x61\x73\x6D") + +type ExampleContractInstance struct { + ExampleContract + Contract sdk.AccAddress +} + +// SeedNewContractInstance sets the mock wasmerEngine in keeper and calls store + instantiate to init the contract's metadata +func SeedNewContractInstance(t *testing.T, ctx sdk.Context, keepers TestKeepers, mock types.WasmerEngine) ExampleContractInstance { + anyAmount := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000)) + creator, _, creatorAddr := keyPubAddr() + fundAccounts(t, ctx, keepers.AccountKeeper, keepers.BankKeeper, creatorAddr, anyAmount) + keepers.WasmKeeper.wasmer = mock + wasmCode := append(wasmIdent, rand.Bytes(10)...) + codeID, err := keepers.WasmKeeper.Create(ctx, creatorAddr, wasmCode, "", "", nil) + require.NoError(t, err) + contractAddr, err := keepers.WasmKeeper.Instantiate(ctx, codeID, creatorAddr, creatorAddr, []byte(`{}`), "", nil) + require.NoError(t, err) + return ExampleContractInstance{ + ExampleContract: ExampleContract{InitialAmount: anyAmount, Creator: creator, CreatorAddr: creatorAddr, CodeID: codeID}, + Contract: contractAddr, + } +} + type HackatomExampleInstance struct { ExampleContract Contract sdk.AccAddress @@ -436,6 +504,43 @@ func (m HackatomExampleInitMsg) GetBytes(t *testing.T) []byte { return initMsgBz } +type IBCReflectExampleInstance struct { + Contract sdk.AccAddress + Admin sdk.AccAddress + CodeID uint64 + ReflectCodeID uint64 +} + +// InstantiateIBCReflectContract load and instantiate the "./testdata/ibc_reflect.wasm" contract +func InstantiateIBCReflectContract(t *testing.T, ctx sdk.Context, keepers TestKeepers) IBCReflectExampleInstance { + reflectID := StoreReflectContract(t, ctx, keepers) + ibcReflectID := StoreIBCReflectContract(t, ctx, keepers).CodeID + + initMsgBz := IBCReflectInitMsg{ + ReflectCodeID: reflectID, + }.GetBytes(t) + adminAddr := RandomAccountAddress(t) + + contractAddr, err := keepers.WasmKeeper.Instantiate(ctx, ibcReflectID, adminAddr, adminAddr, initMsgBz, "ibc-reflect-factory", nil) + require.NoError(t, err) + return IBCReflectExampleInstance{ + Admin: adminAddr, + Contract: contractAddr, + CodeID: ibcReflectID, + ReflectCodeID: reflectID, + } +} + +type IBCReflectInitMsg struct { + ReflectCodeID uint64 `json:"reflect_code_id"` +} + +func (m IBCReflectInitMsg) GetBytes(t *testing.T) []byte { + initMsgBz, err := json.Marshal(m) + require.NoError(t, err) + return initMsgBz +} + type BurnerExampleInitMsg struct { Payout sdk.AccAddress `json:"payout"` } @@ -472,91 +577,3 @@ func keyPubAddr() (crypto.PrivKey, crypto.PubKey, sdk.AccAddress) { addr := sdk.AccAddress(pub.Address()) return key, pub, addr } - -var _ types.WasmerEngine = &MockWasmer{} - -// MockWasmer implements types.WasmerEngine for testing purpose. One or multiple messages can be stubbed. -// Without a stub function a panic is thrown. -type MockWasmer struct { - CreateFn func(code cosmwasm.WasmCode) (cosmwasm.CodeID, error) - InstantiateFn func(code cosmwasm.CodeID, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) (*wasmvmtypes.InitResponse, uint64, error) - ExecuteFn func(code cosmwasm.CodeID, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, executeMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) (*wasmvmtypes.HandleResponse, uint64, error) - QueryFn func(code cosmwasm.CodeID, env wasmvmtypes.Env, queryMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) ([]byte, uint64, error) - MigrateFn func(code cosmwasm.CodeID, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, migrateMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) (*wasmvmtypes.MigrateResponse, uint64, error) - GetCodeFn func(code cosmwasm.CodeID) (cosmwasm.WasmCode, error) - CleanupFn func() -} - -func (m *MockWasmer) Create(code cosmwasm.WasmCode) (cosmwasm.CodeID, error) { - if m.CreateFn == nil { - panic("not supposed to be called!") - } - return m.CreateFn(code) -} - -func (m *MockWasmer) Instantiate(code cosmwasm.CodeID, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) (*wasmvmtypes.InitResponse, uint64, error) { - if m.InstantiateFn == nil { - panic("not supposed to be called!") - } - - return m.InstantiateFn(code, env, info, initMsg, store, goapi, querier, gasMeter, gasLimit) -} - -func (m *MockWasmer) Execute(code cosmwasm.CodeID, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, executeMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) (*wasmvmtypes.HandleResponse, uint64, error) { - if m.ExecuteFn == nil { - panic("not supposed to be called!") - } - return m.ExecuteFn(code, env, info, executeMsg, store, goapi, querier, gasMeter, gasLimit) -} - -func (m *MockWasmer) Query(code cosmwasm.CodeID, env wasmvmtypes.Env, queryMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) ([]byte, uint64, error) { - if m.QueryFn == nil { - panic("not supposed to be called!") - } - return m.QueryFn(code, env, queryMsg, store, goapi, querier, gasMeter, gasLimit) -} - -func (m *MockWasmer) Migrate(code cosmwasm.CodeID, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, migrateMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) (*wasmvmtypes.MigrateResponse, uint64, error) { - if m.MigrateFn == nil { - panic("not supposed to be called!") - } - return m.MigrateFn(code, env, info, migrateMsg, store, goapi, querier, gasMeter, gasLimit) -} - -func (m *MockWasmer) GetCode(code cosmwasm.CodeID) (cosmwasm.WasmCode, error) { - if m.GetCodeFn == nil { - panic("not supposed to be called!") - } - return m.GetCodeFn(code) -} - -func (m *MockWasmer) Cleanup() { - if m.CleanupFn == nil { - panic("not supposed to be called!") - } - m.CleanupFn() -} - -var alwaysPanicMockWasmer = &MockWasmer{} - -// selfCallingInstMockWasmer prepares a Wasmer mock that calls itself on instantiation. -func selfCallingInstMockWasmer(executeCalled *bool) *MockWasmer { - return &MockWasmer{ - - CreateFn: func(code cosmwasm.WasmCode) (cosmwasm.CodeID, error) { - anyCodeID := bytes.Repeat([]byte{0x1}, 32) - return anyCodeID, nil - }, - InstantiateFn: func(code cosmwasm.CodeID, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) (*wasmvmtypes.InitResponse, uint64, error) { - return &wasmvmtypes.InitResponse{ - Messages: []wasmvmtypes.CosmosMsg{ - {Wasm: &wasmvmtypes.WasmMsg{Execute: &wasmvmtypes.ExecuteMsg{ContractAddr: env.Contract.Address, Msg: []byte(`{}`)}}}, - }, - }, 1, nil - }, - ExecuteFn: func(code cosmwasm.CodeID, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, executeMsg []byte, store cosmwasm.KVStore, goapi cosmwasm.GoAPI, querier cosmwasm.Querier, gasMeter cosmwasm.GasMeter, gasLimit uint64) (*wasmvmtypes.HandleResponse, uint64, error) { - *executeCalled = true - return &wasmvmtypes.HandleResponse{}, 1, nil - }, - } -} diff --git a/x/wasm/internal/keeper/testdata/burner.wasm b/x/wasm/internal/keeper/testdata/burner.wasm index 824b23a4193f73d38bb709c2bf8b2136f02e8234..03109dea0193ce96759ec43fc02548208ce956f6 100644 GIT binary patch literal 133341 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

Q1j$W^+dIts_x`+p%M3^TzS4+D}vR( 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%0DT!py8C+^zu(?n%=qDck`;+y{mpTvCFC2||@ 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 literal 124009 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 Ip6dJm7r)ZR9{>OV diff --git a/x/wasm/internal/keeper/testdata/hackatom.wasm b/x/wasm/internal/keeper/testdata/hackatom.wasm index 7dd3189928d1dd585c4a5afa53166c89d1ab3466..f58721cd310e3fdf8158f3da3f7131e623bb9b78 100644 GIT binary patch literal 185008 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⪙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 literal 170947 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 diff --git a/x/wasm/internal/keeper/testdata/hackatom.wasm.gzip b/x/wasm/internal/keeper/testdata/hackatom.wasm.gzip index f7e55cf17a7f718516304257fdd2b9676f6b5ee3..ab2d44d4160bcbde2f00325db38f4ef38ddcd34f 100644 GIT binary patch literal 63745 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%0D+88tFvNCaDU;U9z} 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⪆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 SAutWm!T$wNrGT!m(gFY{7$#8w literal 60493 zcmV(vKNBEs{=HB=A!;M2r|6$ws&Yd@N=FFKh z=lsq&*GwNiK*ktaq@mq*VSyI-U$fgSNShyKH_3l^^$YTD%_{@bgiOK6;e9 zjvnPf=+#k5C;Wm(V_~7{w@2mIqx`T3V>ff~w#J?tcg@dC?=ca-C3w4ie&3N9L;N~) z)AYfc5AM5ZdjG!n&+MAsvuA$h@L^;4r)=-72c{3M=#KWx+<5EzjOTWG=+>F}J9pi* zcY5DJkblZPX=6$fmpJ1bk&7MSLFh9LZ^-yo!{{G+J^qZbL<#X9k9RJP<3^+5owdfA zrZatipoNhpj5YF)iG0JyL=6|=#hZqaUp$3B=fLP-jIr@ROa_Cf14_<&YG7omWzaO< zckmXGkMKgxh$)he_QI^;6^JJ~XA?9mcVm}{v2o-g=OXPJXqqUBW3tg2Z^5y_4%}K} z*69}7SvyTFSs&3YbmyHB2CRuUxCJT~7f+aU!Ib}W-yij!joVxCftdq0&);c{-*<4| z5%aEi@ASbv`)AD0L?U|g?#6+A@0*{-aqdi}_wT>?CT`x^+A~wX+;+}QHy=K5JJfR5 zZTSDp{Na5!AKZ1RxxKY(*PiJk)4OI4?s1gv+O>CP`j%ZcP9L6ew)qFxeo5&aor}In z`Hvj#-thJx9UJ`&-9wvxY`mPDxb!D3xf=@poAzxZzj)E;FZ}W^ecX2Qw~rs#Kk?pO z*I)7vbluO5{QR{)d(p4b_y_4e8oB77={M~7@6hkklXQ=Lnl2g}|1>>EBTv(pXnf+m zU!dzhORv$l=y^Ite@K6f=Sli=y5w{87xb4j@_CH;JNhzRf13W5zD@r^58HpFf1~lw z(s$^;=?!|qF50{82ka;9Cv5AHPc@&k4?FS;Z!={+*NsL@P8S3D3J%ywgb zZ|Lx@&+U&J^G=>q+S%OVpNoxQ8gbqz9S9gDfL}nsG69|mPOPl=Td(WvJjT>&bU}Gk zX0y4=4&_mfmrmm41I zC#*+{crk;Ya;L2X?4!jq^Vt!TK1XC1?4)I)BC{?Cun_HBPFM2!xt#@9_R0?BuB0Pf z%UwBLbw0R(+{y$kTbe66#6&=$G`Yi%m}_&lou~03Tb#pt3Tj&%7!%5Eb`4&!hwuyf zr#iOBvk#mOrrB4?=&+a2__9?c%I3Q9awUqG^9J@-AAcmrAIb4IQjua%qDXpIQ=+q^ z(p^p^%+6Vf_+YvXeou5b3nM#j&&wOR%ac`A#_9AWD&s&&RVJ44xzCQVpyO55Ar4Al z(MoD{h*wbuTdRW;b%>#fP={B%3U_>!8yc%v;+|My5ldW&CGH6~mfqEbdzMtX%c+Ff zBHXx7xba&NZoFK$)qV8UB^sU$VrDiedz|#@4VT1{miro&BeP@HY<6<`V|L?am$2}u zjE)peE*7jq;d$OhoROa`Vms+3aSw1AeE9|)3NlS#S>hlC5-E^K!KcDRkR?fPB}-uu z_b+SV7VVxbT**sWEXw?Y(=II1_Kp!P%?q(38)a)lv)mrx?aDqx86wt%HXaR7uPh3v z|9WL~lGTjPP;GRwexuWVGcAkCan`a=#HwYJI2LG`D@QRj`#8%Q$26+4M*o=Iw7Diw zUMf;o790=U#MIFO(XJJP?3I=)pMcvgVN}6imMT%%gi|wL8BG`TJNS#-_IV5)1oS96QD6F zgN89^3m+D4LizYdPUsP4uM%XbXV`|zaO}@4RMCnTc{l64cmkMxCx?=BBislpUZFhx zAdYOLJcdX13hX>)Sqv|Ubr?=iG>@+ddyX!A1=CRNl?^4bAo~%~0WS+clOGFemGB%R z%<)tFs%Qo)_zu<$=uuD$=o+_JnN`o0sM#)U5i1farL zkC);*OJ7*=0vDT0%KtF9yyZaX;W@uXl^ejz17e6qi-;wBvDpL)UD|4{X04mBS71;M zzle4C*F4a-HT?qHrNT16KV~I4r9HEZAe`Hm)YKdnd(s41d%ii4!=Wb$%tQE z#nmEC<#V{V`Y^BFX>fBxVbeg_mtEfAIxymedQxVfobYC|-sDUs$J|__GX`{2Sm%`C zu@8wfZYV?tuPa0yt}SeDTimg;q#YszY#Z^-`*F!je-+ztd8fGnZ>?2(_UH#ru>3;{ z8vA>;V|lAyq5Wg^@7yX|{5wPek>Vb5znEb-%c}$%(Oky{=dim-+U>OF{6XP-Cv3_3 z?FbWueNy(lUY;Ae$%MU2oxvS=KrN4`hq$HPWOve>5-Y!g-VOx@Hx!AIZ7A8e-AU!@ zh>Yz*=~=jm$l07%4)9wOqQ=WgA&(-8^3cR0Xmb$npPl`opvEDIb60s?1!Bwy|$ zd2L0qovJ)il}B5DZ0QAiP4>8k`)(2Gbs~1eEF*!UkP0cZ0=78>AS$;Bp?6RG)dtrt z*;9F1o0a&(E=4q$-s(*cs&rP<^UhSKnKv0gG}BrtFbp3hoi3LWa|_>7hz|9S{P0p$ zAzjcfS*(K}nxe}oS}BJDK5qe76~vYTZs9J8t|P%7Xz??W3B=f)m47#kG~|`$?Ww#C z3RCmoycIY%c~i_R8;n%#D*%04Td)JI+U9ni&68)h<@epYnPc%{px$>Sx3kl$DE*=C zG}fKQqH}i@Y~IG~k#7Gbf&Q`OXI1F@pqDqYd~SExGS|zIt-~>FWYzhGh_yZ|xoisbLQ00!uIk{6xpT7>EIFWoLF#X~~Clu?K7`RE``Y1enUZeX_UW?|A zgEkGajkGKTG#`*Td+>gmaU;xPw-X3m7o0GB1Vd}|TweeM94dy&q-a#W7pJM-QT(ni zzXH$b^C2kw5PWX~a{*#Ix+LG^iu%qPLdXd8Xzq!rF%faKp7qeO?UZ?7Ln2^;uTa*Mh-ytaj>@MDBiuG(km!k|E z6YrFCrz9AFGZ*L-l;POR%PV-#^fggtfTEJH?;doL0qD7;U`H#o2P%x=@&TdW5JD^; z22vG`(LNd~yRiytNJm(ebthpjh<$&K!#6yiqe7A|&k)uSRf0R}0QWPv!=`>^78?Wz zFdX5{iKXWlen;IZqZ(Qas3Ur^{+(M2Jp@_|D70{zISuMNP|~}+Jmxx*g{=5|kb-JE zMHb2|1!lptZleqHd#_|ZC+s3WV+I?R5$+xB79fl!IhWD&>M~Ri%|JU1v?F%3mJNC( z;Nd>yY>R+5R05Wc)didex>2C(D*^B5h^(K-(hL)1VkOK$KCt!M=$h5ocB`>ni-fn! z38$Lve1%>V-=AJ2D(53A-&-*EyX=e+IUKWgffu+#(TwHxomf`0 z0(BUYSOKGKBGxhRTE`9@6loR#1vIf)i0$Bbs>8T1lzEuxmo&Cy^%%@PvP?Y;r>YqU zn>ydnuCXtpU^(~lb0nCSJ@9iBvU!!Akz56npc+0$t0ebi7j4f12fQ>+t7HljAbJ%r>pUB?oU=Lua~SP5SBpIZzq~jTdZLur*t@YUXnVg5Rjt9 zcW^>$VV3h8?~=Idy`17|UDb&N`q11!t5N-V6D%7A&!brn@dBFl09%Zn8RC$79RaH1 zb=bCR+6waBuNQr<N?M&ay&tH8V<^X#1g$}7k}Eg^7Hg)x?6GPBw36ak9q1lnhJvOeW?7%+3OJcQyp z#d2K3)h~^!s{>K1zqh{CasYaDU$2j;Ix&_tFL~yoc28_Rh|PpwnSsg8qQQJl%9jGb zykD+)E!U!oUsSHXmg{g&uEUjFH=dnbFZ*H1^&_jw)qh`d?J1^xGr5XimkQz|wRu;m zB2W=-H*Lp1h%x4;_(K7NTszL6>M`mnVb>H$flEjxr6D2B%lxn6hrD;IuR;#5EdscS|0EkiekN#bjdg(f-2K4G`u0mE<^IyoNHFH$D8U>DNf zTsQG-+iV_bVK4V%ZVUTbp_J#I%XhYQ`xH|IK@lRnjg6o?{fL}!z)nmTwi8C@}|W(HhX*&8}R@m!z_-; zIVP+nW360*%`T_4^SX=ooNRVmv^BihUY?umDcWj?RgeoMqHa_tR{X4rsq#&J%wDc9 z!xDJ&FimTla%hJZ0DV_{V7P(e$wM0Yl)-@yrr8CoVA+MHuI90bmR0jsR4nWA-XnvQ zvBJD&s?x@IUui=s6XT(@F<6y0da*Ty(!*F?+Rz@JBU$D=5O_cm|07bc#AY2IneVS9 zND{vyw?QBV9qP~aFH5FGnqr7Tiou2y0|zfaYZ`56nt{7A?efYLi(a?XtjiH$JF%<} zu${`Ux>l=7IWP{EqKOcULdreRYSk(CCA6AVc-havh(x{h7c2%)gpz z5N#n^Y0HOA<*U^oX_aZnSrC2~xb^S#@7$_$7PjDMzxvt>c+7G+q|F>y7u!@5vtA1l zvQI5vOp2NBgv~~}S*zuctGlod`?buqSMA~+wTrvkZ4TjLO{gy?x1+bnIV#I+i7ewv zc2$yG9Z8IXM6kx;X2qt63~+uBZzrp9Qjr)99vFdL#8Jl?7-=qJWX%#r8Z{%fpOFR_ zStE=zIO!pbgu_^sk+e^4pjSw?-D)8vIRj@}FuGbx20g)7>-9KZs{;mfK(ac=2{<0W z@@o;ZwgSgNJyzv-1;bJc3QCC|(yV(W?rNdc;M({!+e=(0z-~k1m!_&j0>HwoUChVii zHHBCU0UY;9YhVfiK@tLj9{CT`4}hFuaKI31WHw)`4h`0QKwBF_h50Ubq{n`t;|ZD7OUOj1L`REM!4sC z9#=~mQ}dDz(aoh(P^Wp$Y#inYG7d$QS51hJq$r}1>k^BkC;$A1aPk{emwRQD)62^! zr;BknF2o^g@8F4kkC&V0yTh zUKrA-GSjG1VuH5jGLtYlciCJugag;|uPdl#8LC~5o+l)4IjQN&8zd`vnzNESrO6oe zIt>cB+MvlvC?)sQsmbxK3z^AF1?gxcuc-&y_t}x1tbvmaS4>kk*=*_Ov$tvdnb&de z_sE;95;OFrIwWwwdPAF+zhpt_>99A@q4Y-pdCYHhKeyQp)|<@VjwgI4FI z)k-I-%sqs0lGH@JNNP}Dpgwpde(?lVACPbg$8&ARm#+GNM6w}HzaOFU>vvaxh+BO{ zo>&3XH}CF4U0?g^7k>MxPo4hs>p)#%mg0WY6zfMMasNjor#KIML0WG?o%jh&ChGSX zFNXcRKoxR2NnNP*tEAtMe1p_fy+UfMUM4u{p1WH~H=u))q&Bple*41UK`PNt_9^K` z(WbIbM>p07u!R@VPnotpE9+!nlF-qyywGrQ`Hwi<2_9kFm$1QFr{zXOfi(V z3XkVH{C7^@2TiItRyEOv51Lv*3olsuK@)$3Y?y_n2nuQW6E#yf9?+3(iM`9JLa4V+b1 zbvKTm*ZX$vow+j%Ffb&XdxJVu5+(@&f>AkRAVG|YF}C(KAutIHZ((L2iN-J*lA_W| zDq7UkVoMDwQEX|8O6#Oj#fpk8D%PmfqK$28u}v%1X#VTF*53QBi3o7l(GfB)wn%0cJ?UWzvGrZ?&GZ!*qL9^@{C z+}qw{BlpnVBJX5)u5}42rvB7A=e1%VZC-DPL<&pqb4m zcqK>NRLw9T!-|;1pR~m-j}hUV^eD~Ia_+G62)orOqlNtw4Diuk_KD+J35X zo0EP(?bHq4#zeanm&?vf?lCg9g6pE}^iyG<%3n=aNYyk0$mY&U?`=9y;AfhizmAt>`q+)V7pfw_CobqZ>Mt^zc0G zz?icfQg6yQq`pcyq>cg`6SxVgs$w&OQiSWl1ho<-0PSb!<)T0~&gDW{VC9nXgh*9Z zMP-o)+$Xp{8Ir@sqQh!X+ETGZXwLN(&1tb$neI`0rVq(sz0=!BK&FpHK)f*t2o2(5 z@f$T%1Hx!CDmxY!D$_tYWYmT1sB_BBS+E9OltCA)L3d{8rJ`Ex<7=NOUS|esY5?Pe z8VoC4VpuT*Sd=6&t+@SSnQ{Ad8I8b!*~Yf3O>H0%DlRsuc$@niDsmtuS095Hf|JZK zZn7j27v+j1(++t%!Oya_ z9CpuEsD&xaQ}mo&XHTY|^Xv9V=oJIB=@;x>D>fXsz*5f{u+$l19x*)DtF?fev7yi& zot1kBXYLss7wGGjTEG~aSKTPHZ3#9f!@gPe&O_>hxwMUX<3&opPpVee-AK9bihats zG6=y|)+eURpwo}VfpX_PsYqt>%v)(}ow9N*LzLTSh;kbZQEtW%HR3i{qIkpdAAK*_ z?A};wp%&c`eNZQs*U!@6sy%tS~9OzingniY}fTYwROuLt!{E- zKl`~Bm*Au|wzmV>G_T+aDl^yy(7x9Zw0F%@-Y)mCDeERT^*`48tor~oDd|V8j)zkB zQgLh*4bI_xa9U8gUZ=NI-R-H$X8N5s@wRVoMeiZ^I?7R)URLY*w3++rxj27IMT}q4 z1?(qhnoNC(WRI9W%vmEC)eM`Mt}&iB^HUSv9LvEY>u{6x@qnJk?lEG#lY@J|-RXsL ztm&w>Gt&3f-*3=IMbE~TB-=uKM_kORb#_fDU*U%*%1<_X)l?j zk4VE&!J9G9Uuaw|xa_}*x1lL3HJ`C8zMO$`sva+jdca41r|C*N`;&h}r4_i4;nXiz z>|bXp4zM&;t$v*C5f%QAVVq;F=0=r6W6g^$WJ_)*yMa{SAx@1KzL&1u%YQkiUb;#5m1`XGBE&EH&La&ZkM&)j`nmjC} z8N8o-0g(QIH(p4j9~0a6W7^8+hwYycY4y2ayFUt#Lv&G$V{C!u$@%P-&FX@nqJw_ng*u%7B%eL>$;&u7}^4UF!C7 zjj=I?&^PI_b@^(cIN8Y@&0rYOtOFx_yY7#n?$&XW0)JfC^e8GVjvt%+X51@7vHswV zta)5migm8t%<$)Zx^PFc!so`M%`o47hGCvzrrqW<{WDmQ;rT5{Uruh-T_e`cVDH3P zL{~YU0((1)MC(DEogu(Fw<7L27l~v~JSMr>1CvlQILip)-Tii5q6-z^P|2Iw9JwQ> zHi$u=-IOw?tz0XO2=h+f16}ULJYUtRqRJ_G-)M4Bz-&cMBa?P>jpu<-@Nj4Pg<4*H zMYANHuz9?9BIyge5JsQ$#b>lfv;YqFVA{ zMnUYh$ByY0XiA^eH;13N4a2Je5s5qZXo{-h0j8s-SPH{kzcv= zW_l;+IK$vYZ2K!u6MtpjXl8EK_kerYVaitRvgI?E6?gkzV5i^k|2C)J@HsmDx<4nU z-}eM#sQ#8{q}STn8S40?NO9PsMLcc1BBU-UE_yV1<^Cpx$5tkFd2!O?b6@9FKEsVc zG{6Tu@uO1}97&HU9ClK6aP2tQfj<^Ia1A?9K4w2>cJQocB47Sr70^k=xy*@s_yz=c zf?xo-D5v6F=CW}v#|rkOL$>L#Ph$mpYK(K4lQ@@UN5>v|ryJ!QK5JOQhq8Fn*IV7_ zi3wg=476!Hgrj`8rjuEKqrJ#erl5o7#QKa5&Ny-*dUZ>^LN`x1A}CegkS##(6F$Ew zCwV;;l0_Zz(IF!IyJ86?z#%3E=ogM}RCqrAxdy&)$|Z0YyTUad`7cG*i7`Hx&4;*m zi31$Vk8-DvjRonkF~m!{RwPSh5D6L%etV{c8cmFgm1^9H{HF1dtmp+51cHQ}5z(I~Zu+0@} zw$+u`100LMM=SyW(BrKZ4k1*iDl@rg z<{nN|%W?C95(t&6d8kf%Sr&Olkb-jZ=FVAX#*>4lPjKHcJAV6BxAwVuHf2z|WCN1R zF}6@4DX~v=D9C)f%>uHC-%}Ka?X;mhpYsiesKx@!-hsbRxru=w<&_}BazkFp4KemV zU7VeD8_v#_#KF6S?SaBveMT;CNK=WOv}I6-xuZ{6y4(mqIq4Xw03%eor;-tFndk4r z(091D^Y9ji%9|kb4dXH=Arw?l1E975MnWnu0l|D$zu}U!#h`qPj(LF2xQcu4a_6~k zazSMmI3b*O!F0e0-C=r@(@gRqw|}PV%yS*>AS_TPB7Q@liGic+EiDq?kppWmO!d^K za+$_eya)X}q~2HfJt6(MR8Y1mC`$$9C@mgY#UptgS+7gh>yo@K=>zIx(d%8VG-*xG zemr`Dr-vsmpP8N!nVwyGdWO03eVOU`I6vE(ogPfWpEjMIefISHMU&~-#lvG_u-nCj zqoPe|v_xOfnXN4nJTJl-9;0GVGmh1BUK&o1-YuvDShf?{W3% z{^})0?v&%&bzh&6_3o;-;*_j%R(I6`Y+*QLAqLT}b)G(Xq2vhkT>xSct=4f8EfvT2 zXH0AYAvOUc>^2q1VymL6IbCsV3BdF}MH*hKi#it>Hzd%jw z1TBLfb{mB75w}4KKj3D>@O>`J;gQ1SyA&Ph_J&d#z#2kD^-zKov?)=~k?^qFJwz0D zRSa~}un5_6hG1z+F?$BPo*#sHhj-L<5QrS(6N4+KPW|gwVfu>0l31^T^i=>8pY_U5 zU-@#b%6jRfFVmA-S7YL z2Y>WaC%RG&Ygbp-of#-I9p_`5WZT<85(?Zz^2~#T9!|2Co>f0bviTpn=7cxN;-oG* zOw@5?r?6O=4--Y3bd+MIHqexxc_$up#v(>mAM!+snPpR@X{I3QrAbka>^KOKtk2tY z^HqoFOS&dwDoW#;{)VMUJm5u>9MxBaZ-L;Og@Nixt2~*B_$k$Qc~OhpOGWFVcX}CP zA|Ib2V4?4hD7Qh{agXMV&3kGHXBevzX$qI<|2nw9 z&!)z-Ub>+OSCAoG(KqvMPKXRVfp`!&-$}I`cGmRQawJWJb(c?+hRTfx1`)+Gs7HKi zTOycai?Qx;-6{3-l&Qm2^i#d>$h_AZ)zGKK4qj(_vjn{K*)zu%{rbMN7C%#k5611M z0WZ;=X*FNs{s;gN?}jrM5HI&wMU|r~h5qcY%)nev1}0`0-S=u^-@El&$PKd;tK+xA z)W%)jPs{sK-XBl-PW{%?faEYiGQP8w=l7lV`)Q5!&)07WUB!=#^?HTJy7pj^se1r{ zq!kVXVn~+|V&iCRhCzf`7Y-3-2qJVhK?GM20h}_8bf!AV-H0z-H#(&o(^MJmhR5Al zWNap80SJ7$v+xOH7+@l`VpCztSrms)RJsgfh}Df*iu)j3YG0bf}7SCnP#=rWg2zUMqSnDxfFNO z;+pn-QgM!|$XW_WZ1AN154$(=lsn)YbX#4*!x|nAmhfq3H+ks>`eP&B))hyq$OJUu6+iy1@}{KJlVDS7S`vfvU;lohUYn``Fv=S8NFp?h_~aHIY?geaPHlohFFYHm;>L zSDPx$1?I<^uNJ^pV^2)jSGh*^<;}#=ebYON2u;NuqYiz@^McLp{i5DTJ^}+QKJv($ zaZAK!cnBUfD9$;Z(Cc7n*JHh%_t$gq*yeN{xku}M8jDaRdlo@R zAfru;!IkVV8nV@Xb6-dy?Pak*=axd(ARz2l=x-deIaHJ@V3MI5xDE`{d%IdII zEMrf1#uvYuM!ha5U;LnnFTNG(OnmWu@x}Mg(-$B661*S6^1FEyYqxiVcf>-k{+=rx z&@ZUr;tkRh4)vnF)C2a04|Fw;^_JASX0Bw80PqS&)KC9LW~=gs)#ho&r$WmD9%5d= zVLoW$FrV(lHFKC}qV{NDQbA?G|FEm!TD3Nr(tytTZCgE{@y?Qsm!EJDaO|$Cy`_94 zd#x2$@0PN7h6Z@kr(jysGst2l_Adf;(!GvqrFz~qsw&UM^iYNdv?}VRyGx-tJAt5I z5;vqL-O`>V0PL2XK%Ya)QXRey)1o$o)ae8imb^qEPQpy6`4X7Vd6DaAhp$G|?be$f zx?NY=4VVP!3XP9!>OwY6Xh)~ayUL0t+diFq@D?o#SLIB7?6zU(N~{cZ(!pU5J@k|j z(i9sbm}!vGdBs|JrG7rE)7n#)MF@Kt`Z&@G7)pG2S5U*ZyACV7BR0778C!h=8@L8# zY<#g|#?WMV**bK*L_s^u<~LL(lsJVZK^888mY1>e0I6zcR~5xk!!QGNYp;8zUp3w^ z%1@@8oug!e?cQ`aFb)ZJG@RySO$-Vi^rL$v+#i7)^7Z~y)4e|gHe zxsprK5ELPK@Ey7?TqR}H#V9Zw;2S2-51VgrC869HC5ChOhWqr0`36_XM0_JCU%)pU zOZlVb8(irKC-|nMaVz-?dc)|+S4k&*!z4=pjFV>X;2~d~&V}ON#zHQOurN>0`*8V1 z;L)L_TEuCnB6|@AW6EsYzz+-!GqHQpEYQo#vGoc?eEl+ zgsY^IPLgLP=?~tiCka=KfZ0jfhsXXoO;Yf4nxto-^NL>QYj@OOEbmN{ezJ)>DzyIx z9%MXLzNn&sSiY!duXnUBDpV=B5b+$tE65k~Q|e24_FB*AOX@4PAy+#9){tt}Hx5K8 zd{ci=PeFBb*&tKa8`GE6m&9imi6ayVF)UB*;rL$KZ7F&U^g36%(GzGA$4m;) zn?&7rB4i#Zg=)t#>{RP=*)DSZcb;W zJNY+XdTS0xenLL;?mCIS!kXl*9A2zjNkL5k0C9$V%bpsw@kFzR1uk40K zza7R7;>pSL(SB%w$$_Vnh;oqjapb@YWFfv|x)+JUp^~4DPO%$~l^i!bmlV5auVsuB zyQC^5|K-f%azSD_1cp32qYCNS$#LRrwNVS-IA6=E zqSmTJyS_>ODgkX(%2%K92gzXls#sSKJ8No{m=nL|kZYGue$A>$^r<8ms1?`&4V${K zTovPr#I?0k?|Neq6mRV8yOyw0jLU+Ftlb5kBYK6dw_Z9^&CLiaL&Q443t$KZ40Xk4 ztaB7mKCFvW$kp6Ami(^=0ARKsREy&* zTb1C-9Bo-0A(Elhy>xIm3>kBVW2yumDvKn3MS-2&o93f$NG+VnYR_@iW=N)BcFAp0 z3!XQo7M7hhE~(ctzR_8QyA@zss_(K8 zRwCH+=vArGGtQA@!=Ypv4mblbsAN@GY{Sf!$2GHV)0yoY*UY+%b8+23Sc0(37$YBa z1FUCdU~T7to-vNn&1NbbJyY+uXNp9+4{k9BU@;5fcxQ^~fZjsUbRbYnQDsYpNtU%x zqCL@boJ+{7i5!UYISI5J*&GiQVeu7=SNG^gW)MH4Rpn4th0%LDpd-O5eXd4 zt(p=+_iRM)hp4d3Zu{dQf*FK=0Q9&d7R_@lE1qmrcG|cXOCuSyC)XVpSY>i^7lcu! zr-IYT_0OMCDz0wWr8yO>n)@+eT^KL#3(hv}>M-kgd0${noe;S4I14qhF5isk2aG-A z9g%;5N93Q+i2PemE|YJbK)nR zXXhvJbLS^shM$=F-Q?goq3>Dg@Ta$&lQ5d0rT?JIcAj%t-lG~1>Yt4OJLkY%MK$k~ zD1aR@71LyeyVWVIR~zEtR^P6Z^7cr9SyEsQq6PY5BY}A=OQNCkCO%?@71>d$DCa^* zoyL}uFZMi`1f*T$3 zKig3OP;yDBsg7>fk%mjj**bbCv(QXO@6@Xe#to7yZ5@3YU5Sp~$tea1$3;cwaB$OV zqG>`!&qGB=$amO$pQ~c7Ix7ck8@iac2|`}33_*w&I2}R|rb$*PwmVcM&{Bf5=CWAy z;w&^Q&Q4vKDfmBZ9knRQ*~>Ckqc6E22@$u&oS{lv4$4X)l-nw6EMP;nJScJ z;S}@|0;Yqy7W5L~r5tI4ZIdNbHcO~rFQGG7w)7I>9i@M5^Gagb8gbd?SiO&ifH1Xw z^>uudx(+kYR^o0&1qB>SAEx^P-}lhnGmZ#^H5klJ(@hySyh?`PZJFIK>h|uEty9$w zK#rzx6eMj!YG25du~vw=#-h}iQ*|t6_ZQURaRtZG4e5@;oB+ps>Sg-f;-=4@q-PcS z-Db`%-~_ujgj8<2X6WsEU6sls;4?!-xx~4dk|~#)>+PmqAZq0<{O0*=3`Y>y>B`CY zoA^*oAp8)SXuH@xz=!)SkjCalk;Oa*3BVN(7$iU75F?8#e)5@zMH7hg)qDAzVwhS$ zce;`_GSC@rt#`ZAcY7M&?bGj6cFQ#5q)d3&tNQ2gfySVBSQ16}_t13#hg}1B9o#}c z$JoSu6HFO6${i%1SJ^Qb0vuqVI$Oi!sMF6kd-+YL$YFX~utN$6b4quC-#j%70Wv-4 zPvvapOn<9eZ;@WooPk;zsP2*v?oj}r>EAWar#WhQv|e0P36dU;2NB`~NYL8@=MQU-Q~M=Qi>u!C%yZlM%B?aI(0&q%db4%i_FFE~pl+@s@s zEo4VfHq#e)>Qfi%fpV;DV^ezOs&reYrONh6sgk** zm05f@FU6_|M!Vg)?o_&LQ3yKIoy6E_raMJ}oS0&%mf7x3_eJg*CcguR0(p>D@DLp` z#GtPp92l;CS#5mjnUY>ZN!iJE^d@)RXSpC8!Yq;P4Eyk)_8|;Ng^}JY zhX=Kj@u1e7f~&Q3%5pH5PPtId#0Ocs+MC%Ray8wF{;vdwlY+xwE)FG`{;om{i#`B-dGsHJa? z#kQDZv7vP=R+N@GwStU8_SfP7VI~Sg16XrcB-NpTdQrF<_(8P;?wvT>UN0FbYT;^@ z44;CH!aPLETTp_hA$FOkN0q?!jFS<#euJe)0-=cgj-t(3f|<7oX3i#Bf?s{Zym87Y# zQpES)5TWz65<0^OojDRZ^IGVP9To(KUCnKJ9qrWC8|bWMy(#Z081_)JNtv^VYqCzVjE{_E4q!P( zq!`8db7vEAQcR1^6Z~fcJ}&?N5Bg1+$aZET|1`&oHv62~&dbD@8}I)y2ftyLH_s1p zp~IEqggs6jBu@1%tsWvq!t0b#>AFfzRG7N2XF+J)PDL}OrTQ&(l!gx^Y3;z%F&k^(!4CoV|(0$H{3=C#OwMP89pS@BjR}|NLK%ec&J7zZq5^woAW%vktx9@HXgum}YLf zmzlZ~PUF-eCvQ4+5E>>N4Cv9@7`J_YMh3lVcJ@jt9<75a9cuZd1O?7e?@x)js-{wltT9~5&eXW&mb;U_|yIc2gq|egJ{n2{)Ho_vH63Evs zFEuRJ^G5BX3R@Y4RMurn5%-NE?usHFHY(z2e5$;qh*x<|4td<{R*uG{H1Wqht&0DR z$GSL(=wVMqqU?YhG(vRM-BiQoUO!@OavbL;yR9cD_{rYvrpGo~kRzUe%u>UVZn{yW zr5dv;Ej60eX%Bm;HMCNd9As6sdmtS!)Z(>aB=sF8VVm1Q=ZGGk;bxx zy0-4>Hq~8KjVi#k6k=njJIWY(2DO}xn9d@Wqvy!0f)M*cWLC~oA{q!`Q4}R-QxtYy zeuQ^=Evmx8!*1*ckESEG6?LntcX>I|plzMP3f||Mj`UES)f1R!CbSY*A+x#1EVC+< zN)-ZYs404#_IeN9rM=xpccXf_)64emv@65k<=IFJL4YI()zFm~I!E*L9q<8WTXf(0 z68-rpj31v5d;Rt{sb_7Io_1xQl&j5)h|0$zl~_t-<``ammmeKX0R;Jbwsb{ATE2Tk zb^LI)&$k(*9Jl713jwrcV0 zNl#=l>DpZHDeOh0VjY;X3Z<~sP31Z4iziQcCZIj~mqxTdQgQeXTOW-9P+=esT0)Uhmq6ak&=Q$DeV|6gqqZuNwa=QzVMVa^SnxWnbe&yZ zMhh9Wwx3iKs;&fmq<;0RwT`u~C&?`MdfPnzs4LQuYs8{fBM-^Z?zqj8q>Kz6Y8gBf zvK&TZ$z8rJb9uJB<(mDEH1h#O;PD0k5jf)bqD&=19!c&Ok@r|pR1LZ!@j=HgnMY+M zDcAM3jH^^U9Ck#Y0`b8ps1dmAVk*#gSlf`9F^)xu&m|LBkIW-B6z#L;4|vWFWTzE{ ztiDNYj%@XW#RkbXuRp_PJ>4@EgCN(iY`1&;*7S?)3?%amDv5**BrBU|AQ}~gW-T^? zof5KHFkW5iWhvH$bMdGGw1$i6CYI)t%o+A-@!n=;J7_q&@%8|(hJtw~((*n}?TW{o zI5$nhF^y+opAutfULzZ;iY8dAOcjUJI-{2Q|BvF85w7y7aFv&(nvZ@~05KbSzlabS zpTHTW0%uCu#J zUnZ{G>)uzVg1?5~{E#V=Y038AQ*`}l&q`42$i9@%>O827BldSk?C*|54JDNpF8o3U z;KeWcE`nk)3%W+4kItey9T7`3UxavaOf)PJ{=VntHzxrf_Ls34lrCXE9+Jv(@I;FplFD!_(t%V)SI^Ra{)X7Oj-yU_L-dHmGEYT7 zq8Q&xC{y3=1Sl^>?PlFn1*~H*sn*zrLohf1fVL$^ z0F?iv0gEi=sCWe$W=|NH1?tVyDt8XjD!GD<$w+yjlWgXYBI9)#Kosa~B+uL)_`x9v$y_l$PXhX8Y|kz{ zJhkcBW$!p+d1fx{8ZMnmg%IXc9xQ^xbSHY_HC~GlffGI-iWtX!G{`0g(d5(cp7JB- zc=SQ7M35VH#W<`6>0@Z!@cQ*7f$C|_Z9`qUmSDg66&3b;Ux+m0dKHI^fAv6nRPi|# zhf@dmDm@AxAle2|6gsab5h=F1k{))uTMzo7;8}qZaoTD-NKTP`5R%RCV)dcW@(Bi# zJZm`9LQ-rk@}aGevQ~Y}l?#Nst9}srILlxK`HAGm$IniD33CE}Ppn*;R*&FP`(Zc5 zOlldJxz`gH{ym<2$;e6l-{;l&cMt0*B%kec1=$Kp`cjxEUhfJG#e>t~^AC)@`=BDT zl;FdFnL5<@ykX;8>JXn)*dr=z4htuz;G=R3FieRoI1%AcsZx=`QjuK+tT8;81Ka@h zzq%fU54bed)lD@7zAS8#<3I;pX<)?V^ADkTgxn+Sl&=fy0WIpbZk5FA|-uEi5 zvIzPrr;UJ}51in@#m8K>kNdOTkGpIi2bN0OkZOm_c^xer^5iIj8cuQ$@;Y0Gcy=K- zw+OEL$$q+N?dG!v42ybI%*NEnhhd_pW*_q~z)PLI9xx2Esn4s75c!O3xY7Lj2YjR> z@s(A))`m;bBX_cm%TJEcZQDGiy4ZA0Ybeeop+}B^jHvTk2YIQyh(?T9e+vi(STYNo z0~tK6zMg)MQ*Y8?%Ycviu^Qd@#)Un20~-vFtF?!C)W;Cb{6%V(4>DdxsY}qI^xfg~ z9d3{En-VS|6qfi6aDK)2Ee51_tTEx_7B_!^yS69 z-^-i{+v{NfIMmOL*YhR<6ZeZi%>MlLDc8K5a!pkFaCn7xr^jT$Ej`6;^jX<)6|avj zj$!7LoaE(2;2Qq2p5qhpcJ}cP44Z>>Y+_XC+ zmWKm$hG(fmeIu?MrxZAGN;QT^Js+osk8;xaP=Ui^aJahOeBzi?m<_c{&MJo1h~9Hl z%?M2-U}&x=$1n1Vk7H7TbV8c-Kv6@Ljz?fVRZ)E(7EPeFrzy(;WO-4qH`6CYIsAG$}WH#8gsd8o(;f5=y&-sZwR;fLuQj1oeRmp*- z9wRO(M0S3nxUgsd;p_`lozX_%TgcQk!>EPcn`%cYF)G?JyC2YeQu z#-g7&l0f2M0EeK42K2O!k4CtfqUvB|xeP_saRYMJX=6yEC0**Oy%+2YyqAyDPu)K;NCh-RBPt&Mj`3wmq?K;-M0f`{x^di}3NQ&ld zLXs5!OBaD+&jqyza@l1Vj9P|4!!pdJ%dns&O0x`$nPphCmSHaKK|y+uS3L-rxz)$d02ArZ9A{Z%cuDZJd}TGOtNmG4O#uxj}LY6%E0&$Wu3 z!rk}qarwQzjypjZZx-Ng*T{3b+;lBIVwML@uOYdYE9D_^A3GVDlndh&R0c&wn^HU`p=M~k+;do>rYkU>EK_R0j>vVUP%Bsy0qJ}|l z^`$#UL`gf~i)MB>9qb`P3z#f~BJBI41pUs0IlZ^pPC1;F-PMrHY%@bB%K+T?tG@egMm#_4}~j-c4Sopm@w;zZxhIxJ84 zv2!i zU|cMSj=qltcP_`T0`)4VUU^C^;BmI4!@Le5$2rPIQIZ`qx)jCwktRD1q3kMHSwm_c z-;e~qnC|l8_+3}Z87pKlomyZ;K`Ja}E6Z_W*Q(@mwX56ao@?>MkvjHq9hSj?eMeHG zgC^tNXnqH3=qpccA6r2O*;>KLaG}bx)GGBSQW|NnVy8_>;z+^8= zi+fgalbkGl?OLy0lUq!4zUCDBsA|%JG_Ns9JIwQt&qA7)Cc{@j`hc&s6ARMT!VY9P z2&9ktCehb1-v9xmIpHvl8fn17gMqr2CKC2l`s8W@?%2_Kywt?n1bZZrFk=sqlr=nz zC!Gf5S$S@_!{fe0i4sjrVRg%zw^D{#D=5>}Ayt!21SR(_VlFQtf-u1G;~~YK-xb-O1@8bMWmv#`g;+zbkH^r@ z&r2WITVJX1P7>dXLLFMBIjvBKS?e4J>0)gd`nbed8dvf9=;E?jnUmuTj(5VvdosTW8V3hbUqr`{RGuhG#O>AlDO8tefrOCLiS4XM4y;o$E z-?8*!TD(5INB%taI@1Hnh>OR|n!ehsXpqZSoT;9#4vYSCTb)IwmDNdFu08B#*U!n6 zbSd0_dP*)K$em((TZ2j}$Hh3T{WEe2B0Vg-br+>@xvM^z z?F!YFUnr<>;>?P)R`0+~iyU=nmGqvcy@B>i_=PMCK za>0;rJm08=B3obTTy4}sEp2;BE$q>SMJ=4ebW~!E_i*YpJnc4$p{{Ty8-YnR#O{TY zIB9ye^nYbbZlW%RqAtcn7D#3EaK0f_=M(X$Dvtu`VT^dEmV#QziDt_ATWqxvX-0_7 zuZBX);IE_B&04mo*L?R$8RTlr5j! z(@%r-Rhk@Zj*&3zdE$JeGvs)U8FIXcMH?0bp3)!jmE=Nlkl5f5p3m?9PW!MZ*g|e;~Q{`4x(!f zxSAPo+qeeoHXE=zYQPmeV1+E>9564GQl*6Xkx!@Md8w?GD(X_3sPsJG3P-FBL=WfX z<4VY7NAz%BMxYLGi8o-=v(TRDhNf)!6cMFoz$(u5l~$leHO>m)R8$nn(<}oaZmiZH zQ%*)yT$j~_DblEDG+vu`WF1OO=%8TL&{JNZOTMWBK=HHU>Y-cG{zZ$Y+emU#f#?~9R z=Bd3p(T5kVM!;q*O>H)IV2S>S-yN>x|Jn}AQ&kxoh@x}FcqoY+d~KZVSGFiwZunp; z!X|r4O(fdoNLq<=X=A~en=s0JDt4biq&6FLM`*H-dtxJl+Q3_MPk5$gEKRriGF7qG zX5IemNYY%Ie6P`G}_!EYbvNF?K0Xv%-UL z2=!?o+X8!5;)E}1cO@4@1KPGCAs2yCCr`k)|Anf}tvHKt@B!`UF9tX#5)K8z6wB#Z zpXv}Y4=QrMUS4kX3PBKniJ5SEP{-i_>-{yTD~hPFmq5djl|Y|oQPFnQ`)cMry9nb9 zr$pQJ&4Hjr+z5=8spSl=*(xyGVW-h-Acs!g{9><7%myQ&HXFdeDP{xMV#RE5!q;Yl zeSz9Gt+(=0@KeLVzQAmzbLRIWK}v;p@{>bB%7M4@lY>EKJ?{_Z`CEZrTSL6v8VFV2 z&6b(%VTP)+X&2tg;XLmVUwy4i2g6+X;lMT>oEGy=ke=@oCQ417Vu}$M56ok737z?P zz?K0x7@r8VUuJSrF5%t#qrpJv#J+#HuZq(zOK@dOrT0S zB9UxO`4dvU9oPTlK}~Jb%>c$ZWfa*Si2B6S!7x`*8N`dpV^UY9Jt_>#O4t^FmoI76}=7Rey9Ns4#o|uG!8Xxs|cvZ1w zT}T`b&l!ig#I6P$exJhOT?&WcgaJ7-X`vt9g5^nLGV4A@lva`1DmUMNmOC?O`K|`E z+-{-e4nfPUf|lD;wA`Aa<(n@kS`J%iHEf~f8^?*3h=zX+M=Z1)aTUk+Wwsv| zv}_S`>MsCV?rT8Hk1Dj>caCV;qOA`$TJFi9`k@Z}q^8wS1!)npYH021z(6YSv@O5;U{VEq_k?_u(!$AlR-WTEc1A--HT{!|LOnLHgY~oxb zD~$c1|Bf+W7toh?ED%e_PyU9V?o>wkddEC|`f+}`9k_s}6Zt7yw1fJjdG4Q@B&P~d z1BJ)&q~~fR#~!ZQv2BqZTAH$KR04(|()y;f}wkGqWpXKuo54yW5HXV@|^o5TBYwkZ_q zM408u`OVPO3@YHr=I}n_>WqrrQA9&3waUq%yK6_6ZBBHWlqXtI?LEixTV=m#4>O{@ zq265H8t9b4=K}PfG)yeQVxCr9GG*afMo_F=wufc4o#K5%-dx@qau0ZOc}JMC|4{Fb zQZ=F8Ts~-3zF#Vr4X6lTa-9EA;r%J!czr+Z+g{&0QU(X8Ic9TtTcD~41m4NV;CJ#J zN3Hj%hBq7v)aG)B-dsKysLkbx!X^NFxYIKB*qh4}WplYh$oM4irgU=|ZSv;w6ZYov zX}=~;;ir7q-qFJY=xK*ASd`+;WnQEbjqwUWG7U>P?ZPn)5gZO1%+3YcT!sQBUJAZA zm+Vz-@v#_gOo*309kXA*XLfkNA9aQU@{`_*-sLxLMURBoivGiHuPR&7`~1~)ZwC4Y zs~EPTJvOkpe8mSAIKo3Kevi9q1KLYZet2wi_N>!y9vhB5>-3w)#$nGo9pd2#6HbS0 zr7PZp^I$C|4&w3YU=Le$raqU0G@*=t+M9>KP4e|6=*S6If*yNp1NN{NqMgRrNa~pb z&(bX7vLZIIr^0&IDrnPFo6w$$23>2XOUcJjYoW_0Jhch!VHZwzsa40(1zPv?`y@Mg zd+NZ&Y31cD5Ht3>aqQB{p=Ol%7<^Y`uh!9fwN80bq^f_bt0xJ!^|1O9fpQJeo%hkN z&wI6=Y_-UAsX#NKxIc0by1kyz3Er#quouJUn^18G1%Rg;k~HT7m(spfI)Z;M#F-NO z8bc9h+Nqmr@I?-O7fA3s7~MjsAf7U`iTAsV3N|?7{?3m=HApV?X6Xx3G<*1XFUr?* z3ml*X#B!hs+two0!Y*YR$MyT*?Ut+gz5z7#8tPpjI%B{Z5RUI?ozW?GVbMIxYG=fr z)E>eK9%77(q-#5^=5|VRlW_emc50Cpidun096czIouoiIJJ- z)%8GvFYWhmu4@MZwfl3u?f3<6!7qpVrzxSKltr4-*pIw&3sgOMGw_OQXz8N5>Ko-?@?7Zu>`@0sv<;(qPC-<373iySrY*)(@ zhv?Dlb_=5)R{Kh_C<~9(CM2FjqMx6xX|eB=aVhp4vxa;05{7*T6snu4XHVT%Ma90u z&CcWy%?hKt+p%8NfsJ!>Py3jouHZ!`%V>?wRCyr(&d@sA-3`I zY?C0wrf^kxmUzm()1n*TgOO@c+KbUzf-!OQfbBavl8U0IvQB)pox#0t&y zRYj;U6Cw7U$+(;%+tfS}2`4DleSTYG6Fh)$)ROeok_?+J$ySZfeg>hXz8z|G+f}{W z(AidrgUX;~3zP@*4kNlY@06k}X1AuG5$;FKZnpCnGlGwJ$^k>Oy1LUP_`BCjT4JY* zvuTU`!K_^`%QCMySll((?y*=>o>|hp7Dvh(Y(C|r=sd*e3Ul5S{J=Z z89hCipbgI{nr1lX%UOAj&2L=AZ}Qk*aFUT>&0=tsP6b!2t=~c$KHfg*Fnm(^M=XIO6#Ibpr!d!@j5)M&&rbhh02%%2l2{ zMJ-Q|%oywuCt3~s%{t@*T}T5wvo~V$4F=tf`nS^ zf$y1)=$JERV1}_ick55Pq9hX;V>0>2~(ld6|lPFTk1|()*G97 z9aB(!7(Pbdst*g?z96?Hb+(t?vHO9cjcdhv+%B5;tmf^0ragm|xx`jx=C#}TJXgEQ z4yNd6iBoKOcC0Z`z9-0x2?o@m4oXfYPb~r@m94jPR1l9(@=uU%*9#JZn_9_BV}7g( zPEg2Uu-71m)65pI)w2;Kt{6kF7=Bx{p|?c`>Qe^flWv-$z|%o1Ta{JjlpOA1N#8o% zgAYekMl+A|Kyg)1yApKblsZPjulN{=hg445gzL!*ol{4z%v1LH9?d}YVU=@fWkJ(M zPV)(z4R&+YZcHk$tk__w96?MKri%o*c|2y&gX1-MXj^LzfCyt z6-OQ6XIg432|}URlXt>{M?nER5@-=mC5<8r>*mX65in{>#XPj9q_^4 zTzJCeY=-(|)xL8G=CCgfaUq8nPh~<}NZ5-f-G*~2CtMX>>9mPzsv}t7fQE`-F(qaf zSACF0GGcLXi0$&h)D$lF)I0Dq?CN7GzaU_7l#c*flYsmsIi?axd-XQl;K0oZ6XK(r zTIQf0$W6hajyUkec00ty!qw*z;ex(S16>C2PakdgA+RZ!SSY13(~sscK%tbwr!aScE>Jla<65_&?$rp>NgzZ7UjWIp~-~N!XvF9IsbaT9B_oLLh*1sU6LOnHUHX6vqVDU@FD<{Nrte z&lfA!H$lO$3el-kpxB1%DFQ~uY)4R^xOf}k5j9YaJ7thl=h1V)AK+1n8y5dP&@?Q< zJ_VcO92TK${9hz~ph-38#?g8Dzvu}6111ejVG(IU+(<$D!?f~iD}?{nG%Uil#;^$Y zm{<2@ykFKVGA=e&h(HO6(BS*B(73+ra>Ya95q122XL|g8m#aM_c4p%u>=Kn`mnQmB zD&zV>^euIL8Fw2C&fJ7?eMv>NGl*fv_2r2)E&^zwo5n>rZsHp#*O%iawgD&bZd}m& zbX?PBaS^g*xvlY(r&pQzb$uBfSAlUhjjM3ds{9Gp;>gDJ#l%$@GvMLDG_C@mmb$*MFyspPVREwr zA3=N|1QrDN`I&wE_^F@VLV3c)!_MR^{iQ|ikt}v$K%M*F|o{s#1Odxw26F0t0@E|o#*_4_`Xg88s645^L>vEW z+9*rcsjGY3=vuo$YZ%F)4{^-yw|EWXIPxKGBU9s~6c~=q7`n}it}qq4)!$YzJ+|^M zp1jj*jrii-`eKJ?_3e+`rqyouqA!Qi=N|0$$Nef=JM>1LZAvHpex7J zMTlK5nbx0pVyT(cpIpROy(BKtSd*teG{Q*W;rR?6e9W0$Jy3>jet-&N;1VH9^&yT| zsM}Gsiya6Nn^EVJkBwdDsLFC@sqE;vR2H74vVG@LSuj>*3UsIUoP7B|aHxUb? zyE5P9HksFzMC`v-iB`UA-$V*ivl6Dlvpdcv`JJFvj1tY`WK6*byKO;@6ctjL9{Imz!X@b!7z ztz_igbiHe*5~z~x1kYqfGW>|j#Ef*(oQe4y=jF+BpO=rh(ge**NKJ&&M959x=v#ms zD0BJ~K7$mZNv2()G#Mr%e;`eU(qssk^&0x|k!L)l$I<~@&8Mp#fHX8cH`VNJtVR`# z_)>R0l&*&i(&*7ZXp2Fqs#q5EsZ{M(#U@>!v(ec;jF&oX^&smUL#ysmCt$;^58jG9 z_-E35Ak}kOqIf&vi%~GGY2PAFIl+g?^zlAaE7dDEFkcuW3L57$CoO6mGv#EZG}NtK zz$A~eY{|}&y{T@c0E-KlFB#Wy=1BRr5YY9O)*KZWCWw*=vQI`tL0FI_mX zI!h%T9QM#d-g@?}VpY{1mkCXZ0+p;FkUg+St-a{K3W6xZu69YEk8LLHLT#hOd^v{< z7egBUpKL~!+WHNw82lDITuVzUIrcvyVXu_e{{@OnbET<2pQru#*g*+qLKvf5nbjwG zt82S*_%fS~YXroNzWKyjV2qR?q@Jkz!oU5IqEGs zuu%9$*&KP4P3qW&Yi!_JOTKQyH861POySz8;W}-6aJ}>A1=rtc3fJH{!8Jup?`&{& zl~<@+{XIjj1*%23?Ne`OEfyv)un5t%l5aTIbuCIe>T6(|8eDOrcGQ`5`cTuHVHb?G z&SIhJ2KO2A8bP{Cv`tbgKd)q>9!-`C83vY8C9Ah}oNt~b4$9wfU|naH<=Z3`35OVG z?PspRL{0P!E3^5SW16A?iZgLqhlaJV!$`oym=mW|9!40KH3HksYsNgkiaCwJRRjYx zZO?Fnbc$&ntHKwmX2+nMU=$|ce_#dtCp~7LY@xcdsUQFG6~uDSOhdBeBO@}Ce8uM^Sn80z zVE1Vso1~Yg-BvQD&Re4RXknfP5yLh@u4+%1h9|sOtuBj?22EC1X!xkx1n7YRI%^K6 z{QpBhXRzN3u$PynN1p`rWyQQ4;%z?T>wkY(%>iE}t?(007efx8Z0A|<)m2jES-|a{ zkLa>{^oxoJCjknBzaSd!SW-K9N@O8>}fFN4m0`jAr>-5n~`IR=?r$FF&cCP!3x? zb*&=KVGFSMX!3|gym=|D@)jCe zc${PDoYPdRB-&Yih~V=yZ4Y;Q?VAhttBDI|=p}Q1qcKy@B$a%Y{_{78Y~T%n!mVRB z-9VJ&3Or+FC&#V6s$N-C;Uu1psD7j|_J|@lC-$m;?AFVV_2%xcPsHXcd}O@M#Aqiz z%J7{^#o(e-&BKA9r(VI&{5l_cLWs{&7S z9%*Jmn<8-bm9XS`eu*TPLM=}aO-l6R!CMv%8cDf^{3bBE$NAOpZi~I8T~yC){q?pu zzmx_GpN29I)<-0P7_QjSl1dck=u^@gOUYEY#g&#+N>sXaX~pNZVReh>1+5Ai%;og& z#NKD!S0UpYfYzTrpM>WerNHg4aRd^4;aOiyHeYzw7rymHr}@ISz6h)@rkF1R>xx*gh#myCLHRtII!p6sX3lGH+Z=BlLl zC-yFQXiGe~_cHpov$vc6ozh#Uf2a0Nqkp@4C(*ytdaDm@A;`_g=iLwW4)cE_&pHom zp$DDn!HJhXKz9YXJ2m}*EqGbjirdqzc-4vPXYyRAo34NAAwMe1E-z3Wu(%IaO&dN)PAtEhJs>)llKu0_3T zvEFs5cdhDOtMyLJNE8=&Dgr`EGaD^5kH2VhQN<}AH5b+XQL86us}=cOTjL6%ckSw3 zd*j-ncN5gR35~0U-gT&V9gXXS-c3~RCN{1VdN)bEo7A{Q=-p)XZu02Wp_fH5I~V0& zxVh+5_|!RSO%#$T>fMx4Yod@$Rqv*bS`&q&OTFtFwI&M5H1%%Us5MbYE>iC<8nq@0 z$;Im3#iQ0lA(^h;O>bBe^p0TO{)-0lxXkCNW0Gu(#9BK0anPbxj&t=WZo7fi&75Qz zi*Ae~;!p#XlHbU{bJ$$S$2n}VE|y3>x-}v3HXc9`Xbke z3j9UR`XWDyNaB<}u`N;w*wafW<`x|7+4mk2&!;6%zfW1|^@AOM)bL=pe!!gW7Y(;q zqAJJ!4HZ8*N@GcC$syBW9MIZ=yYEQ%%gKJ+eHV9x9&*R;0>a6>NJUhNWFaRiM^SQg z7uPtlOV>!!P_p}dx)ctuZP9nhp+BLIFH4@LpXz_|$JOah)a%wJLjId0MtIGv^h|`2 z?)LssGtv0qY10jG=p16V)yi;O_DR^wudb;r0X6`+yyDbqxq)RqeA&|L)F$D~I?Kd) z>>ZJw&|hn(AHoyPf`{{_QfaMBbup4NRy6J-9${*GvCqYB(QPRe=Dq9I-CRolvf( zi2uh8@ZaC~;E;Ks=I~hK7bhDZ?0iqUE4Fzs?f|86>6O*_a{~@)h*t^n0K} zUN0L{GwA2=Zak13t(Y~)5c*!S14#TymsN}skhDraK}77c1cf7}A5u8FIY>j&Q!D8Z zCX?dQWA)C5Zo+H_3klgK_s*|PBqRyq)*EqLn@LDKaqBg-b|?1Ua~~~^AYm`=$-Ra9 z>XYNnTbLuX#=(tC<6iS4+UT+K5uAap| zX_zDP0DVgK0Tb_*)9z)zxY03Q!lA%ZOE%-&ohahPnc)t|_Lj z5Osxgal)!AXsqjKLtUX&*Hlwi4t3=KuU%N0iZQCA-Dvg*o>f|nu6 zs3~vNBpjH&rl(RUZvdkUB@X?6^u4P7#03=0ou(m%pG71j)goR*bx05A&Wy)oyS?$& z7dtqaJYMem68bt1vrc{q{}MOCim1U@W4gXYlRsWW#|-nO^^!bom@l9BCBgxQ7#VJ< zR$x5wQEWcLZQ0S}07jZcam7Bx8pbfiyo7h#Cq9ZJw%x{f1GkJGvkMOwfS9QtZ@p{k z*F&$aZAvu7HRJjWjXdNizYHdq+A#xlQ{U^Z7<}02*R2O?yBh!_+G}q0QI}7D!8ocMSL+;; zl?FA_yS~n`D#x^^D!U$O*14p*=|wJYOf7IiF{`Q+;}cDa@v?mGDtn)=+&{F>h;W#! z(@5N~zw4V8E2hOtQrN_e#uaH)tb?I430~yzz6wE!tJ}iXQoZ9Ay~g!6OIB)t4JARX zF&o_;O;A!ug6ga4E~F1vHlAH^VQ#FcH3CzluQ8-w&-k2OSZA|o>}ab}P0BQw&CKXg z;`5u``(>-bXJ0fg+5B?x4iZEO8Ao_e9rnzSafFYXbjk^}s`zAguvLPvioMV~>wIE~ zP0}7aZ}GVp4LfgB)>Aj=98q=C^t=EbI_}_j+#50uj$Z-gvhZ>Ou8= zne9PpS`Kx0)QQKxg4v_?Vq%Y#S{S?4&$=+Q`f9fUb?}A?`<=iyDhJ6RAfkf+hPmo4 zwXY0+w0C&oy20V995KN=07sxVT?PKFQF8kIgrb)wdmbeueYGQlaxtjn06j`xn4El6 zi~7`H^7Nycpz$8zw0S(?E+&@)0%=c@+J^K#8PfS z7p8N&&a-o#>718#&f2Xy(?mRDCZax`iQtWoYZ{zl=cm=3P}Nyww7XF3M6b+xS^^|# zZvs;vUR@%+aWrWXcz_Z-AEf0oDS6_9vP6@oaDP#(Y`8<{3gELlq{3 z{jFCG2!yFq^;Wm5v1EQ{a$qYDVic27*9rh!iFMI`f zTKxu#JXjFF)UWqq5#HMqPYkyX@+u;X!_ovjcjI|(PH#UxzkjCdAjr1}GM+*SeY!9( zr)DCajM#X_nmLIxDBXw>jrX6pAT#%m&KOhokItyM^MAf`_s9qTKQwp$=$zB!T}|uT zEZ<<#mi7!0><&8fslgS+r}3*Cx|`!dH^q=o2~5{eRWDR+{ftfV&_+0sZhS zwN^tRjDS;Bi^Xk%gzcO#jnRVRJ;&9!U1C@~>FGG*oTvrnL(fWLd8s6@wDYLKAsBg7 zXLFElUl(7gQ<93qu)Lq`{0^rzc$<%?g%Yk?qD^yfiEW%OiyrRq`&E?eQ(oMmjzf3g zIP_(as$bGy=;rDk8bmosbwR&*PiJfOO}18F1tJK=%>k!=(IldH>1?e&pY`9$sfbky z5I>WxHOHUp(h+)&s1Q$kB7>juB*B3vT}9?n&(2&bnLPf-W2uA;&=*1=H(>DUEQG)WNktEVI(NXx3D}&qTDfdzOWWS_W+#~4~_oe9-_jtyWURU>l zG|i$mY zE9t`rBhuFjuR)z=Q-?x%qspN+?3rLFjCchJhC+SeNgx`1n=DEdcSO@W3$W;wO+Q_o z-pJ6MGgnXqA|k|rP#ml2+sD^*T&&FEMZ>{G^a|an;f{SKunTHuwzMO&@Gi*#`+Q!g z^hI9M8!lXJs#s{v-1E3hVlDCKnI%3yUE$a80`KAVJ>M+v9&2?=MVDKPdwdJ~d1_%- zF3||nog$e8V6LkKTY5RSsO3y;weVOkDbHw{`KqSF^r)fDILD>jxSYLO3oqx__Y+C+ zwA*gT(d5}{H(*y>;lRczSAv(f@Tsum&F1}^jmIYkFK@9)K#K$~Z!y8k_3G`8E-+Np3AFw;tirNa+tta?5pLotQ?^Up>O%7*JVAqQm|4oHC>y@u^L7ZMGUswl=m z4F@f0yd@d$h&A4kbX9i~oTQRN298G%)3Fgj3flZ8=3Mwm^%Houq#)7r!w}!4(K)*|xe&ZYs zNX;}Mt0bUFV5?y_t!vn|mOxje5|E~pwaZXe30Nqk^*$!8ryLcQPcNstEZQn{Z8&Gz z+NEjh6utVMv~p8&H1J9%E?1p_xK1fg<)AI2a$-*AoS5kvpL!vwtDm8+{&>mjF8v;H z=l=8WKL5ZEKmYZQeMjQXjhDt=e4%OVMdwXpr=u%JEy&+wVc4`ta&(#rn07&k?8WCv zWH0*p5!vawi5q3sf)$(5aOQtEiynJDe0Qb<(9WlVS4h0?mT3^)kjh(&2fY)ab}sbty-u&Y9Mj)K@se>*2-8(TFkz%gHJUm$SSe9j&m=l6GeCQhT3d@sTA<2Z!fsJ%S2!wKtXnzZs$4@bC0Yx+l%{JgNp5#e*UVXsk6PuAN_mFLml#J& zx*1Gps53TOi`iPn$k?18D`T_8+9bH`dC++&c-)$o?5;`(c@M6KWyv&v4G_?mi4 z|C=o1^B@zEUSMHnfk}Nw)JSddLP{J?Gf6QXd{!;J!)oavJ#ORnL*urm*{7g71aX85 zg_$@Zw#is>_$7JpOJi0sQ>vIb z<_F#KLAR;$1ybb;%!B94gXe2P#$l;BOtp=Vz{3QTwFqH}L*RQ<$(R|(qjD^oKqR8U zbZKRJG$t|E#Z|X(B!>s0s+$@$s2Gu`7*k|`Q^u~?kBkz`p@X=mRWzkw1gTfYEG}@& z;!MkJW3*hAma9LzmJ1mW<^_cLvD+irps3pO&kW6M3iv2pfoV)@U+t|%H4j_UTIhkp z6TU7tZjp0X={&KevLwnyCS*@7!~%=ZvAtuxP4hJO>_V)^bViM(rV@=sL^+E}B8rd_ zRJrvwU8X^1nVJmk6%LbCQvPsbeBj9kUJ6XpmYKGqivM~9`T@InCWn1>jGqIwv7CdX zLVofVmwimwvBd9vi#v~PAe_rsEQZzoADZ;_CI0vNCtXRf!8 z%E3u{kI(!0BgoHn5LeHe>ur%|2k~rJt~q}fmU!}rZ-U0DZYXEAt@7nCzJ%olfo;WM zn>$#2%9Y4h-QHf6jC`M8_rzbj#9nOduk9IsZLd~hk|74UJ$^lpa6mZaRP)Ag*j9eH zB}txznPrD^8xfRnEQnjG<>3vZLM{{dJFb(E%ZL1W zQAJ-q%uyZm93tD4N(%6ZZvrtRlUQCZclaiO03oWlYcsoM0B-R}IgPs1Y>u9tt$^tP zTs_~+&Vk0+;n_QunVm!F?2K5mb5zZ)o}H1#+40ouaG*mEfeu3gtqdIVkco5{TEM1d z&yfzpMaTij2)b8E?|axS{j}tRkxb#Kb2C*cd|U!mRE__2M;gFquJ(0rpQ}7hB{3a) z!dC^hz%xl61HcFJ{RH!U#e82fVKXA*d|xoG@I@5}il|oINrr#wZ-@f~ejXmaZ^HoI zwE-9aVnCh0Ri6A-@zFUUnU}EErn4uga=;%mGNX3QC#lkJbj^P;Jm)z~vnx?mz2=@y z+LhY1JQkg3341=q#<$2Lz2hv}j48|xY3#O!!M!*WX&LUMk08Wyade2~V}CF@#PaCU ze}dAL(WUn{3DEpH32jBC-5E~eEB{s+J|FRn-CloQdSZaoOGHDJK=qzD^3^3Q6@u>l z^x+X_w&T3W(a}~Czh4lBNYwD}jW`?$-{Baj)b#Ek8`63d+iDuE*-cJ8#=v>AXFQSN zasDGb&0Aplfor1q;{7mO0ZN(o5|-Ib{*7NXR`?fq>Sqh&q`)^n%m5xo0f{1+`~zM^ z<0&AKOOwxhm`%zJ1;m{pTR_Fp{aDiikK<`>Y@jsjfr^Z~8?VZZ74AEa3e~i2*{doP z4{{ZrJb4RB6s5$D533rhrwxK$X^_N$&$qa^JIVVF$ng^(TCxLix13~zo^dqxDIC+S zS%mP0qcnT=U8tip*_tv(Y2Fw}aQLyJl8^nrxQG*DydhArEIVW=6pE#&Txn^owzW^_ zn8;4_Biw=Rqzp^0m;C8p$ZcKn8^254PLbr`KlyXHod(OJmwa2@c1gnPPpRAKl5hDB z)a~;nXY+sWm)maG7VY_63}IH~H3|$?betguLWYbIbWAfAptvdzqw} z{U>$XDWNm}Ufs4zqRdbKsU9F!Ve+9r)qUomkK4^H$0~gMqjLL26$0}?b$^Y7+d86v zb+sTT{O>t(t)wl8vf;Ipx%L4keg5gdK6U*PgQo<6^~xVw8@UR z9T$WpnCF*imQ?4|7=(t9)A*YLvAv^zIl_l5Kc?8+twg zZq7KnncR&aY?GIg><|nkZyz2GHb8`)O1;Hutn1$396BOLqC0<$Gfq%0Jy`=J^9s$s zp`uSb>CKv?opUnFF;O3l<&sO5GTwf}xek(zobL4y$ih{J061u4Yowecz11!CT+Ydj z`pO^@)$xg2jO)U5ZlOV#nr8Z976%I161!k=^cY2mx97a0WQvAn^C6|L0xNv z`ltugD#nO8oxlUaaSFiivo66;D`9|Npx|ewC}hYX7^ock&7p63ft+Nb_pLF7qalZr z&IC8#cl=TR*^i)SWnmV`OnWsG?GznXBN#Qt$6Ytve3pTP=|BX;moKe&dTM*l+QsaD zjfYsq0%t%tfZD4HMrII05v8j zKBiAjt0A5;uYIZ8UqY&U5q5P~wz6DcAfvH_%HRXKbho-*?FES&U6zNP@-vN1Fd>bXtH`VP8X@2!2puos*06`e4SJddqVF35 zS^GEjvpKx9L`B=mC7(nZl;n9!E66>WTir5s;+X%jjU7P%m~0aQ#<>L$9dXne;Ngwd zoE(;zM#H-aHS6YhGm0AH2ONbbNd8dY5*dL3D@c~~%PGwu`M_qnjJQ-`6D`%7P`_1K zK3iFSRAqTo7K%Xxm4#ASbyFQ+sORmY-Si1~|xIm<*rtHzdRRR5mGnx0nSbOeVIOODX_*f=GqQvw!JJ z)#3{(bNIg7yUq7)%T!R-8b>ui|)GAJ1<1zK8L|ycemI9v+ z4%zU1JuOsrRm0rroEhEQfn-L4ZShX z#T5NL=eg)iJT0APfk4$;pN|a^?6SCe{JtK)1iFSTj5)mlK?qSTFCo{}BLA)adO7(A zXK7^uRx5l@GV*U3GViOWSpPXw&f!1#*rh*DJ@M%;m=Z>kx4ImwtkwmS)Vj*4%48rp z&S=e%OZ!H)07zaLqDr`Vg}#qXllP zQs$cIGmb+Xr~vH+b1*)ZozTGS!-x^=lxs(ajjiag-6|vj6dNZlq(=qCj^$>pXg=Icr5r~k1AnBV+f>ddLVY1(TyP>&eP_{f=-IX zDT4|o5}gjOTWgR@T7A~jI+-LHQpeZsK(n72dnG(%y>gRUR6~-JLHfw?zvX<6g}jYF#)Yv zY`B1K6ti|flsG3FW}B(z5|~E`F$5)O1)^k1@bs5%i1-BW^bPF#fUVea@-1GI9-=P~ z4Wuu;gh3PqizEV_;%t>gs;X>PwHdo>=oH;cr@%<$ zlrrjr%-lXiBIGG&1F=r3Z2*dMC>kw-lID`BVxW0KB|m~ZdR>K+0^(F_9Hih5v*3P$ z7h1@V4ZO!!MoO^Dx+UrH5!tD}mvfuge{#7n_?dL+KQmp*{Y={UZl;Z&4QRigY2#-D ztEV$<_&<|2zTJQ#KZ`c%b`!j6Vph5oOZAl!<|`%4*Gd@T5~t}1IU2ahZ^*INN98vx zK=3Jx5@wgK=r=&qjxo9abkWkm4ifh+BDmvkZU?HMa)`SjfSL-dLo$)S;` z%R;C~3VU&hZIzmB*%hf+XN?%CWj^pcM+Lv?7cR#8U~_qIimeU&jb}}D^8J7P=s)M? zrnP__aYEDRmT`-{Ul-9+XS{H9-x~(oY?N#VVMAhBW$OzBA&|=w+l)E0C6rB{ zmj*4&abPA#e3(R89c2Z zGHA>($(L|YV^TvQu;=<=_=76kUyo*zuvF=t|4_Z9cfr<2`_;}qtgZA(OI&G)i%p-+ z+4?9Etn^Dye`!bVtYiXa*IRopYbfQTRBLZ{!{b06*Bc(^@VH{d{j6AVKPx8gXNBW_ z)>|GWYBFh4riMIfKy1j&(@^@}x}|qoLyHiDIpxM!04k0fK&A5nP}Cei<>mmY@Z)m; z(dZGka5tNPuC*!Xssf<$m;h=UH-OsD3qTW^1E`}pfF?a>44T{&3=_x1piTi$`QY @RON^lV@vD5Zl<1L-%OeB%uz*KD9J<Z+!bsGHNPxhI+2o{5U;_{Ak zYt)3hz?GMMb7L2RG8IQabTABtX0g8!mb@QY!qfqOO}omlepI3x#euz`sj z6;dXr%Qynq^a~$mj@*qES3_d^Cp9FvpE>DgzOkQ<)z7qVg|r>+o81%k)^6o$laasH z0kr|dqvj3(K4I?o6kX=k$we0$&UCX{t+Fy?7yZ5{7DD1B23u&I7GJWy#IWeN69KS@IfV?!ku{LPtvr&%I5UJnf2p(BTM z;Lln88&@_Is_c9~w;a=0f;)F=P`Gd%t}lv`tc zpjv1DXu9fPlO7-Zc;-!yQ-1_$m6`ERKR1FX#=AbJmV67|?ZZQ_`Y&$O-QY6oaI0l@ zLZrU$HqM8O#pW)~hskMb2zr@sl4JrS9TK_3C$ZdLJ*4_0AVM99b6pb`-G`1ecktbQ zWVDO!6#{oap!(aMfOjkZ;>o|d>~7>%-{Yx^-}jmP9T9WR)$9nyT z?jydF|23|wK=YD}h__@tpyir8?%arzfShK9hI7Q>v=HnefmgX$(&i%npKGk$jBq*R zzNmf(v?*K-Z^}6A$4M0oDz}MW5Cg62dSpY5o-N#9|L^sKU0-B2d+3Xrb%X?< zgje7og~dL)i=7g8bTzwlDG&W?!FYIXc{)?)m0)Go$PwRRDH%C$?xeZIyXl(p%C zr=hsavIV=pHp7Q^klW3Ecb!8ZL@-J}lix6a>rLYKPp>u&4AeW~dVEnb^=|rS;@yMv zZ~pGV{`lfJrt1y#Z-0NX^ILm%5L#5J(i+KH@$?O(%ulE5!9j?UcSFLz8@F=dJ%pkQ$6~|&+7+2Ri5ghaq>=RuSUrgmM9)x{~y6SUReeP=V@SDH!W}>OB zaNVqIphXta&md3~|DrD*_r>Gx(a4zQQ3tB%K-KC%)pVdL9iTqU}}(OQ99EAYsn!&j(ao(f(BCy#M9ObSdfo(_9}AGcC@ zpUUUaaGo2^OT&NimtXz-{UktRY6=_b6W}t&Bd^lGRrICGeW}XGeJ1SaKoK1%S{*2w z4iu#WqzH$|!~|OeI?&n_^k3id^}qAE14Xn}U@{%tY=~w#gH2g<03|0;p&g9>wAQJ^0^=er;L>BIMO2l8kw&#mQoj=|;?fDI)JcaZ#HnvxoL8A*5bfIE(p<=pFkuF5&Kvh7m=X^Bi zcYgW3BX8)hPZ$H+F=u5S`HXSmdOPO47*9AG$lv%Ezq7;TWyaWE9tXB}a~FJc!MD2L zn=bg$g*IS&@ob>~>$iUTeIAc|Ol+5t&l)GTPelHzJVt(IkbmmOAKgRPo>$mjJ`1+D zQWtv0iSLv8MF~GM=%4=hkKU2zk&lV(GV(d&#P%-1b|8@j@&XzzaKi;@_^1E;zYpC* z^P;eQ$~drn{y4F{0u-sj{7^8UFQWrx?m$^O@aXTH`sTgdfeC1B0=G7SM?OJe`xGAe zHRHtgDzM!LvH@qxRK7svi)gsW4Hp&2zx^NE?(45l0a8xbP)8z#2|RLt0}%3J;N}Fz zO&)nCX%6(y6nfH`w9vmD{mAlGNm_wR6=B7j1~JhH#U4|=9fU?@HFF(kzk}QFkoF({ zhkxIFKhv2hXlx2MHiZX1h5A2%3QnVf0oo0?-GJN0*+pX8Xt&DkR;68V6GE0kKcjC4 z6)!dg_(N~|(NCydHa1PcxPAH=#6kQGz=|xz>5nI){mI<^WNx2W_C%m?D^R$?D9r66 zPar{$>g^;3gZ4WZY}9@yx8Eu4fBF*-{nTM96QHqx8w+^c$dfunjk|<)OWbaW+a-=Y z3F(kpu^20|7}2hWnPBSHLG5;q3GXAH`qN#CxWoa*9mt4j!2>6<^aea~Dta)LdoY!I zKrFipQbH>hXhjw%dVqZlv_CoS;PyKiY}Ec_Zhx}0{~yP9|A(|+LSrRvti^q`%4(9S)G*z3LnJ?P*bbVv`_m|cY0IGNj@I*6@P zYCp&A=cN6=|Dzv0elNElp|OY?i+J1-^+n@(8(MASR@=B$A}V=M>Q*eoiY!F5T8!E9 zT>`vwJm1aX{qNg8^Ek;bC8&rI#vSp91NpaM$r0ek8$Uycstr}=l0vB{lj0}HvD>SzYUGGabs;f?lx=!sBuq1tCP6ZN!%(C zl``mbD;8o!79v`m08A($nPe_*KLfl!^Xzy2m)dQC5w=a%cN>oz*xtD02yk&1deFr^ z=;9s_dGUcst-z!TV-oj(;NAj!n@Hnsr}o>a_(Zfnk=vgr?f=*B5C7$T-2NmqHi;XX z#N(bs{cls_uAtQlw_4#=iKNg%nt)a(aH|uf)hWP)2;+vubfSWHgmxotH&WyNqxU{W z;$k~zwckLDzeGQvDJ>hY&az7mjDy;*a{ED zX>*J%5wDV|K&6R{O5E(f{Qd6tk+3=uXx@%tx6lu!yQL|bhiE_K_CszTB5`x}9Rb}Y z3fSAm1p9;Uc;c@-M)QeiY$7){k;gp|U{mAHquo5Wo9A|kqD*eiz8TFY3AoX2TT^f! z_?xFrQM;3X<`XgQfPThCa}Vu%+`h-{6K$E$oPDV=J&DnQ^cH7Se@3+7E#Jj@rqq&dveQw|9_KCJkY0A7aXg)UFkA3$8dva&T z^A5Dz!R>Z%yZ)H$oA-n#o(Sd(MvM zqr~IFnCyFec>dtm4!`~0@#A?B?H9TIq85{zGw*TY`TM@~>^oj}c03;?9v8=C-{Zsc z&mH;R$m_Zano5H5%7V45xOUB^elhE!YZg-Nj+l6@up@!lxUx$MCXv5-ved}Y7=hOy5uz`r1 zPd_j-g-!9i8UJnry==wWtjO9F{;l^9@^QhKnMT9?`w#y0ZjzfkoW;EuxG+IvAN&iK zCn{JPgMZUP>O#9++-{e&Tf$6uP{)d}vW;n0{Ett+<8Sk@jS!xfHxO|P>1S*_Z^pkT zHs{~SvrU~~xEIHS`;JrZd%qZTJJ47MH`c-9?f~4VV9OZ%yB$`yR?vis&;;S%c{%yT z@GdH|;%Inp-SWtHMNXtnV%#46jE(2b`1hn{{2P`Q!MD(Ydx-W!ZaIk-y9~0jH_O-|V=yhz~Dr4(lGEC2m=a}_I)Pn)N zk%O~QF+lqPw;yo(g5^_yMInzmWMytD&}Sl}54Zlq&wTfXujh@6iZV7&=0Rrnhq24s z$iSI>j~X_ZTOLTp(J>UTt7x{$%~qw^|NOz<{@H!l5w3+aqUrs$=>)1;f2~HHxTL>! z33hWqKWZ0I%NO_8E~eVz{#r~JRPV3VV>em2y6(m^u2W7}oL1S1V{H37@x?en>BJXd z=iiAhVLz0(CXsxmi>nm8#G~KyyxO5(9-)iX)em^u*Mx?r zoIBhke}mPk?h9Uq%14CC;l%SHhv1)efTjES4{f1;ZD-doE+;WP0C?dhi6MRsWa5qZB`yI73&9^v=F# zg*@R&z_B&>AhxegwYuHjLIH0m;B_&z3)R7Esu>tUrIGM}>p0}F9}IS(_`Jg*7Xg@Y zY7|>?I6IOYv>tV{qfD~jdKCBb`HQ{QqfW3>H`#4Hs)F9R$s^XI0!V?I>_{IW;^8(I zmpbm19AK4MRq+HlW@N$KOrr&6Ze|eiF*mbl_RY;4q6y~antlYjR5!p9&)mVK2Ho*q zK{v;o{^YQJfVXhUIch&RNe_;v4_qV;VCOP5?av%h(|W-7+|9xLX(Do`x>p?Tq#Z=P z_Ayq@1I#VqQ6P^vz57Xd6bh)Q$yd~KkJcS*;5pU?o?|xf9Nxg2%V$gcaeWCVz+hZo zA}xA2t}o%6n3Fyu`S5s(1oCZpJl~e(+m7*k+acdh8_&1X*tN1rY{3@s<9qWlE4JXF zzaK$t!JWrcY{7;Ig2(^~2N0z)Qm^2khtSQWvTpk%(mJ zseDgPTUD~zt!&4wC~ zAzPsaPVs|IgtygY5FsK+{GsHYeqzfw;T$M;NJSqVus|P&trLmRH@ezq{=OlCL4^nC zNF+17CRihd%S=Kl|4QHskKg z`+xWsKltLizxNdyj?Nzs+3r-wWR9)_jIXk0``fQiqb3og3gbMOKd4!r75 zjMM0)2DLeK0C1{IKaM#05nez2P2e?^0a9P@h_`f5agq}ciI*!UD#8sSB=gu#${UU; z!e1Em4go7O* za740)pde1oPq}(If7GRAB0`LKU)OylLaa{s484x2xCFRz{XoSvK{Sw?p^Ni`d+>y( zwaKBeCBlhBWkooOnk&Ihe2I1~PU_|>&wNGSEUIXKb%(pd%RFk0s^4_2z{R)nv17r2 z)W6v?9KS=kJ4+B`x|l{6x`2~xM&xKmftwJ42@29D=`8T?S4S$vf186&?RemERhq;x z2a(|L1eifoPQ4Q^V`0>ogX)M|^K{9I&sWK2rf#N;;DzZ~zYH9G;ZLfcAPm9<143$0 z6{_fypr;ittvmKqa(i_UmY%+%;x?9)L$jFw*aLI^3ZZo;3o6OeU#06kUs2JXX@&0n zGCiou%aeFHtY1D8xVg>BT^g?5+aItN0d7D_WFSnuqUu4HAkK5sS;xxs7T3Kl5y~O; zg6vnEtV|8V4@37-$6@s1)1e5y?k!B09il_1mBxV{(lsb6P=#W?)QOpia0h^oKDW+z zi}oNep|$E?yUD(9jUX)bQ}k2)3-Md_kluv*6~en0f$|*by)O>P^novf7#~G&F_<{w zHW_`9Z{!&?947}(=!V(N`1+Vp{JI6sE0P_@;i*q^i}-CLxOwDjYEF{9bd^j_4t>p( zhGX@o)Dhx2{mJLl)}hdTX(a&e=_`!)YngPU&Z~LLxa0&Ik*yn z3N#VRA$F9vb&pxZEdF(|7_bPKv=~Vbl9OL2K+H|{KcN5-UDbG?K=^|?KO%z(%oV8o z-%+tY7bQ>x3D-IlfT&Dr-E%-DNT9(yZ-xjbF_UFpWYzUd4ia@3L(sqaLmp;_g|K(?&4JvKYUbVtP7wAY zy=Zdat9-`e_&*x&eY#5KC5Qh}K}jlfaE*Bu93WP zi6ka+J-UdCkAtld_x!j!>g;+wSS)N!l2SMV*Fr6g$iW&mR%GK- zpX0-7I7YA7#Z&Tx6ICQ~q6IB|&|5@wDT+Ssn@~@T@QF823-oy$iDT;PlkO&wt;-ok z94{n7wfh?*IFxqu8yd-)GB3>l2Q1cM8t&Ub;PT`I9(cl~4g#;1Il`#Kc;Ji>JiQ1{q~a+tkN230NJkfQ zp~zoY{VP}1!ZIOufC=;{TBNH;0g0JUZ(NS2jC+-|fXG*JR1O-pxfl#jwO9RHmU>lG ztFIH4O0G_JXi%T>N(f3aOAS zgJa1vOu@$(HiiPt9VTSh^L07*^L5Qv2r%8GPEAu$HJBa+Qm?~2jwoa^ z{+!{?gr}na1Ype}LtcbpseiO+Bx|>uc|qM#@j@1^W+*D^cIq3Nx{YF`u23j8PZ2Ba z(5w{1S~%%3O=Q>^T5(JG!izHJ3OjU@r@tcX&{gcv<-;Lhbgp8f*Th2G<@6yOjKTX{ zwk@%Shc-`qL-D>A60D$IOraIL&5L};jh2F_7dT2Y!BQ?bJjYk$oM-h*1OjBxkl@*V z^&db4U^B#_RKkv>UDZ9F2({fx$DlF_vy=Nc*s{Mt@Z4b|p&Ko?b6fC%B}r|eV7u>| zCW0c!l5f2l`DSXeb3{v5(OHguQ&}yQ=JcQ^s$9%5OAv-c5VwiYq*;g-oHQ1(Nly;5 zdTdq=&={QZ7?T6V#XHPZHQA!&bcn+j%)?hmu&Bi~5{DMwBUu(h`VKQ{rRN%7IBxC5v%0$zoL4ZMMxCw4tf~ zrfuAzE@PQT-*mH31FV>X2a8My|1-nPZ-AL^!^}Sm%=~kOSzutsnB)u0qRjXLYkbea z8n*RYV_L%+EO6N`IW|%DtnE%v&cf)kwoe~dXKiDX-$Y*Q`qt<}xNrL>Bf#R7%m@-)1yCujX$3gIti#8>}hJKvSLu=P{;YC-C zCCVW%U*2e7`4JImW541_uwD=S*nnhC)XeGuoQx6)o9{QQ%#H#U60micrP3bL%DEBC z2b*5GB^yYo=7_kt*h9)phXZXR{8FgR8bC*T-ph-A;~beG|H5O{!O;Rcg=%V1BO zyN;9BaiHW~%oXEsKm<%COaTuLSfAqsaKV^4S^Kmp8^mLhe`;S{Gnv`0{{Y~&qu7`yF+yj zyMQJkOW+*{Cy&#S_{oY1shaH$FzbT{HLX&aRpf^e=`@gujhKx{s28i{DpNR&nSPga z)!}DWcetw?IPb1reK%k$mln{j)G{~*4RBL9fKXzvx6&D36It#6u5t|gI>(sEDPtTKS++B- z>WpL7rh~PKJzeS>lTS~rQgl#ku7)@=*Yc4fB1N)f|3g}vPSK47KSD>Ww%jO;BOKBg zms3Vh%!nbA_(8uTu9*cP?tyT41kCYLlI+Q*Ad_T|NwQ~1vOkI>dt;Df-ZSvKYMksR zCCPr4B>PQCG6=FK{Wvo@_H1&@!Osmjb{omDXUK6H?$+i}2)wc{yEC`MO%i8eGq$xSBp@u~j2RC#<3dci9yp%kFPCYvvO&!ut zlcT23hw%(aLz8`&F{}ZG5pMRXo4xj%5!~!oH~a0+4&&yax;bcnb`&><)XgFLv*Wlq zqHd1ZpPj(XF?Dmy{_IKIJfUu$us=J6o0ID1r2W}b_M6kVc}m?pZQl%Ud0d|0=9veq zo2_{BjJnxk-)zSXp5SJieX|oc+tket`(_tzcBq?2?3+Efc|_gpwr}>~X1BUIfSbMQ zX0QEb1ULKD&3^l{!?-!9ZVuX?9mUNdb#uu6>^N?YsGB49XD4uTOx+x_KYJ24PpF$G z?9Wc&=A^ngX@7PaH&3aXr|i#$AH*!Eo2Tv1w&Kk*>gJg()@R%CX3K+Wvh2@x;%1wA zv(5f&7jAZ_n;rINdvNoJx_QL@?0{KNyX|lG@tR6r+po-E5U$jc4*HXBx=M~=0S*rj zyFwCUm2i&(l?||&XMi^mJ&qe6a7%`8IZ10jYY53b{klC(JrOp5JH8119NVyJD(5v_?X>fVWsb0wp@Mn-q%^6rO`(Y;YJdJaM=OAS7x2CqRz z4@E}L85!MIk_4;gj^vwR>!B9T-LZso=Il93IL|dS1kpSvqB)BsIoTs~^j=R+?L85MAn)= z$7RlLl(%8wBIN+@pV7=MLAERGb8=T^dPs-BM&u)M%N}=eah_Lb%Cu9KeuU)+_BV1k z!i`8ZNnRlocFLTk6$zfWSZ{;qb;7xJR@ar}Zj?l|QhZq{2=c{?C9oCRAYClM85LS* zyb5jJD72PZ6kNx9a<)R7R|>7K7E91nlVwH9w&m3GMw8Wc9Cqrpo3b=nUl3DrVZvcT z%%g(0zN{FZW(Ldc#E=9y-{1pv_}S zqjOoKV{b!+be>pYwV^^XOQ#wgal5)_G&)y&Xjr4eT(jF%g@g176%TlKFoq*BP~0eW zuHxYVD|G>sItNOf3|J|3$`b93R_YwB)U_JUUl*T8F_-Fuy?S?~Ri;;?0JL{P6=S92 zoSL25vbj)(UzPSdQ|qjx^s=y(Uq^2b-8`rAN{&4HdZI?`-XvBU7gicJR^6w}SUDJ{ z{fxVRE@2++fH>!oA%~L*A#AR~g}AV|;u*Q50R6C_jD$Caj3dBOR>$goNbHLTOu35vaix{J_tv8q7UeOk*SxPyLU=~06roRcJ=E_PVO zA(0IUj6(r9IdMXe^$lIvRS1wtK<~~XIB@jI98B~OJ5uS;v%E5qxzFJpe{B7TRRSL~ zrC(h)lyk92k7z0Ji4ms2X%u%gggv!ggo+4q>_lN&Wzh_`)HDhj@XRgI$ArX)2(C5ckXDJt+56XfsECqbxirMNnN^Me1wG-CObWe7NBJt z7qX3~WE(e?ZCsLVygTcjk!?I9+en1d21UTgHS8Re8tNOB09TX%-^ewZ`6(qJ;H`I( zYkV!&_#)Q?tONv&7J45x<^XaHEr5oGAl3Mm65wkkKua}_mUdX8XvH$o8=IYqEo4-I zR*8;0mL}kjtqJ(!(gdP!7Tj>N5M`I?w^U1bXDeKB!$J~kX$;vz~YSWC$rwUm@0H0_URlRbBuETxF` z6~)DGtazyuvS=>3Rvs_E=}WsJr96>PD+<+SYuUS_mi?%4XQt5MW$%jTLX{PzbT3*j zdnaA?&N(jo2BqdKi{BZ0@w-Z?an5n^drcR=V=aD1pMg+^67}L&T7}w2@UZwrS9Z_0Q4vxLDJgD^PF2!kVrZdV9HR`T~mluXfxusOAIw?<>2 z6n|sm6~^{&9?=(?ug^dGdWhKgTiQhmZ0z2^XEqvy$T~;XPNe~&OVDIvM-pdxy#43a zRAxk5+EnKkvF`<9##Vfs)^%4)i*!LqhNOl{4vl@KuPFIMZBOzxxfW-dh(NZM16V0> zhkZ|!{un5BJy-VM9m}{TiXcc4J0S@SIHi!AX@gS{zQSK;sR~NMXU(Oo!$8y?OPC0N+t;Q_p z72TjtuqRo{d6U&wRGVv30skdM9?cvhhX&*YI;nJ+W-V?wsWer@vte@-=LkLMYI7YY z`kW^xQB=}b#^AiC+_JD?TMrj;Dlg7qBi<)$Lhon)x&mBILaenAn4uJORv{&?20M`C zKs-QV5B!rp%nFA0txF!I}ap)Mp;S8zlNU6#&_!0J7m6MeMqxvOOH9K_pkov9`mw-t}$e_}cCy zpP}odEjj*e<s`EHoc8)WSs-*q_DM&j*+~CBMNm1t#(EkLz4F zht*8+7DO#(h!9ir^_SxFgl*U-Y4Ech=S2>?NB1ZHO7|*(4SNircqHSk!eLO2w;SV? zak@;7=<*ur4v){%ErqI2u1dY&$CB�`zHgPgEQP9}bJGC|N1;5MEqzwtMQVQJ_$e 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 qJ}$rwSqwZ08yy` diff --git a/x/wasm/internal/keeper/testdata/ibc_reflect.wasm b/x/wasm/internal/keeper/testdata/ibc_reflect.wasm new file mode 100644 index 0000000000000000000000000000000000000000..79615339e3601db7e01792c4a03b4ad8da844601 GIT binary patch literal 245383 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

sinSF? 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�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�X-l8*?4n@gXa6x9W>h3pMzA0Y?1`+XZX>SVKSG=DQh{51_Djx@%Hg7VSn0MLhH)xYl$Y?sSSoz1@9O>G{elq%8wy(&!zt zMTHHJ&^gpRL>R5q=2x}4%6w^}z^psDdw%W+m%Hw~qZ;1zWt}ZT;c5#JM9Q$KzVWNw zNKPWZ3LRH_s|$>I_&&N76IMfJ_+E(nkMj=4iqb*83IvMY#$WOWgG?Q^hckbU=!_08 zcnz2UPjwA*`_3_I$R+=QO6;-2v!$$vbKX-;+~sX-JKz)C9V*P^zPmGCST1Dy^Y+bb z-FGg7lzDHiX#*6P8{za>5S9vU7IkjW;j(`a*b%RC2kAi9XU(e#ORZC<5EYBhk$K3cF4Z-h>**F>n#qUCKp z`a)ygk2?5N18!qL)&@3nPz1Oa1#a!QPxui_?%WF8j0m+|v_t~jhWz2OCvX=fi#!o>QiEHM z#&BhUJN1gRTxAXtw0dQ5D^Y`cR$xa{8#OmQQ%`AE9wZl0H<~^HJYJP!R-D!ZYalu&Xam_8~X-IEg z&cs{Npxgwb0<(dx841B3k?f@g?KB;FOIBiiMh$1GXh5_W9fr}W!;3->#a!|q9cG(X z$$y|n&%+``75C8O7GkyNFbS6Ea4%5A9rjyRI#@55;6-nwd{wEt*nC~qM!j!PrHl;l zYjmXi09q0)3sJGLFbi+Uvhfy{R~2!(q=i#Ni4~^mZg!9{vjp$3Prh@AH?T})p-~hr zEQ@VrG^tf|7}s#yK%xbiKv=x=E*5=IVMa@^sia~6yn6eqdyclC+%oD6(!>FswDzugL{f)9->_a!u7=#v9jEXRSis5%s>rQ`!zfj7jG;jd=p?vVg z@p#0DhCiX8a(*B6ub!OFl^cPJpRX^@hu`m}i^HE(x<;QkmMrOklt7a;kv-HkwV%ReP9gXLB>dya>9? zH1PO~YCwiiKKyZ^)QvLZCdmCqox#??blHNP;lIrXBXB*TbZyo;gy>Rc?e}y<7|8;K z^77A?S^GV(G~3Gm)y&%OE0SH{5y(Os5@N0~a5*LpAMnXU!h(}j5HR19Gu95fG0+J+ zZxW*^^EYYLx9lE5C~-@+jH3ESx=|hul&yF9dg$xBeT`v5_!b|-1VutUE^Xn%r>IZ= z9YmV&ZDS1;vWE2Fu4?ta6i2w)b=Mttz?aI-?GiL$aq)vIMe+=THPmcJ8YP)hAd7Tq z(aM*@|5M!lz7L+xs!?_HXOaO`KX|ZtaN=K6VrO-VpW*x9!qr(lxTbohexN>A_p7`_ zS+c+k6B@B4Y)?b-IS`V7^APkC?ltQgA&h|F#2OwfP{`{YgMY253RjUl5MsQeEI;6X zVcK=7)sC#rTrfo*R;xp)^f`?X!ouyUH5v8vD~?e1j@M*toKb*W!=Uy;T9b!YLZrCgzn_P4i7?kC_yQNtn6l6bzDo? zlCCp-WC!mVU?HWVV-Uzeq+)zw--T2|UcVW2GbW+kbK(eMe5X^-4H*`YeH3;W1p{v~ z0V8962=)rEgwWsX%Z){aDhT6{;^o=En1Ll)k3^$l*3s;8D;8BY_?i%-tdH4y{)bLyT+M40gkO86{-;JlH=4szXbvb462%sC zg~Tpy-Rk5AB#(w%?UxkdygocM60y1p*@gZ=kA^=W@-x@`=Xv-!4nXsuUM~D1)e-z0Mo)I3*5Z_4-a`}(%LM)XxrKB!(GKe(2xzd0A$(%Ce^{ZlK#OY*0n ztByPAAUMz{R(Wa?H}kN~L7zJSA04v}52brTY$=CQg1p!P=%L4k1T|04lkW5SXuk7w zv3f1{`wvxT9^(4x_e0%35Q=JWkjn)96E6bvM>{dSfW8Ol;lmmYzB=iLJwePYrN?Ou z6~0bN#68Sxn6KBR(mP!$j+B(W>X??ia2%nyfEG3R1mj0R-UmAF*6MxhCr zA(*>RTneo!`_v0jnJoZ*s#QX%zXNussW03 z5IbZH2Bm&$`AC+9P-Ti?PrerG#?%T<)5sN9CrmPZ{!};k_PMMM`xc2aXvf|Pd;*!X z2}Sr9y|2MK0q(XjXTC)oZIR+=J2zx97m0>ZD6Q@g*MbDbpz~+A5yu5cs<|K!E`b2bue8KlfEAg8k6n=Lpmz>!tkT(^6Ot)7_HqeJnqg4CGI3`ESQ9F(Jbz|;=pV3 zy-~GTxuEag zED+sIkVCVe@Ng{;1R8xQQ}_P64{dpAuT#J|HvV6?Q_xmX{k=n52EDBQpO~AtHtqa| z=UAu`G!2>+2l(LnTlqtHAyX{n~v8@ z;pbVt{~-_U>%4cJ7p&Ctmu13ca`PtOmWBHL`8UWC<(E!daX70CLupD0orN%*)FuvOgrTd^ z$$*;SXEr66@)gBF$5dQvcmk`9xUvn_vH|O;`c0<^Nnm9z5?F=H39P$nuRB z4b~?v3#`JkOM=x*#b5<$iH~mpR&x_E9+RZ-Lp(gNHKK}{HO1r$uM<=W9^vvyVMZW> zafuahrfS4fa4oo^kP`%wvKv@|T!S-;D=Ns$vMI1d{R~2KhXRdZvK}j#P@5N1j8W(! zN+9`^%WVk3}P$LN0ScF=>IhzpBY%K zH%)*ugFt4@#-Grj#DYSD5>sj~E=$hV8kEfIy!nT%^sYl&x>-)pp45f2rz2HR=L>=H zr+$?LWCm_C8PzZ1851^kd{y=8qy~W&RQEVFur&E#XEG;dS4~`>WiU`vXkP#-2|MZN zHAdGxWb!uMKk1g2>R)l0{WA|(4+9!9YcLP;7v?c+#v44?q!P~%_)=6wXx0ROw-XY5 zlUU&J$MZNi+Z^P@BY-#pD%B%cbuFO#X~9!tyPG`Ss3hvXgh|q^E;8C?jDLyBAuq*w zwB5!YRrrDHkcCMv@W^#?q-5YH6jxMFu%9G~$ff(Yc=F&+$bQi~4AsAD^Az!?0~WDV zZ_3}s3v`7717-M6rKuh`>?gzT$fN2T!-q#B4nvCA+$=_jEv!kSGsSf|5>q#fu1E*Q zYx-;gJDC>O*X2tgR;~TTYzN(WehY>xM*6ACo8T5-{H&3==d(Nfk#%SJM`D&+?V4}4 zIoCzz7#PiB^bh7S+k`JM*);*zzu-L?%a#cq^8d0~on20NhQT z>etM3KpS6GL-QQneyaIaSAL;*myGS6GGWXR-cxh5N>_1~fO*<#UuE2fZ{v-GRj1Nb zb%h(C5N*)!6MEL0A!2dQ|SqiK|3EBbF4wX+*&RvzKPmS$Xw)%bhE)d+$-s2zV8LuU^^D-`y)?{_a`X%ip~#JNbLf%J98Mf!xh1 zzW==|%DKL}disUzJx6)4D?K>>74PA0KJG4D`<|nEIe$#0pWCWeyLA2hoIl#n^?xb! z^yXtnj~;z(hRBQK+&we%t?{NA!<(c4o1$81z4NTGgK;svTWr1aeDO}HZ}r`v_0BWJ zJ9+c;ZmIRobHuyl^lrKJ&a=b2E$Q8s);rG&@0=%)I=8mor5UNGf`cgz1(7ft+beBz z{M?!g&VMlf6KsYaN54%y)i!i^z1!A$SI@=v^lp3WT|F0^t?2KrXuYfFVn=$nqxG(y zi!0N+D_igCx!9TB?QFfP=i;jL?yA-mCf+iNK ztJAxyTkm2X7OLIp-R{=An1_W*=ZR|m_O#x`JS$MQ0ANyoB`$@Y4XuP}cRLVU~)N5Y~GA{~1Qzl8-HL`mSy zL2^7033dDOaw4@($>#%!swrY)qBwb=1-M#N;o&$$Bq-X5N`$D2FKbaX&(leX5LHp4 z7FF{VqN=GQL{*fiMHLantr8)sqC_pK<|{;1Q%8uZC{c^5d7v;U5uz$e)S_x$qKdVG zd9lTsAW7;hQS~`SkdO^pkU}w8vG3z1Q&_Tgf|Hk$K-2;0e5-R0qn7Qh9{pfa%jySD zG!N3k{{^6F1|zFp$?YIN(QA+IsTI>i@Mf5tm7~B4+=176g?pwm*9)Gb0-S% z0tF9kyUN%hkd1~b+2|^MbAGQDE_X_B_6mNaA*Gi@9vW|hDo}2=9VAP+6kaBVIOId)D@9mnt+MWxtL%+h#UX$juN&+73voj2%IaTa zN0)YzJ*&!Dhw4y}?N`eR6C`zJxvYp=ttZn$PT~a6l_eicEX9g$b8A)hxA&wvS=SRX zN1bFp8&-?AD)a-5xlu&vOSjyncojNb(G{b9dK_M9NZ3fx&rqfzWu>Kpfq4+%${<%Wnn%;(a#8oqxTEdQ?+knLB5SQ z^5nQzf^Xvr-^Mg7W_eY4^?TpSI2F3XafA9#F_`pm*UHVKoy;V@@>@~iv4SA=a_6zvXBm3oJKl-i zK`1C8rl_a$?;P(cul{PYUe^H|-7{K}%KKi3GbarO;!4u7cL}yPo4-&0DJNw`Qu(BCehv_sA801p5DznY;q@uhB^|iLF zG+lyegb`=q(ScNY5+86E#m>x2Rw%nG$RZ?`Z9_bh1;+d|N)aXxFE!fttDHz1zM4pp zC@d-R-%t$&2vVwY{yp}un*IsZXy+}<^L6hY(My?_sjiSWQJ3UR)CE)QR0aQ@YSo3< zo388enYuzUMO~6iQCC-Wb@}&vt1eEs*5?F9^>P6 zU7p2|pHWlDPgoi9Gd`NDC+w5;M^(nZdute01OrqLGY{u9`r8~NE9(5vT8y$_t#ViCm{KR2I7ri&`Whx?<~RW zln^IC(;tj?KBV+tRiU+mohz&FdXEnA*$Oqp*%us+;$&CX!}X+Uzo*=F^bN!WEhxO` z=2FbExX~O@kt*6U@JcgFE)E>7ndObV`dd6%%VQ(N2p-E@xwPKqD$c-*pZ}rL84tx@ zopz#Jz(>ry@^kZe9&xIx8zFBPtFCY)^9(-A0|`MQ{JmWY=b_f(LYyM5y#og)4iDG? zbyNOoeu&PwQT3okhQB9;6}kD@xS|Dlq!+aQkC$=0Q(MOA{dL7{MN zr*%oKq|J|e!)IW11_Uci8KB{Z^Buj{twsB`rqJb zOv_V6naLG8A3t)8dL<=i*1Wy#%#WYWsvD|j`El&!Otg(dHgM0QGN>As^7Kx*Au#P!DSI)W0Atw%#_hVy zz&Hh@18wM%?mIX|$dFdDgkVfUz(xJwN_l4~%7p7T((tB;6~ulMGk5cbF>`MY$8^00 z#wtqSt|1`a5_C%&+NSJ)`Pv;Fn*uJPs=NQT zwd9mFCiY}QiT8BI&V*GhHM>c`8cm<}kGL+H(QJ3NChu@o6R~O)ZiMu-;^vI?^`dkyE?(l<_>+UcKonbZ!(Dq6m5ldZBC%gy< za3DfWLP7M52FezvqAzvl*TgU1)5#37E}Sg^g_-V9Az%<`@>2u2F2IO^npQy7O@7qP zz#ZD_xJ?6th968c;E+Xbp+u#9Q&SOb&rWALEbsbI)=k02Y!#n55V@Q4PF2 zK2Tx^K};I1*PAj)b}5zBzcc4S&JOt1it%%*OGrA&ejV?99+_ zh=1H;i8wn&zrlL@%p8%8?XPo=p8H&yBSY#kC+RX-$6T3FSzPA>JVT9L9x?;oyFLw4MDBi@_Y@=%yjr=zj&CQ=QF; zCsFoh;;bqZDcBk&$_?3BoFRBhcIx^Uax|^x>{d)vmSq-~d^)C5`NZcxOl>!0&+wTF zY)J*aF#BUy_o=*MFOI5KZXIzNHgn#PeNr3mVJX$KB0;fm z&=pWDmaf$BG^%{~L4W8ma6GuugK}nCuAsD3f@5)2W|L!Pi^{rVu8+lK%#LziJ7$)% z@4~w_H4QuL9?-VS?)+RoVvLrE@>Smc8<@MAU?fR+L$<1>R0YS0<xWmz!>a>; zz_%ag%7HZ1M;|*)RLJoAg%yy{hMjW%0{{WDUSJ?V0f>K0nF80)x`&k7NpS$;QjqsR(;|>{PYj@MB#s!f*QR1Hz*FyR~6KsHCO_7Gf z7tEys2JcVklEP^X2G$S^1|N9`KbluGt?{d#!XMn^6qZZNJA!FE*Ub02kT&-S6s|`L z3fH4e$l9%RJ{!5!F683983ShE4?=z#_=#feKt z|3OY?G?auuPGxN}Hv!#{{U^5i3$HF1)mUahds?F+tubgCZHihNe&DTHD3(w#^WEaM zaCW$@)4WeH)XqeR(CH9gGXi8z!$|0>6byGo4hsq+M*x(WcV{9;da-w7t|dqKy!kN9 zL{bA4wWt!-bcVtjWx#w5t$~F#HG?=ci|O+b@cv}ZvLnACCo&y2a?&+8tv=m489WAJ zLbTqH{h0WSDPsixRPYYI5tR1b{3>0-ZZbx^hn;@ndTfR1Ma>hMdi>MTV`mbnG6`XavV&86REye& z;{#*P2jT>I>QJ!FI%*Na;cc4xzTCAeKVf$)gcp3T} z@bZ03-K4M%XYWj2B4TvUMm;mk^>i8QIb!ECBhl(-gMcv%BYmx}wKX-LcB(9j(g~yo zK!XB<==zpr*-qU3ku^#BlC%LbUpCsn(>`IdB3-Aj=6q*7mn8I)sv^YZuZvr-NO@$` z4@Ds0HeLuNU?C|1HldRe0Bn7mlmKq$LJ2rWLv<79qL;>}U!e`_ik{%hQ~(qXidvn( zpdp`)syPu4Raz$}OF@?G(?TFUsbG)I$rKD^toM@48q8NNcP*I-Amx~|R)t8=-MX5PbYD5O7PLLqSQ%- zB!yZrkWy`x{U5fO<|q*Jq~U2w^HC&B){iBt$GSK`NhtfUzY7KS5w}*I;1QjFxYH=G zl1ZBI6ERJI5`~zfVnNpl?uOtB6&2BZy40ve z6g~co)L0f2gbh~p@0)_veQHYc?gOgXnTL37sj-dzD<;6aShw97wXp_ooEN$fTcMoy z=A+dMAHFGWl$T&gTjF0RV*#gr;* zbe*WO1j)LVG^ZV^W#k}1qt0rCnqjN6A3yt@@0&~NEZB(lo7CCmP-p38sI&U2QD>X4 zYGqdRxUPB!-6M9~VXF(KPca?Vk3(=RSm&719UJvjUutM#DppIvvQShduEIDUnWpPW zyA0*EH_;!~?e~RbGXy_TKc3CUY~gxDIw^wuVf{|)s2Y`-Q)u=LA3@hmJnWHlVm2DS zfzc?WMiO?UnTTo*a*xOq>{u0+E9`=hnaHp&in0hzY=lE&fDRk%B=LgY-@!Mv8BB4i z`G+klc)~=Kg0{ATb=oO&!V`x3jpHp6pD?Y2NmRksJV{X1_VtV)>|n*^L=jrPq$OOF zONbWD;Fb`AtiEv>mhju%jycHxII)8l!fw)h|DlL6aqABo)cD$9_EqsBQ5`CSir&UzcSo|M}m4>^*<>vETgZ-_M9t zm$6QfiLu_prbIZhJ*WP6@rVUJXO!Z5c?3x?1 zYX~^HuloAa-Tx}>Neot5w~fYAw|!}ihi=SjJeq=r5Vj=#8-|=MOqljsPXYSmg4wXx zTiuhEnzR8FP`EAug;F|HEq|$5)?95@`jYNkp-1p!AmI@^mu5X74W~6wWD8$RW7FVa zJ1ucSmFuXd6A@Ljn@x)sD0r@sFEt`<_Un)#L}&mC7;y4V9F)YkA-m0ViQ%=G0SLV) z$gv*eGlvMwR2m^doJ?DWxW)sA&C1l$0r6m{QCf;j?HjVHB|vzRv`{iL)biu?mLKd) z1fVxJ;zOS*nSoYJx%{F=a9obqKwD@#P`OPUX#a#~?VmJq-MUiaoH*y)ra7miMhMyo zc78@uBPJj!E89Y&q~{?tMi&zr+d?W}9j_}ihVgosG+XSDumL47UyRUTjyDh*eQUPD z3T+*&rM7Ya)G|YQ(9{WIJopS{#`=4^){_`TmTPaIma)pT50X8-!c1iKT=H2;4w(GnABE;h^Pl_&Z$6%&Lkw57yCNC_hDOlyO*9vS_x(15zMvP{o#L1K-{T1(u@#96MDxIp8!snDFxCpCwL_Ro-s7 z)b`UNGz+xF#Zu=m%#TQ2jGs0PtV=9(P!hScIcWJ?1p6? z*<^`B+1})WUTZygFv2vJH)+vjiO$1in{?-Tx^)<1*=OZgY7cFpte#_y#s1PIt!!(b zk<|ED+~!zN2s_powG7=X07(6vS!1M5qrxo=MegCg?&KTRc!Ya${rXzVAn`9DQ{P~Lh*mwj)vCOv9;F7X>NE_NkW`~CL7SCh_pnQM zTdeHWOPS1u0I?2;fdS_X3B+I6fcUt;+6J+w;L)NDV$Es_qQvCU#2CaU_4olwCJa|da5)Tbos$`y8Op_&uVAu zy^L2?_=|cqs4J{tuwIv;7=7?zw>A4g#Fb2s5vHRL9$EK;N8Rq!2b31_$B@?RL1K&F zrB9b;d+@!NUm^V){t%N(qohE&p+O?WxGH#_?yP&t)!EJ^66Zgq%q);HWVP-oSF69E zcvGmU;_P&&srvX?J>ZMsN2&X2f6CX{Sbtm(T%4R|Gih2b(9VRhd`4+nrmNc8PSc|F z&d%fJM9)qaH~6C>pp|m&Zz>`&DHa-%h;fI~jP&Q`7ZwLg%UiY%w{5>-2SMh-0^($~ z3qcH!!j5XI{^Z|jtoy66RzdUX|4Fx3D|RfeemdRm)sl2xeQ&zmvxMfFS1J9D0Inr*#FIHU|hQW1Y*wt0!)ah_Fl}Tr)=_lD+ zH<*7mxJnNKei;8(dbnXMkbpjN)@7;s{1NoXuPNb9IAfLN_ z=Es@RyC@=6nLMlQH0d3I)i<-9zPjr63LWdt>V2!L-6J~aZ+F>I-wuuI-e@bX(qBSL zgP+Pf{kyBqNE;>H1Pg9zf<*9;x0>kJBBD5u)0j)*)%6DZf+n}@%d)vS{y+P__9IR? zS0nTUamCI%(KS&Qti>_Q62`x!CHZ)X5KyvnZ$J?BE0v}(k`Jff5y1YYWk67J)Q|g< z3j}ikg1HF@h!dp=eXe$i%@YJznp^|zH4o^KdZxLQEJA)vDtryaq#!gaip*{eIS8^S|~ZSrpT-Qt)0{b?2R;GPR0mXifvA0a)GTwSxj*G=@W( z`eH~mKC_C*8FdsN2$!kz^19wu-mAF`ZP;$LY0s@!n?tz zuIel)3m&_i=GN7k07{q8F~g?cO#K2z>bwXB%H^1^gq%+~Mg>||TnQm!9c?B|)Bx~~ zRLlaD9f6F7)*?@BQ|bscut>==I{1#!e)~GWjFYVnvjY#>(n(g4Ns{+uSXZ1R&wLIe z^@@-}3L-8-JCxkEhAIY6McOn?1F?6S0}2P)2B^TUp1U##QGtt5aZ-~ladDTP*mk^8Z< zU)JD4^;Xu|0l9Kekk?3IK_4dF^2;;-@8%8vm)?s6*}P3~kl;y1qJ`IGFxinpWtq~x z;tXCvJ4^sM?`aHnUpL3&LXG)>!Cq9~SKl(fOJ6RIc<@jx1Qyi?pso~pIe!-s^;G7# z75AOW7N;v)TvOSiD(g!IF1oV5AW(1~ArnDm_P5lP84Q!2Ev%_*L6td=)`Bb3;aXI- zD^+Gk&*fESPfk>3);519Q@F$tA<}Y!-Jl{JiHfE&tEUQKr9v@yxEvp@o>OWY zU#k}i9NQ{hS*^0B<;V1AQC-xj9Gd3U)ic?xJbdAWuekjVckcxqpmDOe^^WD6wG*v5 zl!H|u?&|Y5ARg{oXLc<50Y`e&=WnnHx$GUTx~5d+nJJcDp;Zlwi->t>^1rM&S+4&u zE5Al>o4i(4_1D$1zIMZPZNFa9YdlSp*Jb$Q6> z7L4ZGlZ6W1C!GjwGZZB~vV+b;B@!KdLC2t02qQ+(^V&l5+0Mzpq&&>ugj$gyv52wL z2aXTo0=rteBYGWb8d+^*&;SD1Pqd{YWmf+^Q|D|R#23b$b5-fxeN*pzr+4C78pAgc z{Rfs>J;kNUT%sA?E(@e|QUNr7;;?`keztJVFeHMJK*vb-tf$%{Ntar>w0_ z9ic%h9t4b7v}t1(YD?fN`>)G7>LZ9XkT;j(<}t&KWeKlEFw{{1E2nmC8%jpCv0MQAT!8MWrwh(={pmHsX%cT146>D&(HDv)rRBw zCxz!n8i0o>*UiivS?vYBjaP%~^=GH6sSF~K&^B6TR(6?6%}^IDPGkd3+@>7bkf$d{ z)+F=SOioM_SQe9`V&+WP?uYOwXmXla3A|06F7pPpjM|fKUj(UUx(!1CH8k;kdGpn=d4~eWt`K>0z}Bua)HRW;@?_X0nx4j#_BEhac$FCYiVbrvT>*7F_8^ey)6F@!bzqH=-Z!A;bw6pRj0U@oQjFWR?{# zTUlIX>D9*#!<1#u7Ur_7fi~Y}6ni@R>QbpC=0@m_a7&I-Lf?mL*5xa9*B#c8_A&k< z@zz?4IR1;Z7SZKIUf(I{)Tj4#=F>@tixclk5X^!JW<1YyHMr;fLkl9AUb!Go2-iC5 z8(p5>x6g8BTOWhfNx}UV$!Lcjh4~5*93p)q0YQ*M*WKZjJG}#dnj_H1)1!nJ;6!qJe43!Ne&PEtX!Y zy3N(GE%)ns1Fr4>?yk`Dx`s85m^8i!jy_HteLoJh4H~<)-PkKO)!6=~v1{6my(BgE zilx09HMXbS*vmK7*ejaGu5LHBJ2m!lnG@@Sk^m@&UnYxX z{l-`=n>4m>Q;of>X>41&G4JGNO83bqTE8(YnMq?W-Be@yn#RbitS7_UMk&x z{l?JPCyk9a)!0j$#unO*ImDjE#xm{PSTT+IU9IpJLVeWBgUg_@P#b?od(ui7*_=2triEXRWIeVibJ=&$Vx0V1*)h~Eu+;@>SI|;jymm`9 zlwCjIP}{+9ap`KgG1niJ_+~Szmt162mO0JHM$O2Wt;xucnjRS>&5ol+hsHq`O0jh` zbp#`#GgyMaQP&TZJ&Bq|%1~64vzZE@W>o+`oT@=~n>iy!Wln;!12ix1aHXg1&3KUh0l z1b*8h-)MHxPG0EUj__;8h+BZ*;2 z?v3WA?(DN`hl^`@Gc};Az4+mh!+k?DVw!fhUVOOL7%z>?b!UHf?Qqe|HZxpB^}J|S zwXo^ovXm<$Y$H}hFD|FEw&$mmtQlw8M(BY?{NhK8?_!gai%;ZYqoo&{8SMt0g)wVU zX+h}|Lc!PR71j?YGR5k)WeUc>JTUG$-U-I91IX}(;ZBHi+vI_fOu>)QI4yA>b>u=v z&(|8NoR)qKoYAqZ4a*aa_bLRSJ^zgWbeZI_L=1YmlEHw%;>g9$01Hit9%&77#vR>S zGO)G7jB2k0*K%KYEnsSXdCx@Unp-!M)k_9^LC7$3%bfChvSg5_30Cr3Od?OPmJB?{ z>Xj`XzDd(%v*j;0KfpgNnp0W(v))8}<}>59KMahJFOkzk=ulXzI5}s0iF4+#>a`8G za88GsKtM6NnuI!y@QERg}ko$)=0ua%Pn*`8eUGlO3G|*RT z0R$qh2cTs?z6=np9Wlr6Fralnw^c9JfDTd?fR;7{&^Fh%84Th8xEFyzoOiSyfY^z( z9)Nc0@n?iVSE+_IV7O9G*To<_b}*K-c*3 zWq@cc2ED}HTnB@$)r%R>%_&P1A--cya*Z?fV2f4pjpG3)_lkS5Q?*=BXdoq7oiKyr z_#ZL_>3}^_6^fgYHcN|Db2?y;aK_tN_kj5w8k3_c7@Ssg2%*pKs#(DjN8a&Lr}634 ze2YsE)S*|@d1rOw5i`N~x_j3hlh4iXsPWF~^+y;%fAX%6BY2VVu#`vm%EF*J|BL8k zd#e*4ORI(TgVW7}lPWQ)&NmOzCl_WP-1kfMild?iPwKTpVYKpfuDJs$)v8LSFd4i{ z_1${%M9)A`;)L@~hQI>u3VQ^QZ$V&4QW%U8@7)HX*DPu5EzE=igi(KW>T!n{j}`=3 zI5dzm7UGWJ_iCWXsZ$E<;~PST;+rfWTEm%eU47_V4iF4=xud=>h3~)S5NEeFV}NK)75>t zYpOlb+^M3I_1(jvr85mu3s6a_r#^mKOZvk<=pd!Nt5{S~72hP<$fU-gN3dv`ji`u_ z)-fqypbZonW~};hN$*1Y7j(z+tl~5Xs3NZ?dJQKq12u#mrVfX0unNlg_K(v|pP1zB z)8|sBtEYKhy|TJbxOD;}<9}|H(Vln875@O^C=Smin!?THcgDUOS}wlf@GbPUn_|9E zv=mE>ns$elXc?;`nrOcBP15{W%hYbXNAv06hWvp3l^Im1&0~3@MS zF4Lkf!3tKu6xC4uyfw;vrHIW>=NOlw74que@w<=j@<|j#efZ5Bc15XaKr`he7prhD zrm;tUwFNpT;_frr z&^TSy*7ka3sYad(pWs6Oh> zf_TYl0hNS6nwMP-+MpM?AT>(YKUBQ)4&RGqEY7(!(ULt?D^=^`8a zRPCv#w(3m!vh2*y#hpYLfCAzNh(-E6%JKs+4F+)&$5SQ4*QY^MYpOkydfN<8fimzG z7hemWvk5!~ipXpSqcL*}@GOI*jBu2}i6DQX#k3R5Q5XaUQrbHIT znO{JbW-Gt-p$GrvKY9Nz{qw&w7=i9$3Ys?OJWzFvsmXdU_?qA%^+`@?rW727PNrjB zI7C8$MY-)!zOL^}wx&DQD2KyT7eHFdzzZG-b^(V{fFnr6rt^-u;Q5onUA%UJq{6e0 zJsrqgUorCGUxHJc-)Q`2l)h=E8N-w|63QXuf1kby1dyP9gAT#r!R=Yjo)2Q?yKL4< z7ff_9JZfK8F?@k2NA1{`R7F+{?~x<`6Obky{t-w?G%u7&{)p=msQD&9-Qi$lG2_CC zCh5@dmvfd+I)lF##FgMehnB|LZdV-#9Mu<8=lO}KYxNcP=H%6d<`oEL7z&h_>B(g_ z{C|PR@tp9(*tXW)hb$m?_}I68giIj(0VbdkIF=vKzv|q*=^3sA->lq29)TefF1z^& z-uh2`Hg;qb${+_ZN;cxA+sh9f*@euC$yB2CxEfZ^A9Ll1J~oqOz6C|VVo|tntE17U zanU6TF0QEndlFQ@rLnCe%qQW*{A-ILFR-IHz-Wobb>+P>mrf?C!47{D9m@uRb0j)o zrl36b^BUo@!B6HPmpP?LZ)u@x@PdlkP@@NkefkJc%QA;o#0hYaLL35jGYVUqByQAw zizK=x3D``vuOW&3B8lBR;^ZN+?kAo_tzi5^iIeb8kj7DqAB;Q1h8 z^LVMRb&8X80|L`M{czCex+)lZ80eRT0s`lhtirK{b&7uw1{a*-5t-5keX{C)C}kpD z=<|WY(D83~rokp)*)`Oa+TzxvKwSiA#SG9in1+uOmjD`dUmnnaasrxBNx%YV5O8aJ z_CTibefKMIBkAC_`X41f9b2=jkG=3M(%Z=ZfreeZgJ8YtzJ#;$+Hl519ZuV%70L~J zy~{^g?XIo`AyN4_wG_ER1X-DV?KnG3^d6$+2n9QL9h(6^1&+EimKHd zGYV$un!Bp*kweUfTl-3ud&};gQHM7j+9)&Wz8y{L$ouFE1Q?YS6_z5Mxf3AJ%;7uA z`6C)@yS+?LASTi9{t6mdGN?M=U8m+$-AM`qG3+MF_>0%dUd}C zWA{f6$U*f$@TxH&e+!NB0X4m44>FP&-W6w7(4H8?*k=|Mgqsc_oE;WYmHV1!OMJ<&iK;Q0rRR7~~k?5HLUP z%iabsV{u=(XxYL`$gFlil*O$$9%!CEFvjqw#w~LwM60o_dY3x8_nVJUHu{J|d6%9I zjWh235RmXS!9f~ybQY{o-!(WUDqhn!91L<7U=&rw9U^%xVF`_@j&HeQtBSs1Z)2{a zU9l6Gu(vGWkDlPUwmT*~=cwO}@SG0pWnOD!A9ZSKtA~i3U=&8Oo^nWvvGAj~gEV;9!ItlJpV0EWoZa|})gw5Nrvcd&@AZ)o4om$ma0w;zekK>i4rtz+ z_=$$kdW-XCO7cqr>mB3EJhGZ4E1j^AN5%8^iY%mBlw!dpjHl9>yiu@ z`xJ1lV>VD+CeY0xt;}>K$_H@baW(W%R@%^Ghf{t4R+tfZUO^i0K|Z+?R>+;WV9c#% zO&f<3lXVBw8M#d8j3e&2R%ggwG259=>J03y=?An4+|@U;Pf#UIFHSgXQw?*3aOnPB z^lyS>)q^p4(A)&wv<%xfwe>}9Qy2#h)fgx63%lXB{3PXFKkE0uHCy>Kg19ebS32^9 zC8O#zEEx+2mMlBRTFSUs!;&exE=#ukQ6MltqGH05VSsIx43O4g$zsU#LjAZnJI>qe zI5wkc)IcDie2w?uj4BIuoST|VQOz_Uo6)FGOhgtASfq}Y`+sy5_YP*!T?Zsq?!FbL z9pZ$AR&r=okMIQ(xVrkzBWMP?V}KN=6V*xX{6}L3?}U4|@6nrwqntw_szPZa34}0%v4~Y^=z)v+ zobupo2oUCb23;AjKNo^)Q$u{nQ?aJ%EZ=)tD?m|p-{gIDdT8c4s2=CCdf{3PTx0dq z>a-pjOsDir%dOQ3=+KPTFw)Hf{Lzhmn>QzQ^I&?T-=^3p-8_=s=(j0$S~riTH~MXg zoz=}_>5YDyV&`;oCcV*bQ|w9IJf7a@w<&gBH&3KD`fZ9m)qeAgZuCThd%AsdK{tA$ zH=k_ZJf|By(VJ)6H>=;q8$HpR=k=z(Ii@#yqBlp|H}~mAPxR*A_RVqK=!xFk-@ZAa z8$HpRhjsHny3ud*=A>>OOmFnt6g#DxN75VpHpNcs=F#*Pj8O$$CK4Ac3e02rZ@U+iiwj1LEYajBSwba`nKRi(t8?` z#`&`!#iBYR0>pVBekoN)aR5-USK#@ecoQt4xc!c0(X^JG^o?3;m>1iLrGdZ`-ywV6 z%(Ld8TBZ`4=o~&|3Cer8#XA)eEY{*W*Xsv-NsME{Qq*-k>*AVR&Y{F7ekt}{9H3`n zJ<`$>r<9%03}s++8=p^52xlvU!XJi-9#Wx^5lAg|sor~s3( zMk%EN{fyWK!B6ZD>v^Oll;NT3vAD(R2i6O(CHiMQt~lYDDsQG6;M@yG2LyP>bq^$9 z(&QVnMTn(>_RT*r{C8o6$YNmRn4Sp}YArmO3q_a<1#Ws<45(ofi=jKQ7}&UW5sQH# zZ_Z+vYb=JA-s$sxI#U+IoUw(DGensRDDv3av!+507|^;~rUKSlG8GVJHk3yl1BmBR zaU(@nAdPF6sUSU*8QYcI&`94<`J_+DT3|hrZb&7UuT?dQkHle&GOa|@ z!&RDltk0+nPd=^=O|SN1v{md@9XJB^1$CS7<~ zfb3qn(O90jMxlSTHixndW?L67ghyyKQ1RNm0K}%St*OPNhw8fx~#?*1R(;jPAJBySpfmwgrkI!5qc+xFjwn(KxAY1gYc_v z=mAkYYT&xoim|e44~X&#+5=Me(|#7)RuE+kPc)9`*&5rbYkcaiv8^DfkXQp*F`h^W z&QMKLZce(^wvsXp6q$(`6QA&aAm4yAB@8pI*;{_nifn4l(X_zTfMq>WWtt@wt<`)g z8T{h{hnz@-0*M&mRlqgvD0jOoUub_YzD8_2c^t!0mTWtjPWV;C%p?-QYnqf#o(>7+ zgjonLa!V!K4h{iLP>X5BiP>fRjqC>=k_`=O45kUi(RC0+#6&+LG_s*`+n18#_yn{; z9W*I3nRhW@9F*#jJHzn{h;ad>Mz?tI#?XThY zpnW4~Lt{I%`Y_!3s54C+lZP|FcqlCbp`+9>K=Un(I&t!Ho-;UVRMrjKJHrnKZ_JMn zd7@h7zz~V>Wmmg2b8zCIYO1<-9AuAEnIEq1S)G5&9m_q5H{Bx&*l8`V6ifw&%^g+v zvK)8>+9zb2SFCxhN$`01Zqaz7{Y9(tJ*`_0vQ15;?*r!ncc8oQ%sxZ$9A+jBfuIfm zle#FYS5zgBQc-u2C{P$vXgp?Nps|nVTDK1xO9(K3=lK<3*+RC$l=z=JroKeSKxcd_ z5|1^woZ*cxHJKYjEVYsh@Q~UD8x<0&GW+$K!GLoSiQLhGr7}CvBz>yhS-ry_1J2^e z9?0h%N8}i0e3QjaXrep#a9_@PK0%2NJTtB(Pu>{KoRd4yZM6Q`5$($xM`5m|H#VG8 zyu-slXJCE16P^Uk+7$TQxqxs0SA@xu?5f-^LO~N|0k*0>ZfRO@hcz@)qt4b~_eUEl zGJFia=b9HjA~Xs_j>elhAlk(Hm0_}(Q5b=0H31tH8!X0c;!(BwGh2gsnjiX#x;BuR z>(o_`4Y-I|i|T64saC>qu-xUjmhz;We#vc5w!Jd{+A-vtmZ$PYd6I?-Fs7BKMsb4V zc&T+EyX=|9DaDD?E`gmhB8B2q3qPPLs)R`(98kbPmQb9iOo~&tU=G2(8DG5vw`h|B zB?m>soHJ1+4arlF#Ap;JMh{zNl4|vvVN7(V0Z?L@iB5?5qJCQ}c-Exd1V^WHcv3ge zp6K#M+LQDNCixQD)8Mz~$s>*6Fe97r&K^mulNYYF39d#Y$d%>IRVbE-o~nGTuTqjBzi{pCdwjM9oFAn&JSca2 zHiGOu?kQDy&A7##LRk!Xy*7^M6a!;V;Y=F${EAs`-#zT-o80I2l;ntP(lKlecteq7A^8 zMjc4oqX$L35ZJLx3;EjCHZ?MQ99jVrGn2?llb=d@m0tVhg zgJ^FQQ~V)f$MSec19Df)w2~?pox?<Eh?=i^uZ8-^DVY1TG2b6feNGI9E$efOGg$0J?jiIKU0)C?iTImJA=} zRy;<68cZ!r4*Bo{daccngDp+xzBRA1!9%j@n#S@2{@0j!j(nk*iJ_h4mlZAbqLnB~ zcaua(x|>dvguW~@q4f6CG-2TM@e!4Pk<=WK!@o!tdQ38!g(km^b<5CZk<;*ILPE=$B@` znrv^wcn0s>N8zG@p7#5x*td({$fKsb$Gr5I=(so%Xv`Ednar}!&G5W^mVz@M{Qc9a zd@49|w>rQHKPg5pt3JkqJw(=JgYB#`{^9AY+E$(6$DxS7uA?F%rm%>}ITDNIpf&X9 zrRH%DEY~Qs$;2!D(gmRd#y#O?!Z_m{eXyfOMAD7agmRBnOl`$s(aepF zGgV84V!wb85`{q7xG5Wy;6f0c@9S^W4V`(Oduqm17or9@GiI+zdZy&U2Fs=0$o~qd z;7fNBJubO#V$_f(ej{ftOw!;i0-WGa;dp$pX8s-j10bf23@Jfjn)d1x&#Nz?ESq&7 z*7Z?=_6I2Vl%ngVAtF?Vk_nm&-qr)s4g<|drQb<;dPd-E3{V~rxS)1>*b2p^$H@3^ zX3wtu4uSoA0<|#4j<I~PR0dg&HS7hDl%V!qO&VQ>0I zAKwwdxe-V%3Q{R^FJa`xb|F0Q%xNYE$D_9=?Bk<+vI~J}NE;CxsVS&FO8Mcxpvk`< zO%h(4LO`oCylM`SGT*FzMUR9c#GXH?FVh)TOVkTrt)6MUzfiw#orRP*>h9uzBU1kN zW|$%mYaa=_#FOh`7L&~ug@VD+Q>w>55yLFfFaw|DEAm>ve*Ji~CBI5#>oMLI?KO!Y zchpM^)#@LqJ|fE$>8?Hi@xA=;&{cx!;!NO&EBXvNe&He=PxIp;Om+N;K4)r(@eL;~ zD)Yhda_nCQ>$H+U2~x8NQ-B_Xuc+UGIK;$qQ7y&x6V-eA**8JVl+Tp zQYnlGA|u0MO27C1=}o<;mzRHO3^wkY3XRDk12rW<>cDm!>#eDZcS z`4tx@`4wHu9fW5ovmtH=Ni26rjZgu5zoY>yP#q~952I9#@b`@nQx2a)@m2Xqi3=nV<*((U(=MDj<>Hz!u;Vi0`H*(R6v%qPH7}Y5WOqE<~nh93`Y10qN z19Nci2C6vCX13MNt&#%*hv7*NB?qXHWhG7Rc!521bl~#7htK<)sKGt)AgJXq89LeQ z1>@AeDl6IfRN}rw0ljq(x}bJQ6`iajX@cv4UP*({l~MyxOM+(MF6RdrPhr(6xw2S^ zLGtO(UQl^khG1e}Mn`%b&qq{7m0Ttqb}=C^96imhK81y=%qW{wFECm=w5>T+a}l+# zLl%Qm^C6xuWQWJvaRzr58-u^WLFo$-Mha4f-`|5@C<7jy!=r_2HIIX8KuUHe@|c3! z>8`2&u*J{37rj7UHp%tl-C>l|y;dxdVWr0V3e zr->lo$u5zhW`*hR+%9)CKThE-iM8C(i(ASL3yOZo1$0KY@)kxGT0ivYN_aJ+VOO1^ zgh0PJaR}rZm{z1l92q_No~jsUuiAG=dZo`V0=YFT3(Z^0l;}3BL?OJotz@2OIQ7GN zoidCbs(uHas`-3ka;;rUujbK{jP|DdMy|BC?v3=dS8-;@O$<(#;=yn8l}__}tFLs- z*lp^3uX=h?;hKhGuU_;;uH>?}!U2(L^Zrj?vdyxCf+VqR&JMUV5=(5zWm%tni)G(f7hx-V`5YhEmE>tI(bLX)b333bJhz&4{| zC9suHpbn4>)`z2-Ug>+95|eB)*5U&pV=W^JrdZ?EK8-tdhU!=0)meonQ`anLVE}o==>4T^r-n z*ERDSGpz&bZWA0%|3^sh3ou&Whk`^6+PGr*|C(84$?8u@Kcsmb`-D)+1GQQKq`g7w z#cK_#|4B7Uyb6)`0j?rxb+w*jjYnEtOWk?#?LG3Mv=kZhuYtBY!=KFuZwExxJ&b?i zlNB)tosc3rX1ohb35gbrUq1Y2GU_?FR7~%h`tD=8i+9ySu8J}MSdRvO-s>#NxI#&` z_6P-P!ZRSiK>@&Hg|I3xEfRYJHo=A;^f~u|YH@D2Jc!So7#eENo&O zW?Ljg_8(&Np1u_+yRf|X9&IZoWNQla_=EV?JjZCmASN1eyh5rv)R>V z4#kP;I*DbF@mtRYs65Nj8PGPgzQs><{8PzPqJzbq?0z3F(V6OZ(Q7&-mxx9x)UgzN z2jO}5r2rEV;^b%IbGvJOU zu4<6{?Boxf>lUo9F35})BWM1oBjL^nxbqfHd|RdMIY!U*zEEkI3&fDHVXithfr!3r zO<=?_v?kDVG*naT%%hfCJ&!$G;u=PDS(C<%dM!?d9)?#~PE|TM-Rp(5y(S@WtJg#j zn@1x;$)l~q?>s&QI15Y~x^mXJFmYPjy-z`TW-1i3lLMei=xCpOC}oV>HK&JzAI+oTRXmg3eVNe+rNq-SE~=q@ zooV`ts?@RzThM@Co7c$_5bVcOTgo*>b~zb zdy-C}`^HTyG;Om?_GAjQH(j7CZRtW~Gnq_onrV}nFf-|*1*Qv%Ae$SATTv9y7ePN2 zRFt}aAj;w=g2<(@UVhH#NBA;$vdc0_M;1lSS#5C@{Z#V)A+qDP*W2KWl_ z2mKz4Qk-y5n*5lKj}K@Uf=jJ{@-BW>O8*bIpaGp0Hy>;!;-yB&S$usI6anTk%lbB2 zwC=)xW^k^Bm5v+8(__>Dx3Z$EE>D_EDzKg>i>1r3w7O8WF%Mi(3Y1t#JTq7X;0^*n z)>c|cOd_-h=;Lu^CT^|xs``JDkf2lHP%DkU&J^-=CZuSTZ}1%e-ULsiK4Hd{PLv3D z=+F+a;ZiqcO*oNeiJH`^s05N*Ky==K*%v8iAo2y(4EUcM=vksxi&@_y)WQSa>e#+G zU>npNSD<5?0e)@PCx4!Ko)qD(^dN_107R|`$P!D+68Z!1^L6X@VzKadanxVyP*Qh3 zamyz{42eSrm~;?K#gY{B!~YD5tAZ*!l!SnBiVlV5Pkcc^rX2u28U=*z@A-Y!@!PH6 zNaV`j!TYQi1th?ffCMTmo?@bZK2b9!c8NWSMIuQkEjYuEvnK&_@D}-ufju%sDJu2~ zijbEWUNsb2{^NRukgQh}kSE))K1@6dOHMQd6OB7ptgt{s_oa}#_%*ay6bz2sEs;jV zng#g)jD1dXY#T5`T1t{FR)}~u9d3Aya5TLF!Vr>g7S`~`BFux(CGGMFhLP}Q`z+sj z{6Yk?y@T6tAdz9-bBB(BV_tyo=tCGKL54kv0>)Zc>i)I(^e-nCzGiC?WwxjYMulJT z;8Pu+69NckDqn-9pymtN$2I^L=#0>d!_92Sh18*~|Yk~9VN2!UzFy+uBg=5zc24DIL4w^beTBEe<&|)?4 z%-{?;Da45|m<;PS=#}yyACV1ac9YwQN8H>kBVwckZ3RHlcEA_FAKm~#fCKn|dL)vF z&hpC~pckI(Lk#+`LkcB`fg1c25x@fjBo*;lR?t1&+xSkF3id=ZXW#yV!J+DaXaW1| z@PRdoUNewGSm~l1urT(@OS`t8FU5EH+pJYU{oT%Q@9>*3Xm0#*I}Htd_ZT~A(ckZ= zE|6DS(kBdoL>nEWz~}KmP~aZ)yCcQen;elU)_^-EVak&=7RN-AksDpnCVRst6Tu{f z+nmYUPJmKC2kIotKSzgw*9z!wQAx#Jrf9LMDayP*PQp+o{I1NEGOmU)l z#R-Z#;)G6YDNgVvh!uoel!_jmWkQ@_YA8-HcVs)FrVuBrDHtID0d^oUJV0{rP}Yl5 z1J91sh~NvGm^MI12bZ+v#E<&FSB6S4Z&I9N>L|}AAQJr=IH$pj&T>THpaUWT38=729dcVz1y zMlKG-faJs(iTJeH4txa?Yu1MrK^gR4Qw-6(2ladz8^QUSkutD9FOQes&~kTz<2Xic z2zvwdyqNdI6RW_3jJ7t`AyeCUMV3}T00HKd9tSsudB;C-UM z#VH7fJbTh8t=KS>$bdB=;sJ4wIERq>d=eX!6h^?P&q%xhrQ*YIa1{wLaO8LgT~C|#e@_jZbLx046jgq1sd4P_|z+tb_u)H)1?HzS|QDeE~y&Ghz)3Q zJQf5*MoxitBDe}dbwYsYx_E={uN=5Gj|FH_NI4ppIrHkfb1kzXTB~A|eiq0@V1cD|FVN`YJ+waPq@g zsKLa@=q^li8QsMZsH_Q-T|{@O#Ur}wi-3RdR2!^6o<7UyZh*QwV$sFuuHS6~ABl6? z5Mc;-0?;knzz6oA%`*@|3j(M7qM6F^=q`>qr5Wg>Zq5d9t`AgdGeETClYXdBj75l6 zvak=_=q^OK0Ei|R8i*hQ;j^B1OfF(e{zLb>wpShFQ*~X@C;2n@&Vak_&vcF$5$jpr z(YPVMl!u4t9m4BoM8Baq9}&%Nv$UO7Aa{%KK0l-!tgff4lh0;A*Rk~ z9X@c6=^>@yS0yH17K4Zwa*!p0vV;gVvc!0p5hXb3q81z7!6X<1X$@;wdhpl>R^m;x zd1yM4L&4Pys=*klbv*b0)P+TqAd4YhpP~t11;AC^CQh!VafUpfuBnP2k7wr{2 zOgVsOI`T&j95j8E#+CQZ{eRDz)Hy6u(k_OydEa)TT>ScYRoVEsVYir@? zr7w2@^a1P3w3_fNtZ&x1*M)NWPMFh}MAV?z0NSZP=+-ejJh-%R5TkNFVjkKGuoJDM z-|0JRbg&QjYlyTR5P&-R6#wB|dmm;Wo@N!@C|Dja<;95~$Ub}k$O6NGU*6>DeMC69 zmpD$+M5L2`4E21>1tPW9z5BlF9LDQI>(*n%B*3+P=cc}jPjHs(TjLS~%y4c)jmF^k zAbcZ=^|fE*wp(BO<T7fc0a8Gu9)-G%!&kKbBznc`&vPMEc;W_`=@~Gx)@B9Abj_X#m~&4Ddy<$vogz zTY*;LA%ZDPTpOY>bOWA_2oBvsz`nsx&X+cda0%Tg9$5Fi{3c+92hf4_C#X(X(W-!z zRCFsM>m(WGy>VDM+LA^AE4Tm$e+Tdx72k~~B4kpWmR+8CD^@SdicJ2(K*vuIt(RZn z5WyD=A*ThFs1t#9IR(&L^46?TFiz|`q{GPiG>A)_Gl1EG0!k_fGL$doktQXEiXbWX zFftse<~RYO7Eu9R&k1x}_YxQp>n;NG#3m~S)ydMu?-yS~#0U912tA6=J2(3KxT>|8gC?^2*#^HH}C}VJn=;|?1?X$I#c+0z-Iy)nYZHr~^^3caeAb~0p?_n%KC2QMc7^7{ zRKYE;TTep6I|Sdh=0d?wmoGRBt z0m9jXt{6JRil;*oegip%!=5ovAI1W><)9flIR05B9>Ob5)0R8wo%jn)F1bIR9$>Tx zEJ+zsEtn3ya)`i+0I=pBeg1o~1q)fol;K`3b{xn43CAIcy_;NV@UCm9i>;Qcg5NO zHe!XS7J~}9mF{r#C!BBiq5Z`a4ixTIHX>Z3!|%Wosg=Dou#Yw~&?-9+Jwi?(FNz4Q z@0PtN7~0Ipok-wgQ=6fDhR&W#835?vI+4)BFd)PVLk!|KMV>sYTKZJY0DqT4Zz{t> z7`Y>L1qw(p*eHg$mLmt`cD&79h-8L}82{gJ1Q4vYCpxh%y5OhJ{VMT#4AO zgf>KhLQR0>F1&ySE%i9-86}PArJA=c{R3EdqoOQBSNK6NPU*qQe?}SFAIw3L zqE%3KQJCf0DTvCHWeK$&K+(&l;D6DV<)d8&*RJkt+ zSe1IiHE$iVNj5RP4S>CCa-PNI%!MCj6OuVB7G}R+E*u_EkM#mqox5J(GA>;&ey$g=fFn|MaiQSH z+ZzERNF3`2yQHh(p{`cva+X3jMzAR5;^6|siZQIkSUlV%Q|z1j$0uKtTsc0ua!RY0 zLCck+lYbW5cUKN(o;z8&as&pja&%|qJfu*Slb z^90=muV;vk8~-Ao)TES)3PPup6UGiXyVy(vX3K^yVM9h~Lkx5yo5EEiTjX|gNFB&? z0K?EXMI4N&56faTd96k|JVj11xWMYXea(hW3F;hDJUnBB>g7O0LkBzCozdk@(j>CX47MEfJ^do<^SV$F#c67iM$JB ze}u^9;fWrC#G2D&bOXo}!G4FRsQ-Y5tWU8LrvyJ8e39O;PlKL7Ec{6#^KX`oiu|wQ zS>$7bKsD&iyIBSlC8!N@QS9CTaTVb}SyC5ZaR`o@p6+gzQQ;VuYxH}PwD`i^EF(#! zNLcs6S(_BjLMu?j=Tl5o z)X`8!OaU;&lGL!kjIb)9pDU4-u$?uOz?vlSf|5Bd-h2$SU^Q~Ltw$;27hE73sg83e z6nGoHo5b%u0HcQ$u@4Cc%V2ga3}y#{GPk@J!`1mvV_b3&a{*a!i3n{HZ+w4AHP|!_ zd~_r%G(mu*t-wD_;|AbKr7$Z{0N!(p z=mIpWu?>}N5HC!GIb(rt^*~L4`v*um*rSZ;pI9`2qGdP({6Yte+`eC(0(GcxSc$w4 ztcf=!GyQhsNFuo-vCYmk=JNfGxoomA)tBtCcaLPU`CLObr)Wx4IaX1WZ{wPS%T2?O zEJ^3e($|)ye^ZuT@1)oEB~Q<7OAcjnc29CJkxtt~&aEfapR?2bJ%rHC_b2j+d}`Rv zjOKg#hBC<=Zi4q*J~2F!&nD8j0Xv(|^d$QGvvw|*7|x8Q^NR9Qj3J2rK8Je*_bYI( z#C`q7RjW7lY*{Dnt5?aSlQ7h%G6iLh#+_w>ntt??v(F#3(@7hEjbu{ke3Cub*^xvx zzo*B2naTFs*`0Pam&&9|3KZXAn8`eHF-BqPaWknH;7z#X)mofgg;eXJ9nlpK~Vc2qfttN97}Ew;Ju9gNyX&raxYm z9(B?yGr8eR4kWfKksD6+B|$3LZHc^{-!o$OjAn;+CWb~yKRZ(CZOPGG9)n4wcc5)O zsu*Zv8t#7FD{&9t{v!G(Exmxdj{Bc*XSr_FLN6THR`i6&R2t2u^C@)3m4;Cd=e7+c z`s^Wlx1GeaxCj&Ey4C4#uhUN-?!@;d2^!kV+Wn|X*g=aufIEdX0aDB5#}m6!`N95d zVplOYYbR49Dc~7cc51tKMfp4W;8>o+J&gO$o%C0nw4KdnvY8#qVk3%muP6&~_u;-a zoyxm}baEoyKU5?u%O$xT_8#C4W!XOQGac6qaG&>s`=~SVa2Xyx5=oe=Qn`_##2zy> zJTfGx8_PVCHnVnqG@G{j%|zN1aG0ZM&;gc>-9NOaF^j26Ha2zk4Yc>Q4#b)g?E`jV zprg61t1r=!>`&Njow1gt#6VMDM_)@<<4~$Eo5=2IOblUh2{xC*+DLCBhf{9%MU_(l z-t~Z$O8`{TleGti&{q%VGaly~OkO;`LGU6@?u0U!?7SV1TS>9vSAktkEF;=*O1KC- zLMh^S(tbo6r=@avr=6VJP!g0*BJTkwkH@oiZgeQ0i^q#pCf~&4E1h+UdMI&xX*EC- zkFTA;E>1iGlxK|E**yTWw2?R5_rzBDMvSmKF_ZwGEspNQH`&DzszK6#Y~%4#@;%Zp zWvL0{Bo6_GSEqL#p_kXg{cDVW>tMzjUW+*rEdA{neIJBIc27LsE$(kmo5i_KfnY&8 z9@bFSfrG8nrF2@G9>}~&td&*+4h6-Qh`_S0-7+gN?Nl&IR*IWxl?vI(3rPkrao(KO zkF_puMPwg&vQOrgvo% zBejcrP4HK+)!xsW|kHjtr%e;E8StygL_pR3_XqqiO0jX~2+8K~$oZ zI@4wHCdw6@@>kg3a6l&8w-o(_FO3tY^8~oO0jAomg?p^(At4du!Z$4DYFq zj1CR0PY>dr)&gA=DsoWqZ)!VhB`wNL! zQ7IJyDtWxzGzI!>Y)ZZk)NymbLmk5)u+#_!Q$ivhwY8@oVm^@vY~!n}XV)N9_2HgW z8ssI#CV`TO_m*?8mUBn!l;uFTfxri{nPHPP0o|7YIcfPPxRVl`c5~pwSeWEdVhVGk zBf`Qlg{qD=9Hixdk$Ok=*Y8C1W?EHL=me)rOy*5Tg=crYXul5mRBc>}Ug@z1ie<$# z^x3Si8RZvv%9E1-Hen9%k#^8~F5p{f_VfS`o)k4{SU^QJ#KkJ<&BdmRE#>>@i|hG8 z=l-a3cW~k*a6#oo%AJg4MW&!cS2c1_2EEp$Ue|!bt1*wC{BhFXww-L5#_8oE|AjY=hSf- zs$|;EODb;Ymvcnik%o@JW#aO_t44Z)wUWug>=N4Lke%L^AM6DF#MX{gkQ_DC3S> z2OOkqZ+f98Z6N=|vh-q4x*GYU6Sw{nq`mn}&+z0ol;tyB>&dT2n(DXPUJKIR_AR98 zR&euIA-$+9P4AkUe-iS^#@+Ngk){&nrU#Jr!n+%3FW&bf?d|_kq^Y8~^{+s>3F)=N zBN?dhSblM-C<>V))XNxUOsAPjkBsKczCG|b;n}2og`$LYRVOD0dYh|hOM#R#W<{0F zp1wYbzPw|<3285^Uq+f^UGEqb=B`0I4b^xkIXVPC5X=i`I|7K&0l0P@xi>zRkD@Ns ziMMlY!o3S_gtfWWwKg`dAwPHsW8*p{kEV)AzP1f8xdzch*!v{VxzxLDPkqun=ZE~o zm6>royQp-HmJiRCM$6{YmaWt+HSr0eb7;IPOt;ZKCgD!qYX*aE5sb0gj3D7vdo7&cCmSsSJZj9fy~XM?0u zgaM#*1?WwU!6V~gm6{NHJ( z;bBeM)h3LzK>$QMh+YN^pVk)ElF$-_FP^ED@ITN=Tn7`BerIX74MXCZxeVO8!V264 z>r|L@z#+zwZJ405Iq@1SV<%RlC|{i`z2hf?p197uGHe;r$1B#sJE#htfQN75;gw3a z%0A1b5VvY^9Vy4 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