From 3c8b05650155dd08ae8c11e2dce85a1118644cb8 Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Wed, 15 Nov 2023 17:53:43 +0100 Subject: [PATCH] Valset update (#81) * Exploring integration points for callbacks * Integration example * Formatting * Bump contracts to v0.7.0-alpha.1 * Start testing first valset workflow * Updates * Add more valset workflows * Bump contracts to v0.7.0-alpha.2 * Fix file name * Integrate with latest version * Bump contract * Fix query * Minor updates * Update contracts to v8 (#94) * Upgrade contracts to v0.8.0-alpha.1 * Add import * Update wasmd version * Revert previous commit * Formatting only * Bump wamsd version * Doc and other updates * Linting * Start testing endblocker * Tests and minor updates * Go mod tidy * Fix query * Fix query in starship * Slice by slice... * Deactivate starship tests --------- Co-authored-by: pinosu <95283998+pinosu@users.noreply.github.com> --- ...yml => starship-e2e-tests.yml_deactivated} | 0 demo/app/app.go | 102 +++--- demo/app/app_test.go | 34 +- demo/app/sim_test.go | 9 +- demo/app/test_helpers.go | 28 +- demo/app/test_support.go | 4 +- demo/cmd/meshd/root.go | 13 +- demo/go.mod | 10 +- demo/go.sum | 54 ++- docs/proto/proto-docs.md | 34 ++ .../meshsecurity/v1beta1/scheduler.proto | 23 ++ tests/e2e/e2e.go | 63 ++++ tests/e2e/go.mod | 13 +- tests/e2e/go.sum | 62 +++- tests/e2e/mvp_test.go | 117 ++----- tests/e2e/test_client.go | 33 +- tests/e2e/valset_test.go | 210 +++++++++++ tests/starship/go.mod | 6 +- tests/starship/go.sum | 42 ++- tests/starship/mvp_test.go | 8 +- tests/starship/setup/main.go | 2 +- tests/starship/setup/setup.go | 27 +- tests/testdata/download_releases.sh | 4 +- tests/testdata/external_staking.wasm.gz | Bin 183457 -> 0 bytes tests/testdata/mesh_converter.wasm.gz | Bin 135404 -> 146259 bytes tests/testdata/mesh_external_staking.wasm.gz | Bin 0 -> 210032 bytes tests/testdata/mesh_native_staking.wasm.gz | Bin 93137 -> 94388 bytes .../mesh_native_staking_proxy.wasm.gz | Bin 94484 -> 95412 bytes tests/testdata/mesh_simple_price_feed.wasm.gz | Bin 74643 -> 75001 bytes tests/testdata/mesh_vault.wasm.gz | Bin 141388 -> 152031 bytes tests/testdata/mesh_virtual_staking.wasm.gz | Bin 103869 -> 124016 bytes tests/testdata/version.txt | 2 +- x/go.mod | 15 +- x/go.sum | 81 ++++- x/meshsecurity/README.md | 2 + x/meshsecurity/abci.go | 31 +- x/meshsecurity/abci_test.go | 132 +++++++ x/meshsecurity/contract/in_message.go | 35 +- x/meshsecurity/contract/out_message.go | 28 +- x/meshsecurity/contract/query.go | 46 ++- x/meshsecurity/keeper/adapter.go | 73 ++++ x/meshsecurity/keeper/adapter_test.go | 123 +++++++ x/meshsecurity/keeper/keeper.go | 22 +- x/meshsecurity/keeper/msg_server.go | 2 +- x/meshsecurity/keeper/options.go | 17 + x/meshsecurity/keeper/params.go | 2 +- x/meshsecurity/keeper/scheduler.go | 37 +- x/meshsecurity/keeper/scheduler_test.go | 47 ++- x/meshsecurity/keeper/staking_hooks.go | 72 ++++ .../keeper/{common_test.go => test_common.go} | 55 ++- .../keeper/{mocks_test.go => test_mocks.go} | 0 x/meshsecurity/keeper/valset_updates.go | 150 ++++++++ x/meshsecurity/keeper/valset_updates_test.go | 233 +++++++++++++ x/meshsecurity/keeper/wasm.go | 19 +- x/meshsecurity/messages.md | 138 ++++++++ x/meshsecurity/types/codec.go | 2 + x/meshsecurity/types/expected_keepers.go | 1 + x/meshsecurity/types/genesis.go | 3 + x/meshsecurity/types/keys.go | 36 +- x/meshsecurity/types/scheduler.pb.go | 330 ++++++++++++++++++ x/meshsecurity/types/types.go | 6 +- 61 files changed, 2252 insertions(+), 386 deletions(-) rename .github/workflows/{starship-e2e-tests.yml => starship-e2e-tests.yml_deactivated} (100%) create mode 100644 proto/osmosis/meshsecurity/v1beta1/scheduler.proto create mode 100644 tests/e2e/valset_test.go delete mode 100644 tests/testdata/external_staking.wasm.gz create mode 100644 tests/testdata/mesh_external_staking.wasm.gz create mode 100644 x/meshsecurity/README.md create mode 100644 x/meshsecurity/abci_test.go create mode 100644 x/meshsecurity/keeper/adapter_test.go create mode 100644 x/meshsecurity/keeper/options.go create mode 100644 x/meshsecurity/keeper/staking_hooks.go rename x/meshsecurity/keeper/{common_test.go => test_common.go} (85%) rename x/meshsecurity/keeper/{mocks_test.go => test_mocks.go} (100%) create mode 100644 x/meshsecurity/keeper/valset_updates.go create mode 100644 x/meshsecurity/keeper/valset_updates_test.go create mode 100644 x/meshsecurity/messages.md create mode 100644 x/meshsecurity/types/scheduler.pb.go diff --git a/.github/workflows/starship-e2e-tests.yml b/.github/workflows/starship-e2e-tests.yml_deactivated similarity index 100% rename from .github/workflows/starship-e2e-tests.yml rename to .github/workflows/starship-e2e-tests.yml_deactivated diff --git a/demo/app/app.go b/demo/app/app.go index 8b3ba75e..05fcb885 100644 --- a/demo/app/app.go +++ b/demo/app/app.go @@ -137,33 +137,8 @@ const appName = "MeshApp" var ( NodeDir = ".meshd" Bech32Prefix = "mesh" - - // If EnabledSpecificProposals is "", and this is "true", then enable all x/wasm proposals. - // If EnabledSpecificProposals is "", and this is not "true", then disable all x/wasm proposals. - ProposalsEnabled = "false" - // If set to non-empty string it must be comma-separated list of values that are all a subset - // of "EnableAllProposals" (takes precedence over ProposalsEnabled) - // https://github.com/CosmWasm/wasmd/blob/02a54d33ff2c064f3539ae12d75d027d9c665f05/x/wasm/internal/types/proposal.go#L28-L34 - EnableSpecificProposals = "" ) -// GetEnabledProposals parses the ProposalsEnabled / EnableSpecificProposals values to -// produce a list of enabled proposals to pass into wasmd app. -func GetEnabledProposals() []wasm.ProposalType { - if EnableSpecificProposals == "" { - if ProposalsEnabled == "true" { - return wasm.EnableAllProposals - } - return wasm.DisableAllProposals - } - chunks := strings.Split(EnableSpecificProposals, ",") - proposals, err := wasm.ConvertToProposals(chunks) - if err != nil { - panic(err) - } - return proposals -} - // These constants are derived from the above variables. // These are the ones we will want to use in the code, based on // any overrides above @@ -239,7 +214,7 @@ var ( ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, ibcfeetypes.ModuleName: nil, icatypes.ModuleName: nil, - wasm.ModuleName: {authtypes.Burner}, + wasmtypes.ModuleName: {authtypes.Burner}, meshsectypes.ModuleName: {authtypes.Minter, authtypes.Burner}, } ) @@ -286,7 +261,7 @@ type MeshApp struct { ICAControllerKeeper icacontrollerkeeper.Keeper ICAHostKeeper icahostkeeper.Keeper TransferKeeper ibctransferkeeper.Keeper - WasmKeeper wasm.Keeper + WasmKeeper wasmkeeper.Keeper MeshSecKeeper *meshseckeeper.Keeper ScopedIBCKeeper capabilitykeeper.ScopedKeeper @@ -312,9 +287,8 @@ func NewMeshApp( db dbm.DB, traceStore io.Writer, loadLatest bool, - enabledProposals []wasm.ProposalType, appOpts servertypes.AppOptions, - wasmOpts []wasm.Option, + wasmOpts []wasmkeeper.Option, baseAppOptions ...func(*baseapp.BaseApp), ) *MeshApp { encodingConfig := MakeEncodingConfig() @@ -337,13 +311,13 @@ func NewMeshApp( authzkeeper.StoreKey, nftkeeper.StoreKey, group.StoreKey, // non sdk store keys ibcexported.StoreKey, ibctransfertypes.StoreKey, ibcfeetypes.StoreKey, - wasm.StoreKey, icahosttypes.StoreKey, + wasmtypes.StoreKey, icahosttypes.StoreKey, icacontrollertypes.StoreKey, meshsectypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) - memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) + memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey, meshsectypes.MemStoreKey) // load state streaming if enabled if _, _, err := streaming.LoadStreamingServices(bApp, appOpts, appCodec, logger, keys); err != nil { @@ -384,7 +358,7 @@ func NewMeshApp( scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) - scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasm.ModuleName) + scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasmtypes.ModuleName) app.CapabilityKeeper.Seal() // add keepers @@ -430,11 +404,25 @@ func NewMeshApp( authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) + // setup mesh-security keeper with vanilla Cosmos-SDK + // see also NewKeeperX constructor for integration with Osmosis SDK fork + // should be initialized before wasm keeper for custom query/msg handlers + app.MeshSecKeeper = meshseckeeper.NewKeeper( + app.appCodec, + keys[meshsectypes.StoreKey], + memKeys[meshsectypes.MemStoreKey], + app.BankKeeper, + app.StakingKeeper, + &app.WasmKeeper, // ensure this is a pointer as we instantiate the keeper a bit later + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + ) + app.SlashingKeeper = slashingkeeper.NewKeeper( appCodec, legacyAmino, keys[slashingtypes.StoreKey], - app.StakingKeeper, + // decorate the sdk keeper to capture all jail/ unjail events for MS + meshseckeeper.NewStakingDecorator(app.StakingKeeper, app.MeshSecKeeper), authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) @@ -453,7 +441,12 @@ func NewMeshApp( // register the staking hooks // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks app.StakingKeeper.SetHooks( - stakingtypes.NewMultiStakingHooks(app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()), + stakingtypes.NewMultiStakingHooks( + app.DistrKeeper.Hooks(), + app.SlashingKeeper.Hooks(), + // register hook to capture valset updates + app.MeshSecKeeper.Hooks(), + ), ) app.AuthzKeeper = authzkeeper.NewKeeper(keys[authzkeeper.StoreKey], appCodec, app.MsgServiceRouter(), app.AccountKeeper) @@ -534,7 +527,8 @@ func NewMeshApp( appCodec, keys[evidencetypes.StoreKey], app.StakingKeeper, - app.SlashingKeeper, + // decorate the SlashingKeeper to capture the tombstone event + meshseckeeper.CaptureTombstoneDecorator(app.MeshSecKeeper, app.SlashingKeeper, app.StakingKeeper), ) // If evidence needs to be handled for the app, set routes in router here and seal app.EvidenceKeeper = *evidenceKeeper @@ -582,18 +576,6 @@ func NewMeshApp( app.MsgServiceRouter(), ) - // setup mesh-security keeper with vanilla Cosmos-SDK - // see also NewKeeperX constructor for integration with Osmosis SDK fork - // should be initialized before wasm keeper for custom query/msg handlers - app.MeshSecKeeper = meshseckeeper.NewKeeper( - app.appCodec, - keys[meshsectypes.StoreKey], - app.BankKeeper, - app.StakingKeeper, - &app.WasmKeeper, // ensure this is a pointer as we instantiate the keeper a bit later - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - ) - wasmDir := filepath.Join(homePath, "wasm") wasmConfig, err := wasm.ReadWasmConfig(appOpts) if err != nil { @@ -602,21 +584,23 @@ func NewMeshApp( meshMessageHandler := wasmkeeper.WithMessageHandlerDecorator(func(nested wasmkeeper.Messenger) wasmkeeper.Messenger { return wasmkeeper.NewMessageHandlerChain( + // security layer for system integrity, should always be first in chain meshseckeeper.NewIntegrityHandler(app.MeshSecKeeper), nested, - // append our custom message handler + // append our custom message handler for mesh-security meshseckeeper.NewDefaultCustomMsgHandler(app.MeshSecKeeper), ) }) wasmOpts = append(wasmOpts, meshMessageHandler, + // add support for the mesh-security queries wasmkeeper.WithQueryHandlerDecorator(meshseckeeper.NewQueryDecorator(app.MeshSecKeeper, app.SlashingKeeper)), ) // The last arguments can contain custom message handlers, and custom query handlers, // if we want to allow any custom callbacks availableCapabilities := strings.Join(AllCapabilities(), ",") - app.WasmKeeper = wasm.NewKeeper( + app.WasmKeeper = wasmkeeper.NewKeeper( appCodec, - keys[wasm.StoreKey], + keys[wasmtypes.StoreKey], app.AccountKeeper, app.BankKeeper, app.StakingKeeper, @@ -635,10 +619,6 @@ func NewMeshApp( wasmOpts..., ) - // The gov proposal types can be individually enabled - if len(enabledProposals) != 0 { - govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.WasmKeeper, enabledProposals)) - } // Set legacy router for backwards compatibility with gov v1beta1 app.GovKeeper.SetLegacyRouter(govRouter) @@ -671,7 +651,7 @@ func NewMeshApp( // Create static IBC router, add app routes, then set and seal it ibcRouter := porttypes.NewRouter(). AddRoute(ibctransfertypes.ModuleName, transferStack). - AddRoute(wasm.ModuleName, wasmStack). + AddRoute(wasmtypes.ModuleName, wasmStack). AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). AddRoute(icahosttypes.SubModuleName, icaHostStack) app.IBCKeeper.SetRouter(ibcRouter) @@ -733,7 +713,7 @@ func NewMeshApp( ibcexported.ModuleName, icatypes.ModuleName, ibcfeetypes.ModuleName, - wasm.ModuleName, + wasmtypes.ModuleName, meshsectypes.ModuleName, ) @@ -749,8 +729,8 @@ func NewMeshApp( ibcexported.ModuleName, icatypes.ModuleName, ibcfeetypes.ModuleName, - wasm.ModuleName, - meshsectypes.ModuleName, + wasmtypes.ModuleName, + meshsectypes.ModuleName, // last to capture all chain events ) // NOTE: The genutils module must occur after staking so that pools are @@ -773,7 +753,7 @@ func NewMeshApp( icatypes.ModuleName, ibcfeetypes.ModuleName, // wasm after ibc transfer - wasm.ModuleName, + wasmtypes.ModuleName, meshsectypes.ModuleName, } app.ModuleManager.SetOrderInitGenesis(genesisModuleOrder...) @@ -821,7 +801,7 @@ func NewMeshApp( app.SetInitChainer(app.InitChainer) app.SetBeginBlocker(app.BeginBlocker) app.SetEndBlocker(app.EndBlocker) - app.setAnteHandler(encodingConfig.TxConfig, wasmConfig, keys[wasm.StoreKey]) + app.setAnteHandler(encodingConfig.TxConfig, wasmConfig, keys[wasmtypes.StoreKey]) // must be before Loading version // requires the snapshot store to be created and registered as a BaseAppOption @@ -1088,7 +1068,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(ibcexported.ModuleName) paramsKeeper.Subspace(icahosttypes.SubModuleName) paramsKeeper.Subspace(icacontrollertypes.SubModuleName) - paramsKeeper.Subspace(wasm.ModuleName) + paramsKeeper.Subspace(wasmtypes.ModuleName) paramsKeeper.Subspace(meshsectypes.ModuleName) return paramsKeeper diff --git a/demo/app/app_test.go b/demo/app/app_test.go index 53550836..96e0ed3c 100644 --- a/demo/app/app_test.go +++ b/demo/app/app_test.go @@ -7,7 +7,6 @@ import ( "github.com/CosmWasm/wasmd/x/wasm" dbm "github.com/cometbft/cometbft-db" "github.com/cometbft/cometbft/libs/log" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" @@ -26,7 +25,7 @@ func TestMeshdExport(t *testing.T) { gapp.Commit() // Making a new app object with the db, so that initchain hasn't been called - newGapp := NewMeshApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, wasm.EnableAllProposals, simtestutil.NewAppOptionsWithFlagHome(t.TempDir()), emptyWasmOpts) + newGapp := NewMeshApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, simtestutil.NewAppOptionsWithFlagHome(t.TempDir()), emptyWasmOpts) _, err := newGapp.ExportAppStateAndValidators(false, []string{}, nil) require.NoError(t, err, "ExportAppStateAndValidators should not have an error") } @@ -52,34 +51,3 @@ func TestGetMaccPerms(t *testing.T) { dup := GetMaccPerms() require.Equal(t, maccPerms, dup, "duplicated module account permissions differed from actual module account permissions") } - -func TestGetEnabledProposals(t *testing.T) { - cases := map[string]struct { - proposalsEnabled string - specificEnabled string - expected []wasm.ProposalType - }{ - "all disabled": { - proposalsEnabled: "false", - expected: wasm.DisableAllProposals, - }, - "all enabled": { - proposalsEnabled: "true", - expected: wasm.EnableAllProposals, - }, - "some enabled": { - proposalsEnabled: "okay", - specificEnabled: "StoreCode,InstantiateContract", - expected: []wasm.ProposalType{wasm.ProposalTypeStoreCode, wasm.ProposalTypeInstantiateContract}, - }, - } - - for name, tc := range cases { - t.Run(name, func(t *testing.T) { - ProposalsEnabled = tc.proposalsEnabled - EnableSpecificProposals = tc.specificEnabled - proposals := GetEnabledProposals() - assert.Equal(t, tc.expected, proposals) - }) - } -} diff --git a/demo/app/sim_test.go b/demo/app/sim_test.go index cb1c87ba..9e406699 100644 --- a/demo/app/sim_test.go +++ b/demo/app/sim_test.go @@ -9,7 +9,6 @@ import ( "strings" "testing" - "github.com/CosmWasm/wasmd/x/wasm" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" @@ -131,7 +130,7 @@ func TestAppImportExport(t *testing.T) { require.NoError(t, os.RemoveAll(newDir)) }() - newApp := NewMeshApp(log.NewNopLogger(), newDB, nil, true, wasm.EnableAllProposals, appOptions, emptyWasmOpts, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) + newApp := NewMeshApp(log.NewNopLogger(), newDB, nil, true, appOptions, emptyWasmOpts, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) require.Equal(t, "MeshApp", newApp.Name()) var genesisState GenesisState @@ -234,7 +233,7 @@ func TestAppSimulationAfterImport(t *testing.T) { require.NoError(t, os.RemoveAll(newDir)) }() - newApp := NewMeshApp(log.NewNopLogger(), newDB, nil, true, wasm.EnableAllProposals, appOptions, emptyWasmOpts, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) + newApp := NewMeshApp(log.NewNopLogger(), newDB, nil, true, appOptions, emptyWasmOpts, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) require.Equal(t, "MeshApp", newApp.Name()) newApp.InitChain(abci.RequestInitChain{ @@ -275,7 +274,7 @@ func setupSimulationApp(t *testing.T, msg string) (simtypes.Config, dbm.DB, simt appOptions[flags.FlagHome] = dir // ensure a unique folder appOptions[server.FlagInvCheckPeriod] = simcli.FlagPeriodValue - app := NewMeshApp(logger, db, nil, true, wasm.EnableAllProposals, appOptions, emptyWasmOpts, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) + app := NewMeshApp(logger, db, nil, true, appOptions, emptyWasmOpts, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) require.Equal(t, "MeshApp", app.Name()) return config, db, appOptions, app } @@ -314,7 +313,7 @@ func TestAppStateDeterminism(t *testing.T) { } db := dbm.NewMemDB() - app := NewMeshApp(logger, db, nil, true, wasm.EnableAllProposals, appOptions, emptyWasmOpts, interBlockCacheOpt(), baseapp.SetChainID(SimAppChainID)) + app := NewMeshApp(logger, db, nil, true, appOptions, emptyWasmOpts, interBlockCacheOpt(), baseapp.SetChainID(SimAppChainID)) fmt.Printf( "running non-determinism simulation; seed %d: %d/%d, attempt: %d/%d\n", diff --git a/demo/app/test_helpers.go b/demo/app/test_helpers.go index f7e0ea77..81df863e 100644 --- a/demo/app/test_helpers.go +++ b/demo/app/test_helpers.go @@ -9,8 +9,7 @@ import ( "testing" "time" - "github.com/CosmWasm/wasmd/x/wasm" - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" tmjson "github.com/cometbft/cometbft/libs/json" @@ -51,10 +50,10 @@ type SetupOptions struct { Logger log.Logger DB *dbm.MemDB AppOpts servertypes.AppOptions - WasmOpts []wasm.Option + WasmOpts []wasmkeeper.Option } -func setup(t testing.TB, chainID string, withGenesis bool, invCheckPeriod uint, opts ...wasm.Option) (*MeshApp, GenesisState) { +func setup(t testing.TB, chainID string, withGenesis bool, invCheckPeriod uint, opts ...wasmkeeper.Option) (*MeshApp, GenesisState) { db := dbm.NewMemDB() nodeHome := t.TempDir() snapshotDir := filepath.Join(nodeHome, "data", "snapshots") @@ -68,7 +67,7 @@ func setup(t testing.TB, chainID string, withGenesis bool, invCheckPeriod uint, appOptions := make(simtestutil.AppOptionsMap, 0) appOptions[flags.FlagHome] = nodeHome // ensure unique folder appOptions[server.FlagInvCheckPeriod] = invCheckPeriod - app := NewMeshApp(log.NewNopLogger(), db, nil, true, wasmtypes.EnableAllProposals, appOptions, opts, bam.SetChainID(chainID), bam.SetSnapshot(snapshotStore, snapshottypes.SnapshotOptions{KeepRecent: 2})) + app := NewMeshApp(log.NewNopLogger(), db, nil, true, appOptions, opts, bam.SetChainID(chainID), bam.SetSnapshot(snapshotStore, snapshottypes.SnapshotOptions{KeepRecent: 2})) if withGenesis { return app, NewDefaultGenesisState(app.AppCodec()) } @@ -94,7 +93,7 @@ func NewMeshAppWithCustomOptions(t *testing.T, isCheckTx bool, options SetupOpti Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100000000000000))), } - app := NewMeshApp(options.Logger, options.DB, nil, true, wasmtypes.EnableAllProposals, options.AppOpts, options.WasmOpts) + app := NewMeshApp(options.Logger, options.DB, nil, true, options.AppOpts, options.WasmOpts) genesisState := NewDefaultGenesisState(app.appCodec) genesisState, err = GenesisStateWithValSet(app.AppCodec(), genesisState, valSet, []authtypes.GenesisAccount{acc}, balance) require.NoError(t, err) @@ -118,7 +117,7 @@ func NewMeshAppWithCustomOptions(t *testing.T, isCheckTx bool, options SetupOpti } // Setup initializes a new MeshApp. A Nop logger is set in MeshApp. -func Setup(t *testing.T, opts ...wasm.Option) *MeshApp { +func Setup(t *testing.T, opts ...wasmkeeper.Option) *MeshApp { t.Helper() privVal := mock.NewPV() @@ -146,7 +145,7 @@ func Setup(t *testing.T, opts ...wasm.Option) *MeshApp { // that also act as delegators. For simplicity, each validator is bonded with a delegation // of one consensus engine unit in the default token of the MeshApp from first genesis // account. A Nop logger is set in MeshApp. -func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, chainID string, opts []wasm.Option, balances ...banktypes.Balance) *MeshApp { +func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, chainID string, opts []wasmkeeper.Option, balances ...banktypes.Balance) *MeshApp { t.Helper() app, genesisState := setup(t, chainID, true, 5, opts...) @@ -268,7 +267,7 @@ func ModuleAccountAddrs() map[string]bool { return BlockedAddresses() } -var emptyWasmOptions []wasm.Option +var emptyWasmOptions []wasmkeeper.Option // NewTestNetworkFixture returns a new MeshApp AppConstructor for network simulation tests func NewTestNetworkFixture() network.TestFixture { @@ -278,16 +277,9 @@ func NewTestNetworkFixture() network.TestFixture { } defer os.RemoveAll(dir) - app := NewMeshApp(log.NewNopLogger(), dbm.NewMemDB(), nil, true, wasmtypes.EnableAllProposals, simtestutil.NewAppOptionsWithFlagHome(dir), emptyWasmOptions) + app := NewMeshApp(log.NewNopLogger(), dbm.NewMemDB(), nil, true, simtestutil.NewAppOptionsWithFlagHome(dir), emptyWasmOptions) appCtr := func(val network.ValidatorI) servertypes.Application { - return NewMeshApp( - val.GetCtx().Logger, dbm.NewMemDB(), nil, true, wasmtypes.EnableAllProposals, - simtestutil.NewAppOptionsWithFlagHome(val.GetCtx().Config.RootDir), - emptyWasmOptions, - bam.SetPruning(pruningtypes.NewPruningOptionsFromString(val.GetAppConfig().Pruning)), - bam.SetMinGasPrices(val.GetAppConfig().MinGasPrices), - bam.SetChainID(val.GetCtx().Viper.GetString(flags.FlagChainID)), - ) + return NewMeshApp(val.GetCtx().Logger, dbm.NewMemDB(), nil, true, simtestutil.NewAppOptionsWithFlagHome(val.GetCtx().Config.RootDir), emptyWasmOptions, bam.SetPruning(pruningtypes.NewPruningOptionsFromString(val.GetAppConfig().Pruning)), bam.SetMinGasPrices(val.GetAppConfig().MinGasPrices), bam.SetChainID(val.GetCtx().Viper.GetString(flags.FlagChainID))) } return network.TestFixture{ diff --git a/demo/app/test_support.go b/demo/app/test_support.go index 148f97ca..873c8c0a 100644 --- a/demo/app/test_support.go +++ b/demo/app/test_support.go @@ -1,7 +1,7 @@ package app import ( - "github.com/CosmWasm/wasmd/x/wasm" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" "github.com/cosmos/cosmos-sdk/baseapp" @@ -35,6 +35,6 @@ func (app *MeshApp) GetAccountKeeper() authkeeper.AccountKeeper { return app.AccountKeeper } -func (app *MeshApp) GetWasmKeeper() wasm.Keeper { +func (app *MeshApp) GetWasmKeeper() wasmkeeper.Keeper { return app.WasmKeeper } diff --git a/demo/cmd/meshd/root.go b/demo/cmd/meshd/root.go index 0bbde60d..af263464 100644 --- a/demo/cmd/meshd/root.go +++ b/demo/cmd/meshd/root.go @@ -243,18 +243,12 @@ func newApp( ) servertypes.Application { baseappOptions := server.DefaultBaseappOptions(appOpts) - var wasmOpts []wasm.Option + var wasmOpts []wasmkeeper.Option if cast.ToBool(appOpts.Get("telemetry.enabled")) { wasmOpts = append(wasmOpts, wasmkeeper.WithVMCacheMetrics(prometheus.DefaultRegisterer)) } - return app.NewMeshApp( - logger, db, traceStore, true, - app.GetEnabledProposals(), - appOpts, - wasmOpts, - baseappOptions..., - ) + return app.NewMeshApp(logger, db, traceStore, true, appOpts, wasmOpts, baseappOptions...) } // appExport creates a new wasm app (optionally at a given height) and exports state. @@ -283,13 +277,12 @@ func appExport( viperAppOpts.Set(server.FlagInvCheckPeriod, 1) appOpts = viperAppOpts - var emptyWasmOpts []wasm.Option + var emptyWasmOpts []wasmkeeper.Option wasmApp = app.NewMeshApp( logger, db, traceStore, height == -1, - app.GetEnabledProposals(), appOpts, emptyWasmOpts, ) diff --git a/demo/go.mod b/demo/go.mod index 230358de..3fcb59fd 100644 --- a/demo/go.mod +++ b/demo/go.mod @@ -1,10 +1,10 @@ module github.com/osmosis-labs/mesh-security-sdk/demo -go 1.19 +go 1.21 require ( - github.com/CosmWasm/wasmd v0.42.0 - github.com/CosmWasm/wasmvm v1.4.0 // indirect + github.com/CosmWasm/wasmd v0.44.0 + github.com/CosmWasm/wasmvm v1.5.0 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect github.com/cosmos/cosmos-sdk v0.47.5 github.com/cosmos/gogogateway v1.2.0 // indirect @@ -61,7 +61,7 @@ require ( github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect @@ -84,7 +84,7 @@ require ( github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/felixge/httpsnoop v1.0.2 // indirect + github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/getsentry/sentry-go v0.23.0 // indirect github.com/go-kit/kit v0.12.0 // indirect diff --git a/demo/go.sum b/demo/go.sum index 0aef2685..1d6f8c68 100644 --- a/demo/go.sum +++ b/demo/go.sum @@ -206,19 +206,22 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 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/wasmd v0.42.0 h1:4xZ7GHLrJp3P8qN0wsWOpk5qYLHW9AM5fgcDFPi/p90= -github.com/CosmWasm/wasmd v0.42.0/go.mod h1:DiEyBjHxzkEENYqQhHyka+r4HfR72stSPUtGv+Yh/UU= -github.com/CosmWasm/wasmvm v1.4.0 h1:84I3MlvvzcOo2z+ed0ztPi7eeDNk6/sYuK76uyXP1nI= -github.com/CosmWasm/wasmvm v1.4.0/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/CosmWasm/wasmd v0.44.0 h1:2sbcoCAvfjCs1O0SWt53xULKjkV06dbSFthEViIC6Zg= +github.com/CosmWasm/wasmd v0.44.0/go.mod h1:tDyYN050qUcdd7LOxGeo2e185sEShyO3nJGl2Cf59+k= +github.com/CosmWasm/wasmvm v1.5.0 h1:3hKeT9SfwfLhxTGKH3vXaKFzBz1yuvP8SlfwfQXbQfw= +github.com/CosmWasm/wasmvm v1.5.0/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqYsTha2hc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -226,6 +229,7 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -259,15 +263,18 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2 github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= +github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= +github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/bufbuild/protocompile v0.5.1 h1:mixz5lJX4Hiz4FpqFREJHIXLfaLBntfaJv1h+/jS+Qg= +github.com/bufbuild/protocompile v0.5.1/go.mod h1:G5iLmavmF4NsYtpZFvE3B/zFch2GIY8+wjsYLR/lc40= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -316,6 +323,7 @@ github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3Hf github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -361,6 +369,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= @@ -376,7 +385,9 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUn github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -400,12 +411,14 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= -github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= +github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -418,6 +431,7 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= 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-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -440,6 +454,7 @@ github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/j github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= @@ -450,8 +465,10 @@ github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/gobwas/ws v1.1.0 h1:7RFti/xnNkMJnrK7D1yQ/iCIB5OrrY/54/H930kIbHA= +github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -539,6 +556,7 @@ github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIG github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -631,6 +649,7 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -662,6 +681,7 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -779,6 +799,7 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -787,15 +808,19 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -805,6 +830,7 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -821,6 +847,7 @@ github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7c github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -896,6 +923,7 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1057,6 +1085,7 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1162,6 +1191,7 @@ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1346,6 +1376,7 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1624,6 +1655,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index 1841ad19..b5fc4f31 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -21,6 +21,9 @@ - [Query](#osmosis.meshsecurity.v1beta1.Query) +- [osmosis/meshsecurity/v1beta1/scheduler.proto](#osmosis/meshsecurity/v1beta1/scheduler.proto) + - [ValidatorAddress](#osmosis.meshsecurity.v1beta1.ValidatorAddress) + - [osmosis/meshsecurity/v1beta1/tx.proto](#osmosis/meshsecurity/v1beta1/tx.proto) - [MsgSetVirtualStakingMaxCap](#osmosis.meshsecurity.v1beta1.MsgSetVirtualStakingMaxCap) - [MsgSetVirtualStakingMaxCapResponse](#osmosis.meshsecurity.v1beta1.MsgSetVirtualStakingMaxCapResponse) @@ -228,6 +231,37 @@ Query provides defines the gRPC querier service + +

Top

+ +## osmosis/meshsecurity/v1beta1/scheduler.proto + + + + + +### ValidatorAddress +ValidatorAddress payload data to be used with the scheduler + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [string](#string) | | Address is the ValAddress bech32 string | + + + + + + + + + + + + + + +

Top

diff --git a/proto/osmosis/meshsecurity/v1beta1/scheduler.proto b/proto/osmosis/meshsecurity/v1beta1/scheduler.proto new file mode 100644 index 00000000..30f481fa --- /dev/null +++ b/proto/osmosis/meshsecurity/v1beta1/scheduler.proto @@ -0,0 +1,23 @@ +syntax = "proto3"; +package osmosis.meshsecurity.v1beta1; + +// import "cosmos/base/v1beta1/coin.proto"; +import "gogoproto/gogo.proto"; +// import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; + +option go_package = "github.com/osmosis-labs/mesh-security-sdk/x/meshsecurity/types"; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.equal_all) = false; + +// +message ScheduledWork { + bool repeat = 1; +} + + +// ValidatorAddress payload data to be used with the scheduler +message ValidatorAddress { + // Address is the ValAddress bech32 string + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} diff --git a/tests/e2e/e2e.go b/tests/e2e/e2e.go index 0238fc03..b8340734 100644 --- a/tests/e2e/e2e.go +++ b/tests/e2e/e2e.go @@ -9,8 +9,12 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cometbft/cometbft/types" + types2 "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + ibctesting2 "github.com/cosmos/ibc-go/v7/testing" "github.com/stretchr/testify/require" + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -89,3 +93,62 @@ func InstantiateContract(t *testing.T, chain *ibctesting.TestChain, codeID uint6 require.NoError(t, err) return a } + +type example struct { + Coordinator *ibctesting.Coordinator + ConsumerChain *ibctesting.TestChain + ProviderChain *ibctesting.TestChain + ConsumerApp *app.MeshApp + IbcPath *ibctesting.Path + ProviderDenom string + ConsumerDenom string + MyProvChainActor string +} + +func setupExampleChains(t *testing.T) example { + coord := NewIBCCoordinator(t, 2) + provChain := coord.GetChain(ibctesting2.GetChainID(1)) + consChain := coord.GetChain(ibctesting2.GetChainID(2)) + return example{ + Coordinator: coord, + ConsumerChain: consChain, + ProviderChain: provChain, + ConsumerApp: consChain.App.(*app.MeshApp), + IbcPath: ibctesting.NewPath(consChain, provChain), + ProviderDenom: sdk.DefaultBondDenom, + ConsumerDenom: sdk.DefaultBondDenom, + MyProvChainActor: provChain.SenderAccount.GetAddress().String(), + } +} + +func setupMeshSecurity(t *testing.T, x example) (*TestConsumerClient, ConsumerContract, *TestProviderClient) { + x.Coordinator.SetupConnections(x.IbcPath) + + // setup contracts on both chains + consumerCli := NewConsumerClient(t, x.ConsumerChain) + consumerContracts := consumerCli.BootstrapContracts() + converterPortID := wasmkeeper.PortIDForContract(consumerContracts.converter) + // add some fees so that we can distribute something + x.ConsumerChain.DefaultMsgFees = sdk.NewCoins(sdk.NewCoin(x.ConsumerDenom, math.NewInt(1_000_000))) + + providerCli := NewProviderClient(t, x.ProviderChain) + providerContracts := providerCli.BootstrapContracts(x.IbcPath.EndpointA.ConnectionID, converterPortID) + + // setup ibc control path: consumer -> provider (direction matters) + x.IbcPath.EndpointB.ChannelConfig = &ibctesting2.ChannelConfig{ + PortID: wasmkeeper.PortIDForContract(providerContracts.externalStaking), + Order: types2.UNORDERED, + } + x.IbcPath.EndpointA.ChannelConfig = &ibctesting2.ChannelConfig{ + PortID: converterPortID, + Order: types2.UNORDERED, + } + x.Coordinator.CreateChannels(x.IbcPath) + + // when ibc package is relayed + require.NotEmpty(t, x.ConsumerChain.PendingSendPackets) + require.NoError(t, x.Coordinator.RelayAndAckPendingPackets(x.IbcPath)) + + consumerCli.MustEnableVirtualStaking(sdk.NewInt64Coin(x.ConsumerDenom, 1_000_000_000)) + return consumerCli, consumerContracts, providerCli +} diff --git a/tests/e2e/go.mod b/tests/e2e/go.mod index d6ed7e1a..af8e27fa 100644 --- a/tests/e2e/go.mod +++ b/tests/e2e/go.mod @@ -1,10 +1,10 @@ module github.com/osmosis-labs/mesh-security-sdk/tests/e2e -go 1.19 +go 1.21 require ( - github.com/CosmWasm/wasmd v0.42.0 - github.com/CosmWasm/wasmvm v1.4.0 // indirect + github.com/CosmWasm/wasmd v0.44.0 + github.com/CosmWasm/wasmvm v1.5.0 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect github.com/cosmos/cosmos-sdk v0.47.5 github.com/cosmos/gogogateway v1.2.0 // indirect @@ -36,6 +36,7 @@ require ( github.com/cometbft/cometbft v0.37.2 github.com/osmosis-labs/mesh-security-sdk/demo v0.0.0-00010101000000-000000000000 github.com/osmosis-labs/mesh-security-sdk/x v0.0.0-00010101000000-000000000000 + github.com/tidwall/gjson v1.17.0 ) require ( @@ -60,7 +61,7 @@ require ( github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect @@ -84,7 +85,7 @@ require ( github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/felixge/httpsnoop v1.0.2 // indirect + github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/getsentry/sentry-go v0.23.0 // indirect github.com/go-kit/kit v0.12.0 // indirect @@ -158,6 +159,8 @@ require ( github.com/subosito/gotenv v1.4.2 // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.6.0 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/zondax/hid v0.9.1 // indirect github.com/zondax/ledger-go v0.14.1 // indirect diff --git a/tests/e2e/go.sum b/tests/e2e/go.sum index c76486ab..6c828815 100644 --- a/tests/e2e/go.sum +++ b/tests/e2e/go.sum @@ -206,19 +206,22 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 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/wasmd v0.42.0 h1:4xZ7GHLrJp3P8qN0wsWOpk5qYLHW9AM5fgcDFPi/p90= -github.com/CosmWasm/wasmd v0.42.0/go.mod h1:DiEyBjHxzkEENYqQhHyka+r4HfR72stSPUtGv+Yh/UU= -github.com/CosmWasm/wasmvm v1.4.0 h1:84I3MlvvzcOo2z+ed0ztPi7eeDNk6/sYuK76uyXP1nI= -github.com/CosmWasm/wasmvm v1.4.0/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/CosmWasm/wasmd v0.44.0 h1:2sbcoCAvfjCs1O0SWt53xULKjkV06dbSFthEViIC6Zg= +github.com/CosmWasm/wasmd v0.44.0/go.mod h1:tDyYN050qUcdd7LOxGeo2e185sEShyO3nJGl2Cf59+k= +github.com/CosmWasm/wasmvm v1.5.0 h1:3hKeT9SfwfLhxTGKH3vXaKFzBz1yuvP8SlfwfQXbQfw= +github.com/CosmWasm/wasmvm v1.5.0/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqYsTha2hc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -226,6 +229,7 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -259,15 +263,18 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2 github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= +github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= +github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/bufbuild/protocompile v0.5.1 h1:mixz5lJX4Hiz4FpqFREJHIXLfaLBntfaJv1h+/jS+Qg= +github.com/bufbuild/protocompile v0.5.1/go.mod h1:G5iLmavmF4NsYtpZFvE3B/zFch2GIY8+wjsYLR/lc40= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -316,6 +323,7 @@ github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3Hf github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -361,6 +369,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= @@ -376,7 +385,9 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUn github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -400,12 +411,14 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= -github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= +github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -418,6 +431,7 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= 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-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -440,16 +454,21 @@ github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/j github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= +github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= +github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/gobwas/ws v1.1.0 h1:7RFti/xnNkMJnrK7D1yQ/iCIB5OrrY/54/H930kIbHA= +github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -537,6 +556,7 @@ github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIG github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -629,6 +649,7 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -660,6 +681,7 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -777,6 +799,7 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -785,15 +808,19 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -803,6 +830,7 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -819,6 +847,7 @@ github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7c github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -894,6 +923,7 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -949,6 +979,12 @@ github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2l github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM= +github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= @@ -1055,6 +1091,7 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1160,6 +1197,7 @@ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1344,6 +1382,7 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1622,6 +1661,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/tests/e2e/mvp_test.go b/tests/e2e/mvp_test.go index 3132b717..71e615c6 100644 --- a/tests/e2e/mvp_test.go +++ b/tests/e2e/mvp_test.go @@ -7,11 +7,7 @@ import ( "testing" "time" - wasmibctesting "github.com/CosmWasm/wasmd/x/wasm/ibctesting" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/cometbft/cometbft/libs/rand" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - ibctesting "github.com/cosmos/ibc-go/v7/testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -21,8 +17,6 @@ import ( "github.com/cosmos/cosmos-sdk/types/address" distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - - "github.com/osmosis-labs/mesh-security-sdk/demo/app" ) func TestMVP(t *testing.T) { @@ -40,104 +34,67 @@ func TestMVP(t *testing.T) { // when the user on chain P starts an undelegate // // ... - - var ( - coord = NewIBCCoordinator(t, 2) - consumerChain = coord.GetChain(ibctesting.GetChainID(2)) - providerChain = coord.GetChain(ibctesting.GetChainID(1)) - consumerApp = consumerChain.App.(*app.MeshApp) - ibcPath = wasmibctesting.NewPath(consumerChain, providerChain) - providerDenom = sdk.DefaultBondDenom - consumerDenom = sdk.DefaultBondDenom - myProvChainActor = providerChain.SenderAccount.GetAddress().String() - ) - coord.SetupConnections(ibcPath) - - // setup contracts on both chains - consumerCli := NewConsumerClient(t, consumerChain) - consumerContracts := consumerCli.BootstrapContracts() - converterPortID := wasmkeeper.PortIDForContract(consumerContracts.converter) - // add some fees so that we can distribute something - consumerChain.DefaultMsgFees = sdk.NewCoins(sdk.NewCoin(consumerDenom, math.NewInt(1_000_000))) - - providerCli := NewProviderClient(t, providerChain) - providerContracts := providerCli.BootstrapContracts(ibcPath.EndpointA.ConnectionID, converterPortID) - - // setup ibc control path: consumer -> provider (direction matters) - ibcPath.EndpointB.ChannelConfig = &ibctesting.ChannelConfig{ - PortID: wasmkeeper.PortIDForContract(providerContracts.externalStaking), - Order: channeltypes.UNORDERED, - } - ibcPath.EndpointA.ChannelConfig = &ibctesting.ChannelConfig{ - PortID: converterPortID, - Order: channeltypes.UNORDERED, - } - coord.CreateChannels(ibcPath) - - // when ibc package is relayed - require.NotEmpty(t, consumerChain.PendingSendPackets) - require.NoError(t, coord.RelayAndAckPendingPackets(ibcPath)) + x := setupExampleChains(t) + consumerCli, consumerContracts, providerCli := setupMeshSecurity(t, x) // then the active set should be stored in the ext staking contract // and contain all active validator addresses - qRsp := providerCli.QueryExtStaking(Query{"list_remote_validators": {}}) + qRsp := providerCli.QueryExtStaking(Query{"list_active_validators": {}}) require.Len(t, qRsp["validators"], 4, qRsp) - for _, v := range consumerChain.Vals.Validators { + for _, v := range x.ConsumerChain.Vals.Validators { require.Contains(t, qRsp["validators"], sdk.ValAddress(v.Address).String()) } // ---------------------------- // ensure nothing staked by the virtual staking contract yet - myExtValidator := sdk.ValAddress(consumerChain.Vals.Validators[1].Address) + myExtValidator := sdk.ValAddress(x.ConsumerChain.Vals.Validators[1].Address) myExtValidatorAddr := myExtValidator.String() - _, found := consumerApp.StakingKeeper.GetDelegation(consumerChain.GetContext(), consumerContracts.staking, myExtValidator) + _, found := x.ConsumerApp.StakingKeeper.GetDelegation(x.ConsumerChain.GetContext(), consumerContracts.staking, myExtValidator) require.False(t, found) - consumerCli.MustEnableVirtualStaking(sdk.NewInt64Coin(consumerDenom, 1_000_000_000)) - - // then the max cap limit is persisted + // the max cap limit is persisted rsp := consumerCli.QueryMaxCap() - assert.Equal(t, sdk.NewInt64Coin(consumerDenom, 1_000_000_000), rsp.Cap) + assert.Equal(t, sdk.NewInt64Coin(x.ConsumerDenom, 1_000_000_000), rsp.Cap) // provider chain // ============== // Deposit - A user deposits the vault denom to provide some collateral to their account execMsg := `{"bond":{}}` - providerCli.MustExecVault(execMsg, sdk.NewInt64Coin(providerDenom, 100_000_000)) + providerCli.MustExecVault(execMsg, sdk.NewInt64Coin(x.ProviderDenom, 100_000_000)) // then query contract state assert.Equal(t, 100_000_000, providerCli.QueryVaultFreeBalance()) // Stake Locally - A user triggers a local staking action to a chosen validator. They then can manage their delegation and vote via the local staking contract. - myLocalValidatorAddr := sdk.ValAddress(providerChain.Vals.Validators[0].Address).String() + myLocalValidatorAddr := sdk.ValAddress(x.ProviderChain.Vals.Validators[0].Address).String() execLocalStakingMsg := fmt.Sprintf(`{"stake_local":{"amount": {"denom":%q, "amount":"%d"}, "msg":%q}}`, - providerDenom, 30_000_000, + x.ProviderDenom, 30_000_000, base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf(`{"validator": "%s"}`, myLocalValidatorAddr)))) providerCli.MustExecVault(execLocalStakingMsg) assert.Equal(t, 70_000_000, providerCli.QueryVaultFreeBalance()) // Failure mode of cross-stake... trying to stake to an unknown validator - err := providerCli.ExecStakeRemote("BAD-VALIDATOR", sdk.NewInt64Coin(providerDenom, 80_000_000)) + err := providerCli.ExecStakeRemote("BAD-VALIDATOR", sdk.NewInt64Coin(x.ProviderDenom, 80_000_000)) require.Error(t, err) // no change to free balance assert.Equal(t, 70_000_000, providerCli.QueryVaultFreeBalance()) // Cross Stake - A user pulls out additional liens on the same collateral "cross staking" it on different chains. - err = providerCli.ExecStakeRemote(myExtValidatorAddr, sdk.NewInt64Coin(providerDenom, 80_000_000)) + err = providerCli.ExecStakeRemote(myExtValidatorAddr, sdk.NewInt64Coin(x.ProviderDenom, 80_000_000)) require.NoError(t, err) - require.NoError(t, coord.RelayAndAckPendingPackets(ibcPath)) + require.NoError(t, x.Coordinator.RelayAndAckPendingPackets(x.IbcPath)) require.Equal(t, 20_000_000, providerCli.QueryVaultFreeBalance()) // = 70 (free) + 30 (local) - 80 (remote staked) // then qRsp = providerCli.QueryExtStaking(Query{ "stake": { - "user": myProvChainActor, + "user": x.MyProvChainActor, "validator": myExtValidatorAddr, }, }) - assert.Equal(t, "80000000", qRsp["stake"], qRsp) + assert.Equal(t, 80_000_000, ParseHighLow(t, qRsp["stake"]).High, qRsp) assert.Empty(t, qRsp["pending_unbonds"]) // consumer chain @@ -159,19 +116,19 @@ func TestMVP(t *testing.T) { // ============== // // Cross Stake - A user undelegates - execMsg = fmt.Sprintf(`{"unstake":{"validator":"%s", "amount":{"denom":"%s", "amount":"30000000"}}}`, myExtValidator.String(), providerDenom) + execMsg = fmt.Sprintf(`{"unstake":{"validator":"%s", "amount":{"denom":"%s", "amount":"30000000"}}}`, myExtValidator.String(), x.ProviderDenom) providerCli.MustExecExtStaking(execMsg) - require.NoError(t, coord.RelayAndAckPendingPackets(ibcPath)) + require.NoError(t, x.Coordinator.RelayAndAckPendingPackets(x.IbcPath)) // then qRsp = providerCli.QueryExtStaking(Query{ "stake": { - "user": myProvChainActor, + "user": x.MyProvChainActor, "validator": myExtValidatorAddr, }, }) - require.Equal(t, 50_000_000, providerCli.QueryExtStakingAmount(myProvChainActor, myExtValidatorAddr)) + require.Equal(t, 50_000_000, providerCli.QueryExtStakingAmount(x.MyProvChainActor, myExtValidatorAddr)) require.Len(t, qRsp["pending_unbonds"], 1) unbonds := qRsp.Array("pending_unbonds")[0] assert.Equal(t, "30000000", unbonds["amount"], qRsp) @@ -180,7 +137,7 @@ func TestMVP(t *testing.T) { // ==================== consumerCli.ExecNewEpoch() // x - require.NoError(t, coord.RelayAndAckPendingPackets(ibcPath)) + require.NoError(t, x.Coordinator.RelayAndAckPendingPackets(x.IbcPath)) // then the total delegated amount is updated consumerCli.assertTotalDelegated(math.NewInt(22_500_000)) // (80_000_000 - 30_000_000) /2 * (1 -0.1) @@ -199,11 +156,11 @@ func TestMVP(t *testing.T) { require.NoError(t, err) releasedAt := time.Unix(0, int64(at)).UTC() // update system time with healthy ibc clients - for coord.CurrentTime.Before(releasedAt.Add(time.Minute)) { - coord.CurrentTime = coord.CurrentTime.Add(96 * time.Hour) - coord.UpdateTime() - require.NoError(t, ibcPath.EndpointA.UpdateClient()) - require.NoError(t, ibcPath.EndpointB.UpdateClient()) + for x.Coordinator.CurrentTime.Before(releasedAt.Add(time.Minute)) { + x.Coordinator.CurrentTime = x.Coordinator.CurrentTime.Add(96 * time.Hour) + x.Coordinator.UpdateTime() + require.NoError(t, x.IbcPath.EndpointA.UpdateClient()) + require.NoError(t, x.IbcPath.EndpointB.UpdateClient()) } providerCli.MustExecExtStaking(`{"withdraw_unbonded":{}}`) @@ -213,11 +170,11 @@ func TestMVP(t *testing.T) { // ============== // // A user unstakes some free amount from the vault - balanceBefore := providerChain.Balance(providerChain.SenderAccount.GetAddress(), "stake") - providerCli.MustExecVault(fmt.Sprintf(`{"unbond":{"amount":{"denom":"%s", "amount": "30000000"}}}`, providerDenom)) + balanceBefore := x.ProviderChain.Balance(x.ProviderChain.SenderAccount.GetAddress(), "stake") + providerCli.MustExecVault(fmt.Sprintf(`{"unbond":{"amount":{"denom":"%s", "amount": "30000000"}}}`, x.ProviderDenom)) // then assert.Equal(t, 20_000_000, providerCli.QueryVaultFreeBalance()) - balanceAfter := providerChain.Balance(providerChain.SenderAccount.GetAddress(), providerDenom) + balanceAfter := x.ProviderChain.Balance(x.ProviderChain.SenderAccount.GetAddress(), x.ProviderDenom) assert.Equal(t, math.NewInt(30_000_000), balanceAfter.Sub(balanceBefore).Amount) // ---------------------- @@ -227,17 +184,17 @@ func TestMVP(t *testing.T) { // ============== // assert rewards exist - rewardsResp, err := distrkeeper.NewQuerier(consumerCli.app.DistrKeeper).DelegationRewards(sdk.WrapSDKContext(consumerChain.GetContext()), + rewardsResp, err := distrkeeper.NewQuerier(consumerCli.app.DistrKeeper).DelegationRewards(sdk.WrapSDKContext(x.ConsumerChain.GetContext()), &distrtypes.QueryDelegationRewardsRequest{ValidatorAddress: myExtValidator.String(), DelegatorAddress: consumerCli.contracts.staking.String()}) require.NoError(t, err) - require.False(t, rewardsResp.Rewards.AmountOf(consumerDenom).IsZero()) + require.False(t, rewardsResp.Rewards.AmountOf(x.ConsumerDenom).IsZero()) // when claimed in epoch consumerCli.ExecNewEpoch() - require.NoError(t, coord.RelayAndAckPendingPackets(ibcPath)) + require.NoError(t, x.Coordinator.RelayAndAckPendingPackets(x.IbcPath)) // then should be tracked on provider side - qRsp = providerCli.QueryExtStaking(Query{"all_pending_rewards": {"user": myProvChainActor}}) + qRsp = providerCli.QueryExtStaking(Query{"all_pending_rewards": {"user": x.MyProvChainActor}}) myRewardsAmount := qRsp.Array("rewards")[0].To("rewards", "rewards")["amount"] v, err := strconv.Atoi(myRewardsAmount.(string)) require.NoError(t, err) @@ -245,16 +202,16 @@ func TestMVP(t *testing.T) { // and when claimed targetAddr := sdk.AccAddress(rand.Bytes(address.Len)) - gotBalance := consumerChain.Balance(targetAddr, consumerDenom).Amount + gotBalance := x.ConsumerChain.Balance(targetAddr, x.ConsumerDenom).Amount require.Equal(t, math.ZeroInt(), gotBalance) providerCli.MustExecExtStaking(fmt.Sprintf(`{"withdraw_rewards":{"validator": %q, "remote_recipient": %q}}`, myExtValidatorAddr, targetAddr.String())) - require.NoError(t, coord.RelayAndAckPendingPackets(ibcPath)) + require.NoError(t, x.Coordinator.RelayAndAckPendingPackets(x.IbcPath)) // then should be on destination account - gotBalance = consumerChain.Balance(targetAddr, consumerDenom).Amount + gotBalance = x.ConsumerChain.Balance(targetAddr, x.ConsumerDenom).Amount require.Equal(t, myRewardsAmount, gotBalance.String()) t.Log("got Rewards: " + gotBalance.String()) - for _, v := range consumerChain.Vals.Validators { + for _, v := range x.ConsumerChain.Vals.Validators { del, found := consumerCli.app.StakingKeeper.GetDelegation(consumerCli.chain.GetContext(), consumerCli.contracts.staking, sdk.ValAddress(v.Address)) if !found { val, ok := consumerCli.app.StakingKeeper.GetValidator(consumerCli.chain.GetContext(), sdk.ValAddress(v.Address)) diff --git a/tests/e2e/test_client.go b/tests/e2e/test_client.go index 39c71634..865f86e9 100644 --- a/tests/e2e/test_client.go +++ b/tests/e2e/test_client.go @@ -95,7 +95,7 @@ func (p *TestProviderClient) BootstrapContracts(connId, portID string) ProviderC vaultContract := InstantiateContract(p.t, p.chain, vaultCodeID, initMsg) // external staking - extStakingCodeID := p.chain.StoreCodeFile(buildPathToWasm("external_staking.wasm")).CodeID + extStakingCodeID := p.chain.StoreCodeFile(buildPathToWasm("mesh_external_staking.wasm")).CodeID initMsg = []byte(fmt.Sprintf( `{"remote_contact": {"connection_id":%q, "port_id":%q}, "denom": %q, "vault": %q, "unbonding_period": %d, "rewards_denom": %q, "max_slashing": %q }`, connId, portID, localTokenDenom, vaultContract.String(), unbondingPeriod, rewardTokenDenom, maxExtSlashing)) @@ -160,9 +160,7 @@ func (p TestProviderClient) QueryExtStakingAmount(user, validator string) int { }, }) require.Contains(p.t, qRsp, "stake") - r, err := strconv.Atoi(qRsp["stake"].(string)) - require.NoError(p.t, err) - return r + return ParseHighLow(p.t, qRsp["stake"]).Low } func (p TestProviderClient) QueryExtStaking(q Query) QueryResponse { @@ -173,16 +171,29 @@ func (p TestProviderClient) QueryVault(q Query) QueryResponse { return Querier(p.t, p.chain)(p.contracts.vault.String(), q) } +type HighLowType struct { + High, Low int +} + +// ParseHighLow convert json source type into custom type +func ParseHighLow(t *testing.T, a any) HighLowType { + m, ok := a.(map[string]any) + require.True(t, ok, "%T", a) + require.Contains(t, m, "h") + require.Contains(t, m, "l") + h, err := strconv.Atoi(m["h"].(string)) + require.NoError(t, err) + l, err := strconv.Atoi(m["l"].(string)) + require.NoError(t, err) + return HighLowType{High: h, Low: l} +} + func (p TestProviderClient) QueryVaultFreeBalance() int { qRsp := p.QueryVault(Query{ "account": {"account": p.chain.SenderAccount.GetAddress().String()}, }) - require.NotEmpty(p.t, qRsp["account"], qRsp) - acct := qRsp["account"].(map[string]any) - require.NotEmpty(p.t, acct["free"], qRsp) - r, err := strconv.Atoi(acct["free"].(string)) - require.NoError(p.t, err, qRsp) - return r + require.NotEmpty(p.t, qRsp["free"], qRsp) + return ParseHighLow(p.t, qRsp["free"]).Low } type TestConsumerClient struct { @@ -253,7 +264,7 @@ func (p *TestConsumerClient) ExecNewEpoch() { } } -// add authority to mint/burn virtual tokens gov proposal +// MustEnableVirtualStaking add authority to mint/burn virtual tokens gov proposal func (p *TestConsumerClient) MustEnableVirtualStaking(maxCap sdk.Coin) { govProposal := &types.MsgSetVirtualStakingMaxCap{ Authority: p.app.MeshSecKeeper.GetAuthority(), diff --git a/tests/e2e/valset_test.go b/tests/e2e/valset_test.go new file mode 100644 index 00000000..4758d827 --- /dev/null +++ b/tests/e2e/valset_test.go @@ -0,0 +1,210 @@ +package e2e + +import ( + "testing" + "time" + + wasmibctesting "github.com/CosmWasm/wasmd/x/wasm/ibctesting" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + "github.com/stretchr/testify/require" + "github.com/tidwall/gjson" + + sdkmath "cosmossdk.io/math" + + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/testutil/mock" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/evidence/types" + slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + "github.com/osmosis-labs/mesh-security-sdk/demo/app" +) + +func TestValsetTransitions(t *testing.T) { + operatorKeys := secp256k1.GenPrivKey() + setupVal := func(t *testing.T, x example) mock.PV { + myVal := CreateNewValidator(t, operatorKeys, x.ConsumerChain) + require.Len(t, x.ConsumerChain.Vals.Validators, 5) + return myVal + } + specs := map[string]struct { + setup func(t *testing.T, x example) mock.PV + doTransition func(t *testing.T, val mock.PV, x example) + assertPackets func(t *testing.T, packets []channeltypes.Packet) + }{ + "new validator to active": { + setup: func(t *testing.T, x example) mock.PV { + return mock.PV{} + }, + doTransition: func(t *testing.T, _ mock.PV, x example) { + CreateNewValidator(t, operatorKeys, x.ConsumerChain) + require.Len(t, x.ConsumerChain.Vals.Validators, 5) + }, + assertPackets: func(t *testing.T, packets []channeltypes.Packet) { + require.Len(t, packets, 1) + added := gjson.Get(string(packets[0].Data), "valset_update.additions.#.valoper").Array() + require.Len(t, added, 1) + require.Equal(t, sdk.ValAddress(operatorKeys.PubKey().Address()).String(), added[0].String()) + }, + }, + "active to tombstone": { + setup: setupVal, + doTransition: func(t *testing.T, val mock.PV, x example) { + e := &types.Equivocation{ + Height: 1, + Power: 100, + Time: time.Now().UTC(), + ConsensusAddress: sdk.ConsAddress(val.PrivKey.PubKey().Address().Bytes()).String(), + } + // when + x.ConsumerApp.EvidenceKeeper.HandleEquivocationEvidence(x.ConsumerChain.GetContext(), e) + }, + assertPackets: func(t *testing.T, packets []channeltypes.Packet) { + require.Len(t, packets, 1) + tombstoned := gjson.Get(string(packets[0].Data), "valset_update.tombstoned").Array() + require.Len(t, tombstoned, 1, string(packets[0].Data)) + require.Equal(t, sdk.ValAddress(operatorKeys.PubKey().Address()).String(), tombstoned[0].String()) + }, + }, + "active to jailed": { + setup: setupVal, + doTransition: func(t *testing.T, val mock.PV, x example) { + jailValidator(t, sdk.ConsAddress(val.PrivKey.PubKey().Address()), x.Coordinator, x.ConsumerChain, x.ConsumerApp) + }, + assertPackets: func(t *testing.T, packets []channeltypes.Packet) { + require.Len(t, packets, 1) + jailed := gjson.Get(string(packets[0].Data), "valset_update.jailed").Array() + require.Len(t, jailed, 1, string(packets[0].Data)) + require.Equal(t, sdk.ValAddress(operatorKeys.PubKey().Address()).String(), jailed[0].String()) + }, + }, + "jailed to active": { + setup: func(t *testing.T, x example) mock.PV { + val := setupVal(t, x) + jailValidator(t, sdk.ConsAddress(val.PrivKey.PubKey().Address()), x.Coordinator, x.ConsumerChain, x.ConsumerApp) + x.ConsumerChain.NextBlock() + require.NoError(t, x.Coordinator.RelayAndAckPendingPackets(x.IbcPath)) + return val + }, + doTransition: func(t *testing.T, val mock.PV, x example) { + unjailValidator(t, sdk.ConsAddress(val.PrivKey.PubKey().Address()), operatorKeys, x.Coordinator, x.ConsumerChain, x.ConsumerApp) + }, + assertPackets: func(t *testing.T, packets []channeltypes.Packet) { + for _, v := range packets { + t.Log("\n\npacket: " + string(v.Data)) + } + require.Len(t, packets, 1) + unjailed := gjson.Get(string(packets[0].Data), "valset_update.additions.#.valoper").Array() + require.Len(t, unjailed, 1, string(packets[0].Data)) + require.Equal(t, sdk.ValAddress(operatorKeys.PubKey().Address()).String(), unjailed[0].String()) + }, + }, + "jailed to remove": { + setup: func(t *testing.T, x example) mock.PV { + val := setupVal(t, x) + t.Log("jail validator") + jailValidator(t, sdk.ConsAddress(val.PrivKey.PubKey().Address()), x.Coordinator, x.ConsumerChain, x.ConsumerApp) + + t.Log("Add new validator") + otherOperator := secp256k1.GenPrivKey() + x.ConsumerChain.Fund(sdk.AccAddress(otherOperator.PubKey().Address()), sdkmath.NewInt(1_000_000_000)) + CreateNewValidator(t, otherOperator, x.ConsumerChain) // add a now val to fill the slot + x.ConsumerChain.NextBlock() + require.NoError(t, x.Coordinator.RelayAndAckPendingPackets(x.IbcPath)) + + // undelegate + t.Log("undelegating") + undelegate(t, operatorKeys, sdk.NewInt(999_999), x) + return val + }, + doTransition: func(t *testing.T, val mock.PV, x example) { + t.Log("unjail") + unjailValidator(t, sdk.ConsAddress(val.PrivKey.PubKey().Address()), operatorKeys, x.Coordinator, x.ConsumerChain, x.ConsumerApp) + }, + assertPackets: func(t *testing.T, packets []channeltypes.Packet) { + require.Len(t, packets, 1) + unjailed := gjson.Get(string(packets[0].Data), "valset_update.unjailed").Array() + require.Len(t, unjailed, 1, string(packets[0].Data)) + require.Equal(t, sdk.ValAddress(operatorKeys.PubKey().Address()).String(), unjailed[0].String()) + }, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + x := setupExampleChains(t) + setupMeshSecurity(t, x) + // set max validators + ctx, sk := x.ConsumerChain.GetContext(), x.ConsumerApp.StakingKeeper + params := sk.GetParams(ctx) + params.MaxValidators = 5 + require.NoError(t, sk.SetParams(ctx, params)) + + x.ConsumerChain.Fund(sdk.AccAddress(operatorKeys.PubKey().Address()), sdkmath.NewInt(1_000_000_000)) + myVal := spec.setup(t, x) + require.NoError(t, x.Coordinator.RelayAndAckPendingPackets(x.IbcPath)) + + // when + spec.doTransition(t, myVal, x) + x.ConsumerChain.NextBlock() + // then + spec.assertPackets(t, x.ConsumerChain.PendingSendPackets) + require.NoError(t, x.Coordinator.RelayAndAckPendingPackets(x.IbcPath)) + }) + } +} + +func undelegate(t *testing.T, operatorKeys *secp256k1.PrivKey, amount sdkmath.Int, x example) { + ctx, sk := x.ConsumerChain.GetContext(), x.ConsumerApp.StakingKeeper + val1 := sk.Validator(ctx, sdk.ValAddress(operatorKeys.PubKey().Address())) + require.NotNil(t, val1) + msg := stakingtypes.NewMsgUndelegate(sdk.AccAddress(operatorKeys.PubKey().Address()), val1.GetOperator(), sdk.NewCoin(x.ConsumerDenom, amount)) + _, err := x.ConsumerChain.SendNonDefaultSenderMsgs(operatorKeys, msg) + require.NoError(t, err) + x.ConsumerChain.NextBlock() +} + +func jailValidator(t *testing.T, consAddr sdk.ConsAddress, coordinator *wasmibctesting.Coordinator, chain *wasmibctesting.TestChain, app *app.MeshApp) { + ctx := chain.GetContext() + signInfo, found := app.SlashingKeeper.GetValidatorSigningInfo(ctx, consAddr) + require.True(t, found) + // bump height to be > block window + coordinator.CommitNBlocks(chain, 100) + ctx = chain.GetContext() + signInfo.MissedBlocksCounter = app.SlashingKeeper.MinSignedPerWindow(ctx) + app.SlashingKeeper.SetValidatorSigningInfo(ctx, consAddr, signInfo) + app.SlashingKeeper.HandleValidatorSignature(ctx, cryptotypes.Address(consAddr), 100, false) + // when updates trigger + chain.NextBlock() +} + +func unjailValidator(t *testing.T, consAddr sdk.ConsAddress, operatorKeys *secp256k1.PrivKey, coordinator *wasmibctesting.Coordinator, chain *wasmibctesting.TestChain, app *app.MeshApp) { + // move clock + aa, ok := app.SlashingKeeper.GetValidatorSigningInfo(chain.GetContext(), consAddr) + require.True(t, ok) + coordinator.IncrementTimeBy(aa.JailedUntil.Sub(chain.GetContext().BlockTime()) + time.Minute) + // when + unjaiMsg := slashingtypes.NewMsgUnjail(sdk.ValAddress(operatorKeys.PubKey().Address())) + _, err := chain.SendNonDefaultSenderMsgs(operatorKeys, unjaiMsg) + require.NoError(t, err) + // and + chain.NextBlock() +} + +func CreateNewValidator(t *testing.T, operatorKeys *secp256k1.PrivKey, chain *wasmibctesting.TestChain) mock.PV { + privVal := mock.NewPV() + bondCoin := sdk.NewCoin(sdk.DefaultBondDenom, sdk.TokensFromConsensusPower(2, sdk.DefaultPowerReduction)) + description := stakingtypes.NewDescription("my new val", "", "", "", "") + commissionRates := stakingtypes.NewCommissionRates(sdkmath.LegacyZeroDec(), sdkmath.LegacyNewDec(1), sdkmath.LegacyNewDec(1)) + createValidatorMsg, err := stakingtypes.NewMsgCreateValidator( + sdk.ValAddress(operatorKeys.PubKey().Address()), privVal.PrivKey.PubKey(), bondCoin, description, commissionRates, sdkmath.OneInt(), + ) + require.NoError(t, err) + _, err = chain.SendNonDefaultSenderMsgs(operatorKeys, createValidatorMsg) + require.NoError(t, err) + chain.NextBlock() + // add to signers + chain.Signers[privVal.PrivKey.PubKey().Address().String()] = privVal + return privVal +} diff --git a/tests/starship/go.mod b/tests/starship/go.mod index b8368be1..83c0f259 100644 --- a/tests/starship/go.mod +++ b/tests/starship/go.mod @@ -1,10 +1,10 @@ module github.com/osmosis-labs/mesh-security-sdk/tests/starship -go 1.19 +go 1.21 require ( - github.com/CosmWasm/wasmd v0.42.0 - github.com/CosmWasm/wasmvm v1.4.0 // indirect + github.com/CosmWasm/wasmd v0.44.0 + github.com/CosmWasm/wasmvm v1.5.0 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect github.com/cosmos/cosmos-sdk v0.47.5 github.com/cosmos/gogogateway v1.2.0 // indirect diff --git a/tests/starship/go.sum b/tests/starship/go.sum index d4f8793f..a126816f 100644 --- a/tests/starship/go.sum +++ b/tests/starship/go.sum @@ -209,18 +209,19 @@ github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN github.com/Anmol1696/lens v0.1.1-0.20230705212610-c00628a886a0 h1:PvuK7ko8hwVEJ27XEVViYCStYzdZ52xrmNvxwJCpl2M= github.com/Anmol1696/lens v0.1.1-0.20230705212610-c00628a886a0/go.mod h1:oRzw2Cqw7ypk97mh+xkEvcprhbRZqvHEXCB4Vz3Zkn0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 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/wasmd v0.42.0 h1:4xZ7GHLrJp3P8qN0wsWOpk5qYLHW9AM5fgcDFPi/p90= -github.com/CosmWasm/wasmd v0.42.0/go.mod h1:DiEyBjHxzkEENYqQhHyka+r4HfR72stSPUtGv+Yh/UU= -github.com/CosmWasm/wasmvm v1.4.0 h1:84I3MlvvzcOo2z+ed0ztPi7eeDNk6/sYuK76uyXP1nI= -github.com/CosmWasm/wasmvm v1.4.0/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/CosmWasm/wasmd v0.44.0 h1:2sbcoCAvfjCs1O0SWt53xULKjkV06dbSFthEViIC6Zg= +github.com/CosmWasm/wasmvm v1.5.0 h1:3hKeT9SfwfLhxTGKH3vXaKFzBz1yuvP8SlfwfQXbQfw= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -228,6 +229,7 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -253,6 +255,7 @@ github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -266,8 +269,11 @@ github.com/btcsuite/btcd v0.23.4 h1:IzV6qqkfwbItOS/sg/aDfPDsjPP8twrCOE2R93hxMlQ= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= +github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bufbuild/protocompile v0.5.1 h1:mixz5lJX4Hiz4FpqFREJHIXLfaLBntfaJv1h+/jS+Qg= +github.com/bufbuild/protocompile v0.5.1/go.mod h1:G5iLmavmF4NsYtpZFvE3B/zFch2GIY8+wjsYLR/lc40= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -322,6 +328,7 @@ github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3Hf github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -371,6 +378,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= @@ -386,7 +394,9 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUn github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -413,9 +423,11 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -428,6 +440,7 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= 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-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -450,16 +463,21 @@ github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/j github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= +github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= +github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/gobwas/ws v1.1.0 h1:7RFti/xnNkMJnrK7D1yQ/iCIB5OrrY/54/H930kIbHA= +github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -547,6 +565,7 @@ github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIG github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -641,6 +660,7 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -672,6 +692,7 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -789,6 +810,7 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -797,15 +819,19 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -815,6 +841,7 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -831,6 +858,7 @@ github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7c github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -906,6 +934,7 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1008,6 +1037,7 @@ go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= @@ -1075,6 +1105,7 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1180,6 +1211,7 @@ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1364,6 +1396,7 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1642,6 +1675,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/tests/starship/mvp_test.go b/tests/starship/mvp_test.go index 89630863..2e98e473 100644 --- a/tests/starship/mvp_test.go +++ b/tests/starship/mvp_test.go @@ -31,7 +31,7 @@ func Test2WayContract(t *testing.T) { // check list of validators on each chains require.Eventuallyf(t, func() bool { - qRsp = providerClient1.QueryExtStaking(setup.Query{"list_remote_validators": {}}) + qRsp = providerClient1.QueryExtStaking(setup.Query{"list_active_validators": {}}) v := qRsp["validators"].([]interface{}) if len(v) > 0 { return true @@ -109,7 +109,7 @@ func Test2WayContract(t *testing.T) { require.Eventuallyf(t, func() bool { - qRsp = providerClient2.QueryExtStaking(setup.Query{"list_remote_validators": {}}) + qRsp = providerClient2.QueryExtStaking(setup.Query{"list_active_validators": {}}) v := qRsp["validators"].([]interface{}) if len(v) > 0 { return true @@ -176,7 +176,7 @@ func Test2WayContract(t *testing.T) { "validator": myExtValidatorAddr2, }, }) - assert.Equal(t, "80000000", qRsp["stake"], qRsp) + assert.Equal(t, 80_000_000, setup.ParseHighLow(qRsp["stake"]).Low, qRsp) assert.Empty(t, qRsp["pending_unbonds"]) } @@ -222,7 +222,7 @@ func TestMVP(t *testing.T) { require.Eventuallyf(t, func() bool { - qRsp = providerClient.QueryExtStaking(setup.Query{"list_remote_validators": {}}) + qRsp = providerClient.QueryExtStaking(setup.Query{"list_active_validators": {}}) v := qRsp["validators"].([]interface{}) if len(v) > 0 { return true diff --git a/tests/starship/setup/main.go b/tests/starship/setup/main.go index 65211d25..01e3b4e5 100644 --- a/tests/starship/setup/main.go +++ b/tests/starship/setup/main.go @@ -140,7 +140,7 @@ func MeshSecurity(provider, consumer, configFile, wasmContractPath string, wasmC qRsp := map[string]any{} err = Eventually( func() bool { - qRsp = providerCli.QueryExtStaking(Query{"list_remote_validators": {}}) + qRsp = providerCli.QueryExtStaking(Query{"list_active_validators": {}}) v := qRsp["validators"].([]interface{}) if len(v) > 0 { return true diff --git a/tests/starship/setup/setup.go b/tests/starship/setup/setup.go index 829e53c1..4788b444 100644 --- a/tests/starship/setup/setup.go +++ b/tests/starship/setup/setup.go @@ -100,7 +100,7 @@ func (p *ProviderClient) BootstrapContracts(connId, portID, rewardDenom string) nativeStakingContract := contracts[nativeStakingCodeID] // external Staking - extStaking, err := StoreCodeFile(p.Chain, buildPathToWasm(p.wasmContractPath, "external_staking.wasm", p.wasmContractGZipped)) + extStaking, err := StoreCodeFile(p.Chain, buildPathToWasm(p.wasmContractPath, "mesh_external_staking.wasm", p.wasmContractGZipped)) if err != nil { return nil, err } @@ -192,18 +192,33 @@ func (p ProviderClient) QueryVaultFreeBalance() int { }, 300*time.Second, 5*time.Second, - "valut token locked for too long: %v", + "vault token locked for too long: %v", qRsp, ) if err != nil { panic(err) } - acct := qRsp["account"].(map[string]any) - r, err := strconv.Atoi(acct["free"].(string)) + return ParseHighLow(qRsp["free"]).Low +} + +type HighLowType struct { + High, Low int +} + +func ParseHighLow(a any) HighLowType { + m, ok := a.(map[string]any) + if !ok { + panic(fmt.Sprintf("unsupported type %T", a)) + } + h, err := strconv.Atoi(m["h"].(string)) if err != nil { - panic(err) + panic(fmt.Sprintf("high: %s", err)) + } + l, err := strconv.Atoi(m["l"].(string)) + if err != nil { + panic(fmt.Sprintf("low: %s", err)) } - return r + return HighLowType{High: h, Low: l} } type ConsumerClient struct { diff --git a/tests/testdata/download_releases.sh b/tests/testdata/download_releases.sh index 3d6b42cd..e96f4633 100755 --- a/tests/testdata/download_releases.sh +++ b/tests/testdata/download_releases.sh @@ -8,8 +8,8 @@ if [ $# -ne 1 ]; then fi tag="$1" -for contract in external_staking mesh_converter mesh_native_staking mesh_native_staking_proxy mesh_simple_price_feed \ -mesh_vault mesh_virtual_staking ; do +for contract in mesh_external_staking mesh_converter mesh_native_staking mesh_native_staking_proxy mesh_simple_price_feed \ +mesh_vault mesh_virtual_staking; do url="https://github.com/osmosis-labs/mesh-security/releases/download/$tag/${contract}.wasm" echo "Downloading $url ..." wget -O "${contract}.wasm" "$url" diff --git a/tests/testdata/external_staking.wasm.gz b/tests/testdata/external_staking.wasm.gz deleted file mode 100644 index e266c9d53c0ac7ec3056e6ce0ee98b5a4ef9b721..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183457 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 z z^F55z1YHQHqo#D$LEJ}><%xdh1&C8xYu@toTRg-H9ckr}a-?eJ!A`oRy=?#nA3-w& zYDrMft<0)!Y?C8nHi7_kcHQ}N<2C>hE8PHp5xE_33wA)lJD~ddWqw`o&=t0^GQ1|2 zO|em1{X-)=^^#E(7xktPD6@Kh`<4xXxpdT!4+S$hrY65(^eF6%x_! z_jD$r0ZbYz7$<^UqTW{e;3lXVH|bgKglcX!D5JiO2;kJ#LezbP`fm4o;-_u6rxN|* zgnqFuU(B~s*S3}uP>+~i97BTsJ2cf3vrMig_7xec)HiwW!DMf~VK3*sWq$^m!AU)T zeMNQpm-O8AqUs@6;`Y{-hlbaUv^Mr5ty(MJr3j1O*o8x$Rrrd&d}~YLV9GB7cVZBa zoDBf|ldP(|D>^HC2RZIwAZ7c&x?F@7KJNZZe^Uezx6=+K6e5EL8?uZefuuW`Z{xY^ z6xc1UEANC^$xpGJ?$4xU_u2iuw+t-R?SlJ?uLyD6mMyLPEAqFL8NCout291pe*gYX zQkvdW4&focy|;}(XhS=d5LgK;PK{WcqFV}!lR$Tf66f*cn4pfX+vJ2MI-?b&)Cp2> zC=(H+z>AWDv=XG$`yr*oanS&@VC(pH2wr=296wS!b+l6l;O#5o0f+V z*}hAr_a@HW%0eXU^Idcn*35D?iZ{_$X-vH8KdWCp<>-g$HDK+*ob21g2*-+95wJ@` zs6?au-AKRrd>$_b&Me?ux zsJ?d0cwWB2-yU@hIDXz2>&K6BD>6;b^EC0n3{FfH2`0ZU!|?5VcRJ>H2`0P9Q2IcN!-Nu5aI`eOtH*YPzu{Ejw!3V4}z- z?(;#DAMw<5el<0PgjBt_r9wMfDr!2aXkxvhiR3!el&!kp{l9Od4sKld@dPyQ%Kv!z z-`1EGrj8>|%0K%cG{nqNr$SEEE-W9FHmp^ieEnb>%9XG0YXfA1@XmUdg%l>bLQe^X zFhrg)cni^RQlY2GeuDMY^fcemTTlJy6|IV@{*&)z1na1((HUv!jI8ft*;{$Xv7WAv z?nNiqbo9kqMUFv1dwbdIhDh5hsT{3b!f%a8U8Pypj>DIm@Fz#5VvmQqM9r12h zsYX93n2Koax)zO5=tDKDll0~o8|tq)a>F0sL0-^7o=@}E-p+a*=9?;Rq@hHgCs?@> z&jlf)LrW}Bp`ryncrQ4S&g%+36F;Q6#Ixs+m(3}Cdo@5@i%Z2iqFRa9wH9}TYvB%t zPbNB9#G@Qfrm^a60mwuE^hDBQxI3Qoc1UZ!8$+}V+O4*uU2_2{`GBGAd4TO^6_unF z^&+a3mLqNJ(Fg(@ZBbds{x9C=!W4c-FEy_awA6LIACLv-I#%@WpSDFFxh)ZrVqwcpp*x2(p`_@}z9#5vKyh~}DT235 zBBY20i2*W*2&BrywJqkvf(78JNsRJLA|IZ6Q#2q_e8@>trfKYOT?Cc=Y^{lRD57Dfp6cMZIsX zh*UcyQt5!O-eFQA-ux-32o7+t{=HGqe8ep0>y1i!T0&&1S$tjdct<#oj>tTp=wOM+ z93dj}QtD^1(~=4TY)1(P^7&5E+bJhxU(}-Zb;jPXGejbYlkK`5-K9OcMSH~h$K4ff zdz;|4-GqtYlF8{P+dxB%!9cm6-7j%BEg}Nsv5-V|-|D^#g@+Oe7qF1@Xs{!~M-WGF z7mjfwfCeE*Kt`K>I-ImhqH;!gO+Yb*RcI{q5YY-8Y558vEjy)eN&)qg9qA89V$!1d zjtK~q=BI^1ih$Cng3<^r6X=EHCI+slu(X95ialE}k>w{+m_biGC$1=W>r~&VK%OXY z*XS$vMZX|3PTPnebAQL^9YgHSy|jf02kwWrPura_z7%%ww03YwIbrIkA7jFtS>idf z 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