From aab999bcb11acf63497fd268cf7c932c21df5223 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 6 Jul 2023 16:23:59 +0530 Subject: [PATCH 01/90] bump sdk 47, ibc v7, wasmd 40 --- app/ante.go | 7 +- app/app.go | 178 +-- app/decorators/gov_filter.go | 2 +- app/export.go | 4 +- app/test_helpers.go | 16 +- app/upgrades/mainnet/v11/upgrades.go | 10 +- app/upgrades/mainnet/v12/upgrades.go | 4 +- app/upgrades/mainnet/v5/upgrades.go | 12 +- app/upgrades/testnet/v2_0_0/upgrades.go | 10 +- app/wasm/test/helpers_test.go | 10 +- cmd/comdex/migrate.go | 3 +- cmd/comdex/migration.go | 4 +- cmd/comdex/root.go | 8 +- cmd/comdex/testnet.go | 10 +- go.mod | 152 +- go.sum | 1294 ++++++++++++++--- testutil/keeper/auction.go | 6 +- testutil/keeper/collector.go | 6 +- testutil/keeper/esm.go | 6 +- testutil/keeper/rewards.go | 6 +- testutil/keeper/tokenmint.go | 6 +- testutil/network/network.go | 8 +- testutil/simapp/simapp.go | 14 +- third_party/proto/tendermint/abci/types.proto | 2 +- .../proto/tendermint/types/block.proto | 2 +- .../proto/tendermint/types/evidence.proto | 2 +- .../proto/tendermint/types/params.proto | 2 +- .../proto/tendermint/types/types.proto | 2 +- .../proto/tendermint/types/validator.proto | 2 +- types/utils.go | 3 +- x/asset/abci.go | 2 +- x/asset/client/cli/tx.go | 2 +- x/asset/client/proposal_handler.go | 21 +- x/asset/client/rest/tx.go | 139 -- x/asset/handler.go | 2 +- x/asset/keeper/keeper.go | 6 +- x/asset/keeper/keeper_test.go | 2 +- x/asset/module.go | 15 +- x/asset/types/codec.go | 2 +- x/asset/types/gov.go | 12 +- x/auction/keeper/debt_test.go | 6 +- x/auction/keeper/dutch.go | 2 +- x/auction/keeper/dutch_lend.go | 2 +- x/auction/keeper/dutch_lend_test.go | 10 +- x/auction/keeper/dutch_test.go | 8 +- x/auction/keeper/keeper.go | 9 +- x/auction/keeper/keeper_test.go | 5 +- x/auction/keeper/math.go | 6 +- x/auction/keeper/math_test.go | 2 +- x/auction/keeper/store.go | 4 +- x/auction/keeper/surplus_test.go | 2 +- x/auction/module.go | 12 +- x/bandoracle/abci.go | 2 +- x/bandoracle/client/cli/tx.go | 2 +- x/bandoracle/client/proposal_handler.go | 3 +- x/bandoracle/client/rest/tx.go | 28 - x/bandoracle/expected/keeper.go | 4 +- x/bandoracle/handler.go | 2 +- x/bandoracle/keeper/keeper.go | 11 +- x/bandoracle/keeper/oracle.go | 6 +- x/bandoracle/module.go | 14 +- x/bandoracle/module_ibc.go | 8 +- x/bandoracle/module_simulation.go | 10 +- x/bandoracle/oracle.go | 2 +- x/bandoracle/types/codec.go | 2 +- x/bandoracle/types/genesis.go | 2 +- x/bandoracle/types/gov.go | 3 +- x/collector/client/rest/tx.go | 48 - x/collector/genesis_test.go | 2 +- x/collector/keeper/grpc_query_params_test.go | 2 +- x/collector/keeper/keeper.go | 9 +- x/collector/keeper/keeper_test.go | 2 +- x/collector/module.go | 12 +- x/collector/module_simulation.go | 10 +- x/collector/types/codec.go | 2 +- x/esm/abci.go | 2 +- x/esm/client/rest/tx.go | 28 - x/esm/keeper/keeper.go | 9 +- x/esm/keeper/keeper_test.go | 2 +- x/esm/module.go | 12 +- x/esm/module_simulation.go | 10 +- x/esm/types/codec.go | 2 +- x/lend/client/cli/tx.go | 2 +- x/lend/client/proposal_handler.go | 19 +- x/lend/client/rest/tx.go | 145 -- x/lend/handler.go | 2 +- x/lend/keeper/keeper.go | 13 +- x/lend/keeper/keeper_test.go | 2 +- x/lend/keeper/maths.go | 10 +- x/lend/module.go | 12 +- x/lend/module_simulation.go | 10 +- x/lend/types/codec.go | 2 +- x/lend/types/gov.go | 11 +- x/liquidation/abci.go | 2 +- x/liquidation/keeper/keeper.go | 9 +- x/liquidation/keeper/keeper_test.go | 5 +- x/liquidation/keeper/liquidate_borrow_test.go | 2 +- x/liquidation/keeper/liquidate_vaults_test.go | 4 +- x/liquidation/module.go | 12 +- x/liquidity/client/cli/tx.go | 2 +- x/liquidity/client/proposal_handler.go | 5 +- x/liquidity/client/rest/tx.go | 121 -- x/liquidity/client/testutil/helpers.go | 2 +- x/liquidity/client/testutil/suite.go | 8 +- x/liquidity/handler.go | 2 +- x/liquidity/handler_test.go | 2 +- x/liquidity/keeper/keeper.go | 7 +- x/liquidity/keeper/keeper_test.go | 6 +- x/liquidity/keeper/pool.go | 10 +- x/liquidity/legacy/v2/store.go | 3 +- x/liquidity/legacy/v2/store_test.go | 2 +- x/liquidity/module.go | 12 +- x/liquidity/module_test.go | 6 +- x/liquidity/types/codec.go | 2 +- x/liquidity/types/gov.go | 4 +- x/liquidity/types/keys_test.go | 2 +- x/liquidity/types/msgs_test.go | 2 +- x/liquidity/types/order.go | 2 +- x/liquidity/types/request_test.go | 2 +- x/liquidity/types/util.go | 4 +- x/locker/keeper/keeper.go | 7 +- x/locker/keeper/keeper_test.go | 5 +- x/locker/module.go | 12 +- x/locker/module_simulation.go | 10 +- x/market/abci.go | 2 +- x/market/expected/keeper.go | 4 +- x/market/keeper/keeper.go | 5 +- x/market/keeper/keeper_test.go | 2 +- x/market/module.go | 15 +- x/market/types/codec.go | 2 +- x/rewards/abci.go | 2 +- x/rewards/genesis_test.go | 2 +- x/rewards/keeper/grpc_query_params_test.go | 2 +- x/rewards/keeper/keeper.go | 9 +- x/rewards/keeper/keeper_test.go | 2 +- x/rewards/keeper/msg_server_test.go | 2 +- x/rewards/keeper/params_test.go | 2 +- x/rewards/module.go | 12 +- x/rewards/module_simulation.go | 9 +- x/tokenmint/client/cli/tx.go | 8 +- x/tokenmint/genesis_test.go | 5 +- x/tokenmint/handler_test.go | 7 +- x/tokenmint/keeper/keeper.go | 7 +- x/tokenmint/keeper/keeper_test.go | 7 +- x/tokenmint/module.go | 12 +- x/tokenmint/module_simulation.go | 2 +- x/tokenmint/module_test.go | 2 +- x/vault/client/rest/query.go | 35 - x/vault/client/rest/rest.go | 19 - x/vault/client/rest/tx.go | 1 - x/vault/client/testutil/helpers.go | 2 +- x/vault/client/testutil/suite.go | 10 +- x/vault/genesis_test.go | 5 +- x/vault/handler_test.go | 2 +- x/vault/keeper/keeper.go | 7 +- x/vault/keeper/keeper_test.go | 5 +- x/vault/keeper/msg_server.go | 2 +- x/vault/keeper/vault.go | 6 +- x/vault/module.go | 15 +- x/vault/module_test.go | 2 +- 160 files changed, 1681 insertions(+), 1367 deletions(-) delete mode 100644 x/asset/client/rest/tx.go delete mode 100644 x/bandoracle/client/rest/tx.go delete mode 100644 x/collector/client/rest/tx.go delete mode 100644 x/esm/client/rest/tx.go delete mode 100644 x/lend/client/rest/tx.go delete mode 100644 x/liquidity/client/rest/tx.go delete mode 100644 x/vault/client/rest/query.go delete mode 100644 x/vault/client/rest/rest.go delete mode 100644 x/vault/client/rest/tx.go diff --git a/app/ante.go b/app/ante.go index 5516326b1..6f9289de3 100644 --- a/app/ante.go +++ b/app/ante.go @@ -9,8 +9,9 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" - ibcante "github.com/cosmos/ibc-go/v4/modules/core/ante" - ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper" + ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + storetypes "github.com/cosmos/cosmos-sdk/store/types" ) // HandlerOptions extend the SDK's AnteHandler options by requiring the IBC @@ -18,7 +19,7 @@ import ( type HandlerOptions struct { ante.HandlerOptions wasmConfig wasm.Config - txCounterStoreKey sdk.StoreKey + txCounterStoreKey storetypes.StoreKey IBCChannelKeeper *ibckeeper.Keeper GovKeeper govkeeper.Keeper Cdc codec.BinaryCodec diff --git a/app/app.go b/app/app.go index 4128ed2dc..b35eb68ca 100644 --- a/app/app.go +++ b/app/app.go @@ -14,32 +14,34 @@ import ( "github.com/gorilla/mux" "github.com/spf13/cast" - ibchooks "github.com/osmosis-labs/osmosis/x/ibc-hooks" - ibchookskeeper "github.com/osmosis-labs/osmosis/x/ibc-hooks/keeper" - ibchookstypes "github.com/osmosis-labs/osmosis/x/ibc-hooks/types" + authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation" - ibcratelimit "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit" - "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/ibcratelimitmodule" - ibcratelimittypes "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/types" + // bump47: uncomment below 6 + // ibchooks "github.com/osmosis-labs/osmosis/x/ibc-hooks" + // ibchookskeeper "github.com/osmosis-labs/osmosis/x/ibc-hooks/keeper" + // ibchookstypes "github.com/osmosis-labs/osmosis/x/ibc-hooks/types" - packetforward "github.com/strangelove-ventures/packet-forward-middleware/v4/router" - packetforwardkeeper "github.com/strangelove-ventures/packet-forward-middleware/v4/router/keeper" - packetforwardtypes "github.com/strangelove-ventures/packet-forward-middleware/v4/router/types" + // ibcratelimit "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit" + // "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/ibcratelimitmodule" + // ibcratelimittypes "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/types" + + packetforward "github.com/strangelove-ventures/packet-forward-middleware/v7/router" + packetforwardkeeper "github.com/strangelove-ventures/packet-forward-middleware/v7/router/keeper" + packetforwardtypes "github.com/strangelove-ventures/packet-forward-middleware/v7/router/types" "github.com/rakyll/statik/fs" - ica "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts" - icahost "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host" - icahostkeeper "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host/keeper" - icahosttypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/types" + ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" + icahost "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host" + icahostkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" - wasmclient "github.com/CosmWasm/wasmd/x/wasm/client" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" - "github.com/cosmos/cosmos-sdk/client/rpc" + nodeservice "github.com/cosmos/cosmos-sdk/client/grpc/node" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/server/api" @@ -51,7 +53,6 @@ import ( "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth/ante" - authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -67,7 +68,6 @@ import ( crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" distr "github.com/cosmos/cosmos-sdk/x/distribution" - distrclient "github.com/cosmos/cosmos-sdk/x/distribution/client" distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" "github.com/cosmos/cosmos-sdk/x/evidence" @@ -81,6 +81,8 @@ import ( govclient "github.com/cosmos/cosmos-sdk/x/gov/client" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/cosmos/cosmos-sdk/x/mint" mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" @@ -98,27 +100,27 @@ import ( upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - ibctransfer "github.com/cosmos/ibc-go/v4/modules/apps/transfer" - ibctransferkeeper "github.com/cosmos/ibc-go/v4/modules/apps/transfer/keeper" - ibctransfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types" - ibc "github.com/cosmos/ibc-go/v4/modules/core" - ibcclient "github.com/cosmos/ibc-go/v4/modules/core/02-client" - ibcclientclient "github.com/cosmos/ibc-go/v4/modules/core/02-client/client" - ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - ibcporttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types" - ibchost "github.com/cosmos/ibc-go/v4/modules/core/24-host" - ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper" + ibctransfer "github.com/cosmos/ibc-go/v7/modules/apps/transfer" + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + ibc "github.com/cosmos/ibc-go/v7/modules/core" + ibcclient "github.com/cosmos/ibc-go/v7/modules/core/02-client" + ibcclientclient "github.com/cosmos/ibc-go/v7/modules/core/02-client/client" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcporttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + ibchost "github.com/cosmos/ibc-go/v7/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" "github.com/comdex-official/comdex/x/liquidation" liquidationkeeper "github.com/comdex-official/comdex/x/liquidation/keeper" liquidationtypes "github.com/comdex-official/comdex/x/liquidation/types" - abcitypes "github.com/tendermint/tendermint/abci/types" - tmjson "github.com/tendermint/tendermint/libs/json" - "github.com/tendermint/tendermint/libs/log" - tmos "github.com/tendermint/tendermint/libs/os" - tmprototypes "github.com/tendermint/tendermint/proto/tendermint/types" - tmdb "github.com/tendermint/tm-db" + tmdb "github.com/cometbft/cometbft-db" + abcitypes "github.com/cometbft/cometbft/abci/types" + tmjson "github.com/cometbft/cometbft/libs/json" + "github.com/cometbft/cometbft/libs/log" + tmos "github.com/cometbft/cometbft/libs/os" + tmprototypes "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/comdex-official/comdex/x/asset" assetclient "github.com/comdex-official/comdex/x/asset/client" @@ -175,9 +177,9 @@ import ( liquiditykeeper "github.com/comdex-official/comdex/x/liquidity/keeper" liquiditytypes "github.com/comdex-official/comdex/x/liquidity/types" - icq "github.com/cosmos/ibc-apps/modules/async-icq/v4" - icqkeeper "github.com/cosmos/ibc-apps/modules/async-icq/v4/keeper" - icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v4/types" + icq "github.com/strangelove-ventures/async-icq/v7" + icqkeeper "github.com/strangelove-ventures/async-icq/v7/keeper" + icqtypes "github.com/strangelove-ventures/async-icq/v7/types" cwasm "github.com/comdex-official/comdex/app/wasm" @@ -219,13 +221,11 @@ func GetGovProposalHandlers() []govclient.ProposalHandler { lendclient.AddPoolPairsHandler, lendclient.AddAssetRatesPoolPairsHandler, paramsclient.ProposalHandler, - distrclient.ProposalHandler, - upgradeclient.ProposalHandler, - upgradeclient.CancelProposalHandler, + upgradeclient.LegacyProposalHandler, + upgradeclient.LegacyCancelProposalHandler, ibcclientclient.UpdateClientProposalHandler, ibcclientclient.UpgradeProposalHandler, } - proposalHandlers = append(proposalHandlers, wasmclient.ProposalHandlers...) proposalHandlers = append(proposalHandlers, assetclient.AddAssetsHandler...) proposalHandlers = append(proposalHandlers, liquidityclient.LiquidityProposalHandler...) return proposalHandlers @@ -254,7 +254,7 @@ var ( staking.AppModuleBasic{}, mint.AppModuleBasic{}, distr.AppModuleBasic{}, - gov.NewAppModuleBasic(GetGovProposalHandlers()...), + gov.NewAppModuleBasic(GetGovProposalHandlers()), params.AppModuleBasic{}, crisis.AppModuleBasic{}, slashing.AppModuleBasic{}, @@ -311,9 +311,9 @@ type App struct { invCheckPeriod uint // keys to access the substores - keys map[string]*sdk.KVStoreKey - tkeys map[string]*sdk.TransientStoreKey - mkeys map[string]*sdk.MemoryStoreKey + keys map[string]*storetypes.KVStoreKey + tkeys map[string]*storetypes.TransientStoreKey + mkeys map[string]*storetypes.MemoryStoreKey // keepers AccountKeeper authkeeper.AccountKeeper @@ -434,15 +434,14 @@ func New( ) //nolint:godox //TODO: refactor this code - app.ParamsKeeper.Subspace(authtypes.ModuleName) - app.ParamsKeeper.Subspace(banktypes.ModuleName) - app.ParamsKeeper.Subspace(stakingtypes.ModuleName) - app.ParamsKeeper.Subspace(minttypes.ModuleName) - app.ParamsKeeper.Subspace(distrtypes.ModuleName) - app.ParamsKeeper.Subspace(slashingtypes.ModuleName) - app.ParamsKeeper.Subspace(govtypes.ModuleName). - WithKeyTable(govtypes.ParamKeyTable()) - app.ParamsKeeper.Subspace(crisistypes.ModuleName) + app.ParamsKeeper.Subspace(authtypes.ModuleName).WithKeyTable(authtypes.ParamKeyTable()) + app.ParamsKeeper.Subspace(banktypes.ModuleName).WithKeyTable(banktypes.ParamKeyTable()) + app.ParamsKeeper.Subspace(stakingtypes.ModuleName).WithKeyTable(stakingtypes.ParamKeyTable()) + app.ParamsKeeper.Subspace(minttypes.ModuleName).WithKeyTable(minttypes.ParamKeyTable()) + app.ParamsKeeper.Subspace(distrtypes.ModuleName).WithKeyTable(distrtypes.ParamKeyTable()) + app.ParamsKeeper.Subspace(slashingtypes.ModuleName).WithKeyTable(slashingtypes.ParamKeyTable()) + app.ParamsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypesv1.ParamKeyTable()) + app.ParamsKeeper.Subspace(crisistypes.ModuleName).WithKeyTable(crisistypes.ParamKeyTable()) app.ParamsKeeper.Subspace(ibctransfertypes.ModuleName) app.ParamsKeeper.Subspace(ibchost.ModuleName) app.ParamsKeeper.Subspace(icahosttypes.SubModuleName) @@ -509,7 +508,7 @@ func New( app.keys[stakingtypes.StoreKey], app.AccountKeeper, app.BankKeeper, - app.GetSubspace(stakingtypes.ModuleName), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) app.MintKeeper = mintkeeper.NewKeeper( app.cdc, @@ -818,10 +817,9 @@ func New( app.Ics20WasmHooks.ContractKeeper = app.ContractKeeper // register the proposal types - govRouter := govtypes.NewRouter() - govRouter.AddRoute(govtypes.RouterKey, govtypes.ProposalHandler). + govRouter := govtypesv1beta1.NewRouter() + govRouter.AddRoute(govtypes.RouterKey, govtypesv1beta1.ProposalHandler). AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). - AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)). AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)). AddRoute(assettypes.RouterKey, asset.NewUpdateAssetProposalHandler(app.AssetKeeper)). AddRoute(lendtypes.RouterKey, lend.NewLendHandler(app.LendKeeper)). @@ -834,16 +832,24 @@ func New( govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.WasmKeeper, wasmEnabledProposals)) } - app.GovKeeper = govkeeper.NewKeeper( - app.cdc, - app.keys[govtypes.StoreKey], - app.GetSubspace(govtypes.ModuleName), - app.AccountKeeper, - app.BankKeeper, - &stakingKeeper, - govRouter, + govKeeper := govkeeper.NewKeeper( + app.cdc, keys[govtypes.StoreKey], app.AccountKeeper, app.BankKeeper, + app.StakingKeeper, app.MsgServiceRouter(), govtypes.DefaultConfig(), authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) + govKeeper.SetLegacyRouter(govRouter) + app.GovKeeper = *govKeeper + + // app.GovKeeper = govkeeper.NewKeeper( + // app.cdc, + // app.keys[govtypes.StoreKey], + // app.GetSubspace(govtypes.ModuleName), + // app.AccountKeeper, + // app.BankKeeper, + // &stakingKeeper, + // govRouter, + // ) + var ( evidenceRouter = evidencetypes.NewRouter() ibcRouter = ibcporttypes.NewRouter() @@ -880,16 +886,16 @@ func New( app.mm = module.NewManager( genutil.NewAppModule(app.AccountKeeper, app.StakingKeeper, app.BaseApp.DeliverTx, encoding.TxConfig), - auth.NewAppModule(app.cdc, app.AccountKeeper, nil), + auth.NewAppModule(app.cdc, app.AccountKeeper, authsims.RandomGenesisAccounts, app.GetSubspace(authtypes.ModuleName)), vesting.NewAppModule(app.AccountKeeper, app.BankKeeper), - bank.NewAppModule(app.cdc, app.BankKeeper, app.AccountKeeper), - capability.NewAppModule(app.cdc, *app.CapabilityKeeper), - crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants), - gov.NewAppModule(app.cdc, app.GovKeeper, app.AccountKeeper, app.BankKeeper), + bank.NewAppModule(app.cdc, app.BankKeeper, app.AccountKeeper, app.GetSubspace(banktypes.ModuleName)), + capability.NewAppModule(app.cdc, *app.CapabilityKeeper, false), + crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), + gov.NewAppModule(app.cdc, &app.GovKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(govtypes.ModuleName)), mint.NewAppModule(app.cdc, app.MintKeeper, app.AccountKeeper), - slashing.NewAppModule(app.cdc, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), - distr.NewAppModule(app.cdc, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), - staking.NewAppModule(app.cdc, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + slashing.NewAppModule(app.cdc, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName)), + distr.NewAppModule(app.cdc, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)), + staking.NewAppModule(app.cdc, &app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)), upgrade.NewAppModule(app.UpgradeKeeper), evidence.NewAppModule(app.EvidenceKeeper), authzmodule.NewAppModule(app.cdc, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), @@ -1046,7 +1052,6 @@ func New( ) app.mm.RegisterInvariants(&app.CrisisKeeper) - app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encoding.Amino) app.configurator = module.NewConfigurator(app.cdc, app.MsgServiceRouter(), app.GRPCQueryRouter()) app.mm.RegisterServices(app.configurator) app.registerUpgradeHandlers() @@ -1270,21 +1275,21 @@ func (a *App) InterfaceRegistry() codectypes.InterfaceRegistry { // GetKey returns the KVStoreKey for the provided store key. // // NOTE: This is solely to be used for testing purposes. -func (a *App) GetKey(storeKey string) *sdk.KVStoreKey { +func (a *App) GetKey(storeKey string) *storetypes.KVStoreKey { return a.keys[storeKey] } // GetTKey returns the TransientStoreKey for the provided store key. // // NOTE: This is solely to be used for testing purposes. -func (a *App) GetTKey(storeKey string) *sdk.TransientStoreKey { +func (a *App) GetTKey(storeKey string) *storetypes.TransientStoreKey { return a.tkeys[storeKey] } // GetMemKey returns the MemStoreKey for the provided mem key. // // NOTE: This is solely used for testing purposes. -func (a *App) GetMemKey(storeKey string) *sdk.MemoryStoreKey { +func (a *App) GetMemKey(storeKey string) *storetypes.MemoryStoreKey { return a.mkeys[storeKey] } @@ -1300,17 +1305,14 @@ func (a *App) GetSubspace(moduleName string) paramstypes.Subspace { // API server. func (a *App) RegisterAPIRoutes(server *api.Server, apiConfig serverconfig.APIConfig) { ctx := server.ClientCtx - rpc.RegisterRoutes(ctx, server.Router) - // Register legacy tx routes. - authrest.RegisterTxRoutes(ctx, server.Router) // Register new tx routes from grpc-gateway. authtx.RegisterGRPCGatewayRoutes(ctx, server.GRPCGatewayRouter) // Register new tendermint queries routes from grpc-gateway. tmservice.RegisterGRPCGatewayRoutes(ctx, server.GRPCGatewayRouter) // Register legacy and grpc-gateway routes for all modules. - ModuleBasics.RegisterRESTRoutes(ctx, server.Router) ModuleBasics.RegisterGRPCGatewayRoutes(ctx, server.GRPCGatewayRouter) + nodeservice.RegisterGRPCGatewayRoutes(ctx, server.GRPCGatewayRouter) // register swagger API from root so that other applications can override easily if apiConfig.Swagger { @@ -1318,6 +1320,11 @@ func (a *App) RegisterAPIRoutes(server *api.Server, apiConfig serverconfig.APICo } } +// RegisterNodeService registers the node gRPC Query service. +func (a *App) RegisterNodeService(ctx client.Context) { + nodeservice.RegisterNodeService(ctx, a.GRPCQueryRouter()) +} + // RegisterSwaggerAPI registers swagger route with API Server. func RegisterSwaggerAPI(ctx client.Context, rtr *mux.Router) { statikFS, err := fs.New() @@ -1337,7 +1344,12 @@ func (a *App) RegisterTxService(ctx client.Context) { // RegisterTendermintService implements the Application.RegisterTendermintService method. func (a *App) RegisterTendermintService(ctx client.Context) { - tmservice.RegisterTendermintService(a.BaseApp.GRPCQueryRouter(), ctx, a.interfaceRegistry) + tmservice.RegisterTendermintService(ctx, a.BaseApp.GRPCQueryRouter(), a.interfaceRegistry, a.Query) +} + +// RegisterNodeService registers the node gRPC Query service. +func (a *App) RegisterNodeService(clientCtx client.Context) { + nodeservice.RegisterNodeService(clientCtx, a.GRPCQueryRouter()) } func (a *App) ModuleAccountsPermissions() map[string][]string { diff --git a/app/decorators/gov_filter.go b/app/decorators/gov_filter.go index 966be7653..110274bf9 100644 --- a/app/decorators/gov_filter.go +++ b/app/decorators/gov_filter.go @@ -6,7 +6,7 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/authz" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) var MiniumInitialDepositRate = sdk.NewDecWithPrec(25, 2) diff --git a/app/export.go b/app/export.go index ee300d661..4167d3912 100644 --- a/app/export.go +++ b/app/export.go @@ -4,12 +4,12 @@ import ( "encoding/json" "log" + tmprototypes "github.com/cometbft/cometbft/proto/tendermint/types" servertypes "github.com/cosmos/cosmos-sdk/server/types" sdk "github.com/cosmos/cosmos-sdk/types" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" "github.com/cosmos/cosmos-sdk/x/staking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - tmprototypes "github.com/tendermint/tendermint/proto/tendermint/types" ) // ExportAppStateAndValidators exports the state of the application for a genesis @@ -33,7 +33,7 @@ func (a *App) ExportAppStateAndValidators( return servertypes.ExportedApp{}, err } - validators, err := staking.WriteValidators(ctx, a.StakingKeeper) + validators, err := staking.WriteValidators(ctx, &a.StakingKeeper) if err != nil { return servertypes.ExportedApp{}, err } diff --git a/app/test_helpers.go b/app/test_helpers.go index f03aac9a2..19196b9b1 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -4,14 +4,14 @@ import ( "encoding/json" "time" - "github.com/cosmos/cosmos-sdk/simapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" + dbm "github.com/cometbft/cometbft-db" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/libs/log" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + tmtypes "github.com/cometbft/cometbft/types" "github.com/cosmos/cosmos-sdk/std" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - tmtypes "github.com/tendermint/tendermint/types" - dbm "github.com/tendermint/tm-db" + simappparams "github.com/cosmos/cosmos-sdk/testutil/sims" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" ) // DefaultConsensusParams defines the default Tendermint consensus params used in @@ -45,7 +45,7 @@ func MakeTestEncodingConfig() simappparams.EncodingConfig { func setup(withGenesis bool, invCheckPeriod uint) (*App, GenesisState) { db := dbm.NewMemDB() encCdc := MakeTestEncodingConfig() - app := New(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, invCheckPeriod, MakeEncodingConfig(), simapp.EmptyAppOptions{}, GetWasmEnabledProposals(), EmptyWasmOpts) + app := New(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, invCheckPeriod, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, GetWasmEnabledProposals(), EmptyWasmOpts) if withGenesis { return app, NewDefaultGenesisState(encCdc.Marshaler) } diff --git a/app/upgrades/mainnet/v11/upgrades.go b/app/upgrades/mainnet/v11/upgrades.go index d1e5ec0ef..736ac65c0 100644 --- a/app/upgrades/mainnet/v11/upgrades.go +++ b/app/upgrades/mainnet/v11/upgrades.go @@ -18,13 +18,13 @@ import ( bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - icahostkeeper "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host/keeper" - icahosttypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/types" - ibctransfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types" + icahostkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" ) // An error occurred during the creation of the CMST/STJUNO pair, as it was mistakenly created in the Harbor app (ID-2) instead of the cSwap app (ID-1). diff --git a/app/upgrades/mainnet/v12/upgrades.go b/app/upgrades/mainnet/v12/upgrades.go index c7fce2cfc..a697c7d29 100644 --- a/app/upgrades/mainnet/v12/upgrades.go +++ b/app/upgrades/mainnet/v12/upgrades.go @@ -4,8 +4,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - icqkeeper "github.com/cosmos/ibc-apps/modules/async-icq/v4/keeper" - icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v4/types" + icqkeeper "github.com/strangelove-ventures/async-icq/v7/keeper" + icqtypes "github.com/strangelove-ventures/async-icq/v7/types" ) func CreateUpgradeHandlerV12( diff --git a/app/upgrades/mainnet/v5/upgrades.go b/app/upgrades/mainnet/v5/upgrades.go index f490ed81c..4c605852c 100644 --- a/app/upgrades/mainnet/v5/upgrades.go +++ b/app/upgrades/mainnet/v5/upgrades.go @@ -19,14 +19,14 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - ica "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts" - icacontrollertypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/controller/types" - icahosttypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/types" - ibctransfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types" + ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" + icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" + icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" ) func InitializeStates( diff --git a/app/upgrades/testnet/v2_0_0/upgrades.go b/app/upgrades/testnet/v2_0_0/upgrades.go index 9be3fb825..222e06a69 100644 --- a/app/upgrades/testnet/v2_0_0/upgrades.go +++ b/app/upgrades/testnet/v2_0_0/upgrades.go @@ -6,13 +6,13 @@ import ( "github.com/cosmos/cosmos-sdk/x/authz" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - ica "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts" - icacontrollertypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/controller/types" - icahosttypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/types" + ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" + icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" + icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" ) // CreateUpgradeHandler creates an SDK upgrade handler for v2_0_0 diff --git a/app/wasm/test/helpers_test.go b/app/wasm/test/helpers_test.go index a15d04c98..0efcab2d9 100644 --- a/app/wasm/test/helpers_test.go +++ b/app/wasm/test/helpers_test.go @@ -11,11 +11,11 @@ import ( "github.com/stretchr/testify/require" - "github.com/cosmos/cosmos-sdk/simapp" + "github.com/cometbft/cometbft/crypto" + "github.com/cometbft/cometbft/crypto/ed25519" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/tendermint/crypto" - "github.com/tendermint/tendermint/crypto/ed25519" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/comdex-official/comdex/app" "github.com/comdex-official/comdex/x/tokenmint/keeper" @@ -33,7 +33,7 @@ func CreateTestInput() (*app.App, *sdk.Context) { } func FundAccount(t *testing.T, ctx sdk.Context, comdex *app.App, acct sdk.AccAddress) { - err := simapp.FundAccount(comdex.BankKeeper, ctx, acct, sdk.NewCoins( + err := simtestutil.FundAccount(comdex.BankKeeper, ctx, acct, sdk.NewCoins( sdk.NewCoin("ucmdx", sdk.NewInt(10000000000)), )) require.NoError(t, err) diff --git a/cmd/comdex/migrate.go b/cmd/comdex/migrate.go index 5b76229ce..7f6b135a7 100644 --- a/cmd/comdex/migrate.go +++ b/cmd/comdex/migrate.go @@ -3,7 +3,8 @@ package main import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/x/genutil/types" - packetforwardtypes "github.com/strangelove-ventures/packet-forward-middleware/v4/router/types" + // bump47: uncomment below 1 + packetforwardtypes "github.com/strangelove-ventures/packet-forward-middleware/v7/router/types" ) func Migrate(appState types.AppMap, clientCtx client.Context) types.AppMap { diff --git a/cmd/comdex/migration.go b/cmd/comdex/migration.go index 9f7767116..62fbf9dc9 100644 --- a/cmd/comdex/migration.go +++ b/cmd/comdex/migration.go @@ -5,6 +5,8 @@ import ( "fmt" "time" + tmjson "github.com/cometbft/cometbft/libs/json" + tmtypes "github.com/cometbft/cometbft/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" sdk "github.com/cosmos/cosmos-sdk/types" @@ -12,8 +14,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/pkg/errors" "github.com/spf13/cobra" - tmjson "github.com/tendermint/tendermint/libs/json" - tmtypes "github.com/tendermint/tendermint/types" ) const flagGenesisTime = "genesis-time" diff --git a/cmd/comdex/root.go b/cmd/comdex/root.go index 83d2c4126..d1a560371 100644 --- a/cmd/comdex/root.go +++ b/cmd/comdex/root.go @@ -10,6 +10,9 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/prometheus/client_golang/prometheus" + tmdb "github.com/cometbft/cometbft-db" + tmcli "github.com/cometbft/cometbft/libs/cli" + "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/config" @@ -30,9 +33,6 @@ import ( genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" "github.com/spf13/cast" "github.com/spf13/cobra" - tmcli "github.com/tendermint/tendermint/libs/cli" - "github.com/tendermint/tendermint/libs/log" - tmdb "github.com/tendermint/tm-db" comdex "github.com/comdex-official/comdex/app" ) @@ -46,7 +46,7 @@ func NewRootCmd() (*cobra.Command, comdex.EncodingConfig) { WithLegacyAmino(encodingConfig.Amino). WithInput(os.Stdin). WithAccountRetriever(authtypes.AccountRetriever{}). - WithBroadcastMode(flags.BroadcastBlock). + WithBroadcastMode(flags.BroadcastSync). WithHomeDir(comdex.DefaultNodeHome). WithViper("") diff --git a/cmd/comdex/testnet.go b/cmd/comdex/testnet.go index 09e0f17e2..188bc9d10 100644 --- a/cmd/comdex/testnet.go +++ b/cmd/comdex/testnet.go @@ -8,6 +8,11 @@ import ( "os" "path/filepath" + tmconfig "github.com/cometbft/cometbft/config" + tmos "github.com/cometbft/cometbft/libs/os" + tmrand "github.com/cometbft/cometbft/libs/rand" + tmtypes "github.com/cometbft/cometbft/types" + tmtimetypes "github.com/cometbft/cometbft/types/time" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" @@ -25,11 +30,6 @@ import ( genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/spf13/cobra" - tmconfig "github.com/tendermint/tendermint/config" - tmos "github.com/tendermint/tendermint/libs/os" - tmrand "github.com/tendermint/tendermint/libs/rand" - tmtypes "github.com/tendermint/tendermint/types" - tmtimetypes "github.com/tendermint/tendermint/types/time" ) var ( diff --git a/go.mod b/go.mod index dc472050e..df23e315d 100644 --- a/go.mod +++ b/go.mod @@ -3,35 +3,37 @@ module github.com/comdex-official/comdex go 1.19 require ( - github.com/CosmWasm/wasmd v0.31.0 - github.com/CosmWasm/wasmvm v1.2.1 + github.com/CosmWasm/wasmd v0.40.1 + github.com/CosmWasm/wasmvm v1.2.4 github.com/bandprotocol/bandchain-packet v0.0.3 - github.com/cosmos/cosmos-sdk v0.46.11 - github.com/cosmos/ibc-apps/modules/async-icq/v4 v4.0.0-20230524151648-c02fa46c2860 + github.com/cometbft/cometbft v0.37.1 + github.com/cometbft/cometbft-db v0.8.0 + github.com/cosmos/cosmos-sdk v0.47.3 github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.3 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.14.0 + github.com/prometheus/client_golang v1.15.0 github.com/spf13/cast v1.5.1 - github.com/spf13/cobra v1.6.1 - github.com/stretchr/testify v1.8.2 - github.com/tendermint/tendermint v0.34.27 - github.com/tendermint/tm-db v0.6.8-0.20220506192307-f628bb5dc95b - google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa - google.golang.org/grpc v1.53.0 + github.com/spf13/cobra v1.7.0 + github.com/strangelove-ventures/async-icq/v7 v7.0.0-20230413165143-a3b65ccdc897 + github.com/stretchr/testify v1.8.3 + google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 + google.golang.org/grpc v1.55.0 google.golang.org/protobuf v1.30.0 ) require ( - github.com/cosmos/ibc-go/v4 v4.4.2 + github.com/cosmos/ibc-go/v7 v7.1.0 + github.com/cosmos/ics23/go v0.10.0 // indirect github.com/golangci/golangci-lint v1.51.2 - github.com/osmosis-labs/osmosis/v15 v15.1.2 - github.com/osmosis-labs/osmosis/x/ibc-hooks v0.0.6 + // bump47: uncomment below 2 + // github.com/osmosis-labs/osmosis/v15 v15.1.2 + // github.com/osmosis-labs/osmosis/x/ibc-hooks v0.0.6 github.com/rakyll/statik v0.1.7 github.com/spf13/pflag v1.0.5 - github.com/strangelove-ventures/packet-forward-middleware/v4 v4.0.4 + github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0-20230523193151-73dea436e53f gopkg.in/yaml.v2 v2.4.0 mvdan.cc/gofumpt v0.4.0 ) @@ -39,8 +41,19 @@ require ( require ( 4d63.com/gocheckcompilerdirectives v1.2.1 // indirect 4d63.com/gochecknoglobals v0.2.1 // indirect + cloud.google.com/go v0.110.0 // indirect + cloud.google.com/go/compute v1.18.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v0.12.0 // indirect + cloud.google.com/go/storage v1.29.0 // indirect + cosmossdk.io/api v0.3.1 // indirect + cosmossdk.io/core v0.5.1 // indirect + cosmossdk.io/depinject v1.0.0-alpha.3 // indirect cosmossdk.io/errors v1.0.0-beta.7 // indirect - filippo.io/edwards25519 v1.0.0-rc.1 // indirect + cosmossdk.io/log v1.1.0 // indirect + cosmossdk.io/math v1.0.1 // indirect + cosmossdk.io/tools/rosetta v0.2.1 // indirect + filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect github.com/Abirdcfly/dupword v0.0.9 // indirect @@ -52,46 +65,52 @@ require ( github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/OpenPeeDeeP/depguard v1.1.1 // indirect - github.com/Workiva/go-datastructures v1.0.53 // indirect github.com/alexkohler/prealloc v1.0.0 // indirect github.com/alingse/asasalint v0.0.11 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/ashanbrown/forbidigo v1.4.0 // indirect github.com/ashanbrown/makezero v1.1.1 // indirect + github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/bkielbasa/cyclop v1.2.0 // indirect github.com/blizzy78/varnamelen v0.8.0 // indirect github.com/bombsimon/wsl/v3 v3.4.0 // indirect github.com/breml/bidichk v0.2.3 // indirect github.com/breml/errchkjson v0.3.0 // indirect - github.com/btcsuite/btcd v0.22.2 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/butuzov/ireturn v0.1.1 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/charithe/durationcheck v0.0.9 // indirect github.com/chavacava/garif v0.0.0-20221024190013-b3ef35877348 // indirect + github.com/chzyer/readline v1.5.1 // indirect + github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect - github.com/cosmos/gogoproto v1.4.6 // indirect - github.com/cosmos/gorocksdb v1.2.0 // indirect - github.com/cosmos/iavl v0.19.5 // indirect + github.com/cosmos/gogogateway v1.2.0 // indirect + github.com/cosmos/gogoproto v1.4.10 // indirect + github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect - github.com/creachadair/taskgroup v0.3.2 // indirect + github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect + github.com/creachadair/taskgroup v0.4.2 // indirect github.com/curioswitch/go-reassign v0.2.0 // indirect github.com/daixiang0/gci v0.9.1 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/denis-tingaikin/go-header v0.4.3 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect - github.com/dgraph-io/badger/v3 v3.2103.2 // indirect - github.com/dgraph-io/ristretto v0.1.0 // indirect - github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac // indirect + github.com/dgraph-io/badger/v2 v2.2007.4 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect + github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect github.com/esimonov/ifshort v1.0.4 // indirect github.com/ettle/strcase v0.1.1 // indirect @@ -105,7 +124,7 @@ require ( github.com/go-critic/go-critic v0.6.7 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-toolsmith/astcast v1.1.0 // indirect github.com/go-toolsmith/astcopy v1.0.3 // indirect github.com/go-toolsmith/astequal v1.1.0 // indirect @@ -117,9 +136,10 @@ require ( github.com/gobwas/glob v0.2.3 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gofrs/flock v0.8.1 // indirect - github.com/gogo/gateway v1.1.0 // indirect - github.com/golang/glog v1.0.0 // indirect + github.com/gogo/googleapis v1.4.1 // indirect + github.com/golang/glog v1.1.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.6.0 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 // indirect github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect @@ -131,10 +151,12 @@ require ( github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 // indirect github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/flatbuffers v1.12.1 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/orderedcode v0.0.1 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect + github.com/googleapis/gax-go/v2 v2.7.0 // indirect github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -147,26 +169,31 @@ require ( github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.7.1 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect + github.com/hdevalence/ed25519consensus v0.1.0 // indirect github.com/hexops/gotextdiff v1.0.3 // indirect + github.com/huandu/skiplist v1.2.0 // indirect github.com/iancoleman/orderedmap v0.2.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jgautheron/goconst v1.5.1 // indirect github.com/jingyugao/rowserrcheck v1.1.1 // indirect github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/julz/importas v0.1.0 // indirect github.com/junk1tm/musttag v0.4.5 // indirect github.com/kisielk/errcheck v1.6.3 // indirect github.com/kisielk/gotool v1.0.0 // indirect github.com/kkHAIKE/contextcheck v1.1.3 // indirect - github.com/klauspost/compress v1.15.11 // indirect + github.com/klauspost/compress v1.16.3 // indirect github.com/kulti/thelper v0.6.3 // indirect github.com/kunwardeep/paralleltest v1.0.6 // indirect github.com/kyoh86/exportloopref v0.1.11 // indirect @@ -175,20 +202,23 @@ require ( github.com/leonklingele/grouper v1.1.1 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/linxGnu/grocksdb v1.7.16 // indirect github.com/lufeee/execinquery v1.2.1 // indirect github.com/magiconair/properties v1.8.7 // indirect + github.com/manifoldco/promptui v0.9.0 // indirect github.com/maratori/testableexamples v1.0.0 // indirect github.com/maratori/testpackage v1.1.0 // indirect github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-isatty v0.0.18 // indirect github.com/mattn/go-runewidth v0.0.10 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mbilski/exhaustivestruct v1.2.0 // indirect github.com/mgechev/revive v1.2.5 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/moricho/tparallel v0.2.1 // indirect github.com/mtibben/percent v0.2.1 // indirect @@ -199,23 +229,21 @@ require ( github.com/nunnatsa/ginkgolinter v0.8.1 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/osmosis-labs/osmosis/osmoutils v0.0.4 // indirect - github.com/pelletier/go-toml/v2 v2.0.6 // indirect - github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect + github.com/pelletier/go-toml/v2 v2.0.7 // indirect + github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/polyfloyd/go-errorlint v1.1.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect + github.com/prometheus/common v0.42.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect github.com/quasilyte/go-ruleguard v0.3.19 // indirect github.com/quasilyte/gogrep v0.5.0 // indirect github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 // indirect github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/regen-network/cosmos-proto v0.3.1 // indirect github.com/rivo/uniseg v0.2.0 // indirect - github.com/rs/cors v1.8.2 // indirect - github.com/rs/zerolog v1.27.0 // indirect + github.com/rs/cors v1.8.3 // indirect + github.com/rs/zerolog v1.29.1 // indirect github.com/ryancurrah/gomodguard v1.3.0 // indirect github.com/ryanrolds/sqlclosecheck v0.4.0 // indirect github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect @@ -237,17 +265,17 @@ require ( github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect github.com/stretchr/objx v0.5.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c // indirect github.com/tdakkota/asciicheck v0.1.1 // indirect - github.com/tendermint/btcd v0.1.1 // indirect - github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tetafro/godot v1.4.11 // indirect + github.com/tidwall/btree v1.6.0 // indirect github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e // indirect github.com/timonwong/loggercheck v0.9.3 // indirect github.com/tomarrell/wrapcheck/v2 v2.8.0 // indirect github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect github.com/ultraware/funlen v0.0.3 // indirect github.com/ultraware/whitespace v0.0.5 // indirect github.com/uudashr/gocognit v1.0.6 // indirect @@ -256,21 +284,25 @@ require ( github.com/zondax/hid v0.9.1 // indirect github.com/zondax/ledger-go v0.14.1 // indirect gitlab.com/bosi/decorder v0.2.3 // indirect - go.etcd.io/bbolt v1.3.6 // indirect + go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.10.0 // indirect go.uber.org/zap v1.23.0 // indirect - golang.org/x/crypto v0.5.0 // indirect - golang.org/x/exp v0.0.0-20230131160201-f062dba9d201 // indirect + golang.org/x/crypto v0.8.0 // indirect + golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9 // indirect golang.org/x/mod v0.9.0 // indirect - golang.org/x/net v0.8.0 // indirect + golang.org/x/net v0.9.0 // indirect + golang.org/x/oauth2 v0.6.0 // indirect golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.7.0 // indirect - golang.org/x/term v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect + golang.org/x/term v0.7.0 // indirect + golang.org/x/text v0.9.0 // indirect golang.org/x/tools v0.7.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + google.golang.org/api v0.110.0 // indirect + google.golang.org/appengine v1.6.7 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect honnef.co/go/tools v0.4.2 // indirect @@ -278,15 +310,17 @@ require ( mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d // indirect nhooyr.io/websocket v1.8.7 // indirect + pgregory.net/rapid v0.5.5 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect ) replace ( - github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 - github.com/cosmos/cosmos-sdk => github.com/comdex-official/cosmos-sdk v0.45.9-comdex.4 + // github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 + github.com/cosmos/cosmos-sdk => /Users/chandragupta/go/src/github.com/cosmos/cosmos-sdk //breaking changes - github.com/cosmos/iavl v0.19.5 => github.com/cosmos/iavl v0.19.4 + // github.com/cosmos/iavl v0.19.5 => github.com/cosmos/iavl v0.19.4 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - // Informal Tendermint fork to be replaced with skip-mev tendermint - github.com/tendermint/tendermint => github.com/skip-mev/mev-tendermint v0.34.24-mev.18 - google.golang.org/grpc => google.golang.org/grpc v1.33.2 +// Informal Tendermint fork to be replaced with skip-mev tendermint +// github.com/tendermint/tendermint => github.com/skip-mev/mev-tendermint v0.34.24-mev.18 +// google.golang.org/grpc => google.golang.org/grpc v1.33.2 ) diff --git a/go.sum b/go.sum index fbe2a8a67..8ef914eef 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,7 @@ bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxo bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.25.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.37.2/go.mod h1:H8IAquKe2L30IxoupDgqTaQvKSwF/c8prYHynGIWQbA= @@ -44,24 +45,75 @@ cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -69,108 +121,356 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= +cloud.google.com/go/firestore v1.8.0/go.mod h1:r3KB8cAdRIe8znzoPWLw8S6gpDVd9treohhn8b09424= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -179,17 +479,65 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= code.gitea.io/sdk/gitea v0.12.0/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= @@ -198,12 +546,31 @@ contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= +cosmossdk.io/api v0.2.1/go.mod h1:kNpfY0UY7Cz4ZuLJ4hm9auUGfmj23UFpOQ/Bo8IKCFw= +cosmossdk.io/api v0.2.6/go.mod h1:u/d+GAxil0nWpl1XnQL8nkziQDIWuBDhv8VnDm/s6dI= +cosmossdk.io/api v0.3.0/go.mod h1:2HDRQHwVIyklENrrXko0E/waZrRFZWHhPyhcBO4qHq4= +cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= +cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= +cosmossdk.io/core v0.3.2/go.mod h1:CO7vbe+evrBvHc0setFHL/u7nlY7HJGzdRSBkT/sirc= +cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= +cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= +cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= +cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= +cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= +cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= +cosmossdk.io/math v1.0.0-beta.3/go.mod h1:3LYasri3Zna4XpbrTNdKsWmD5fHHkaNAod/mNT9XdE4= +cosmossdk.io/math v1.0.0-beta.4/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp9NnaM= +cosmossdk.io/math v1.0.0-beta.6/go.mod h1:gUVtWwIzfSXqcOT+lBVz2jyjfua8DoBdzRsIyaUAT/8= +cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= +cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= +cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= -filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= +filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= @@ -212,7 +579,6 @@ git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFN git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= 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/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= @@ -220,6 +586,7 @@ github.com/Abirdcfly/dupword v0.0.9 h1:MxprGjKq3yDBICXDgEEsyGirIXfMYXkLNT/agPsE1 github.com/Abirdcfly/dupword v0.0.9/go.mod h1:PzmHVLLZ27MvHSzV7eFmMXSFArWXZPZmfuuziuUrf2g= github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= github.com/AkihiroSuda/containerd-fuse-overlayfs v1.0.0/go.mod h1:0mMDvQFeLbbn1Wy8P2j3hwFhqBq+FKn8OZPno8WLmp8= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= @@ -241,7 +608,6 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2 github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= github.com/Azure/azure-service-bus-go v0.9.1/go.mod h1:yzBx6/BUGfjfeqbRZny9AQIbIe3AcV9WZbAdpkoXOa0= -github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= @@ -287,16 +653,22 @@ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbt github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= 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.31.0 h1:xACf6A/SkCeGWQWrKGsR4X9PQb5G4XYuNfnrl+HQ1mE= -github.com/CosmWasm/wasmd v0.31.0/go.mod h1:VcyDGk/ISVlMUeW+1GGL0zdHWBS2FPwLEV2qZ86l7l8= -github.com/CosmWasm/wasmvm v1.2.1 h1:si0tRsRDdUShV0k51Wn6zRKlmj3/WWP9Yr4cLmDTf+8= -github.com/CosmWasm/wasmvm v1.2.1/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= +github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= +github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= +github.com/CloudyKit/jet/v6 v6.1.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= +github.com/CosmWasm/wasmd v0.40.1 h1:LxbO78t/6S8TkeQlUrJ0m5O87HtAwLx4RGHq3rdrOEU= +github.com/CosmWasm/wasmd v0.40.1/go.mod h1:6EOwnv7MpuFaEqxcUOdFV9i4yvrdOciaY6VQ1o7A3yg= +github.com/CosmWasm/wasmvm v1.2.4 h1:6OfeZuEcEH/9iqwrg2pkeVtDCkMoj9U6PpKtcrCyVrQ= +github.com/CosmWasm/wasmvm v1.2.4/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= @@ -307,12 +679,16 @@ github.com/Djarvur/go-err113 v0.0.0-20200410182137-af658d038157/go.mod h1:4UJr5H github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/Djarvur/go-err113 v0.1.0 h1:uCRZZOdMQ0TZPHYTdYpoC0bLYJKPEHPUJ8MeAa51lNU= github.com/Djarvur/go-err113 v0.1.0/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.2.0/go.mod h1:n/vLeA7V+QY84iYAGwMkkUUp9ooeuftMEvaDrSVch+Q= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= +github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= +github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= @@ -320,6 +696,7 @@ github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3Q github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver/v3 v3.0.3/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= @@ -348,6 +725,7 @@ github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwT github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim v0.9.3/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= github.com/Microsoft/hcsshim v0.9.4/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= github.com/Microsoft/hcsshim/test v0.0.0-20200826032352-301c83a30e7c/go.mod h1:30A5igQ91GEmhYJF8TaRP79pMBOYynRsyOByfVV0dU4= github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= @@ -359,71 +737,87 @@ github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8 github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= +github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= +github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= 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/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= +github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= +github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= +github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= +github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= +github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= +github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= 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= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/alingse/asasalint v0.0.10/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/apex/log v1.1.4/go.mod h1:AlpoD9aScyQfJDVHmLMEcx4oU6LqzkWp4Mg9GdAcEvQ= github.com/apex/log v1.3.0/go.mod h1:jd8Vpsr46WAe3EZSQ/IUMs2qQD/GOycT5rPWCO1yGcs= github.com/apex/logs v0.0.4/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys= -github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= @@ -442,12 +836,14 @@ github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.11/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.31.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= +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/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= @@ -462,6 +858,8 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxq github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= +github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/bandprotocol/bandchain-packet v0.0.3 h1:Mo2xVmjOSfc//0z1lskNkxrkpcxeU2nIwfHb2rHFLLg= github.com/bandprotocol/bandchain-packet v0.0.3/go.mod h1:6mU33VjEShPvWYoTIQywRPxyS+HXcgnm0e7mlJwiTnQ= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= @@ -473,6 +871,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= @@ -486,6 +886,7 @@ github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAw github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= @@ -506,27 +907,31 @@ github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= -github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401/go.mod h1:Sv4JPQ3/M+teHz9Bo5jBpkNcP0x6r7rdihlNL/7tTAs= -github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= +github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= -github.com/btcsuite/btcd v0.22.2 h1:vBZ+lGGd1XubpOWO67ITJpAEsICWhA0YzqkcpkgNBfo= -github.com/btcsuite/btcd v0.22.2/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +github.com/btcsuite/btcd v0.23.0 h1:V2/ZgjfDFIygAX3ZapeigkVBoVUtOJKSwrhZdlpSvaA= +github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= +github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= 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.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= +github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= +github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= +github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= 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/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= @@ -535,9 +940,14 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/bufbuild/buf v1.3.1/go.mod h1:CTRUb23N+zlm1U8ZIBKz0Sqluk++qQloB2i/MZNZHIs= +github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0qLq0= github.com/bufbuild/buf v1.9.0/go.mod h1:1Q+rMHiMVcfgScEF/GOldxmu4o9TrQ2sQQh58K6MscE= +github.com/bufbuild/connect-go v0.2.0/go.mod h1:4efZ2eXFENwd4p7tuLaL9m0qtTsCOzuBvrohvRGevDM= github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= github.com/bufbuild/protocompile v0.1.0/go.mod h1:ix/MMMdsT3fzxfw91dvbfzKW3fRRnuPCP47kpAm5m/4= +github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= @@ -546,6 +956,7 @@ github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3k github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/bwesterb/go-ristretto v1.2.2/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= @@ -562,26 +973,37 @@ github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInq github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= github.com/chavacava/garif v0.0.0-20221024190013-b3ef35877348 h1:cy5GCEZLUCshCGCRRUjxHrDUqkB4l5cuUt3ShEckQEo= github.com/chavacava/garif v0.0.0-20221024190013-b3ef35877348/go.mod h1:f/miWtG3SSuTxKsNK3o58H1xl+XV6ZIfbC6p7lPPB8U= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= +github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= +github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= +github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= +github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= @@ -593,25 +1015,60 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= +github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/circl v1.3.1/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= +github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= +github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= +github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= +github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= +github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= +github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= +github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac= +github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677/go.mod h1:890yq1fUb9b6dGNwssgeUO5vQV9qfXnCPxAJhBQfXw0= +github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= github.com/codahale/hdrhistogram v0.0.0-20160425231609-f8ad88b59a58/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= -github.com/coinbase/rosetta-sdk-go v0.7.0/go.mod h1:7nD3oBPIiHqhRprqvMgPoGxe/nyq3yftRmpsy29coWE= github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= -github.com/comdex-official/cosmos-sdk v0.45.9-comdex.4 h1:HamsRfrxsCvkwcHbMT8TDW3u013MmixXqbcCt/doxLo= -github.com/comdex-official/cosmos-sdk v0.45.9-comdex.4/go.mod h1:Z5M4TX7PsHNHlF/1XanI2DIpORQ+Q/st7oaeufEjnvU= +github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= +github.com/cometbft/cometbft v0.34.27-alpha.1/go.mod h1:hct3hasQ2hIF3HoD7foVw4RaqTNSSeJ/lgcrVK6uDvs= +github.com/cometbft/cometbft v0.37.1 h1:KLxkQTK2hICXYq21U2hn1W5hOVYUdQgDQ1uB+90xPIg= +github.com/cometbft/cometbft v0.37.1/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= +github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= +github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= +github.com/confio/ics23/go v0.0.0-20200817220745-f173e6211efb/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= +github.com/confio/ics23/go v0.6.3/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= +github.com/confio/ics23/go v0.6.6/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= +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/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= @@ -658,6 +1115,7 @@ github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0 github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE= github.com/containerd/containerd v1.6.3-0.20220401172941-5ff8fce1fcc6/go.mod h1:WSt2SnDLAGWlu+Vl+EWay37seZLKqgRt6XLjIMy8SYM= +github.com/containerd/containerd v1.6.6/go.mod h1:ZoP1geJldzCVY3Tonoz7b1IXk8rIX0Nltt5QE4OMNk0= github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= @@ -749,47 +1207,66 @@ github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+ github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= +github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32/go.mod h1:kwMlEC4wWvB48zAShGKVqboJL6w4zCLesaNQ3YLU2BQ= +github.com/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= +github.com/cosmos/cosmos-proto v1.0.0-alpha8/go.mod h1:6/p+Bc4O8JKeZqe0VqUGTX31eoYqemTT4C1hLCWsO7I= +github.com/cosmos/cosmos-proto v1.0.0-beta.1/go.mod h1:8k2GNZghi5sDRFw/scPL8gMSowT1vDA+5ouxL8GjaUE= github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 h1:iKclrn3YEOwk4jQHT2ulgzuXyxmzmPczUalMwW4XH9k= -github.com/cosmos/cosmos-sdk/ics23/go v0.8.0/go.mod h1:2a4dBq88TUoqoWAU5eu0lGvpFP3wWDPgdHPargtyw30= +github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= -github.com/cosmos/gogoproto v1.4.6 h1:Ee7z15dWJaGlgM2rWrK8N2IX7PQcuccu8oG68jp5RL4= -github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= -github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= +github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= +github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= +github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q9p+LoCr4= +github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= +github.com/cosmos/gogoproto v1.4.3/go.mod h1:0hLIG5TR7IvV1fme1HCFKjfzW9X2x0Mo+RooWXCnOWU= +github.com/cosmos/gogoproto v1.4.4/go.mod h1:/yl6/nLwsZcZ2JY3OrqjRqvqCG9InUMcXRfRjQiF9DU= +github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= +github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.19.3/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/iavl v0.19.4 h1:t82sN+Y0WeqxDLJRSpNd8YFX5URIrT+p8n6oJbJ2Dok= -github.com/cosmos/iavl v0.19.4/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/ibc-apps/modules/async-icq/v4 v4.0.0-20230524151648-c02fa46c2860 h1:25/KpA4WJqdFjKFsa3VEL0ctWRovkEsqIn2phCAi9v0= -github.com/cosmos/ibc-apps/modules/async-icq/v4 v4.0.0-20230524151648-c02fa46c2860/go.mod h1:X/dLZ6QxTImzno7qvD6huLhh6ZZBcRt2URn4YCLcXFY= +github.com/cosmos/iavl v0.15.0-rc3.0.20201009144442-230e9bdf52cd/go.mod h1:3xOIaNNX19p0QrX0VqWa6voPRoJRGGYtny+DH8NEPvE= +github.com/cosmos/iavl v0.15.0-rc5/go.mod h1:WqoPL9yPTQ85QBMT45OOUzPxG/U/JcJoN7uMjgxke/I= +github.com/cosmos/iavl v0.15.3/go.mod h1:OLjQiAQ4fGD2KDZooyJG9yz+p2ao2IAYSbke8mVvSA4= +github.com/cosmos/iavl v0.20.0-alpha4/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= +github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-go v1.0.0/go.mod h1:2wHKQUa+BLJMEyN635KrHfmTTwSNHBtXcqdY8JWGuXA= -github.com/cosmos/ibc-go/v4 v4.4.2 h1:PG4Yy0/bw6Hvmha3RZbc53KYzaCwuB07Ot4GLyzcBvo= -github.com/cosmos/ibc-go/v4 v4.4.2/go.mod h1:j/kD2JCIaV5ozvJvaEkWhLxM2zva7/KTM++EtKFYcB8= -github.com/cosmos/interchain-accounts v0.2.6 h1:TV2M2g1/Rb9MCNw1YePdBKE0rcEczNj1RGHT+2iRYas= -github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= +github.com/cosmos/ibc-go/v7 v7.1.0 h1:SCLgs7tqVnzdIDO5MRLgovAnc696vTTKl+8qsTu8IMM= +github.com/cosmos/ibc-go/v7 v7.1.0/go.mod h1:7MptlWeIyqmDiuJeRAFqBvXKY8Hybd+rF8vMSmGd2zg= +github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= +github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= +github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= -github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= +github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= +github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= +github.com/creachadair/atomicfile v0.2.6/go.mod h1:BRq8Une6ckFneYXZQ+kO7p1ZZP3I2fzVzf28JxrIkBc= +github.com/creachadair/command v0.0.0-20220426235536-a748effdf6a1/go.mod h1:bAM+qFQb/KwWyCc9MLC4U1jvn3XyakqP5QRkds5T6cY= github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= +github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= +github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= +github.com/creachadair/tomledit v0.0.22/go.mod h1:cIu/4x5L855oSRejIqr+WRFh+mv9g4fWLiUFaApYn/Y= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= +github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= +github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= +github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= @@ -799,10 +1276,10 @@ github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1S github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= +github.com/daixiang0/gci v0.4.2/go.mod h1:d0f+IJhr9loBtIq+ebwhRoTt1LGbPH96ih8bKlsRT9E= github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= github.com/daixiang0/gci v0.9.1 h1:jBrwBmBZTDsGsXiaCTLIe9diotp1X4X64zodFrh7l+c= github.com/daixiang0/gci v0.9.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= -github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= @@ -813,11 +1290,12 @@ github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +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.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +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/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= @@ -828,24 +1306,28 @@ github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8l github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgraph-io/badger/v2 v2.2007.1/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= +github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/badger/v3 v3.2103.2 h1:dpyM5eCJAtQCBcMCZcT4UBZchuTJgCywerHHgmxfxM8= github.com/dgraph-io/badger/v3 v3.2103.2/go.mod h1:RHo4/GmYcKKh5Lxu63wLEMHJ70Pac2JqZRYGhlyAo2M= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= -github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/djherbis/atime v1.1.0/go.mod h1:28OF6Y8s3NQWwacXc5eZTsEsiMzp7LF8MbXE+XJPdBE= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= @@ -860,8 +1342,10 @@ github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TT github.com/docker/distribution v2.6.0-rc.1.0.20180327202408-83389a148052+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= +github.com/docker/distribution v2.8.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +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/docker v0.0.0-20200511152416-a93e9eb0e95c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v1.4.2-0.20180531152204-71cd53e4a197/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= @@ -889,35 +1373,47 @@ github.com/docker/libnetwork v0.8.0-dev.2.0.20200917202933-d0951081b35f/go.mod h github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= 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-0.20200219035652-afde56e7acac h1:opbrjaN/L8gg6Xh5D04Tem+8xVcz6ajZlGCs49mQgyg= -github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= -github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= +github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= @@ -926,12 +1422,11 @@ github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= +github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= @@ -939,6 +1434,7 @@ github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGE github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -946,8 +1442,9 @@ github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= -github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= +github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= @@ -960,6 +1457,7 @@ github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVB github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -973,33 +1471,51 @@ github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3n github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= +github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= +github.com/getsentry/sentry-go v0.17.0/go.mod h1:B82dxtBvxG0KaPD8/hfSV+VcHD+Lg/xUS4JuQn1P4cM= +github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8= github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-critic/go-critic v0.4.1/go.mod h1:7/14rZGnZbY6E38VEGk2kVhoq6itzc1E68facVDK23g= github.com/go-critic/go-critic v0.4.3/go.mod h1:j4O3D4RoIwRqlZw5jJpx0BNfXWWbpcJoKu5cYSe4YmQ= +github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= github.com/go-critic/go-critic v0.6.7 h1:1evPrElnLQ2LZtJfmNDzlieDhjnq36SLgNzisx06oPM= github.com/go-critic/go-critic v0.6.7/go.mod h1:fYZUijFdcnxgx6wPjQA2QEjIRaNCT0gO8bhexy6/QmE= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= +github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= +github.com/go-git/go-git/v5 v5.5.1/go.mod h1:uz5PQ3d0gz7mSgzZhSJToM6ALPaKCdSnl58/Xb5hzr8= +github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= 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= @@ -1019,8 +1535,9 @@ github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTD github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= @@ -1031,6 +1548,7 @@ github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -1051,13 +1569,17 @@ github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhO github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU= github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -1074,6 +1596,7 @@ github.com/go-toolsmith/astcopy v1.0.3 h1:r0bgSRlMOAgO+BdQnVAcpMSMkrQCnV6ZJmIkrJ github.com/go-toolsmith/astcopy v1.0.3/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= github.com/go-toolsmith/astequal v1.1.0 h1:kHKm1AWqClYn15R0K1KKE4RG614D46n+nqUQ06E1dTw= @@ -1104,12 +1627,17 @@ github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6C github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= +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/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= +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/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= @@ -1124,13 +1652,21 @@ github.com/gofrs/flock v0.7.3/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14j github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= +github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= github.com/gogo/googleapis v1.3.2/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= +github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.1.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= @@ -1139,8 +1675,9 @@ github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+ github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -1148,6 +1685,8 @@ github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= @@ -1181,7 +1720,6 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -1201,6 +1739,7 @@ github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzr github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= github.com/golangci/golangci-lint v1.23.7/go.mod h1:g/38bxfhp4rI7zeWSxcdIeHTQGS58TCak8FYcyCmavQ= github.com/golangci/golangci-lint v1.27.0/go.mod h1:+eZALfxIuthdrHPtfM7w/R3POJLjHDfJJw8XZl9xOng= +github.com/golangci/golangci-lint v1.47.0/go.mod h1:3TZhfF5KolbIkXYjUFvER6G9CoxzLEaafr/u/QI1S5A= github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= github.com/golangci/golangci-lint v1.51.2 h1:yIcsT1X9ZYHdSpeWXRT1ORC/FPGSqDHbHsu9uk4FK7M= github.com/golangci/golangci-lint v1.51.2/go.mod h1:KH9Q7/3glwpYSknxUgUyLlAv46A8fsSKo1hH2wDvkr8= @@ -1217,10 +1756,12 @@ github.com/golangci/misspell v0.4.0/go.mod h1:W6O/bwV6lGDxUCChm2ykw9NQdd5bYd1Xkj github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -1231,8 +1772,9 @@ github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= github.com/google/crfs v0.0.0-20191108021818-71d77da419c9/go.mod h1:etGhoOqfwPkooV6aqoX3eBGQOJblqdoc9XvWOeuxpPw= github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v2.0.0+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -1255,6 +1797,7 @@ github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYV github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= @@ -1265,10 +1808,13 @@ github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6 github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= 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= @@ -1298,11 +1844,16 @@ github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.3.0/go.mod h1:i1DMg/Lu8Sz5yYl25iOdmc5CT5qusaa+zmRWs16741s= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= @@ -1313,6 +1864,9 @@ github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/Oth github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= @@ -1324,6 +1878,7 @@ github.com/gookit/color v1.2.4/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1K github.com/gookit/color v1.5.1/go.mod h1:wZFzea4X8qN6vHOSP2apMb4/+w/orMznEzYsIHPaqKM= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28 h1:9alfqbrhuD+9fLZ4iaAVwhlp5PEhmnBt7yvK2Oy5C1U= @@ -1333,6 +1888,7 @@ github.com/goreleaser/nfpm v1.2.1/go.mod h1:TtWrABZozuLOttX2uDlYyECfQX7x5XYkVxhj github.com/goreleaser/nfpm v1.3.0/go.mod h1:w0p7Kc9TAUgWMyrub63ex3M2Mgw88M4GZXoTq5UCb40= github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -1341,9 +1897,9 @@ github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -1365,14 +1921,15 @@ github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY= github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= +github.com/gotestyourself/gotestyourself v1.4.0/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.1/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= @@ -1384,8 +1941,11 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.9.2/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= +github.com/grpc-ecosystem/grpc-gateway v1.14.7/go.mod h1:oYZKL012gGh6LMyg/xA7Q2yq6j8bu0wa+9w14EEthWU= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= @@ -1402,9 +1962,11 @@ github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoP github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= +github.com/hashicorp/consul/api v1.15.3/go.mod h1:/g/qgcoBcEXALCNZgRRisyTW0nY86++L0KbeAMXYCeY= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/consul/sdk v0.11.0/go.mod h1:yPkX5Q6CsxTFMjQQDJwzeNmUUF5NUGGbrDsv9wTb8cw= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= @@ -1412,16 +1974,22 @@ github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brv github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= +github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= @@ -1433,11 +2001,15 @@ github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= 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.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= @@ -1458,27 +2030,33 @@ github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.8/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/uuid v0.0.0-20160311170451-ebb0a03e909c/go.mod h1:fHzc09UnyJyqyW+bFuq864eh+wC7dj65aXmXLRe5to0= -github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= +github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= +github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= +github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= +github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= +github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= -github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= +github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= @@ -1492,14 +2070,14 @@ github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= +github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= -github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= @@ -1512,30 +2090,44 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/informalsystems/tm-load-test v1.0.0/go.mod h1:WVaSKaQdfZK3v0C74EMzn7//+3aeCZF8wkIKBz2/M74= +github.com/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= +github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= +github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= +github.com/iris-contrib/httpexpect/v2 v2.3.1/go.mod h1:ICTf89VBKSD3KB0fsyyHviKF8G8hyepP0dOXJPWz3T0= +github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= +github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= +github.com/iris-contrib/jade v1.1.4/go.mod h1:EDqR+ur9piDl6DUgs6qRrlfzmlx/D5UybogqrXvJTBE= +github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= +github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= +github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= github.com/ishidawataru/sctp v0.0.0-20191218070446-00ab2ac2db07/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= +github.com/ishidawataru/sctp v0.0.0-20210226210310-f2269e66cdee/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jaguilar/vt100 v0.0.0-20150826170717-2703a27b14ea/go.mod h1:QMdK4dGB3YhEW2BmA1wgGpPYI3HZy/5gD705PXKUVSg= github.com/jarcoal/httpmock v1.0.5/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= +github.com/jhump/protoreflect v1.11.1-0.20220213155251-0c2aedc66cf4/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jhump/protoreflect v1.13.1-0.20220928232736-101791cb1b4c h1:XImQJfpJLmGEEd8ll5yPVyL/aEvmgGHW4WYTyNseLOM= github.com/jhump/protoreflect v1.13.1-0.20220928232736-101791cb1b4c/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +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/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a/go.mod h1:xRskid8CManxVta/ALEhJha/pweKBaVG6fWgc0yH25s= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= @@ -1546,7 +2138,9 @@ github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +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= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= @@ -1576,8 +2170,10 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= +github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= -github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= @@ -1588,10 +2184,30 @@ github.com/junk1tm/musttag v0.4.5 h1:d+mpJ1vn6WFEVKHwkgJiIedis1u/EawKOuUTygAUtCo github.com/junk1tm/musttag v0.4.5/go.mod h1:XkcL/9O6RmD88JBXb+I15nYRl9W4ExhgQeCBEhfMC8U= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= +github.com/kataras/blocks v0.0.6/go.mod h1:UK+Iwk0Oxpc0GdoJja7sEildotAUKK1LYeYcVF0COWc= +github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= +github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk= +github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= +github.com/kataras/golog v0.1.7/go.mod h1:jOSQ+C5fUqsNSwurB/oAHq1IFSb0KI3l6GMa7xB6dZA= +github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U= +github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= +github.com/kataras/iris/v12 v12.2.0-beta5/go.mod h1:q26aoWJ0Knx/00iPKg5iizDK7oQQSPjbD8np0XDh6dc= +github.com/kataras/jwt v0.1.8/go.mod h1:Q5j2IkcIHnfwy+oNY3TVWuEBJNw0ADgCcXK9CaZwV4o= +github.com/kataras/neffos v0.0.10/go.mod h1:ZYmJC07hQPW67eKuzlfY7SO3bC0mw83A3j6im82hfqw= +github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= +github.com/kataras/neffos v0.0.20/go.mod h1:srdvC/Uo8mgrApWW0AYtiiLgMbyNPf69qPsd2FhE6MQ= +github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0= +github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= +github.com/kataras/pio v0.0.10/go.mod h1:gS3ui9xSD+lAUpbYnjOGiQyY7sUMJO+EHpiRzhtZ5no= +github.com/kataras/pio v0.0.11/go.mod h1:38hH6SWH6m4DKSYmRhlrCJ5WItwWgCVrTNU62XZyUvI= +github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= +github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= +github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.1/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8= github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= @@ -1600,8 +2216,12 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= @@ -1610,15 +2230,22 @@ github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8 github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= +github.com/klauspost/compress v1.15.10/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= +github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= +github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.1 h1:vJi+O/nMdFt0vqm8NZBI6wzALWdA2X+egi0ogNyrC/w= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= @@ -1632,6 +2259,7 @@ github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= @@ -1648,8 +2276,12 @@ github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+ github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= github.com/kyoh86/exportloopref v0.1.11 h1:1Z0bcmTypkL3Q4k+IDHMWTcnCliEZcaPiIe0/ymEyhQ= github.com/kyoh86/exportloopref v0.1.11/go.mod h1:qkV4UF1zGl6EkF1ox8L5t9SwyeBAZ3qLMd6up458uqA= +github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= +github.com/labstack/echo/v4 v4.9.0/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= @@ -1658,6 +2290,7 @@ github.com/ldez/tagliatelle v0.4.0/go.mod h1:mNtTfrHy2haaBAw+VT7IBV6VXBThS7TCreY github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= github.com/leonklingele/grouper v1.1.1 h1:suWXRU57D4/Enn6pXR0QVqqWWrnJ9Osrz+5rjt8ivzU= github.com/leonklingele/grouper v1.1.1/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= @@ -1672,17 +2305,25 @@ github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= +github.com/linxGnu/grocksdb v1.7.10/go.mod h1:0hTf+iA+GOr0jDX4CgIYyJZxqOH9XlBh6KVj8+zmF34= +github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= +github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -1690,11 +2331,15 @@ github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPK github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailgun/raymond/v2 v2.0.46/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= +github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= @@ -1704,11 +2349,12 @@ github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHef github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= +github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -1716,6 +2362,7 @@ github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= @@ -1724,8 +2371,8 @@ github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HN github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= @@ -1733,8 +2380,8 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= +github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -1749,20 +2396,30 @@ github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lL github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= +github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= +github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= +github.com/mediocregopher/radix/v3 v3.8.0/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= github.com/mgechev/revive v1.2.5 h1:UF9AR8pOAuwNmhXj2odp4mxv9Nx2qUIwVz8ZsU+Mbec= github.com/mgechev/revive v1.2.5/go.mod h1:nFOXent79jMTISAfOAasKfy0Z2Ejq0WX7Qn/KAdYopI= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= +github.com/microcosm-cc/bluemonday v1.0.20/go.mod h1:yfBmMi8mxvaZut3Yytv+jTXRY8mxyjJ0/kQBTElld50= +github.com/microcosm-cc/bluemonday v1.0.21/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= @@ -1774,6 +2431,8 @@ github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WT github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= @@ -1787,6 +2446,9 @@ github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= @@ -1794,7 +2456,6 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= @@ -1805,6 +2466,7 @@ github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8oh github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/buildkit v0.8.1/go.mod h1:/kyU1hKy/aYCuP39GZA9MaKioovHku57N6cqlKZIaiQ= +github.com/moby/buildkit v0.10.3/go.mod h1:jxeOuly98l9gWHai0Ojrbnczrk/rf+o9/JqNhY+UCSo= github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= @@ -1839,10 +2501,12 @@ github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwd github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= +github.com/mroth/weightedrand v0.4.1/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= @@ -1866,10 +2530,17 @@ github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5Vgl github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= +github.com/nats-io/jwt/v2 v2.2.1-0.20220330180145-442af02fd36a/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= +github.com/nats-io/jwt/v2 v2.3.0/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= +github.com/nats-io/nats-server/v2 v2.8.4/go.mod h1:8zZa+Al3WsESfmgSs98Fi06dRWLH5Bnq90m5bKD/eT4= +github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= +github.com/nats-io/nats.go v1.15.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= +github.com/nats-io/nats.go v1.16.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= +github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= @@ -1879,10 +2550,12 @@ github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96d github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= -github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= +github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= +github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/networkplumbing/go-nft v0.2.0/go.mod h1:HnnM+tYvlGAsMU7yoYwXEVLLiDW9gdMmb5HoGcwpuQs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nishanths/exhaustive v0.8.1/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= github.com/nishanths/exhaustive v0.9.5 h1:TzssWan6orBiLYVqewCG8faud9qlFntJE30ACpzmGME= github.com/nishanths/exhaustive v0.9.5/go.mod h1:IbwrGdVMizvDcIxPYGVdQn5BqWJaOwpCvg4RGb8r/TA= @@ -1894,13 +2567,14 @@ github.com/nunnatsa/ginkgolinter v0.8.1/go.mod h1:FYYLtszIdmzCH8XMaMPyxPVXZ7VCaI 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/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b/go.mod h1:TLJifjWF6eotcfzDjKZsDqWJ+73Uvj/N85MvVyrvynM= 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/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/oklog/ulid/v2 v2.1.0/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= @@ -1917,8 +2591,10 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -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/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= github.com/onsi/ginkgo/v2 v2.8.0 h1:pAM+oBNPrpXRs+E/8spkeGx9QgekbRVyr74EUvRVOUI= @@ -1936,6 +2612,7 @@ github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDs github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= @@ -1964,8 +2641,8 @@ github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04s github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= github.com/opencontainers/runc v1.1.1/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +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/opencontainers/runc v1.1.5 h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs= github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= @@ -1996,28 +2673,18 @@ github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa 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/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= -github.com/osmosis-labs/osmosis/osmomath v0.0.4 h1:5cJfDi8mOuAzLfsQFoTGJvm/qca7Gj7wvDiVSTE1ibk= -github.com/osmosis-labs/osmosis/osmoutils v0.0.4 h1:W/lvzFsyt30GGi0+nD3Ktxlwe5Tl6ipKWilyyLjJ9Ro= -github.com/osmosis-labs/osmosis/osmoutils v0.0.4/go.mod h1:2MStAdC2TajbhgkAwT3SZPtMW/Bbvp0JYGPRle+5Qsc= -github.com/osmosis-labs/osmosis/v15 v15.1.2 h1:Y/F6xMhS1hacdAW0Ra22SaKLUGIpgqC6DmrWRUklKQk= -github.com/osmosis-labs/osmosis/v15 v15.1.2/go.mod h1:djA/5r1/HaZIYtk3r5qCjkQutfkEv/0IzIKR3evV3eA= -github.com/osmosis-labs/osmosis/x/ibc-hooks v0.0.6 h1:PjfLL5rwwm44CeLnNQssrFgmj4BdeIS5DriKYhGz7IM= -github.com/osmosis-labs/osmosis/x/ibc-hooks v0.0.6/go.mod h1:2Aqs0L6JnMfo+P+It8q7hJsP1YB+Is5DJc4nRSiBF/U= +github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= -github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= 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= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= -github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= @@ -2028,15 +2695,16 @@ github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCko github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= -github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pelletier/go-toml/v2 v2.0.7 h1:muncTPStnKRos5dpVKULv2FVd4bMOhNePj9CjgDb8Us= +github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= +github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= @@ -2045,6 +2713,9 @@ github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= 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/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= @@ -2063,6 +2734,10 @@ github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUI github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3/go.mod h1:q5NXNGzqj5uPnVuhGkZfmgHqNUhf15VLi6L9kW0VEc0= +github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4/go.mod h1:RdR1j20Aj5pB6+fw6Y9Ur7lMHpegTEjY1vc19hEZL40= +github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= +github.com/polyfloyd/go-errorlint v1.0.0/go.mod h1:KZy4xxPJyy88/gldCe5OdW6OQRtNO3EZE7hXzmnebgA= github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= github.com/polyfloyd/go-errorlint v1.1.0 h1:VKoEFg5yxSgJ2yFPVhxW7oGz+f8/OVcuMeNvcPIi6Eg= github.com/polyfloyd/go-errorlint v1.1.0/go.mod h1:Uss7Bc/izYG0leCMRx3WVlrpqWedSZk7V/FUQW6VJ6U= @@ -2080,12 +2755,14 @@ github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQ github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_golang v1.15.0 h1:5fCgGYogn0hFdhyhLbw7hEsWxufKtY9klyvdNfFlFhM= +github.com/prometheus/client_golang v1.15.0/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -2105,13 +2782,15 @@ github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -2127,22 +2806,25 @@ github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= github.com/quasilyte/go-ruleguard v0.1.2-0.20200318202121-b00d7a75d3d8/go.mod h1:CGFX09Ci3pq9QZdj86B+VGIdNj4VyCo2iPOGS9esB/k= github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= github.com/quasilyte/go-ruleguard v0.3.19 h1:tfMnabXle/HzOb5Xe9CUZYWXKfkS1KwRmZyPmD9nVcc= github.com/quasilyte/go-ruleguard v0.3.19/go.mod h1:lHSn69Scl48I7Gt9cX3VrbsZYvYiBYszZOZW4A+oTEw= github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo= github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= @@ -2156,11 +2838,13 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= +github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= +github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= @@ -2175,18 +2859,20 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= +github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= +github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= +github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= +github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= +github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= @@ -2196,6 +2882,7 @@ github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfF github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryancurrah/gomodguard v1.0.4/go.mod h1:9T/Cfuxs5StfsocWr4WzDL36HqnX0fVb9d5fSEaLhoE= github.com/ryancurrah/gomodguard v1.1.0/go.mod h1:4O8tr7hBODaGE6VIhfJDHcwzh5GUccKSJBU0UMXJFVM= +github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= github.com/ryancurrah/gomodguard v1.3.0 h1:q15RT/pd6UggBXVBuLps8BXRvl5GPBcwVA7BJHMLuTw= github.com/ryancurrah/gomodguard v1.3.0/go.mod h1:ggBxb3luypPEzqVtq33ee7YSN35V28XeGnid8dnni50= @@ -2203,14 +2890,17 @@ github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0K github.com/ryanrolds/sqlclosecheck v0.4.0 h1:i8SX60Rppc1wRuyQjMciLqIzV3xnoHB7/tXbr6RGYNI= github.com/ryanrolds/sqlclosecheck v0.4.0/go.mod h1:TBRRjzL31JONc9i4XMinicuo+s+E8yKZ5FN8X3G6CKQ= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= +github.com/sagikazarmark/crypt v0.8.0/go.mod h1:TmKwZAo97S4Fy4sfMH/HX/cQP5D+ijra2NyLpNNmttY= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sanposhiho/wastedassign/v2 v2.0.7 h1:J+6nrY4VW+gC9xFzUc+XjPD3g3wF3je/NsJFwFK7Uxc= github.com/sanposhiho/wastedassign/v2 v2.0.7/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= @@ -2221,6 +2911,7 @@ github.com/sashamelentyev/usestdlibvars v1.23.0 h1:01h+/2Kd+NblNItNeux0veSL5cBF1 github.com/sashamelentyev/usestdlibvars v1.23.0/go.mod h1:YPwr/Y1LATzHI93CqoPUN/2BzGQ/6N/cl/KwgR0B/aU= github.com/sassoftware/go-rpmutils v0.0.0-20190420191620-a8f1baeba37b/go.mod h1:am+Fp8Bt506lA3Rk3QCmSqmYmLMnPDhdDUcosQCAx+I= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= @@ -2230,6 +2921,7 @@ github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod github.com/securego/gosec v0.0.0-20200103095621-79fbf3af8d83/go.mod h1:vvbZ2Ae7AzSq3/kywjUDxSNq2SJ27RxCz2un0H3ePqE= github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A= github.com/securego/gosec/v2 v2.3.0/go.mod h1:UzeVyUXbxukhLeHKV3VVqo7HdoQR9MrRfFmZYotn8ME= +github.com/securego/gosec/v2 v2.12.0/go.mod h1:iTpT+eKTw59bSgklBHlSnH5O2tNygHMDxfvMubA4i7I= github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= github.com/securego/gosec/v2 v2.15.0 h1:v4Ym7FF58/jlykYmmhZ7mTm7FQvN/setNm++0fgIAtw= github.com/securego/gosec/v2 v2.15.0/go.mod h1:VOjTrZOkUtSDt2QLSJmQBMWnvwiQPEjg0l+5juIqGk8= @@ -2238,17 +2930,22 @@ github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfP github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/serialx/hashring v0.0.0-20190422032157-8b2912629002/go.mod h1:/yeG0My1xr/u+HZrFQ1tOQQQQrOawfyMUH13ai5brBc= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= -github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.22.6/go.mod h1:EdIubSnZhbAvBS1yJ7Xi+AShB/hxwLHOMz4MCYz7yMs= +github.com/shirou/gopsutil/v3 v3.22.8/go.mod h1:s648gW4IywYzUfE/KjXxUsqrqx/T2xO5VqOXxONeRfI= github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -2261,18 +2958,22 @@ github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0 github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= +github.com/sivchari/nosnakecase v1.5.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= +github.com/sivchari/tenv v1.6.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/sivchari/tenv v1.7.1 h1:PSpuD4bu6fSmtWMxSGWcvqUUgIn7k3yOJhOIzVWn8Ak= github.com/sivchari/tenv v1.7.1/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= -github.com/skip-mev/mev-tendermint v0.34.24-mev.18 h1:Xqq3vtJxE2cSBUAIXproDiUwW9qXkHNgNSFLS07/QQA= -github.com/skip-mev/mev-tendermint v0.34.24-mev.18/go.mod h1:m3iKcdA/hSGrBwhwgg1fre71te6Ln6SZEstGroM5CJs= +github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= +github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= +github.com/smartystreets/assertions v1.13.0/go.mod h1:wDmR7qL282YbGsPy6H/yAsesrxfxaaSlJazyFLYVFx8= github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -2293,6 +2994,7 @@ github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTd github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= @@ -2305,14 +3007,16 @@ github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKv github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -2326,11 +3030,13 @@ github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DM github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.0/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= +github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= @@ -2338,13 +3044,12 @@ github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRk github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= -github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= -github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= -github.com/strangelove-ventures/async-icq/v4 v4.0.0-rc0 h1:foE/5O2/XiqGsdTKx3R0BTfKgW9KnUYyQLZt0WFSesE= -github.com/strangelove-ventures/packet-forward-middleware/v4 v4.0.4 h1:8Tn4Gy/DAq7wzV1CxEGv80ujZ+nUvzgwwdCobO/Gj8Y= -github.com/strangelove-ventures/packet-forward-middleware/v4 v4.0.4/go.mod h1:AG8F5pdk3x1h7PlRvPoMem3623W+w8HJHrWYkVJ51kk= +github.com/strangelove-ventures/async-icq/v7 v7.0.0-20230413165143-a3b65ccdc897 h1:lCTD5L1v1K1KC6KXjyt4o1X+yzV14RbbrPZaF29n8uI= +github.com/strangelove-ventures/async-icq/v7 v7.0.0-20230413165143-a3b65ccdc897/go.mod h1:ag05Q54Wkr0jVwfe+14sxnuWbw0gBOxtPQv9afBBnr0= +github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0-20230523193151-73dea436e53f h1:NJdZ+YJ9Vf2t286L20IjFK0SxGpobF1xIp5ZQlxWetk= +github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0-20230523193151-73dea436e53f/go.mod h1:DJNSVK8NCYHM+aZHCFkcAqPwjzwHYAjhjSMlhAGtJ3c= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -2354,6 +3059,7 @@ github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -2362,6 +3068,7 @@ github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRci github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -2373,20 +3080,23 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c h1:+aPplBwWcHBo6q9xrfWdMrT9o4kltkmmvpemgIjep/8= github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c/go.mod h1:SbErYREK7xXdsRiigaQiQkI9McGRzYMvlKYaP3Nimdk= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= @@ -2395,17 +3105,24 @@ github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0 github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tdewolff/minify/v2 v2.12.1/go.mod h1:p5pwbvNs1ghbFED/ZW1towGsnnWwzvM8iz8l0eURi9g= +github.com/tdewolff/minify/v2 v2.12.4/go.mod h1:h+SRvSIX3kwgwTFOpSckvSxgax3uy8kZTSF1Ojrr3bk= +github.com/tdewolff/parse/v2 v2.6.3/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= +github.com/tdewolff/parse/v2 v2.6.4/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= +github.com/tdewolff/test v1.0.7/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= -github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= -github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= -github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= -github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= +github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4= +github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg= +github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ= +github.com/tendermint/tendermint v0.34.11/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= +github.com/tendermint/tendermint v0.35.9/go.mod h1:FYvzUDkmVv1awfFl9V85yl5NKyjxz6XLZGX132+ftAY= +github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI= +github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= -github.com/tendermint/tm-db v0.6.8-0.20220506192307-f628bb5dc95b h1:Y3ZPG6gdDCAV2sdGkD759ji/09GzaNu1X3qKTmZIbTo= -github.com/tendermint/tm-db v0.6.8-0.20220506192307-f628bb5dc95b/go.mod h1:ADqbS9NOSnBRK9R2RtYC61CdsHmVMD/yXAzcMuPexbU= +github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag= @@ -2415,14 +3132,11 @@ github.com/tetafro/godot v0.4.2/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQx github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= -github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= +github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= @@ -2434,6 +3148,7 @@ github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiToc github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= +github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk= github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= @@ -2445,12 +3160,14 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck/v2 v2.6.2/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= github.com/tomarrell/wrapcheck/v2 v2.8.0 h1:qDzbir0xmoE+aNxGCPrn+rUSxAX+nG6vREgbbXAR81I= github.com/tomarrell/wrapcheck/v2 v2.8.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= github.com/tommy-muehle/go-mnd v1.1.1/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= +github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tonistiigi/fsutil v0.0.0-20201103201449-0834f99b7b85/go.mod h1:a7cilN64dG941IOXfhJhlH0qB92hxJ9A1ewrdUmJ6xo= @@ -2468,13 +3185,18 @@ github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2 github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= @@ -2487,12 +3209,15 @@ github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtX github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= +github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= +github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= @@ -2511,22 +3236,21 @@ github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmF github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= -github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= -github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/xanzy/go-gitlab v0.31.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= github.com/xanzy/go-gitlab v0.32.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= @@ -2534,9 +3258,11 @@ github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1z github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= +github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= +github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= @@ -2552,36 +3278,45 @@ github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQ github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= -github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +gitlab.com/bosi/decorder v0.2.2/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.5/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= +go.etcd.io/etcd/client/v2 v2.305.5/go.mod h1:zQjKllfqfBVyVStbt4FaosoX2iYd8fV/GRy/PbowgP4= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= +go.etcd.io/etcd/client/v3 v3.5.5/go.mod h1:aApjR4WGlSumpnJ2kloS75h6aHUmAyaPLjHMxpc7E7c= go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= +go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= @@ -2603,6 +3338,7 @@ go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUz go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.29.0/go.mod h1:LsankqVDx4W+RhZNA5uWarULII/MBhF5qwCYxTuyXjs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.33.0/go.mod h1:y/SlJpJQPd2UzfBCj0E9Flk9FDCtTyqUmaCB41qFrWI= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.29.0/go.mod h1:vHItvsnJtp7ES++nFLLFBzUWny7fJQSvTlxFcqQGUr4= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= @@ -2611,6 +3347,7 @@ go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzox go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= go.opentelemetry.io/otel v1.4.0/go.mod h1:jeAqMFKy2uLIxCtKxoFj0FAL5zAPKQagc3+GtBWakzk= go.opentelemetry.io/otel v1.4.1/go.mod h1:StM6F/0fSwpd8dKWDCdRr7uRvEPYdW0hBSlbdTiUde4= +go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM= go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= go.opentelemetry.io/otel/exporters/jaeger v1.4.1/go.mod h1:ZW7vkOu9nC1CxsD8bHNHCia5JUbwP39vxgd1q4Z5rCI= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= @@ -2636,10 +3373,13 @@ go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16g go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= go.opentelemetry.io/otel/trace v1.4.0/go.mod h1:uc3eRsqDfWs9R7b92xbQbU42/eTNz4N+gLP8qJCi4aE= go.opentelemetry.io/otel/trace v1.4.1/go.mod h1:iYEVbroFCNut9QkwEczV9vMRPHNKSSwYZjulEtsmhFc= +go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaTBoTCh2zIFI4= go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= go.opentelemetry.io/proto/otlp v0.12.0/go.mod h1:TsIjwGWIx5VFYv9KGVlOpxoBl5Dy+63SUguV7GGvlSQ= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -2666,6 +3406,8 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U= go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= @@ -2693,6 +3435,7 @@ golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3 golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -2716,12 +3459,25 @@ golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ= +golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -2729,7 +3485,6 @@ golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= @@ -2739,9 +3494,15 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/exp v0.0.0-20230131160201-f062dba9d201 h1:BEABXpNXLEz0WxtA+6CQIz2xkg80e+1zrhWyMcq8VzE= +golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221019170559-20944726eadf/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= +golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20220613132600-b0d781184e0d/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= @@ -2761,6 +3522,8 @@ golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeap golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -2775,12 +3538,10 @@ golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mobile v0.0.0-20200801112145-973feb4309de/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -2792,11 +3553,14 @@ golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2811,6 +3575,7 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -2844,7 +3609,6 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -2870,8 +3634,8 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -2886,14 +3650,23 @@ golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220726230323-06994584191e/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= +golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221017152216-f25eb7ecb193/go.mod h1:RpDiru2p0u2F0lLpEoqnP2+7xs0ifAuOcJ442g6GU2s= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -2924,6 +3697,13 @@ golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7Lm golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -2974,7 +3754,6 @@ golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190620070143-6f217b454f45/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -3023,7 +3802,6 @@ golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -3034,12 +3812,14 @@ golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201013081832-0aaa2718063a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -3077,22 +3857,29 @@ golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210909193231-528a39cd75f3/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211031064116-611d5d643895/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211113001501-0c823b97ae02/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -3112,16 +3899,21 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220727055044-e65921a090b8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -3136,8 +3928,10 @@ golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -3152,8 +3946,10 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -3163,13 +3959,21 @@ golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -3181,6 +3985,7 @@ golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -3219,7 +4024,6 @@ golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200102140908-9497f49d5709/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -3268,6 +4072,7 @@ golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -3296,6 +4101,7 @@ golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -3305,13 +4111,15 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= -gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= @@ -3380,6 +4188,16 @@ google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOI google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -3389,9 +4207,11 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -3443,6 +4263,8 @@ google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201111145450-ac7456db90a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -3474,7 +4296,6 @@ google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211101144312-62acf1d99145/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= @@ -3487,7 +4308,9 @@ google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= @@ -3519,11 +4342,92 @@ google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa h1:qQPhfbPO23fwm/9lQr91L1u62Zo6cm+zI+slZT+uf+o= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= +google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230202175211-008b39050e57/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -3537,10 +4441,13 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.2-0.20230208135220-49eaa78c6c9c/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.2-0.20230222093303-bc1253ad3743/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= @@ -3554,14 +4461,18 @@ gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -3569,6 +4480,7 @@ gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= @@ -3593,17 +4505,25 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 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 v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +gotest.tools/v3 v3.1.0/go.mod h1:fHy7eyTmJFO5bQbUsEGQ1v4m2J3Jz9eWL54TP2/ZuYQ= gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= +gotest.tools/v3 v3.3.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= +gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/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= @@ -3614,6 +4534,7 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +honnef.co/go/tools v0.3.2/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= honnef.co/go/tools v0.4.2 h1:6qXr+R5w+ktL5UkwEbPp+fEvfyoMPche6GkOpGHZcLc= honnef.co/go/tools v0.4.2/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA= @@ -3693,11 +4614,47 @@ k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= +modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= +modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= +moul.io/http2curl v1.0.0/go.mod h1:f6cULg+e4Md/oW1cYmwW4IWQOVl2lGbmCNGOHvzX2kE= +mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= @@ -3706,6 +4663,7 @@ mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphD mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7/go.mod h1:HGC5lll35J70Y5v7vCGb9oLhHoScFwkHDJm/05RdSTc= +mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d h1:3rvTIIM22r9pvXk+q3swxUQAQOxksVMGK7sml4nG57w= mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d/go.mod h1:IeHQjmn6TOD+e4Z3RFiZMMsLVL+A96Nvptar8Fj71is= @@ -3713,6 +4671,12 @@ nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0 nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= +pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= +pgregory.net/rapid v0.4.8/go.mod h1:Z5PbWqjvWR1I3UGjvboUuan4fe4ZYEYNLNQLExzCoUs= +pgregory.net/rapid v0.5.2/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +pgregory.net/rapid v0.5.3/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= +pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= @@ -3731,6 +4695,8 @@ sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZa sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= sourcegraph.com/sqs/pbtypes v1.0.0/go.mod h1:3AciMUv4qUuRHRHhOG4TZOB+72GdPVz5k+c648qsFS4= diff --git a/testutil/keeper/auction.go b/testutil/keeper/auction.go index c72aa4f62..6a9cff2d5 100644 --- a/testutil/keeper/auction.go +++ b/testutil/keeper/auction.go @@ -13,9 +13,9 @@ package keeper // sdk "github.com/cosmos/cosmos-sdk/types" // typesparams "github.com/cosmos/cosmos-sdk/x/params/types" // "github.com/stretchr/testify/require" -// "github.com/tendermint/tendermint/libs/log" -// tmproto "github.com/tendermint/tendermint/proto/tendermint/types" -// tmdb "github.com/tendermint/tm-db" +// "github.com/cometbft/cometbft/libs/log" +// tmproto "github.com/cometbft/cometbft/proto/tendermint/types" +// tmdb "github.com/cometbft/cometbft-db" //) // //func AuctionKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { diff --git a/testutil/keeper/collector.go b/testutil/keeper/collector.go index 9589937c2..a747fc400 100644 --- a/testutil/keeper/collector.go +++ b/testutil/keeper/collector.go @@ -13,9 +13,9 @@ package keeper // sdk "github.com/cosmos/cosmos-sdk/types" // typesparams "github.com/cosmos/cosmos-sdk/x/params/types" // "github.com/stretchr/testify/require" -// "github.com/tendermint/tendermint/libs/log" -// tmproto "github.com/tendermint/tendermint/proto/tendermint/types" -// tmdb "github.com/tendermint/tm-db" +// "github.com/cometbft/cometbft/libs/log" +// tmproto "github.com/cometbft/cometbft/proto/tendermint/types" +// tmdb "github.com/cometbft/cometbft-db" //) // //func CollectorKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { diff --git a/testutil/keeper/esm.go b/testutil/keeper/esm.go index 6ee79b6a6..2811be96c 100644 --- a/testutil/keeper/esm.go +++ b/testutil/keeper/esm.go @@ -12,9 +12,9 @@ package keeper // sdk "github.com/cosmos/cosmos-sdk/types" // typesparams "github.com/cosmos/cosmos-sdk/x/params/types" // "github.com/stretchr/testify/require" -// "github.com/tendermint/tendermint/libs/log" -// tmproto "github.com/tendermint/tendermint/proto/tendermint/types" -// tmdb "github.com/tendermint/tm-db" +// "github.com/cometbft/cometbft/libs/log" +// tmproto "github.com/cometbft/cometbft/proto/tendermint/types" +// tmdb "github.com/cometbft/cometbft-db" // ) // func EsmKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { diff --git a/testutil/keeper/rewards.go b/testutil/keeper/rewards.go index a5d1078e0..fc3981541 100644 --- a/testutil/keeper/rewards.go +++ b/testutil/keeper/rewards.go @@ -13,9 +13,9 @@ package keeper // sdk "github.com/cosmos/cosmos-sdk/types" // typesparams "github.com/cosmos/cosmos-sdk/x/params/types" // "github.com/stretchr/testify/require" -// "github.com/tendermint/tendermint/libs/log" -// tmproto "github.com/tendermint/tendermint/proto/tendermint/types" -// tmdb "github.com/tendermint/tm-db" +// "github.com/cometbft/cometbft/libs/log" +// tmproto "github.com/cometbft/cometbft/proto/tendermint/types" +// tmdb "github.com/cometbft/cometbft-db" //) // //func RewardsKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { diff --git a/testutil/keeper/tokenmint.go b/testutil/keeper/tokenmint.go index 0d81be91a..77fe7eb9e 100644 --- a/testutil/keeper/tokenmint.go +++ b/testutil/keeper/tokenmint.go @@ -13,9 +13,9 @@ package keeper // sdk "github.com/cosmos/cosmos-sdk/types" // typesparams "github.com/cosmos/cosmos-sdk/x/params/types" // "github.com/stretchr/testify/require" -// "github.com/tendermint/tendermint/libs/log" -// tmproto "github.com/tendermint/tendermint/proto/tendermint/types" -// tmdb "github.com/tendermint/tm-db" +// "github.com/cometbft/cometbft/libs/log" +// tmproto "github.com/cometbft/cometbft/proto/tendermint/types" +// tmdb "github.com/cometbft/cometbft-db" //) // //func TokenmintKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { diff --git a/testutil/network/network.go b/testutil/network/network.go index 939fde5d2..a42a3f56a 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -5,17 +5,17 @@ import ( "testing" "time" + tmdb "github.com/cometbft/cometbft-db" + tmrand "github.com/cometbft/cometbft/libs/rand" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keyring" servertypes "github.com/cosmos/cosmos-sdk/server/types" - "github.com/cosmos/cosmos-sdk/simapp" storetypes "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/testutil/network" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - tmrand "github.com/tendermint/tendermint/libs/rand" - tmdb "github.com/tendermint/tm-db" comdex "github.com/comdex-official/comdex/app" ) @@ -56,7 +56,7 @@ func DefaultConfig() network.Config { return comdex.New( val.Ctx.Logger, tmdb.NewMemDB(), nil, true, map[int64]bool{}, val.Ctx.Config.RootDir, 0, encoding, - simapp.EmptyAppOptions{}, + simtestutil.EmptyAppOptions{}, comdex.GetWasmEnabledProposals(), comdex.EmptyWasmOpts, baseapp.SetPruning(storetypes.NewPruningOptionsFromString(val.AppConfig.Pruning)), diff --git a/testutil/simapp/simapp.go b/testutil/simapp/simapp.go index 72607d1db..8e8f1bd7d 100644 --- a/testutil/simapp/simapp.go +++ b/testutil/simapp/simapp.go @@ -3,12 +3,12 @@ package simapp import ( "time" - "github.com/cosmos/cosmos-sdk/simapp" - abcitypes "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/libs/log" - tmprototypes "github.com/tendermint/tendermint/proto/tendermint/types" - tmtypes "github.com/tendermint/tendermint/types" - tmdb "github.com/tendermint/tm-db" + tmdb "github.com/cometbft/cometbft-db" + abcitypes "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/libs/log" + tmprototypes "github.com/cometbft/cometbft/proto/tendermint/types" + tmtypes "github.com/cometbft/cometbft/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" comdex "github.com/comdex-official/comdex/app" ) @@ -22,7 +22,7 @@ func New(dir string) *comdex.App { ) a := comdex.New(logger, db, nil, true, map[int64]bool{}, dir, 0, encoding, - simapp.EmptyAppOptions{}, comdex.GetWasmEnabledProposals(), comdex.EmptyWasmOpts) + simtestutil.EmptyAppOptions{}, comdex.GetWasmEnabledProposals(), comdex.EmptyWasmOpts) // InitChain updates deliverState which is required when app.NewContext is called a.InitChain(abcitypes.RequestInitChain{ ConsensusParams: defaultConsensusParams, diff --git a/third_party/proto/tendermint/abci/types.proto b/third_party/proto/tendermint/abci/types.proto index 2cbcabb29..2e70acac7 100644 --- a/third_party/proto/tendermint/abci/types.proto +++ b/third_party/proto/tendermint/abci/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.abci; -option go_package = "github.com/tendermint/tendermint/abci/types"; +option go_package = "github.com/cometbft/cometbft/abci/types"; // For more information on gogo.proto, see: // https://github.com/gogo/protobuf/blob/master/extensions.md diff --git a/third_party/proto/tendermint/types/block.proto b/third_party/proto/tendermint/types/block.proto index 84e9bb15d..d531c06a0 100644 --- a/third_party/proto/tendermint/types/block.proto +++ b/third_party/proto/tendermint/types/block.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "tendermint/types/types.proto"; diff --git a/third_party/proto/tendermint/types/evidence.proto b/third_party/proto/tendermint/types/evidence.proto index 3b234571b..9c169bb4c 100644 --- a/third_party/proto/tendermint/types/evidence.proto +++ b/third_party/proto/tendermint/types/evidence.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; diff --git a/third_party/proto/tendermint/types/params.proto b/third_party/proto/tendermint/types/params.proto index 0de7d846f..1eeb55538 100644 --- a/third_party/proto/tendermint/types/params.proto +++ b/third_party/proto/tendermint/types/params.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "google/protobuf/duration.proto"; diff --git a/third_party/proto/tendermint/types/types.proto b/third_party/proto/tendermint/types/types.proto index 7f7ea74ca..7a43c8efd 100644 --- a/third_party/proto/tendermint/types/types.proto +++ b/third_party/proto/tendermint/types/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; diff --git a/third_party/proto/tendermint/types/validator.proto b/third_party/proto/tendermint/types/validator.proto index 49860b96d..3e170262c 100644 --- a/third_party/proto/tendermint/types/validator.proto +++ b/third_party/proto/tendermint/types/validator.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "tendermint/crypto/keys.proto"; diff --git a/types/utils.go b/types/utils.go index 07b03b7ca..f2b44715e 100644 --- a/types/utils.go +++ b/types/utils.go @@ -12,7 +12,6 @@ import ( "strings" "time" - "github.com/cosmos/cosmos-sdk/simapp/helpers" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" @@ -20,7 +19,7 @@ import ( // GetShareValue multiplies with truncation by receiving int amount and decimal ratio and returns int result. func GetShareValue(amount sdk.Int, ratio sdk.Dec) sdk.Int { - return amount.ToDec().MulTruncate(ratio).TruncateInt() + return sdk.NewDec(amount.Int64()).MulTruncate(ratio).TruncateInt() } type StrIntMap map[string]sdk.Int diff --git a/x/asset/abci.go b/x/asset/abci.go index f7b3e278f..a856ae6f0 100644 --- a/x/asset/abci.go +++ b/x/asset/abci.go @@ -1,8 +1,8 @@ package asset import ( + abci "github.com/cometbft/cometbft/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" - abci "github.com/tendermint/tendermint/abci/types" utils "github.com/comdex-official/comdex/types" "github.com/comdex-official/comdex/x/asset/keeper" diff --git a/x/asset/client/cli/tx.go b/x/asset/client/cli/tx.go index 6c0530713..d563b9686 100644 --- a/x/asset/client/cli/tx.go +++ b/x/asset/client/cli/tx.go @@ -11,7 +11,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/gov/client/cli" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/spf13/cobra" flag "github.com/spf13/pflag" diff --git a/x/asset/client/proposal_handler.go b/x/asset/client/proposal_handler.go index 3b1162b19..4af4a2381 100644 --- a/x/asset/client/proposal_handler.go +++ b/x/asset/client/proposal_handler.go @@ -4,18 +4,17 @@ import ( govclient "github.com/cosmos/cosmos-sdk/x/gov/client" "github.com/comdex-official/comdex/x/asset/client/cli" - "github.com/comdex-official/comdex/x/asset/client/rest" ) var AddAssetsHandler = []govclient.ProposalHandler{ - govclient.NewProposalHandler(cli.NewCmdSubmitAddAssetsProposal, rest.AddNewAssetsProposalRESTHandler), - govclient.NewProposalHandler(cli.NewCmdSubmitUpdateAssetProposal, rest.UpdateNewAssetProposalRESTHandler), - govclient.NewProposalHandler(cli.NewCmdSubmitAddPairsProposal, rest.AddNewPairsProposalRESTHandler), - govclient.NewProposalHandler(cli.NewCmdSubmitUpdatePairProposal, rest.UpdateNewPairProposalRESTHandler), - govclient.NewProposalHandler(cli.NewCmdSubmitAddAppProposal, rest.AddNewAppProposalRESTHandler), - govclient.NewProposalHandler(cli.NewCmdSubmitAddAssetInAppProposal, rest.AddNewAssetInAppProposalRESTHandler), - govclient.NewProposalHandler(cli.NewCmdSubmitUpdateGovTimeInAppProposal, rest.UpdateNewGovTimeInAppProposalRESTHandler), - govclient.NewProposalHandler(cli.NewCmdSubmitAddMultipleAssetsProposal, rest.AddNewAssetsProposalRESTHandler), - govclient.NewProposalHandler(cli.NewCmdSubmitAddMultiplePairsProposal, rest.AddNewPairsProposalRESTHandler), - govclient.NewProposalHandler(cli.NewCmdSubmitAddMultipleAssetsPairsProposal, rest.AddNewAssetsPairsProposalRESTHandler), + govclient.NewProposalHandler(cli.NewCmdSubmitAddAssetsProposal), + govclient.NewProposalHandler(cli.NewCmdSubmitUpdateAssetProposal), + govclient.NewProposalHandler(cli.NewCmdSubmitAddPairsProposal), + govclient.NewProposalHandler(cli.NewCmdSubmitUpdatePairProposal), + govclient.NewProposalHandler(cli.NewCmdSubmitAddAppProposal), + govclient.NewProposalHandler(cli.NewCmdSubmitAddAssetInAppProposal), + govclient.NewProposalHandler(cli.NewCmdSubmitUpdateGovTimeInAppProposal), + govclient.NewProposalHandler(cli.NewCmdSubmitAddMultipleAssetsProposal), + govclient.NewProposalHandler(cli.NewCmdSubmitAddMultiplePairsProposal), + govclient.NewProposalHandler(cli.NewCmdSubmitAddMultipleAssetsPairsProposal), } diff --git a/x/asset/client/rest/tx.go b/x/asset/client/rest/tx.go deleted file mode 100644 index cbc057862..000000000 --- a/x/asset/client/rest/tx.go +++ /dev/null @@ -1,139 +0,0 @@ -package rest - -import ( - "net/http" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/types/rest" - govrest "github.com/cosmos/cosmos-sdk/x/gov/client/rest" -) - -type ( - UpdateNewAssetRequest struct{} - AddNewPairsRequest struct{} - UpdateNewPairRequest struct{} - AddNewAssetsPairs struct{} -) - -func AddNewAssetsProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-new-assets", - Handler: AddNewAssetsRESTHandler(clientCtx), - } -} - -func AddNewAssetsPairsProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-new-assets-pairs", - Handler: AddNewAssetsPairsRESTHandler(clientCtx), - } -} - -func UpdateNewAssetProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "update-new-asset", - Handler: UpdateNewAssetRESTHandler(clientCtx), - } -} - -func UpdateNewPairProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "update-new-pair", - Handler: UpdateNewPairsRESTHandler(clientCtx), - } -} - -func UpdateNewGovTimeInAppProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "update-gov-time-app", - Handler: UpdateGovTimeInAppRESTHandler(clientCtx), - } -} - -func AddNewPairsProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-new-pairs", - Handler: AddNewPairsRESTHandler(clientCtx), - } -} - -func AddNewAssetsRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req UpdateNewAssetRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} - -func AddNewAssetsPairsRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req AddNewAssetsPairs - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} - -func UpdateNewAssetRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req UpdateNewAssetRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} - -func UpdateGovTimeInAppRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req UpdateNewAssetRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} - -func AddNewPairsRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req AddNewPairsRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} - -func UpdateNewPairsRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req UpdateNewPairRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} - -func AddNewAppProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-new-app", - Handler: AddNewAssetsRESTHandler(clientCtx), - } -} - -func AddNewAssetInAppProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-update-new-asset-in-app", - Handler: AddNewAssetsRESTHandler(clientCtx), - } -} - -func AddExtendedPairsVaultProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-new-pairs-vault", - Handler: AddNewAssetsRESTHandler(clientCtx), - } -} diff --git a/x/asset/handler.go b/x/asset/handler.go index 8af17e5f5..8464c9476 100644 --- a/x/asset/handler.go +++ b/x/asset/handler.go @@ -6,7 +6,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/comdex-official/comdex/x/asset/keeper" "github.com/comdex-official/comdex/x/asset/types" diff --git a/x/asset/keeper/keeper.go b/x/asset/keeper/keeper.go index 3efe10ca7..771035188 100644 --- a/x/asset/keeper/keeper.go +++ b/x/asset/keeper/keeper.go @@ -7,12 +7,14 @@ import ( assettypes "github.com/comdex-official/comdex/x/asset/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + "github.com/comdex-official/comdex/x/asset/expected" ) type Keeper struct { cdc codec.BinaryCodec - key sdk.StoreKey + key storetypes.StoreKey params paramstypes.Subspace account expected.AccountKeeper bank expected.BankKeeper @@ -23,7 +25,7 @@ type Keeper struct { func NewKeeper( cdc codec.BinaryCodec, - key sdk.StoreKey, + key storetypes.StoreKey, params paramstypes.Subspace, account expected.AccountKeeper, bank expected.BankKeeper, diff --git a/x/asset/keeper/keeper_test.go b/x/asset/keeper/keeper_test.go index 60653fa22..0fef2f260 100644 --- a/x/asset/keeper/keeper_test.go +++ b/x/asset/keeper/keeper_test.go @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/suite" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" chain "github.com/comdex-official/comdex/app" assetKeeper "github.com/comdex-official/comdex/x/asset/keeper" diff --git a/x/asset/module.go b/x/asset/module.go index 9629690ea..2a197c0de 100644 --- a/x/asset/module.go +++ b/x/asset/module.go @@ -3,8 +3,8 @@ package asset import ( "context" "encoding/json" - "math/rand" + abcitypes "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -14,7 +14,6 @@ import ( "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abcitypes "github.com/tendermint/tendermint/abci/types" "github.com/comdex-official/comdex/x/asset/client/cli" "github.com/comdex-official/comdex/x/asset/keeper" @@ -103,16 +102,10 @@ func (a AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawM func (a AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} -func (a AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(a.keeper)) -} - func (a AppModule) QuerierRoute() string { return types.QuerierRoute } -func (a AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { return nil } - func (a AppModule) RegisterServices(configurator module.Configurator) { types.RegisterQueryServer(configurator.QueryServer(), keeper.NewQueryServer(a.keeper)) } @@ -131,9 +124,9 @@ func (a AppModule) ProposalContents(_ module.SimulationState) []simulation.Weigh return nil } -func (a AppModule) RandomizedParams(_ *rand.Rand) []simulation.ParamChange { - return nil -} +// func (a AppModule) RandomizedParams(_ *rand.Rand) []simulation.ParamChange { +// return nil +// } func (a AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} diff --git a/x/asset/types/codec.go b/x/asset/types/codec.go index af9d8b77c..3d900a8b9 100644 --- a/x/asset/types/codec.go +++ b/x/asset/types/codec.go @@ -6,7 +6,7 @@ import ( cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { diff --git a/x/asset/types/gov.go b/x/asset/types/gov.go index a533b061e..ed9ea95bd 100644 --- a/x/asset/types/gov.go +++ b/x/asset/types/gov.go @@ -1,7 +1,7 @@ package types import ( - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) const ( @@ -19,34 +19,24 @@ const ( func init() { govtypes.RegisterProposalType(ProposalAddAssets) - govtypes.RegisterProposalTypeCodec(&AddAssetsProposal{}, "comdex/AddAssetsProposal") govtypes.RegisterProposalType(ProposalAddMultipleAssets) - govtypes.RegisterProposalTypeCodec(&AddMultipleAssetsProposal{}, "comdex/AddMultipleAssetsProposal") govtypes.RegisterProposalType(ProposalUpdateAsset) - govtypes.RegisterProposalTypeCodec(&UpdateAssetProposal{}, "comdex/UpdateAssetProposal") govtypes.RegisterProposalType(ProposalAddPairs) - govtypes.RegisterProposalTypeCodec(&AddPairsProposal{}, "comdex/AddPairsProposal") govtypes.RegisterProposalType(ProposalAddMultiplePairs) - govtypes.RegisterProposalTypeCodec(&AddMultiplePairsProposal{}, "comdex/AddMultiplePairsProposal") govtypes.RegisterProposalType(ProposalUpdatePair) - govtypes.RegisterProposalTypeCodec(&UpdatePairProposal{}, "comdex/UpdatePairProposal") govtypes.RegisterProposalType(ProposalUpdateGovTimeInApp) - govtypes.RegisterProposalTypeCodec(&UpdateGovTimeInAppProposal{}, "comdex/UpdateGovTimeInAppProposal") govtypes.RegisterProposalType(ProposalAddApp) - govtypes.RegisterProposalTypeCodec(&AddAppProposal{}, "comdex/AddAppProposal") govtypes.RegisterProposalType(ProposalAddAssetInApp) - govtypes.RegisterProposalTypeCodec(&AddAssetInAppProposal{}, "comdex/AddAssetInAppProposal") govtypes.RegisterProposalType(ProposalAddMultipleAssetsPairs) - govtypes.RegisterProposalTypeCodec(&AddMultipleAssetsPairsProposal{}, "comdex/AddMultipleAssetsPairsProposal") } var ( diff --git a/x/auction/keeper/debt_test.go b/x/auction/keeper/debt_test.go index c0db258f5..1adae3e5f 100644 --- a/x/auction/keeper/debt_test.go +++ b/x/auction/keeper/debt_test.go @@ -205,8 +205,8 @@ func (s *KeeperTestSuite) TestDebtActivator() { auctionMapData, auctionMappingFound := collectorKeeper.GetAuctionMappingForApp(*ctx, appId, collectorLookUp.CollectorAssetId) s.Require().True(auctionMappingFound) klswData := esmtypes.KillSwitchParams{ - 1, - false, + AppId: 1, + BreakerEnable: false, } err := collectorKeeper.SetNetFeeCollectedData(*ctx, uint64(1), 2, sdk.NewIntFromUint64(4700000)) s.Require().NoError(err) @@ -400,7 +400,7 @@ func (s *KeeperTestSuite) TestDebtBid() { s.Require().Equal(afterAuction.BiddingIds[tc.bidID-uint64(1)].BidId, tc.bidID) s.Require().Equal(afterAuction.BiddingIds[tc.bidID-uint64(1)].BidOwner, tc.msg.Bidder) if tc.bidID != uint64(1) { - s.Require().True(afterAuction.ExpectedMintedToken.Amount.LTE(beforeAuction.ExpectedMintedToken.Amount.ToDec().Mul(sdk.MustNewDecFromStr("1").Sub(beforeAuction.BidFactor)).TruncateInt())) + s.Require().True(afterAuction.ExpectedMintedToken.Amount.LTE(sdk.NewDec(beforeAuction.ExpectedMintedToken.Amount.Int64()).Mul(sdk.MustNewDecFromStr("1").Sub(beforeAuction.BidFactor)).TruncateInt())) } s.Require().Equal(beforeHarborBalance, afterHarborBalance) s.Require().Equal(beforeCmstBalance.Sub(expectedUserToken), afterCmstBalance) diff --git a/x/auction/keeper/dutch.go b/x/auction/keeper/dutch.go index 982a857a8..de4c4da4b 100644 --- a/x/auction/keeper/dutch.go +++ b/x/auction/keeper/dutch.go @@ -102,7 +102,7 @@ func (k Keeper) StartDutchAuction( outFlowTokenPrice = twaData.Twa // set target amount for debt inFlowTokenTargetAmount := lockedVault.AmountOut - mulfactor := inFlowTokenTargetAmount.ToDec().Mul(liquidationPenalty) + mulfactor := sdk.NewDec(inFlowTokenTargetAmount.Int64()).Mul(liquidationPenalty) inFlowTokenTargetAmount = inFlowTokenTargetAmount.Add(mulfactor.TruncateInt()).Add(lockedVault.InterestAccumulated) inFlowTokenTarget := sdk.NewCoin(inFlowToken.Denom, inFlowTokenTargetAmount) // These prices are in uusd diff --git a/x/auction/keeper/dutch_lend.go b/x/auction/keeper/dutch_lend.go index 91b599740..4276211d0 100644 --- a/x/auction/keeper/dutch_lend.go +++ b/x/auction/keeper/dutch_lend.go @@ -238,7 +238,7 @@ func (k Keeper) PlaceLendDutchAuctionBid(ctx sdk.Context, appID, auctionMappingI // calculating additional auction bonus to the bidder - auctionBonus := slice.ToDec().Mul(assetStats.LiquidationBonus) + auctionBonus := sdk.NewDec(slice.Int64()).Mul(assetStats.LiquidationBonus) totalAmountToBidder := sdk.NewCoin(auction.OutflowTokenInitAmount.Denom, slice.Add(auctionBonus.TruncateInt())) biddingID, err := k.CreateNewDutchLendBid(ctx, appID, auctionMappingID, auctionID, bidder.String(), inFlowTokenCoin, outFlowTokenCoin) diff --git a/x/auction/keeper/dutch_lend_test.go b/x/auction/keeper/dutch_lend_test.go index 3b637be9e..942919421 100644 --- a/x/auction/keeper/dutch_lend_test.go +++ b/x/auction/keeper/dutch_lend_test.go @@ -667,7 +667,7 @@ func (s *KeeperTestSuite) TestLiquidateBorrows() { updatedPrice := price.Sub(price.Mul(Dec("0.09090909090"))) s.Require().Equal(lockedVault[0].CollateralToBeAuctioned.TruncateInt(), updatedPrice.TruncateInt()) - s.Require().Equal(lockedVault[0].CrAtLiquidation, lockedVault[0].AmountOut.ToDec().Mul(s.GetAssetPrice(2)).Quo(beforeAmtIn.ToDec().Mul(s.GetAssetPrice(1)))) + s.Require().Equal(lockedVault[0].CrAtLiquidation, sdk.NewDec(lockedVault[0].AmountOut.Int64()).Mul(s.GetAssetPrice(2)).Quo(sdk.NewDec(beforeAmtIn.Int64()).Mul(s.GetAssetPrice(1)))) } func (s *KeeperTestSuite) TestDutchActivatorLend() { @@ -808,8 +808,8 @@ func (s *KeeperTestSuite) TestLendDutchBid() { s.Require().NoError(err) userBid, err := k.GetDutchLendUserBidding(*ctx, userAddress1, appID, biddingID) - userReceivableAmount := tc.msg.Amount.Amount.ToDec().Mul(beforeAuction.OutflowTokenCurrentPrice).Quo(beforeAuction.InflowTokenCurrentPrice).TruncateInt() - auctionBonus := userReceivableAmount.ToDec().Mul(Dec("0.005")) + userReceivableAmount := sdk.NewDec(tc.msg.Amount.Amount.Int64()).Mul(beforeAuction.OutflowTokenCurrentPrice).Quo(beforeAuction.InflowTokenCurrentPrice).TruncateInt() + auctionBonus := sdk.NewDec(userReceivableAmount.Int64()).Mul(Dec("0.005")) userOutflowCoin := sdk.NewCoin("ucmdx", userReceivableAmount) userOutflowCoinFinal := sdk.NewCoin("ucmdx", userReceivableAmount.Add(auctionBonus.TruncateInt())) userInflowCoin := tc.msg.Amount @@ -937,8 +937,8 @@ func (s *KeeperTestSuite) TestLendDutchBid3() { s.Require().NoError(err) userBid, err := k.GetDutchLendUserBidding(*ctx, userAddress1, appID, biddingID) - userReceivableAmount := tc.msg.Amount.Amount.ToDec().Mul(beforeAuction.OutflowTokenCurrentPrice).Quo(beforeAuction.InflowTokenCurrentPrice).TruncateInt() - auctionBonus := userReceivableAmount.ToDec().Mul(Dec("0.005")) + userReceivableAmount := sdk.NewDec(tc.msg.Amount.Amount.Int64()).Mul(beforeAuction.OutflowTokenCurrentPrice).Quo(beforeAuction.InflowTokenCurrentPrice).TruncateInt() + auctionBonus := sdk.NewDec(userReceivableAmount.Int64()).Mul(Dec("0.005")) userOutflowCoin := sdk.NewCoin("uosmo", userReceivableAmount) userOutflowCoinFinal := sdk.NewCoin("uosmo", userReceivableAmount.Add(auctionBonus.TruncateInt())) userInflowCoin := tc.msg.Amount diff --git a/x/auction/keeper/dutch_test.go b/x/auction/keeper/dutch_test.go index 4d5e26673..c5a37d399 100644 --- a/x/auction/keeper/dutch_test.go +++ b/x/auction/keeper/dutch_test.go @@ -267,7 +267,7 @@ func (s *KeeperTestSuite) LiquidateVaults1() { price, err := s.app.MarketKeeper.CalcAssetPrice(*ctx, uint64(1), beforeVault.AmountIn) s.Require().NoError(err) s.Require().Equal(lockedVault[0].CollateralToBeAuctioned, price) - s.Require().Equal(lockedVault[0].CrAtLiquidation, lockedVault[0].AmountIn.ToDec().Mul(s.GetAssetPrice(1)).Quo(lockedVault[0].AmountOut.ToDec().Mul(s.GetAssetPrice(2)))) + s.Require().Equal(lockedVault[0].CrAtLiquidation, sdk.NewDec(lockedVault[0].AmountIn.Int64()).Mul(s.GetAssetPrice(1)).Quo(sdk.NewDec(lockedVault[0].AmountOut.Int64()).Mul(s.GetAssetPrice(2)))) } func (s *KeeperTestSuite) AddAuctionParams() { @@ -317,7 +317,7 @@ func (s *KeeperTestSuite) TestDutchActivator() { s.Require().Equal(dutchAuction.InflowTokenCurrentAmount.Amount, sdk.ZeroInt()) inFlowTokenTargetAmount := lockedVault.AmountOut - mulfactor := inFlowTokenTargetAmount.ToDec().Mul(dutchAuction.LiquidationPenalty) + mulfactor := sdk.NewDec(inFlowTokenTargetAmount.Int64()).Mul(dutchAuction.LiquidationPenalty) inFlowTokenTargetAmount = inFlowTokenTargetAmount.Add(mulfactor.TruncateInt()).Add(lockedVault.InterestAccumulated) s.Require().Equal(dutchAuction.InflowTokenTargetAmount.Amount, inFlowTokenTargetAmount) @@ -439,7 +439,7 @@ func (s *KeeperTestSuite) TestDutchBid() { s.Require().NoError(err) userBid, err := k.GetDutchUserBidding(*ctx, userAddress1, appID, biddingID) - userReceivableAmount := tc.msg.Amount.Amount.ToDec().Mul(beforeAuction.OutflowTokenCurrentPrice).Quo(beforeAuction.InflowTokenCurrentPrice).TruncateInt() + userReceivableAmount := sdk.NewDec(tc.msg.Amount.Amount.Int64()).Mul(beforeAuction.OutflowTokenCurrentPrice).Quo(beforeAuction.InflowTokenCurrentPrice).TruncateInt() userOutflowCoin := sdk.NewCoin("ucmst", userReceivableAmount) userInflowCoin := tc.msg.Amount s.Require().Equal(beforeAuction.OutflowTokenCurrentAmount.Sub(userInflowCoin), afterAuction.OutflowTokenCurrentAmount) @@ -558,7 +558,7 @@ func (s *KeeperTestSuite) TestCloseDutchAuctionWithProtocolLoss() { // verify loss stats, found := k.GetProtocolStat(*ctx, appId, 2) s.Require().True(found) - loss := afterAuction.InflowTokenTargetAmount.Sub(afterAuction.InflowTokenCurrentAmount).Amount.ToDec() + loss := sdk.NewDec(afterAuction.InflowTokenTargetAmount.Sub(afterAuction.InflowTokenCurrentAmount).Amount.Int64()) s.Require().Equal(loss, stats.Loss) } diff --git a/x/auction/keeper/keeper.go b/x/auction/keeper/keeper.go index f0fbb12df..6a65b5110 100644 --- a/x/auction/keeper/keeper.go +++ b/x/auction/keeper/keeper.go @@ -3,9 +3,10 @@ package keeper import ( "fmt" - "github.com/tendermint/tendermint/libs/log" + "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -16,8 +17,8 @@ import ( type ( Keeper struct { cdc codec.BinaryCodec - storeKey sdk.StoreKey - memKey sdk.StoreKey + storeKey storetypes.StoreKey + memKey storetypes.StoreKey paramstore paramtypes.Subspace account expected.AccountKeeper bank expected.BankKeeper @@ -35,7 +36,7 @@ type ( func NewKeeper( cdc codec.BinaryCodec, storeKey, - memKey sdk.StoreKey, + memKey storetypes.StoreKey, ps paramtypes.Subspace, account expected.AccountKeeper, bank expected.BankKeeper, diff --git a/x/auction/keeper/keeper_test.go b/x/auction/keeper/keeper_test.go index d0a2457c7..a56a3d5c7 100644 --- a/x/auction/keeper/keeper_test.go +++ b/x/auction/keeper/keeper_test.go @@ -1,14 +1,15 @@ package keeper_test import ( - lendkeeper "github.com/comdex-official/comdex/x/lend/keeper" "testing" "time" + lendkeeper "github.com/comdex-official/comdex/x/lend/keeper" + "github.com/stretchr/testify/suite" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" chain "github.com/comdex-official/comdex/app" assetKeeper "github.com/comdex-official/comdex/x/asset/keeper" diff --git a/x/auction/keeper/math.go b/x/auction/keeper/math.go index dea4e43e1..eec3f73ab 100644 --- a/x/auction/keeper/math.go +++ b/x/auction/keeper/math.go @@ -9,7 +9,7 @@ func Multiply(a, b sdk.Dec) sdk.Dec { } func (k Keeper) getOutflowTokenInitialPrice(price sdk.Int, buffer sdk.Dec) sdk.Dec { - result := buffer.Mul(price.ToDec()) + result := buffer.Mul(sdk.NewDec(price.Int64())) return result } @@ -20,7 +20,7 @@ func (k Keeper) getOutflowTokenEndPrice(price, cusp sdk.Dec) sdk.Dec { func (k Keeper) getPriceFromLinearDecreaseFunction(top sdk.Dec, tau, dur sdk.Int) sdk.Dec { result1 := tau.Sub(dur) - result2 := top.Mul(result1.ToDec()) - result3 := result2.Quo(tau.ToDec()) + result2 := top.Mul(sdk.NewDec(result1.Int64())) + result3 := result2.Quo(sdk.NewDec(tau.Int64())) return result3 } diff --git a/x/auction/keeper/math_test.go b/x/auction/keeper/math_test.go index aa3fefbfc..cf05ed45e 100644 --- a/x/auction/keeper/math_test.go +++ b/x/auction/keeper/math_test.go @@ -9,7 +9,7 @@ import ( func getBurnAmount(amount sdk.Int, liqPenalty sdk.Dec) sdk.Int { liqPenalty = liqPenalty.Add(sdk.NewDec(1)) - result := amount.ToDec().Quo(liqPenalty).Ceil().TruncateInt() + result := sdk.NewDec(amount.Int64()).Quo(liqPenalty).Ceil().TruncateInt() return result } diff --git a/x/auction/keeper/store.go b/x/auction/keeper/store.go index e62e834af..c688a2562 100644 --- a/x/auction/keeper/store.go +++ b/x/auction/keeper/store.go @@ -16,14 +16,14 @@ func (k Keeper) SetProtocolStatistics(ctx sdk.Context, appID, assetID uint64, am ) stat, found := k.GetProtocolStat(ctx, appID, assetID) if found { - stat.Loss = stat.Loss.Add(amount.ToDec()) + stat.Loss = stat.Loss.Add(sdk.NewDec(amount.Int64())) value := k.cdc.MustMarshal(&stat) store.Set(key, value) } else { var stats auctiontypes.ProtocolStatistics stats.AppId = appID stats.AssetId = assetID - stats.Loss = amount.ToDec() + stats.Loss = sdk.NewDec(amount.Int64()) value := k.cdc.MustMarshal(&stats) store.Set(key, value) } diff --git a/x/auction/keeper/surplus_test.go b/x/auction/keeper/surplus_test.go index 034bbdcd3..4a0b65aa9 100644 --- a/x/auction/keeper/surplus_test.go +++ b/x/auction/keeper/surplus_test.go @@ -250,7 +250,7 @@ func (s *KeeperTestSuite) TestSurplusBid() { s.Require().Equal(afterAuction.BiddingIds[tc.bidID-uint64(1)].BidId, tc.bidID) s.Require().Equal(afterAuction.BiddingIds[tc.bidID-uint64(1)].BidOwner, tc.msg.Bidder) if tc.bidID != uint64(1) { - s.Require().True(afterAuction.Bid.Amount.GTE(beforeAuction.Bid.Amount.ToDec().Mul(sdk.MustNewDecFromStr("1").Sub(beforeAuction.BidFactor)).TruncateInt())) + s.Require().True(afterAuction.Bid.Amount.GTE(sdk.NewDec(beforeAuction.Bid.Amount.Int64()).Mul(sdk.MustNewDecFromStr("1").Sub(beforeAuction.BidFactor)).TruncateInt())) } s.Require().Equal(beforeCmstBalance, afterCmstBalance) s.Require().Equal(beforeHarborBalance.Sub(bid), afterHarborBalance) diff --git a/x/auction/module.go b/x/auction/module.go index 2d27e32df..86e377866 100644 --- a/x/auction/module.go +++ b/x/auction/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -129,19 +129,9 @@ func (am AppModule) Name() string { return am.AppModuleBasic.Name() } -// Route returns the capability module's message routing key. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - // QuerierRoute returns the capability module's query routing key. func (AppModule) QuerierRoute() string { return types.QuerierRoute } -// LegacyQuerierHandler returns the capability module's Querier. -func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(configurator module.Configurator) { diff --git a/x/bandoracle/abci.go b/x/bandoracle/abci.go index 8933f8fea..5b80f7e63 100644 --- a/x/bandoracle/abci.go +++ b/x/bandoracle/abci.go @@ -1,9 +1,9 @@ package bandoracle import ( + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" - abci "github.com/tendermint/tendermint/abci/types" "github.com/comdex-official/comdex/x/bandoracle/keeper" "github.com/comdex-official/comdex/x/bandoracle/types" diff --git a/x/bandoracle/client/cli/tx.go b/x/bandoracle/client/cli/tx.go index 05c5f4491..9a956401a 100644 --- a/x/bandoracle/client/cli/tx.go +++ b/x/bandoracle/client/cli/tx.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/gov/client/cli" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/spf13/cobra" "github.com/comdex-official/comdex/x/bandoracle/types" diff --git a/x/bandoracle/client/proposal_handler.go b/x/bandoracle/client/proposal_handler.go index 754c872f5..364d7e470 100644 --- a/x/bandoracle/client/proposal_handler.go +++ b/x/bandoracle/client/proposal_handler.go @@ -4,7 +4,6 @@ import ( govclient "github.com/cosmos/cosmos-sdk/x/gov/client" "github.com/comdex-official/comdex/x/bandoracle/client/cli" - "github.com/comdex-official/comdex/x/bandoracle/client/rest" ) -var AddFetchPriceHandler = govclient.NewProposalHandler(cli.NewCmdSubmitFetchPriceProposal, rest.SubmitFetchPriceProposalRESTHandler) +var AddFetchPriceHandler = govclient.NewProposalHandler(cli.NewCmdSubmitFetchPriceProposal) diff --git a/x/bandoracle/client/rest/tx.go b/x/bandoracle/client/rest/tx.go deleted file mode 100644 index be3711d82..000000000 --- a/x/bandoracle/client/rest/tx.go +++ /dev/null @@ -1,28 +0,0 @@ -package rest - -import ( - "net/http" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/types/rest" - govrest "github.com/cosmos/cosmos-sdk/x/gov/client/rest" -) - -type UpdateNewPairRequest struct{} - -func SubmitFetchPriceProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "fetch-price", - Handler: FetchPriceRESTHandler(clientCtx), - } -} - -func FetchPriceRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req UpdateNewPairRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} diff --git a/x/bandoracle/expected/keeper.go b/x/bandoracle/expected/keeper.go index 6818d61f5..1048f0432 100644 --- a/x/bandoracle/expected/keeper.go +++ b/x/bandoracle/expected/keeper.go @@ -3,8 +3,8 @@ package expected import ( sdk "github.com/cosmos/cosmos-sdk/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v4/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" assettypes "github.com/comdex-official/comdex/x/asset/types" marketttypes "github.com/comdex-official/comdex/x/market/types" diff --git a/x/bandoracle/handler.go b/x/bandoracle/handler.go index e2f199a24..7b0ea5d40 100644 --- a/x/bandoracle/handler.go +++ b/x/bandoracle/handler.go @@ -3,7 +3,7 @@ package bandoracle import ( "fmt" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/pkg/errors" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/bandoracle/keeper/keeper.go b/x/bandoracle/keeper/keeper.go index 19f50fbe0..f1811c423 100644 --- a/x/bandoracle/keeper/keeper.go +++ b/x/bandoracle/keeper/keeper.go @@ -4,14 +4,15 @@ import ( "fmt" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - host "github.com/cosmos/ibc-go/v4/modules/core/24-host" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" assetkeeper "github.com/comdex-official/comdex/x/asset/keeper" "github.com/comdex-official/comdex/x/bandoracle/expected" - "github.com/tendermint/tendermint/libs/log" + "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -21,8 +22,8 @@ import ( type ( Keeper struct { cdc codec.BinaryCodec - storeKey sdk.StoreKey - memKey sdk.StoreKey + storeKey storetypes.StoreKey + memKey storetypes.StoreKey paramstore paramtypes.Subspace market expected.MarketKeeper assetKeeper assetkeeper.Keeper @@ -35,7 +36,7 @@ type ( func NewKeeper( cdc codec.BinaryCodec, storeKey, - memKey sdk.StoreKey, + memKey storetypes.StoreKey, ps paramtypes.Subspace, channelKeeper expected.ChannelKeeper, portKeeper expected.PortKeeper, diff --git a/x/bandoracle/keeper/oracle.go b/x/bandoracle/keeper/oracle.go index 2bc612af6..886aaf360 100644 --- a/x/bandoracle/keeper/oracle.go +++ b/x/bandoracle/keeper/oracle.go @@ -7,9 +7,9 @@ import ( "github.com/bandprotocol/bandchain-packet/packet" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - clienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v4/modules/core/24-host" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" protobuftypes "github.com/gogo/protobuf/types" "github.com/comdex-official/comdex/x/bandoracle/types" diff --git a/x/bandoracle/module.go b/x/bandoracle/module.go index 06947b60e..3173cb7a2 100644 --- a/x/bandoracle/module.go +++ b/x/bandoracle/module.go @@ -11,14 +11,14 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - porttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" "github.com/comdex-official/comdex/x/bandoracle/client/cli" "github.com/comdex-official/comdex/x/bandoracle/keeper" @@ -147,19 +147,9 @@ func (am AppModule) Name() string { return am.AppModuleBasic.Name() } -// Route returns the capability module's message routing key. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - // QuerierRoute returns the capability module's query routing key. func (AppModule) QuerierRoute() string { return types.QuerierRoute } -// LegacyQuerierHandler returns the capability module's Querier. -func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { diff --git a/x/bandoracle/module_ibc.go b/x/bandoracle/module_ibc.go index 03e5f8c59..f4ff885ff 100644 --- a/x/bandoracle/module_ibc.go +++ b/x/bandoracle/module_ibc.go @@ -6,10 +6,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types" - host "github.com/cosmos/ibc-go/v4/modules/core/24-host" - ibcexported "github.com/cosmos/ibc-go/v4/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" "github.com/comdex-official/comdex/x/bandoracle/types" ) diff --git a/x/bandoracle/module_simulation.go b/x/bandoracle/module_simulation.go index 4e2eb0891..49f1c9df2 100644 --- a/x/bandoracle/module_simulation.go +++ b/x/bandoracle/module_simulation.go @@ -1,10 +1,8 @@ package bandoracle import ( - "math/rand" - "github.com/cosmos/cosmos-sdk/baseapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" + simappparams "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -40,9 +38,9 @@ func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedP } // RandomizedParams creates randomized param changes for the simulator. -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{} -} +// func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { +// return []simtypes.ParamChange{} +// } // RegisterStoreDecoder registers a decoder. func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} diff --git a/x/bandoracle/oracle.go b/x/bandoracle/oracle.go index d65ffd5c8..3d1e91766 100644 --- a/x/bandoracle/oracle.go +++ b/x/bandoracle/oracle.go @@ -5,7 +5,7 @@ import ( "github.com/bandprotocol/bandchain-packet/packet" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/comdex-official/comdex/x/bandoracle/types" ) diff --git a/x/bandoracle/types/codec.go b/x/bandoracle/types/codec.go index a1eff4c1a..acac8fdab 100644 --- a/x/bandoracle/types/codec.go +++ b/x/bandoracle/types/codec.go @@ -4,7 +4,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) func RegisterCodec(cdc *codec.LegacyAmino) { diff --git a/x/bandoracle/types/genesis.go b/x/bandoracle/types/genesis.go index ca5ce4e50..285ad85fe 100644 --- a/x/bandoracle/types/genesis.go +++ b/x/bandoracle/types/genesis.go @@ -1,7 +1,7 @@ package types import ( - host "github.com/cosmos/ibc-go/v4/modules/core/24-host" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" ) // DefaultIndex is the default capability global index. diff --git a/x/bandoracle/types/gov.go b/x/bandoracle/types/gov.go index 99a1bdc3d..ed382cc83 100644 --- a/x/bandoracle/types/gov.go +++ b/x/bandoracle/types/gov.go @@ -2,7 +2,7 @@ package types import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) const ( @@ -11,7 +11,6 @@ const ( func init() { govtypes.RegisterProposalType(ProposalFetchPrice) - govtypes.RegisterProposalTypeCodec(&FetchPriceProposal{}, "comdex/FetchPriceProposal") } var _ govtypes.Content = &FetchPriceProposal{} diff --git a/x/collector/client/rest/tx.go b/x/collector/client/rest/tx.go deleted file mode 100644 index 942b614a7..000000000 --- a/x/collector/client/rest/tx.go +++ /dev/null @@ -1,48 +0,0 @@ -package rest - -import ( - "net/http" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/types/rest" - govrest "github.com/cosmos/cosmos-sdk/x/gov/client/rest" -) - -type ( - NewCmdLookupTableParams struct{} - NewCmdAuctionToAppLookupTable struct{} -) - -func NewCmdLookupTableParamsRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "collector-lookup-params", - Handler: LookupTableParamsRESTHandler(clientCtx), - } -} - -func LookupTableParamsRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req NewCmdLookupTableParams - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} - -func NewCmdAuctionTableAppRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "app-auction-lookup", - Handler: AuctionLookupTableAppRESTHandler(clientCtx), - } -} - -func AuctionLookupTableAppRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req NewCmdAuctionToAppLookupTable - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} diff --git a/x/collector/genesis_test.go b/x/collector/genesis_test.go index 76bc9502f..6561d84b9 100644 --- a/x/collector/genesis_test.go +++ b/x/collector/genesis_test.go @@ -3,7 +3,7 @@ package collector_test import ( "testing" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" app "github.com/comdex-official/comdex/app" "github.com/comdex-official/comdex/x/collector" diff --git a/x/collector/keeper/grpc_query_params_test.go b/x/collector/keeper/grpc_query_params_test.go index cdcb8305b..24b4c5091 100644 --- a/x/collector/keeper/grpc_query_params_test.go +++ b/x/collector/keeper/grpc_query_params_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/comdex-official/comdex/app" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/comdex-official/comdex/x/collector/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/collector/keeper/keeper.go b/x/collector/keeper/keeper.go index 55efce434..b30972ded 100644 --- a/x/collector/keeper/keeper.go +++ b/x/collector/keeper/keeper.go @@ -3,7 +3,7 @@ package keeper import ( "fmt" - "github.com/tendermint/tendermint/libs/log" + "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -11,13 +11,14 @@ import ( "github.com/comdex-official/comdex/x/collector/expected" "github.com/comdex-official/comdex/x/collector/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" ) type ( Keeper struct { cdc codec.BinaryCodec - storeKey sdk.StoreKey - memKey sdk.StoreKey + storeKey storetypes.StoreKey + memKey storetypes.StoreKey asset expected.AssetKeeper auction expected.AuctionKeeper locker expected.LockerKeeper @@ -30,7 +31,7 @@ type ( func NewKeeper( cdc codec.BinaryCodec, storeKey, - memKey sdk.StoreKey, + memKey storetypes.StoreKey, asset expected.AssetKeeper, auction expected.AuctionKeeper, locker expected.LockerKeeper, diff --git a/x/collector/keeper/keeper_test.go b/x/collector/keeper/keeper_test.go index 78b60a290..6f73fb616 100644 --- a/x/collector/keeper/keeper_test.go +++ b/x/collector/keeper/keeper_test.go @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/suite" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" chain "github.com/comdex-official/comdex/app" assetKeeper "github.com/comdex-official/comdex/x/asset/keeper" diff --git a/x/collector/module.go b/x/collector/module.go index 2199b636c..9b5478268 100644 --- a/x/collector/module.go +++ b/x/collector/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -119,19 +119,9 @@ func (am AppModule) Name() string { return am.AppModuleBasic.Name() } -// Route returns the capability module's message routing key. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler()) -} - // QuerierRoute returns the capability module's query routing key. func (AppModule) QuerierRoute() string { return types.QuerierRoute } -// LegacyQuerierHandler returns the capability module's Querier. -func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { diff --git a/x/collector/module_simulation.go b/x/collector/module_simulation.go index 66d8c8674..bdce5430b 100644 --- a/x/collector/module_simulation.go +++ b/x/collector/module_simulation.go @@ -2,10 +2,8 @@ package collector //goland:noinspection ALL import ( - "math/rand" - "github.com/cosmos/cosmos-sdk/baseapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" + simappparams "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -43,9 +41,9 @@ func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedP } // RandomizedParams creates randomized param changes for the simulator. -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{} -} +// func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { +// return []simtypes.ParamChange{} +// } // RegisterStoreDecoder registers a decoder. func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} diff --git a/x/collector/types/codec.go b/x/collector/types/codec.go index 3b6cc1918..204fd2571 100644 --- a/x/collector/types/codec.go +++ b/x/collector/types/codec.go @@ -5,7 +5,7 @@ import ( cdctypes "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/types/msgservice" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { diff --git a/x/esm/abci.go b/x/esm/abci.go index ae5459eef..00b5ab9fa 100644 --- a/x/esm/abci.go +++ b/x/esm/abci.go @@ -3,9 +3,9 @@ package esm import ( assettypes "github.com/comdex-official/comdex/x/asset/types" "github.com/comdex-official/comdex/x/esm/expected" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" - abci "github.com/tendermint/tendermint/abci/types" utils "github.com/comdex-official/comdex/types" "github.com/comdex-official/comdex/x/esm/keeper" diff --git a/x/esm/client/rest/tx.go b/x/esm/client/rest/tx.go deleted file mode 100644 index c31ea276d..000000000 --- a/x/esm/client/rest/tx.go +++ /dev/null @@ -1,28 +0,0 @@ -package rest - -import ( - "net/http" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/types/rest" - govrest "github.com/cosmos/cosmos-sdk/x/gov/client/rest" -) - -type AddESMTriggerParamsRequest struct{} - -func AddESMTriggerParamsProposal(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-esm-trigger-params", - Handler: AddNewPairsRESTHandler(clientCtx), - } -} - -func AddNewPairsRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req AddESMTriggerParamsRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} diff --git a/x/esm/keeper/keeper.go b/x/esm/keeper/keeper.go index d6b293e82..3191b00a2 100644 --- a/x/esm/keeper/keeper.go +++ b/x/esm/keeper/keeper.go @@ -6,7 +6,7 @@ import ( "github.com/comdex-official/comdex/x/esm/expected" - "github.com/tendermint/tendermint/libs/log" + "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -15,13 +15,14 @@ import ( assettypes "github.com/comdex-official/comdex/x/asset/types" "github.com/comdex-official/comdex/x/esm/types" tokenminttypes "github.com/comdex-official/comdex/x/tokenmint/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" ) type ( Keeper struct { cdc codec.BinaryCodec - storeKey sdk.StoreKey - memKey sdk.StoreKey + storeKey storetypes.StoreKey + memKey storetypes.StoreKey paramstore paramtypes.Subspace asset expected.AssetKeeper vault expected.VaultKeeper @@ -35,7 +36,7 @@ type ( func NewKeeper( cdc codec.BinaryCodec, storeKey, - memKey sdk.StoreKey, + memKey storetypes.StoreKey, ps paramtypes.Subspace, asset expected.AssetKeeper, vault expected.VaultKeeper, diff --git a/x/esm/keeper/keeper_test.go b/x/esm/keeper/keeper_test.go index cf8641212..99ea0165a 100644 --- a/x/esm/keeper/keeper_test.go +++ b/x/esm/keeper/keeper_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/suite" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" chain "github.com/comdex-official/comdex/app" "github.com/comdex-official/comdex/x/esm/keeper" diff --git a/x/esm/module.go b/x/esm/module.go index bc7d133bd..f40b057a5 100644 --- a/x/esm/module.go +++ b/x/esm/module.go @@ -11,7 +11,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -128,19 +128,9 @@ func (am AppModule) Name() string { return am.AppModuleBasic.Name() } -// Route returns the capability module's message routing key. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - // QuerierRoute returns the capability module's query routing key. func (AppModule) QuerierRoute() string { return types.QuerierRoute } -// LegacyQuerierHandler returns the capability module's Querier. -func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { diff --git a/x/esm/module_simulation.go b/x/esm/module_simulation.go index 5fdc9f185..aefef1735 100644 --- a/x/esm/module_simulation.go +++ b/x/esm/module_simulation.go @@ -1,10 +1,8 @@ package esm import ( - "math/rand" - "github.com/cosmos/cosmos-sdk/baseapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" + simappparams "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -40,9 +38,9 @@ func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedP } // RandomizedParams creates randomized param changes for the simulator -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{} -} +// func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { +// return []simtypes.ParamChange{} +// } // RegisterStoreDecoder registers a decoder func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} diff --git a/x/esm/types/codec.go b/x/esm/types/codec.go index 5dfe7d2eb..1fd84484a 100644 --- a/x/esm/types/codec.go +++ b/x/esm/types/codec.go @@ -5,7 +5,7 @@ import ( cdctypes "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/cosmos/cosmos-sdk/types/msgservice" ) diff --git a/x/lend/client/cli/tx.go b/x/lend/client/cli/tx.go index 4357f3a91..4ac9e2489 100644 --- a/x/lend/client/cli/tx.go +++ b/x/lend/client/cli/tx.go @@ -8,7 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/gov/client/cli" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/spf13/cobra" flag "github.com/spf13/pflag" diff --git a/x/lend/client/proposal_handler.go b/x/lend/client/proposal_handler.go index 8b47f6d29..10ecedcdb 100644 --- a/x/lend/client/proposal_handler.go +++ b/x/lend/client/proposal_handler.go @@ -4,17 +4,16 @@ import ( govclient "github.com/cosmos/cosmos-sdk/x/gov/client" "github.com/comdex-official/comdex/x/lend/client/cli" - "github.com/comdex-official/comdex/x/lend/client/rest" ) var ( - AddLendPairsHandler = govclient.NewProposalHandler(cli.CmdAddNewLendPairsProposal, rest.AddNewPairsProposalRESTHandler) - AddPoolHandler = govclient.NewProposalHandler(cli.CmdAddPoolProposal, rest.AddPoolProposalRESTHandler) - AddAssetToPairHandler = govclient.NewProposalHandler(cli.CmdAddAssetToPairProposal, rest.AddAssetToPairProposalRESTHandler) - AddMultipleAssetToPairHandler = govclient.NewProposalHandler(cli.CmdAddMultipleAssetToPairProposal, rest.AddAssetToPairProposalRESTHandler) - AddAssetRatesParamsHandler = govclient.NewProposalHandler(cli.CmdAddNewAssetRatesParamsProposal, rest.AddNewAssetRatesParamsProposalRESTHandler) - AddAuctionParamsHandler = govclient.NewProposalHandler(cli.CmdAddNewAuctionParamsProposal, rest.AddNewAuctionParamsProposalRESTHandler) - AddMultipleLendPairsHandler = govclient.NewProposalHandler(cli.CmdAddNewMultipleLendPairsProposal, rest.AddNewPairsProposalRESTHandler) - AddPoolPairsHandler = govclient.NewProposalHandler(cli.CmdAddPoolPairsProposal, rest.AddPoolPairsProposalRESTHandler) - AddAssetRatesPoolPairsHandler = govclient.NewProposalHandler(cli.CmdAddAssetRatesPoolPairsProposal, rest.AddAssetRatesPoolPairsProposalRESTHandler) + AddLendPairsHandler = govclient.NewProposalHandler(cli.CmdAddNewLendPairsProposal) + AddPoolHandler = govclient.NewProposalHandler(cli.CmdAddPoolProposal) + AddAssetToPairHandler = govclient.NewProposalHandler(cli.CmdAddAssetToPairProposal) + AddMultipleAssetToPairHandler = govclient.NewProposalHandler(cli.CmdAddMultipleAssetToPairProposal) + AddAssetRatesParamsHandler = govclient.NewProposalHandler(cli.CmdAddNewAssetRatesParamsProposal) + AddAuctionParamsHandler = govclient.NewProposalHandler(cli.CmdAddNewAuctionParamsProposal) + AddMultipleLendPairsHandler = govclient.NewProposalHandler(cli.CmdAddNewMultipleLendPairsProposal) + AddPoolPairsHandler = govclient.NewProposalHandler(cli.CmdAddPoolPairsProposal) + AddAssetRatesPoolPairsHandler = govclient.NewProposalHandler(cli.CmdAddAssetRatesPoolPairsProposal) ) diff --git a/x/lend/client/rest/tx.go b/x/lend/client/rest/tx.go deleted file mode 100644 index c34328ae0..000000000 --- a/x/lend/client/rest/tx.go +++ /dev/null @@ -1,145 +0,0 @@ -package rest - -import ( - "net/http" - - "github.com/cosmos/cosmos-sdk/client" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/rest" - govrest "github.com/cosmos/cosmos-sdk/x/gov/client/rest" - - "github.com/comdex-official/comdex/x/asset/types" -) - -type AddNewAssetsRequest struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - Asset []types.Asset `json:"assets" yaml:"assets"` -} - -type ( - AddNewPairsRequest struct{} - UpdateNewPairRequest struct{} - AddPoolRequest struct{} - AddAssetToPairRequest struct{} - AddAssetRatesParamsRequest struct{} - AddAuctionParamsRequest struct{} -) - -func AddNewPairsProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-new-pairs", - Handler: AddNewPairsRESTHandler(clientCtx), - } -} - -func UpdatePairProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "update-new-pair", - Handler: UpdateNewPairsRESTHandler(clientCtx), - } -} - -func AddPoolProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-lend-pools", - Handler: AddpoolRESTHandler(clientCtx), - } -} - -func AddPoolPairsProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-lend-pool-pairs", - Handler: AddpoolRESTHandler(clientCtx), - } -} - -func AddAssetRatesPoolPairsProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-asset-pool-pairs", - Handler: AddpoolRESTHandler(clientCtx), - } -} - -func AddAssetToPairProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-asset-to-pair", - Handler: AddAssetToPairRESTHandler(clientCtx), - } -} - -func AddNewAssetRatesParamsProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-asset-rates-params", - Handler: AddAssetRatesParamsRESTHandler(clientCtx), - } -} - -func AddNewAuctionParamsProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "add-auction-params", - Handler: AddAuctionParamsRESTHandler(clientCtx), - } -} - -func AddNewPairsRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req AddNewPairsRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} - -func UpdateNewPairsRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req UpdateNewPairRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} - -func AddpoolRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req AddPoolRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} - -func AddAssetToPairRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req AddAssetToPairRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} - -func AddAssetRatesParamsRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req AddAssetRatesParamsRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} - -func AddAuctionParamsRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req AddAuctionParamsRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - } -} diff --git a/x/lend/handler.go b/x/lend/handler.go index 95dd00f81..8228dc58f 100644 --- a/x/lend/handler.go +++ b/x/lend/handler.go @@ -3,7 +3,7 @@ package lend import ( "fmt" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/pkg/errors" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/lend/keeper/keeper.go b/x/lend/keeper/keeper.go index 0b3b2ded3..c4da7fabc 100644 --- a/x/lend/keeper/keeper.go +++ b/x/lend/keeper/keeper.go @@ -5,25 +5,26 @@ import ( "strconv" liquidationtypes "github.com/comdex-official/comdex/x/liquidation/types" + "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/tendermint/tendermint/libs/log" assettypes "github.com/comdex-official/comdex/x/asset/types" esmtypes "github.com/comdex-official/comdex/x/esm/types" "github.com/comdex-official/comdex/x/lend/expected" "github.com/comdex-official/comdex/x/lend/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" // liquidationtypes "github.com/comdex-official/comdex/x/liquidation/types" ) type ( Keeper struct { cdc codec.BinaryCodec - storeKey sdk.StoreKey - memKey sdk.StoreKey + storeKey storetypes.StoreKey + memKey storetypes.StoreKey paramstore paramtypes.Subspace bank expected.BankKeeper account expected.AccountKeeper @@ -38,7 +39,7 @@ type ( func NewKeeper( cdc codec.BinaryCodec, storeKey, - memKey sdk.StoreKey, + memKey storetypes.StoreKey, ps paramtypes.Subspace, bank expected.BankKeeper, account expected.AccountKeeper, @@ -676,7 +677,7 @@ func (k Keeper) BorrowAsset(ctx sdk.Context, addr string, lendID, pairID uint64, mappingData.BorrowId = append(mappingData.BorrowId, borrowPos.ID) k.SetUserLendBorrowMapping(ctx, mappingData) } else { - updatedAmtIn := AmountIn.Amount.ToDec().Mul(assetInRatesStats.Ltv) + updatedAmtIn := sdk.NewDec(AmountIn.Amount.Int64()).Mul(assetInRatesStats.Ltv) updatedAmtInPrice, err := k.Market.CalcAssetPrice(ctx, lendPos.AssetID, updatedAmtIn.TruncateInt()) if err != nil { return err @@ -1605,7 +1606,7 @@ func (k Keeper) CreteNewBorrow(ctx sdk.Context, liqBorrow liquidationtypes.Locke // Adjusting bridged asset qty after auctions if !kind.BridgedAssetAmount.Amount.Equal(sdk.ZeroInt()) { - amtIn, _ := k.Market.CalcAssetPrice(ctx, pair.AssetIn, borrowPos.AmountIn.Amount.ToDec().Mul(assetInRatesStats.Ltv).TruncateInt()) + amtIn, _ := k.Market.CalcAssetPrice(ctx, pair.AssetIn, sdk.NewDec(borrowPos.AmountIn.Amount.Int64()).Mul(assetInRatesStats.Ltv).TruncateInt()) priceFirstBridgedAsset, _ := k.Market.CalcAssetPrice(ctx, firstTransitAssetID, sdk.OneInt()) priceSecondBridgedAsset, _ := k.Market.CalcAssetPrice(ctx, secondTransitAssetID, sdk.OneInt()) firstBridgedAsset, _ := k.Asset.GetAsset(ctx, firstTransitAssetID) diff --git a/x/lend/keeper/keeper_test.go b/x/lend/keeper/keeper_test.go index 924a065e1..b56565fc0 100644 --- a/x/lend/keeper/keeper_test.go +++ b/x/lend/keeper/keeper_test.go @@ -6,8 +6,8 @@ import ( assettypes "github.com/comdex-official/comdex/x/asset/types" markettypes "github.com/comdex-official/comdex/x/market/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/stretchr/testify/suite" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" chain "github.com/comdex-official/comdex/app" "github.com/comdex-official/comdex/x/lend/keeper" diff --git a/x/lend/keeper/maths.go b/x/lend/keeper/maths.go index 5ff43b3f4..30276f6ee 100644 --- a/x/lend/keeper/maths.go +++ b/x/lend/keeper/maths.go @@ -14,10 +14,10 @@ func (k Keeper) GetUtilisationRatioByPoolIDAndAssetID(ctx sdk.Context, poolID, a if !found { return sdk.ZeroDec(), types.ErrAssetStatsNotFound } - if moduleBalance.ToDec().Add(assetStats.TotalBorrowed.Add(assetStats.TotalStableBorrowed).ToDec()).IsZero() { + if sdk.NewDec(moduleBalance.Int64()).Add(sdk.NewDec(assetStats.TotalBorrowed.Add(assetStats.TotalStableBorrowed).Int64())).IsZero() { return sdk.ZeroDec(), nil } - utilizationRatio := (assetStats.TotalBorrowed.Add(assetStats.TotalStableBorrowed).ToDec()).Quo(moduleBalance.ToDec().Add(assetStats.TotalBorrowed.Add(assetStats.TotalStableBorrowed).ToDec())) + utilizationRatio := (sdk.NewDec(assetStats.TotalBorrowed.Add(assetStats.TotalStableBorrowed).Int64())).Quo(sdk.NewDec(moduleBalance.Int64()).Add(sdk.NewDec(assetStats.TotalBorrowed.Add(assetStats.TotalStableBorrowed).Int64()))) return utilizationRatio, nil } @@ -80,10 +80,10 @@ func (k Keeper) GetLendAPRByAssetIDAndPoolID(ctx sdk.Context, poolID, assetID ui func (k Keeper) GetAverageBorrowRate(ctx sdk.Context, poolID, assetID uint64) (sdk.Dec, error) { assetStats, _ := k.UpdateAPR(ctx, poolID, assetID) - factor1 := assetStats.BorrowApr.Mul(assetStats.TotalBorrowed.ToDec()) - factor2 := assetStats.StableBorrowApr.Mul(assetStats.TotalStableBorrowed.ToDec()) + factor1 := assetStats.BorrowApr.Mul(sdk.NewDec(assetStats.TotalBorrowed.Int64())) + factor2 := assetStats.StableBorrowApr.Mul(sdk.NewDec(assetStats.TotalStableBorrowed.Int64())) numerator := factor1.Add(factor2) - denominator := assetStats.TotalStableBorrowed.Add(assetStats.TotalBorrowed).ToDec() + denominator := sdk.NewDec(assetStats.TotalStableBorrowed.Add(assetStats.TotalBorrowed).Int64()) if denominator.LTE(sdk.ZeroDec()) { return sdk.ZeroDec(), types.ErrAverageBorrowRate diff --git a/x/lend/module.go b/x/lend/module.go index 5c9eed2ce..22b3d451a 100644 --- a/x/lend/module.go +++ b/x/lend/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -123,19 +123,9 @@ func (am AppModule) Name() string { return am.AppModuleBasic.Name() } -// Route returns the capability module's message routing key. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - // QuerierRoute returns the capability module's query routing key. func (AppModule) QuerierRoute() string { return types.QuerierRoute } -// LegacyQuerierHandler returns the capability module's Querier. -func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { diff --git a/x/lend/module_simulation.go b/x/lend/module_simulation.go index 4e6150ac4..c3e147163 100644 --- a/x/lend/module_simulation.go +++ b/x/lend/module_simulation.go @@ -1,10 +1,8 @@ package lend import ( - "math/rand" - "github.com/cosmos/cosmos-sdk/baseapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" + simappparams "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -40,9 +38,9 @@ func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedP } // RandomizedParams creates randomized param changes for the simulator. -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{} -} +// func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { +// return []simtypes.ParamChange{} +// } // RegisterStoreDecoder registers a decoder. func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} diff --git a/x/lend/types/codec.go b/x/lend/types/codec.go index e60238763..56c217576 100644 --- a/x/lend/types/codec.go +++ b/x/lend/types/codec.go @@ -6,7 +6,7 @@ import ( cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { diff --git a/x/lend/types/gov.go b/x/lend/types/gov.go index 53a7c370d..2a39ec2f2 100644 --- a/x/lend/types/gov.go +++ b/x/lend/types/gov.go @@ -1,7 +1,7 @@ package types import ( - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) var ( @@ -18,23 +18,14 @@ var ( func init() { govtypes.RegisterProposalType(ProposalAddLendPairs) - govtypes.RegisterProposalTypeCodec(&LendPairsProposal{}, "comdex/AddLendPairsProposal") govtypes.RegisterProposalType(ProposalAddMultipleLendPairs) - govtypes.RegisterProposalTypeCodec(&MultipleLendPairsProposal{}, "comdex/AddMultipleLendPairsProposal") govtypes.RegisterProposalType(ProposalAddPool) - govtypes.RegisterProposalTypeCodec(&AddPoolsProposal{}, "comdex/AddPoolsProposal") govtypes.RegisterProposalType(ProposalAddAssetToPair) - govtypes.RegisterProposalTypeCodec(&AddAssetToPairProposal{}, "comdex/AddAssetToPairProposal") govtypes.RegisterProposalType(ProposalAddMultipleAssetToPair) - govtypes.RegisterProposalTypeCodec(&AddMultipleAssetToPairProposal{}, "comdex/AddMultipleAssetToPairProposal") govtypes.RegisterProposalType(ProposalAddAssetRatesParams) - govtypes.RegisterProposalTypeCodec(&AddAssetRatesParams{}, "comdex/AddAssetRatesParams") govtypes.RegisterProposalType(ProposalAddAuctionParams) - govtypes.RegisterProposalTypeCodec(&AddAuctionParamsProposal{}, "comdex/AddAuctionParamsProposal") govtypes.RegisterProposalType(ProposalAddPoolPairs) - govtypes.RegisterProposalTypeCodec(&AddPoolPairsProposal{}, "comdex/AddPoolPairsProposal") govtypes.RegisterProposalType(ProposalAddAssetRatesPoolPairs) - govtypes.RegisterProposalTypeCodec(&AddAssetRatesPoolPairsProposal{}, "comdex/AddAssetRatesPoolPairsProposal") } var ( diff --git a/x/liquidation/abci.go b/x/liquidation/abci.go index 8fc34a5e4..d7bd48b89 100644 --- a/x/liquidation/abci.go +++ b/x/liquidation/abci.go @@ -3,9 +3,9 @@ package liquidation import ( "fmt" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" - abci "github.com/tendermint/tendermint/abci/types" "github.com/comdex-official/comdex/x/liquidation/keeper" "github.com/comdex-official/comdex/x/liquidation/types" diff --git a/x/liquidation/keeper/keeper.go b/x/liquidation/keeper/keeper.go index b84f0f29f..8ca65772c 100644 --- a/x/liquidation/keeper/keeper.go +++ b/x/liquidation/keeper/keeper.go @@ -3,7 +3,7 @@ package keeper import ( "fmt" - "github.com/tendermint/tendermint/libs/log" + "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -11,12 +11,13 @@ import ( "github.com/comdex-official/comdex/x/liquidation/expected" "github.com/comdex-official/comdex/x/liquidation/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" ) type Keeper struct { cdc codec.BinaryCodec - storeKey sdk.StoreKey - memKey sdk.StoreKey + storeKey storetypes.StoreKey + memKey storetypes.StoreKey paramstore paramtypes.Subspace account expected.AccountKeeper bank expected.BankKeeper @@ -32,7 +33,7 @@ type Keeper struct { func NewKeeper( cdc codec.BinaryCodec, storeKey, - memKey sdk.StoreKey, + memKey storetypes.StoreKey, ps paramtypes.Subspace, account expected.AccountKeeper, bank expected.BankKeeper, diff --git a/x/liquidation/keeper/keeper_test.go b/x/liquidation/keeper/keeper_test.go index 24b9a73e3..8fe1d0116 100644 --- a/x/liquidation/keeper/keeper_test.go +++ b/x/liquidation/keeper/keeper_test.go @@ -1,14 +1,15 @@ package keeper_test import ( - lendkeeper "github.com/comdex-official/comdex/x/lend/keeper" "testing" "time" + lendkeeper "github.com/comdex-official/comdex/x/lend/keeper" + "github.com/stretchr/testify/suite" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" chain "github.com/comdex-official/comdex/app" assetKeeper "github.com/comdex-official/comdex/x/asset/keeper" diff --git a/x/liquidation/keeper/liquidate_borrow_test.go b/x/liquidation/keeper/liquidate_borrow_test.go index a0de5aece..cbcd5dc45 100644 --- a/x/liquidation/keeper/liquidate_borrow_test.go +++ b/x/liquidation/keeper/liquidate_borrow_test.go @@ -662,5 +662,5 @@ func (s *KeeperTestSuite) TestLiquidateBorrows() { updatedPrice := price.Sub(price.Mul(Dec("0.09090909090"))) s.Require().Equal(lockedVault[0].CollateralToBeAuctioned.TruncateInt(), updatedPrice.TruncateInt()) - s.Require().Equal(lockedVault[0].CrAtLiquidation, lockedVault[0].AmountOut.ToDec().Mul(s.GetAssetPrice(2)).Quo(beforeAmtIn.ToDec().Mul(s.GetAssetPrice(1)))) + s.Require().Equal(lockedVault[0].CrAtLiquidation, sdk.NewDec(lockedVault[0].AmountOut.Int64()).Mul(s.GetAssetPrice(2)).Quo(sdk.NewDec(beforeAmtIn.Int64()).Mul(s.GetAssetPrice(1)))) } diff --git a/x/liquidation/keeper/liquidate_vaults_test.go b/x/liquidation/keeper/liquidate_vaults_test.go index 1b78ef8a4..38609d01e 100644 --- a/x/liquidation/keeper/liquidate_vaults_test.go +++ b/x/liquidation/keeper/liquidate_vaults_test.go @@ -264,7 +264,7 @@ func (s *KeeperTestSuite) TestLiquidateVaults1() { price, err := s.app.MarketKeeper.CalcAssetPrice(*ctx, uint64(1), beforeVault.AmountIn) s.Require().NoError(err) s.Require().Equal(lockedVault[0].CollateralToBeAuctioned, price) - s.Require().Equal(lockedVault[0].CrAtLiquidation, lockedVault[0].AmountIn.ToDec().Mul(s.GetAssetPrice(1)).Quo(lockedVault[0].AmountOut.ToDec().Mul(s.GetAssetPrice(2)))) + s.Require().Equal(lockedVault[0].CrAtLiquidation, sdk.NewDec(lockedVault[0].AmountIn.Int64()).Mul(s.GetAssetPrice(1)).Quo(sdk.NewDec(lockedVault[0].AmountOut.Int64()).Mul(s.GetAssetPrice(2)))) } func (s *KeeperTestSuite) TestUpdateLockedVaults() { @@ -272,7 +272,7 @@ func (s *KeeperTestSuite) TestUpdateLockedVaults() { liquidationKeeper, ctx := &s.liquidationKeeper, &s.ctx lockedVault1 := liquidationKeeper.GetLockedVaults(*ctx) - s.Require().Equal(lockedVault1[0].CrAtLiquidation, lockedVault1[0].AmountIn.ToDec().Mul(s.GetAssetPrice(1)).Quo(lockedVault1[0].AmountOut.ToDec().Mul(s.GetAssetPrice(2)))) + s.Require().Equal(lockedVault1[0].CrAtLiquidation, sdk.NewDec(lockedVault1[0].AmountIn.Int64()).Mul(s.GetAssetPrice(1)).Quo(sdk.NewDec(lockedVault1[0].AmountOut.Int64()).Mul(s.GetAssetPrice(2)))) } func (s *KeeperTestSuite) TestSetFlags() { diff --git a/x/liquidation/module.go b/x/liquidation/module.go index 964664d61..7ea6fe0c7 100644 --- a/x/liquidation/module.go +++ b/x/liquidation/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -120,19 +120,9 @@ func (am AppModule) Name() string { return am.AppModuleBasic.Name() } -// Route returns the capability module's message routing key. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - // QuerierRoute returns the capability module's query routing key. func (AppModule) QuerierRoute() string { return types.QuerierRoute } -// LegacyQuerierHandler returns the capability module's Querier. -func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(configurator module.Configurator) { diff --git a/x/liquidity/client/cli/tx.go b/x/liquidity/client/cli/tx.go index c8f795910..3a0361f69 100644 --- a/x/liquidity/client/cli/tx.go +++ b/x/liquidity/client/cli/tx.go @@ -13,7 +13,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/gov/client/cli" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/comdex-official/comdex/x/liquidity/types" ) diff --git a/x/liquidity/client/proposal_handler.go b/x/liquidity/client/proposal_handler.go index ef39aa91f..52e693ca1 100644 --- a/x/liquidity/client/proposal_handler.go +++ b/x/liquidity/client/proposal_handler.go @@ -4,10 +4,9 @@ import ( govclient "github.com/cosmos/cosmos-sdk/x/gov/client" "github.com/comdex-official/comdex/x/liquidity/client/cli" - "github.com/comdex-official/comdex/x/liquidity/client/rest" ) var LiquidityProposalHandler = []govclient.ProposalHandler{ - govclient.NewProposalHandler(cli.NewCmdUpdateGenericParamsProposal, rest.UpdateGenericParamsProposalRESTHandler), - govclient.NewProposalHandler(cli.NewCmdCreateNewLiquidityPairProposal, rest.CreateNewLiquidityPairProposalRESTHandler), + govclient.NewProposalHandler(cli.NewCmdUpdateGenericParamsProposal), + govclient.NewProposalHandler(cli.NewCmdCreateNewLiquidityPairProposal), } diff --git a/x/liquidity/client/rest/tx.go b/x/liquidity/client/rest/tx.go deleted file mode 100644 index 6f95d7232..000000000 --- a/x/liquidity/client/rest/tx.go +++ /dev/null @@ -1,121 +0,0 @@ -package rest - -import ( - "net/http" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/rest" - govrest "github.com/cosmos/cosmos-sdk/x/gov/client/rest" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - - "github.com/comdex-official/comdex/x/liquidity/types" -) - -type UpdateGenericParamsRequest struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - AppID uint64 `json:"app_id" yaml:"app_id"` - Keys []string `json:"keys" yaml:"keys"` - Values []string `json:"values" yaml:"values"` -} - -type CreateNewLiquidityPairRequest struct { - BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` - Title string `json:"title" yaml:"title"` - Description string `json:"description" yaml:"description"` - Deposit sdk.Coins `json:"deposit" yaml:"deposit"` - AppID uint64 `json:"app_id" yaml:"app_id"` - BaseCoinDenom string `json:"base_coin_denom" yaml:"base_coin_denom"` - QuoteCoinDenom string `json:"quote_coin_denom" yaml:"quote_coin_denom"` -} - -func UpdateGenericParamsProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "liquidity-param-change", - Handler: UpdateGenericParamsRESTHandler(clientCtx), - } -} - -func CreateNewLiquidityPairProposalRESTHandler(clientCtx client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "create-liquidity-pair", - Handler: CreateNewLiquidityPairRESTHandler(clientCtx), - } -} - -func UpdateGenericParamsRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req UpdateGenericParamsRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - - req.BaseReq = req.BaseReq.Sanitize() - if !req.BaseReq.ValidateBasic(w) { - return - } - - fromAddr, err := sdk.AccAddressFromBech32(req.BaseReq.From) - if rest.CheckBadRequestError(w, err) { - return - } - - content := types.NewUpdateGenericParamsProposal( - req.Title, - req.Description, - req.AppID, - req.Keys, - req.Values, - ) - msg, err := govtypes.NewMsgSubmitProposal(content, req.Deposit, fromAddr) - if rest.CheckBadRequestError(w, err) { - return - } - if rest.CheckBadRequestError(w, msg.ValidateBasic()) { - return - } - tx.WriteGeneratedTxResponse(clientCtx, w, req.BaseReq, msg) - } -} - -func CreateNewLiquidityPairRESTHandler(clientCtx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - var req CreateNewLiquidityPairRequest - - if !rest.ReadRESTReq(w, r, clientCtx.LegacyAmino, &req) { - return - } - - req.BaseReq = req.BaseReq.Sanitize() - if !req.BaseReq.ValidateBasic(w) { - return - } - - fromAddr, err := sdk.AccAddressFromBech32(req.BaseReq.From) - if rest.CheckBadRequestError(w, err) { - return - } - - content := types.NewCreateLiquidityPairProposal( - req.Title, - req.Description, - fromAddr, - req.AppID, - req.BaseCoinDenom, - req.QuoteCoinDenom, - ) - msg, err := govtypes.NewMsgSubmitProposal(content, req.Deposit, fromAddr) - if rest.CheckBadRequestError(w, err) { - return - } - if rest.CheckBadRequestError(w, msg.ValidateBasic()) { - return - } - tx.WriteGeneratedTxResponse(clientCtx, w, req.BaseReq, msg) - } -} diff --git a/x/liquidity/client/testutil/helpers.go b/x/liquidity/client/testutil/helpers.go index 5e2b194a1..e9bb13b80 100644 --- a/x/liquidity/client/testutil/helpers.go +++ b/x/liquidity/client/testutil/helpers.go @@ -18,7 +18,7 @@ import ( var commonArgs = []string{ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 10)).String()), } diff --git a/x/liquidity/client/testutil/suite.go b/x/liquidity/client/testutil/suite.go index 60be2a98e..a7820ca75 100644 --- a/x/liquidity/client/testutil/suite.go +++ b/x/liquidity/client/testutil/suite.go @@ -12,13 +12,13 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" servertypes "github.com/cosmos/cosmos-sdk/server/types" - "github.com/cosmos/cosmos-sdk/simapp" store "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/testutil/network" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - dbm "github.com/tendermint/tm-db" + dbm "github.com/cometbft/cometbft-db" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" ) type LiquidityIntegrationTestSuite struct { @@ -36,7 +36,7 @@ func NewAppConstructor() network.AppConstructor { return func(val network.Validator) servertypes.Application { return chain.New( val.Ctx.Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.Ctx.Config.RootDir, 0, - chain.MakeEncodingConfig(), simapp.EmptyAppOptions{}, chain.GetWasmEnabledProposals(), chain.EmptyWasmOpts, + chain.MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, chain.GetWasmEnabledProposals(), chain.EmptyWasmOpts, baseapp.SetPruning(store.NewPruningOptionsFromString(val.AppConfig.Pruning)), baseapp.SetMinGasPrices(val.AppConfig.MinGasPrices), ) diff --git a/x/liquidity/handler.go b/x/liquidity/handler.go index 3dad0c9ef..92bbefab2 100644 --- a/x/liquidity/handler.go +++ b/x/liquidity/handler.go @@ -3,7 +3,7 @@ package liquidity import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/pkg/errors" "github.com/comdex-official/comdex/x/liquidity/keeper" diff --git a/x/liquidity/handler_test.go b/x/liquidity/handler_test.go index 51c1a205c..7aa610922 100644 --- a/x/liquidity/handler_test.go +++ b/x/liquidity/handler_test.go @@ -12,11 +12,11 @@ import ( "github.com/comdex-official/comdex/x/liquidity" "github.com/comdex-official/comdex/x/liquidity/keeper" "github.com/comdex-official/comdex/x/liquidity/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) func TestInvalidMsg(t *testing.T) { diff --git a/x/liquidity/keeper/keeper.go b/x/liquidity/keeper/keeper.go index 3ae9853d9..eace2dfda 100644 --- a/x/liquidity/keeper/keeper.go +++ b/x/liquidity/keeper/keeper.go @@ -3,19 +3,20 @@ package keeper import ( "fmt" + "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/tendermint/tendermint/libs/log" "github.com/comdex-official/comdex/x/liquidity/expected" "github.com/comdex-official/comdex/x/liquidity/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" ) // Keeper of the liquidity store. type Keeper struct { cdc codec.BinaryCodec - storeKey sdk.StoreKey + storeKey storetypes.StoreKey paramSpace paramstypes.Subspace accountKeeper expected.AccountKeeper @@ -30,7 +31,7 @@ type Keeper struct { // NewKeeper creates a new liquidity Keeper instance. func NewKeeper( cdc codec.BinaryCodec, - storeKey sdk.StoreKey, + storeKey storetypes.StoreKey, paramSpace paramstypes.Subspace, accountKeeper expected.AccountKeeper, bankKeeper expected.BankKeeper, diff --git a/x/liquidity/keeper/keeper_test.go b/x/liquidity/keeper/keeper_test.go index 2fa2f4053..08535a15d 100644 --- a/x/liquidity/keeper/keeper_test.go +++ b/x/liquidity/keeper/keeper_test.go @@ -8,8 +8,8 @@ import ( "github.com/stretchr/testify/suite" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" chain "github.com/comdex-official/comdex/app" assettypes "github.com/comdex-official/comdex/x/asset/types" @@ -258,7 +258,7 @@ func (s *KeeperTestSuite) LimitOrder( params, err := s.keeper.GetGenericParams(s.ctx, appID) s.Require().NoError(err) - offerCoin = offerCoin.Add(sdk.NewCoin(offerCoin.Denom, offerCoin.Amount.ToDec().Mul(params.SwapFeeRate).RoundInt())) + offerCoin = offerCoin.Add(sdk.NewCoin(offerCoin.Denom, sdk.NewDec(offerCoin.Amount.Int64()).Mul(params.SwapFeeRate).RoundInt())) s.fundAddr(orderer, sdk.NewCoins(offerCoin)) msg := types.NewMsgLimitOrder( @@ -297,7 +297,7 @@ func (s *KeeperTestSuite) MarketOrder( demandCoinDenom = pair.QuoteCoinDenom } - offerCoin = offerCoin.Add(sdk.NewCoin(offerCoin.Denom, offerCoin.Amount.ToDec().Mul(params.SwapFeeRate).RoundInt())) + offerCoin = offerCoin.Add(sdk.NewCoin(offerCoin.Denom, sdk.NewDec(offerCoin.Amount.Int64()).Mul(params.SwapFeeRate).RoundInt())) s.fundAddr(orderer, sdk.NewCoins(offerCoin)) msg := types.NewMsgMarketOrder( diff --git a/x/liquidity/keeper/pool.go b/x/liquidity/keeper/pool.go index 0c484b324..fbc3c622f 100644 --- a/x/liquidity/keeper/pool.go +++ b/x/liquidity/keeper/pool.go @@ -733,11 +733,11 @@ func (k Keeper) TransferFundsForSwapFeeDistribution(ctx sdk.Context, appID, requ } requestedPoolShare := poolLiquidityMap[requestedPoolID].Quo(totalLiquidity) - eligibleSwapFeeAmount := requestedPoolShare.Mul(availableBalance.Amount.ToDec()) + eligibleSwapFeeAmount := requestedPoolShare.Mul(sdk.NewDec(availableBalance.Amount.Int64())) availableBalance.Amount = eligibleSwapFeeAmount.RoundInt() } - burnAmount := availableBalance.Amount.ToDec().MulTruncate(params.SwapFeeBurnRate).TruncateInt() + burnAmount := sdk.NewDec(availableBalance.Amount.Int64()).MulTruncate(params.SwapFeeBurnRate).TruncateInt() burnCoin := sdk.NewCoin(availableBalance.Denom, burnAmount) if burnCoin.Amount.IsPositive() { @@ -793,12 +793,12 @@ func (k Keeper) WasmMsgAddEmissionPoolRewards(ctx sdk.Context, appID, cswapAppID moduleAddr := k.accountKeeper.GetModuleAddress(types.ModuleName) farmedCoins := k.bankKeeper.GetBalance(ctx, moduleAddr, pool.PoolCoinDenom) individualVote := votingRatio[j] - votingR := individualVote.ToDec().Quo(totalVote.ToDec()) - shareByPool := votingR.Mul(amount.ToDec()) + votingR := sdk.NewDec(individualVote.Int64()).Quo(sdk.NewDec(totalVote.Int64())) + shareByPool := votingR.Mul(sdk.NewDec(amount.Int64())) if farmedCoins.IsZero() { continue } - perUserShareByAmtDec := shareByPool.Quo(farmedCoins.Amount.ToDec()) + perUserShareByAmtDec := shareByPool.Quo(sdk.NewDec(farmedCoins.Amount.Int64())) allActiveFarmer := k.GetAllActiveFarmers(ctx, cswapAppID, extP) for _, farmerDetail := range allActiveFarmer { diff --git a/x/liquidity/legacy/v2/store.go b/x/liquidity/legacy/v2/store.go index 5a025a25e..c853a284b 100644 --- a/x/liquidity/legacy/v2/store.go +++ b/x/liquidity/legacy/v2/store.go @@ -3,6 +3,7 @@ package v2 import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" expected "github.com/comdex-official/comdex/x/liquidity/expected" v1liquidity "github.com/comdex-official/comdex/x/liquidity/legacy/v1" @@ -129,7 +130,7 @@ func MigrateOrders(appID uint64, store sdk.KVStore, cdc codec.BinaryCodec) error func MigrateStore( ctx sdk.Context, assetKeeper expected.AssetKeeper, - storeKey sdk.StoreKey, + storeKey storetypes.StoreKey, cdc codec.BinaryCodec, ) error { allApps, found := assetKeeper.GetApps(ctx) diff --git a/x/liquidity/legacy/v2/store_test.go b/x/liquidity/legacy/v2/store_test.go index 41bd25d80..795306016 100644 --- a/x/liquidity/legacy/v2/store_test.go +++ b/x/liquidity/legacy/v2/store_test.go @@ -12,7 +12,7 @@ package v2_test // "github.com/comdex-official/comdex/x/liquidity/types" // sdk "github.com/cosmos/cosmos-sdk/types" // "github.com/stretchr/testify/require" -// tmproto "github.com/tendermint/tendermint/proto/tendermint/types" +// tmproto "github.com/cometbft/cometbft/proto/tendermint/types" // ) // func CreateNewTestApp(t *testing.T, app *chain.App, ctx sdk.Context, appName string) uint64 { diff --git a/x/liquidity/module.go b/x/liquidity/module.go index 6262f4f17..b2114d3f5 100644 --- a/x/liquidity/module.go +++ b/x/liquidity/module.go @@ -9,12 +9,12 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - abci "github.com/tendermint/tendermint/abci/types" "github.com/comdex-official/comdex/x/liquidity/client/cli" "github.com/comdex-official/comdex/x/liquidity/expected" @@ -120,21 +120,11 @@ func (am AppModule) Name() string { return am.AppModuleBasic.Name() } -// Route returns the capability module's message routing key. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - // QuerierRoute returns the capability module's query routing key. func (AppModule) QuerierRoute() string { return types.QuerierRoute } -// LegacyQuerierHandler returns the capability module's Querier. -func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { diff --git a/x/liquidity/module_test.go b/x/liquidity/module_test.go index f988c6b5f..761ac171f 100644 --- a/x/liquidity/module_test.go +++ b/x/liquidity/module_test.go @@ -5,8 +5,8 @@ import ( "testing" "time" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/stretchr/testify/suite" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -207,7 +207,7 @@ func (s *ModuleTestSuite) LimitOrder( params, err := s.keeper.GetGenericParams(s.ctx, appID) s.Require().NoError(err) - offerCoin = offerCoin.Add(sdk.NewCoin(offerCoin.Denom, offerCoin.Amount.ToDec().Mul(params.SwapFeeRate).RoundInt())) + offerCoin = offerCoin.Add(sdk.NewCoin(offerCoin.Denom, sdk.NewDec(offerCoin.Amount.Int64()).Mul(params.SwapFeeRate).RoundInt())) s.fundAddr(orderer, sdk.NewCoins(offerCoin)) msg := types.NewMsgLimitOrder( @@ -246,7 +246,7 @@ func (s *ModuleTestSuite) MarketOrder( demandCoinDenom = pair.QuoteCoinDenom } - offerCoin = offerCoin.Add(sdk.NewCoin(offerCoin.Denom, offerCoin.Amount.ToDec().Mul(params.SwapFeeRate).RoundInt())) + offerCoin = offerCoin.Add(sdk.NewCoin(offerCoin.Denom, sdk.NewDec(offerCoin.Amount.Int64()).Mul(params.SwapFeeRate).RoundInt())) s.fundAddr(orderer, sdk.NewCoins(offerCoin)) msg := types.NewMsgMarketOrder( diff --git a/x/liquidity/types/codec.go b/x/liquidity/types/codec.go index 824e3a30f..37f2e6ad4 100644 --- a/x/liquidity/types/codec.go +++ b/x/liquidity/types/codec.go @@ -6,7 +6,7 @@ import ( cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) // RegisterLegacyAminoCodec registers the necessary x/liquidity interfaces and concrete types diff --git a/x/liquidity/types/gov.go b/x/liquidity/types/gov.go index 3cf4199c1..5a6ca91ea 100644 --- a/x/liquidity/types/gov.go +++ b/x/liquidity/types/gov.go @@ -4,7 +4,7 @@ import ( "fmt" sdk "github.com/cosmos/cosmos-sdk/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) const ( @@ -15,8 +15,6 @@ const ( func init() { govtypes.RegisterProposalType(ProposalUpdateGenericParams) govtypes.RegisterProposalType(ProposalCreateNewLiquidityPair) - govtypes.RegisterProposalTypeCodec(&UpdateGenericParamsProposal{}, "comdex/UpdateGenericParams") - govtypes.RegisterProposalTypeCodec(&CreateNewLiquidityPairProposal{}, "comdex/CreateNewLiquidityPair") } var ( diff --git a/x/liquidity/types/keys_test.go b/x/liquidity/types/keys_test.go index 20279e878..7a452064c 100644 --- a/x/liquidity/types/keys_test.go +++ b/x/liquidity/types/keys_test.go @@ -4,9 +4,9 @@ import ( "bytes" "testing" + "github.com/cometbft/cometbft/crypto" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/suite" - "github.com/tendermint/tendermint/crypto" "github.com/comdex-official/comdex/x/liquidity/types" ) diff --git a/x/liquidity/types/msgs_test.go b/x/liquidity/types/msgs_test.go index 47057718c..6f1c83bc9 100644 --- a/x/liquidity/types/msgs_test.go +++ b/x/liquidity/types/msgs_test.go @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/require" + "github.com/cometbft/cometbft/crypto" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/tendermint/crypto" utils "github.com/comdex-official/comdex/types" "github.com/comdex-official/comdex/x/liquidity/types" diff --git a/x/liquidity/types/order.go b/x/liquidity/types/order.go index d29eea79d..41bafeef7 100644 --- a/x/liquidity/types/order.go +++ b/x/liquidity/types/order.go @@ -41,7 +41,7 @@ func NewUserOrder(order Order) *UserOrder { utils.SafeMath(func() { amt = sdk.MinInt( order.OpenAmount, - order.RemainingOfferCoin.Amount.ToDec().QuoTruncate(order.Price).TruncateInt(), + sdk.NewDec(order.RemainingOfferCoin.Amount.Int64()).QuoTruncate(order.Price).TruncateInt(), ) }, func() { amt = order.OpenAmount diff --git a/x/liquidity/types/request_test.go b/x/liquidity/types/request_test.go index 7638d959d..96662835e 100644 --- a/x/liquidity/types/request_test.go +++ b/x/liquidity/types/request_test.go @@ -4,9 +4,9 @@ import ( "testing" "time" + "github.com/cometbft/cometbft/crypto" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - "github.com/tendermint/tendermint/crypto" utils "github.com/comdex-official/comdex/types" "github.com/comdex-official/comdex/x/liquidity/types" diff --git a/x/liquidity/types/util.go b/x/liquidity/types/util.go index 13b266bc9..2fe43a878 100644 --- a/x/liquidity/types/util.go +++ b/x/liquidity/types/util.go @@ -4,10 +4,10 @@ import ( "strconv" "strings" + "github.com/cometbft/cometbft/crypto" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/address" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/tendermint/tendermint/crypto" "github.com/comdex-official/comdex/x/liquidity/amm" "github.com/comdex-official/comdex/x/liquidity/expected" @@ -100,7 +100,7 @@ func NewPoolResponse(pool Pool, rx, ry sdk.Coin, poolCoinSupply sdk.Int) PoolRes // IsTooSmallOrderAmount returns whether the order amount is too small for // matching, based on the order price. func IsTooSmallOrderAmount(amt sdk.Int, price sdk.Dec) bool { - return amt.LT(amm.MinCoinAmount) || price.MulInt(amt).LT(amm.MinCoinAmount.ToDec()) + return amt.LT(amm.MinCoinAmount) || price.MulInt(amt).LT(sdk.NewDec(amm.MinCoinAmount.Int64())) } // PriceLimits returns the lowest and the highest price limits with given last price diff --git a/x/locker/keeper/keeper.go b/x/locker/keeper/keeper.go index 0f6b058ea..b54447405 100644 --- a/x/locker/keeper/keeper.go +++ b/x/locker/keeper/keeper.go @@ -3,19 +3,20 @@ package keeper import ( "fmt" + "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/tendermint/libs/log" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "github.com/comdex-official/comdex/x/locker/expected" "github.com/comdex-official/comdex/x/locker/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" ) type Keeper struct { cdc codec.BinaryCodec - key sdk.StoreKey + key storetypes.StoreKey paramstore paramtypes.Subspace bank expected.BankKeeper asset expected.AssetKeeper @@ -24,7 +25,7 @@ type Keeper struct { rewards expected.RewardsKeeper } -func NewKeeper(cdc codec.BinaryCodec, key sdk.StoreKey, ps paramtypes.Subspace, bank expected.BankKeeper, asset expected.AssetKeeper, collector expected.CollectorKeeper, esm expected.EsmKeeper, rewards expected.RewardsKeeper) Keeper { +func NewKeeper(cdc codec.BinaryCodec, key storetypes.StoreKey, ps paramtypes.Subspace, bank expected.BankKeeper, asset expected.AssetKeeper, collector expected.CollectorKeeper, esm expected.EsmKeeper, rewards expected.RewardsKeeper) Keeper { return Keeper{ cdc: cdc, key: key, diff --git a/x/locker/keeper/keeper_test.go b/x/locker/keeper/keeper_test.go index da0d6d0df..8a34ea0f8 100644 --- a/x/locker/keeper/keeper_test.go +++ b/x/locker/keeper/keeper_test.go @@ -1,16 +1,17 @@ package keeper_test import ( - rewardsKeeper "github.com/comdex-official/comdex/x/rewards/keeper" "testing" "time" + rewardsKeeper "github.com/comdex-official/comdex/x/rewards/keeper" + collectorKeeper "github.com/comdex-official/comdex/x/collector/keeper" "github.com/stretchr/testify/suite" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" chain "github.com/comdex-official/comdex/app" assetKeeper "github.com/comdex-official/comdex/x/asset/keeper" diff --git a/x/locker/module.go b/x/locker/module.go index 4d84488a5..854244981 100644 --- a/x/locker/module.go +++ b/x/locker/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -119,19 +119,9 @@ func (am AppModule) Name() string { return am.AppModuleBasic.Name() } -// Route returns the capability module's message routing key. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - // QuerierRoute returns the capability module's query routing key. func (AppModule) QuerierRoute() string { return types.QuerierRoute } -// LegacyQuerierHandler returns the capability module's Querier. -func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { diff --git a/x/locker/module_simulation.go b/x/locker/module_simulation.go index 3ca7db8ee..e3aaeaae9 100644 --- a/x/locker/module_simulation.go +++ b/x/locker/module_simulation.go @@ -1,10 +1,8 @@ package locker import ( - "math/rand" - "github.com/cosmos/cosmos-sdk/baseapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" + simappparams "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -40,9 +38,9 @@ func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedP } // RandomizedParams creates randomized param changes for the simulator. -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{} -} +// func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { +// return []simtypes.ParamChange{} +// } // RegisterStoreDecoder registers a decoder. func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} diff --git a/x/market/abci.go b/x/market/abci.go index 67ef3a206..f94063ab3 100644 --- a/x/market/abci.go +++ b/x/market/abci.go @@ -6,9 +6,9 @@ import ( bandoraclemoduletypes "github.com/comdex-official/comdex/x/bandoracle/types" "github.com/comdex-official/comdex/x/market/keeper" "github.com/comdex-official/comdex/x/market/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" - abci "github.com/tendermint/tendermint/abci/types" ) func BeginBlocker(ctx sdk.Context, _ abci.RequestBeginBlock, k keeper.Keeper, bandKeeper bandkeeper.Keeper, assetKeeper assetkeeper.Keeper) { diff --git a/x/market/expected/keeper.go b/x/market/expected/keeper.go index 976ea49ea..9ad3798ad 100644 --- a/x/market/expected/keeper.go +++ b/x/market/expected/keeper.go @@ -3,8 +3,8 @@ package expected import ( sdk "github.com/cosmos/cosmos-sdk/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v4/modules/core/exported" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" assettypes "github.com/comdex-official/comdex/x/asset/types" "github.com/comdex-official/comdex/x/bandoracle/types" diff --git a/x/market/keeper/keeper.go b/x/market/keeper/keeper.go index c7736815c..4d9cf58db 100644 --- a/x/market/keeper/keeper.go +++ b/x/market/keeper/keeper.go @@ -6,19 +6,20 @@ import ( paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" assetkeeper "github.com/comdex-official/comdex/x/asset/keeper" + storetypes "github.com/cosmos/cosmos-sdk/store/types" "github.com/comdex-official/comdex/x/market/expected" ) type Keeper struct { cdc codec.BinaryCodec - key sdk.StoreKey + key storetypes.StoreKey params paramstypes.Subspace scoped expected.ScopedKeeper assetKeeper assetkeeper.Keeper bandoraclekeeper expected.BandOracleKeeper } -func NewKeeper(cdc codec.BinaryCodec, key sdk.StoreKey, params paramstypes.Subspace, scoped expected.ScopedKeeper, assetKeeper assetkeeper.Keeper, bandoraclekeeper expected.BandOracleKeeper) Keeper { +func NewKeeper(cdc codec.BinaryCodec, key storetypes.StoreKey, params paramstypes.Subspace, scoped expected.ScopedKeeper, assetKeeper assetkeeper.Keeper, bandoraclekeeper expected.BandOracleKeeper) Keeper { return Keeper{ cdc: cdc, key: key, diff --git a/x/market/keeper/keeper_test.go b/x/market/keeper/keeper_test.go index 5aa826106..116b29f89 100644 --- a/x/market/keeper/keeper_test.go +++ b/x/market/keeper/keeper_test.go @@ -70,7 +70,7 @@ func TestFucn2(t *testing.T) { intPerBlockFactor := math.Pow(factor1.MustFloat64(), yearsElapsed.MustFloat64()) intAccPerBlock := intPerBlockFactor - rewardtypes.Float64One - amtFloat := amount.ToDec().MustFloat64() + amtFloat := sdk.NewDec(amount.Int64()).MustFloat64() newAmount := intAccPerBlock * amtFloat fmt.Println("yearsElapsed", yearsElapsed) diff --git a/x/market/module.go b/x/market/module.go index 790075616..1cef4485e 100644 --- a/x/market/module.go +++ b/x/market/module.go @@ -3,8 +3,8 @@ package market import ( "context" "encoding/json" - "math/rand" + abcitypes "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -14,7 +14,6 @@ import ( "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abcitypes "github.com/tendermint/tendermint/abci/types" assetkeeper "github.com/comdex-official/comdex/x/asset/keeper" bandkeeper "github.com/comdex-official/comdex/x/bandoracle/keeper" @@ -109,16 +108,10 @@ func (a AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawM func (a AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} -func (a AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(a.keeper)) -} - func (a AppModule) QuerierRoute() string { return types.QuerierRoute } -func (a AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { return nil } - func (a AppModule) RegisterServices(configurator module.Configurator) { types.RegisterQueryServer(configurator.QueryServer(), keeper.NewQueryServer(a.keeper)) } @@ -137,9 +130,9 @@ func (a AppModule) ProposalContents(_ module.SimulationState) []simulation.Weigh return nil } -func (a AppModule) RandomizedParams(_ *rand.Rand) []simulation.ParamChange { - return nil -} +// func (a AppModule) RandomizedParams(_ *rand.Rand) []simulation.ParamChange { +// return nil +// } func (a AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} diff --git a/x/market/types/codec.go b/x/market/types/codec.go index 3e3e8ac44..2f780d2ea 100644 --- a/x/market/types/codec.go +++ b/x/market/types/codec.go @@ -6,7 +6,7 @@ import ( cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} diff --git a/x/rewards/abci.go b/x/rewards/abci.go index d53f19766..14d686756 100644 --- a/x/rewards/abci.go +++ b/x/rewards/abci.go @@ -1,9 +1,9 @@ package rewards import ( + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" - abci "github.com/tendermint/tendermint/abci/types" utils "github.com/comdex-official/comdex/types" "github.com/comdex-official/comdex/x/rewards/keeper" diff --git a/x/rewards/genesis_test.go b/x/rewards/genesis_test.go index 182ec5393..af8c778e0 100644 --- a/x/rewards/genesis_test.go +++ b/x/rewards/genesis_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/comdex-official/comdex/app" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/comdex-official/comdex/x/rewards" "github.com/comdex-official/comdex/x/rewards/types" diff --git a/x/rewards/keeper/grpc_query_params_test.go b/x/rewards/keeper/grpc_query_params_test.go index 724837f92..dd28e4dcf 100644 --- a/x/rewards/keeper/grpc_query_params_test.go +++ b/x/rewards/keeper/grpc_query_params_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/comdex-official/comdex/app" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/comdex-official/comdex/x/rewards/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/rewards/keeper/keeper.go b/x/rewards/keeper/keeper.go index 7cd353c16..c61efea71 100644 --- a/x/rewards/keeper/keeper.go +++ b/x/rewards/keeper/keeper.go @@ -11,9 +11,10 @@ import ( esmtypes "github.com/comdex-official/comdex/x/esm/types" "github.com/comdex-official/comdex/x/rewards/expected" - "github.com/tendermint/tendermint/libs/log" + "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -23,8 +24,8 @@ import ( type ( Keeper struct { cdc codec.BinaryCodec - storeKey sdk.StoreKey - memKey sdk.StoreKey + storeKey storetypes.StoreKey + memKey storetypes.StoreKey paramstore paramtypes.Subspace locker expected.LockerKeeper collector expected.CollectorKeeper @@ -41,7 +42,7 @@ type ( func NewKeeper( cdc codec.BinaryCodec, storeKey, - memKey sdk.StoreKey, + memKey storetypes.StoreKey, ps paramtypes.Subspace, locker expected.LockerKeeper, collector expected.CollectorKeeper, diff --git a/x/rewards/keeper/keeper_test.go b/x/rewards/keeper/keeper_test.go index 801edafe9..90cbcf4fb 100644 --- a/x/rewards/keeper/keeper_test.go +++ b/x/rewards/keeper/keeper_test.go @@ -19,8 +19,8 @@ import ( "github.com/stretchr/testify/suite" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" chain "github.com/comdex-official/comdex/app" assetKeeper "github.com/comdex-official/comdex/x/asset/keeper" diff --git a/x/rewards/keeper/msg_server_test.go b/x/rewards/keeper/msg_server_test.go index 08ba14f59..f640fafb4 100644 --- a/x/rewards/keeper/msg_server_test.go +++ b/x/rewards/keeper/msg_server_test.go @@ -18,8 +18,8 @@ import ( "github.com/comdex-official/comdex/x/rewards/types" vaultkeeper "github.com/comdex-official/comdex/x/vault/keeper" vaulttypes "github.com/comdex-official/comdex/x/vault/types" + abci "github.com/cometbft/cometbft/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" - abci "github.com/tendermint/tendermint/abci/types" ) func (s *KeeperTestSuite) AddAppAsset() { diff --git a/x/rewards/keeper/params_test.go b/x/rewards/keeper/params_test.go index 4a8049788..f0fdaec5f 100644 --- a/x/rewards/keeper/params_test.go +++ b/x/rewards/keeper/params_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/comdex-official/comdex/app" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/comdex-official/comdex/x/rewards/types" "github.com/stretchr/testify/require" diff --git a/x/rewards/module.go b/x/rewards/module.go index 3018cd60f..e5b6e4c25 100644 --- a/x/rewards/module.go +++ b/x/rewards/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -121,19 +121,9 @@ func (am AppModule) Name() string { return am.AppModuleBasic.Name() } -// Route returns the capability module's message routing key. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - // QuerierRoute returns the capability module's query routing key. func (AppModule) QuerierRoute() string { return types.QuerierRoute } -// LegacyQuerierHandler returns the capability module's Querier. -func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { diff --git a/x/rewards/module_simulation.go b/x/rewards/module_simulation.go index 1f665e633..ba5a95cbd 100644 --- a/x/rewards/module_simulation.go +++ b/x/rewards/module_simulation.go @@ -1,10 +1,9 @@ package rewards import ( - "math/rand" "github.com/cosmos/cosmos-sdk/baseapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" + simappparams "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -42,9 +41,9 @@ func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedP } // RandomizedParams creates randomized param changes for the simulator. -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{} -} +// func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { +// return []simtypes.ParamChange{} +// } // RegisterStoreDecoder registers a decoder. func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} diff --git a/x/tokenmint/client/cli/tx.go b/x/tokenmint/client/cli/tx.go index e2409b781..4ac8021c6 100644 --- a/x/tokenmint/client/cli/tx.go +++ b/x/tokenmint/client/cli/tx.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" + "strconv" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" @@ -41,15 +41,15 @@ func txMint() *cobra.Command { if err != nil { return err } - appID, err := sdk.ParseUint(args[0]) + appID, err := strconv.ParseUint(args[0], 10, 64) if err != nil { return err } - assetID, err := sdk.ParseUint(args[1]) + assetID, err := strconv.ParseUint(args[1], 10, 64) if err != nil { return err } - msg := types.NewMsgMintNewTokensRequest(ctx.GetFromAddress().String(), appID.Uint64(), assetID.Uint64()) + msg := types.NewMsgMintNewTokensRequest(ctx.GetFromAddress().String(), appID, assetID) return tx.GenerateOrBroadcastTxCLI(ctx, cmd.Flags(), msg) }, diff --git a/x/tokenmint/genesis_test.go b/x/tokenmint/genesis_test.go index 752e92422..12ef20356 100644 --- a/x/tokenmint/genesis_test.go +++ b/x/tokenmint/genesis_test.go @@ -1,10 +1,11 @@ package tokenmint_test import ( + "testing" + "github.com/comdex-official/comdex/app" "github.com/comdex-official/comdex/x/tokenmint" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "testing" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/comdex-official/comdex/x/tokenmint/types" "github.com/stretchr/testify/require" diff --git a/x/tokenmint/handler_test.go b/x/tokenmint/handler_test.go index 67258e093..4c82c4d29 100644 --- a/x/tokenmint/handler_test.go +++ b/x/tokenmint/handler_test.go @@ -1,17 +1,18 @@ package tokenmint_test import ( + "strings" + "testing" + "github.com/comdex-official/comdex/app" "github.com/comdex-official/comdex/x/tokenmint" "github.com/comdex-official/comdex/x/tokenmint/keeper" "github.com/comdex-official/comdex/x/tokenmint/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "strings" - "testing" ) func TestInvalidMsg(t *testing.T) { diff --git a/x/tokenmint/keeper/keeper.go b/x/tokenmint/keeper/keeper.go index 887b247ff..2bb136dc5 100644 --- a/x/tokenmint/keeper/keeper.go +++ b/x/tokenmint/keeper/keeper.go @@ -3,22 +3,23 @@ package keeper import ( "fmt" + "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/tendermint/libs/log" "github.com/comdex-official/comdex/x/tokenmint/expected" "github.com/comdex-official/comdex/x/tokenmint/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" ) type Keeper struct { cdc codec.BinaryCodec - key sdk.StoreKey + key storetypes.StoreKey bank expected.BankKeeper asset expected.AssetKeeper } -func NewKeeper(cdc codec.BinaryCodec, key sdk.StoreKey, bank expected.BankKeeper, asset expected.AssetKeeper) Keeper { +func NewKeeper(cdc codec.BinaryCodec, key storetypes.StoreKey, bank expected.BankKeeper, asset expected.AssetKeeper) Keeper { return Keeper{ cdc: cdc, key: key, diff --git a/x/tokenmint/keeper/keeper_test.go b/x/tokenmint/keeper/keeper_test.go index 19573c193..0bb794a64 100644 --- a/x/tokenmint/keeper/keeper_test.go +++ b/x/tokenmint/keeper/keeper_test.go @@ -2,17 +2,18 @@ package keeper_test import ( "encoding/binary" - assettypes "github.com/comdex-official/comdex/x/asset/types" - markettypes "github.com/comdex-official/comdex/x/market/types" "testing" "time" + assettypes "github.com/comdex-official/comdex/x/asset/types" + markettypes "github.com/comdex-official/comdex/x/market/types" + collectorTypes "github.com/comdex-official/comdex/x/collector/types" "github.com/stretchr/testify/suite" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" chain "github.com/comdex-official/comdex/app" assetKeeper "github.com/comdex-official/comdex/x/asset/keeper" diff --git a/x/tokenmint/module.go b/x/tokenmint/module.go index 4681828bf..5f43a4b2d 100644 --- a/x/tokenmint/module.go +++ b/x/tokenmint/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -119,19 +119,9 @@ func (am AppModule) Name() string { return am.AppModuleBasic.Name() } -// Route returns the capability module's message routing key. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - // QuerierRoute returns the capability module's query routing key. func (AppModule) QuerierRoute() string { return types.QuerierRoute } -// LegacyQuerierHandler returns the capability module's Querier. -func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { diff --git a/x/tokenmint/module_simulation.go b/x/tokenmint/module_simulation.go index ca70afff5..e773234ab 100644 --- a/x/tokenmint/module_simulation.go +++ b/x/tokenmint/module_simulation.go @@ -7,7 +7,7 @@ package tokenmint // tokenmintsimulation "github.com/comdex-official/comdex/x/tokenmint/simulation" // "github.com/comdex-official/comdex/x/tokenmint/types" // "github.com/cosmos/cosmos-sdk/baseapp" -// simappparams "github.com/cosmos/cosmos-sdk/simapp/params" +// simappparams "github.com/cosmos/cosmos-sdk/testutil/sims" // sdk "github.com/cosmos/cosmos-sdk/types" // "github.com/cosmos/cosmos-sdk/types/module" // simtypes "github.com/cosmos/cosmos-sdk/types/simulation" diff --git a/x/tokenmint/module_test.go b/x/tokenmint/module_test.go index 18936aa35..b7055a99b 100644 --- a/x/tokenmint/module_test.go +++ b/x/tokenmint/module_test.go @@ -4,8 +4,8 @@ import ( "encoding/binary" "testing" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/stretchr/testify/suite" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/vault/client/rest/query.go b/x/vault/client/rest/query.go deleted file mode 100644 index ff6f75eb1..000000000 --- a/x/vault/client/rest/query.go +++ /dev/null @@ -1,35 +0,0 @@ -package rest - -import ( - "context" - "net/http" - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/types/rest" - "github.com/gorilla/mux" - - "github.com/comdex-official/comdex/x/vault/types" -) - -func queryVault(ctx client.Context) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - - qc := types.NewQueryClient(ctx) - idParam := vars["id"] - - id, _ := strconv.ParseUint(idParam, 10, 64) - - res, err := qc.QueryVault(context.Background(), - &types.QueryVaultRequest{ - Id: id, - }) - if err != nil { - rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - - rest.PostProcessResponse(w, ctx, res) - } -} diff --git a/x/vault/client/rest/rest.go b/x/vault/client/rest/rest.go deleted file mode 100644 index 6ba1499c4..000000000 --- a/x/vault/client/rest/rest.go +++ /dev/null @@ -1,19 +0,0 @@ -package rest - -import ( - "github.com/cosmos/cosmos-sdk/client" - "github.com/gorilla/mux" -) - -func registerQueryRoutes(ctx client.Context, router *mux.Router) { - router.HandleFunc("/vaults/id", queryVault(ctx)). - Methods("GET") -} - -func registerTxRoutes(ctx client.Context, router *mux.Router) { -} - -func RegisterRoutes(ctx client.Context, router *mux.Router) { - registerQueryRoutes(ctx, router) - registerTxRoutes(ctx, router) -} diff --git a/x/vault/client/rest/tx.go b/x/vault/client/rest/tx.go deleted file mode 100644 index 0062e0ca8..000000000 --- a/x/vault/client/rest/tx.go +++ /dev/null @@ -1 +0,0 @@ -package rest diff --git a/x/vault/client/testutil/helpers.go b/x/vault/client/testutil/helpers.go index ae633c6a2..b267cd74c 100644 --- a/x/vault/client/testutil/helpers.go +++ b/x/vault/client/testutil/helpers.go @@ -20,7 +20,7 @@ import ( var commonArgs = []string{ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 10)).String()), } diff --git a/x/vault/client/testutil/suite.go b/x/vault/client/testutil/suite.go index 28c1a5aa0..e2721aee5 100644 --- a/x/vault/client/testutil/suite.go +++ b/x/vault/client/testutil/suite.go @@ -13,15 +13,15 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" servertypes "github.com/cosmos/cosmos-sdk/server/types" - "github.com/cosmos/cosmos-sdk/simapp" store "github.com/cosmos/cosmos-sdk/store/types" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" "github.com/cosmos/cosmos-sdk/testutil/network" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - tmcli "github.com/tendermint/tendermint/libs/cli" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - dbm "github.com/tendermint/tm-db" + dbm "github.com/cometbft/cometbft-db" + tmcli "github.com/cometbft/cometbft/libs/cli" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" ) type VaultIntegrationTestSuite struct { @@ -39,7 +39,7 @@ func NewAppConstructor() network.AppConstructor { return func(val network.Validator) servertypes.Application { return chain.New( val.Ctx.Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.Ctx.Config.RootDir, 0, - chain.MakeEncodingConfig(), simapp.EmptyAppOptions{}, chain.GetWasmEnabledProposals(), chain.EmptyWasmOpts, + chain.MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, chain.GetWasmEnabledProposals(), chain.EmptyWasmOpts, baseapp.SetPruning(store.NewPruningOptionsFromString(val.AppConfig.Pruning)), baseapp.SetMinGasPrices(val.AppConfig.MinGasPrices), ) diff --git a/x/vault/genesis_test.go b/x/vault/genesis_test.go index 12b038b8a..64ebc12fd 100644 --- a/x/vault/genesis_test.go +++ b/x/vault/genesis_test.go @@ -1,12 +1,13 @@ package vault_test import ( + "testing" + "github.com/comdex-official/comdex/app" "github.com/comdex-official/comdex/x/vault" "github.com/comdex-official/comdex/x/vault/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "testing" ) func TestGenesis(t *testing.T) { diff --git a/x/vault/handler_test.go b/x/vault/handler_test.go index 708f1d58b..7a926f2e1 100644 --- a/x/vault/handler_test.go +++ b/x/vault/handler_test.go @@ -10,11 +10,11 @@ import ( "github.com/comdex-official/comdex/x/vault" "github.com/comdex-official/comdex/x/vault/keeper" "github.com/comdex-official/comdex/x/vault/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) func TestInvalidMsg(t *testing.T) { diff --git a/x/vault/keeper/keeper.go b/x/vault/keeper/keeper.go index 356ca329d..547464972 100644 --- a/x/vault/keeper/keeper.go +++ b/x/vault/keeper/keeper.go @@ -5,15 +5,16 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/tendermint/libs/log" + "github.com/cometbft/cometbft/libs/log" "github.com/comdex-official/comdex/x/vault/expected" "github.com/comdex-official/comdex/x/vault/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" ) type Keeper struct { cdc codec.BinaryCodec - key sdk.StoreKey + key storetypes.StoreKey bank expected.BankKeeper asset expected.AssetKeeper oracle expected.MarketKeeper @@ -23,7 +24,7 @@ type Keeper struct { rewards expected.RewardsKeeper } -func NewKeeper(cdc codec.BinaryCodec, key sdk.StoreKey, bank expected.BankKeeper, asset expected.AssetKeeper, oracle expected.MarketKeeper, collector expected.CollectorKeeper, esm expected.EsmKeeper, tokenmint expected.TokenMintKeeper, rewards expected.RewardsKeeper) Keeper { +func NewKeeper(cdc codec.BinaryCodec, key storetypes.StoreKey, bank expected.BankKeeper, asset expected.AssetKeeper, oracle expected.MarketKeeper, collector expected.CollectorKeeper, esm expected.EsmKeeper, tokenmint expected.TokenMintKeeper, rewards expected.RewardsKeeper) Keeper { return Keeper{ cdc: cdc, key: key, diff --git a/x/vault/keeper/keeper_test.go b/x/vault/keeper/keeper_test.go index 5821c8cd3..6939fc1c7 100644 --- a/x/vault/keeper/keeper_test.go +++ b/x/vault/keeper/keeper_test.go @@ -2,14 +2,15 @@ package keeper_test import ( "encoding/binary" - rewardsKeeper "github.com/comdex-official/comdex/x/rewards/keeper" "testing" + rewardsKeeper "github.com/comdex-official/comdex/x/rewards/keeper" + "github.com/comdex-official/comdex/app/wasm/bindings" "github.com/stretchr/testify/suite" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" chain "github.com/comdex-official/comdex/app" "github.com/comdex-official/comdex/x/vault/keeper" diff --git a/x/vault/keeper/msg_server.go b/x/vault/keeper/msg_server.go index bdefa6d30..b5d726343 100644 --- a/x/vault/keeper/msg_server.go +++ b/x/vault/keeper/msg_server.go @@ -164,7 +164,7 @@ func (k msgServer) MsgCreate(c context.Context, msg *types.MsgCreateRequest) (*t newVault.AmountIn = msg.AmountIn // closingFeeVal := msg.AmountOut.Mul(sdk.Int(extendedPairVault.ClosingFee)).Quo(sdk.Int(sdk.OneDec())) - closingFeeVal := msg.AmountOut.ToDec().Mul(extendedPairVault.ClosingFee).TruncateInt() + closingFeeVal := sdk.NewDec(msg.AmountOut.Int64()).Mul(extendedPairVault.ClosingFee).TruncateInt() newVault.ClosingFeeAccumulated = closingFeeVal newVault.AmountOut = msg.AmountOut diff --git a/x/vault/keeper/vault.go b/x/vault/keeper/vault.go index 2ac8f73dd..495a316a3 100644 --- a/x/vault/keeper/vault.go +++ b/x/vault/keeper/vault.go @@ -639,12 +639,12 @@ func (k Keeper) WasmMsgAddEmissionRewards(ctx sdk.Context, appID uint64, amount for j, extP := range extPair { extPairVaultMappingData, found := k.GetAppExtendedPairVaultMappingData(ctx, appID, extP) individualVote := votingRatio[j] - votingR := individualVote.ToDec().Quo(totalVote.ToDec()) - shareByExtPair := votingR.Mul(amount.ToDec()) + votingR := sdk.NewDec(individualVote.Int64()).Quo(sdk.NewDec(totalVote.Int64())) + shareByExtPair := votingR.Mul(sdk.NewDec(amount.Int64())) if !found || extPairVaultMappingData.TokenMintedAmount.IsZero() { continue } - perUserShareByAmtDec := shareByExtPair.Quo(extPairVaultMappingData.TokenMintedAmount.ToDec()) + perUserShareByAmtDec := shareByExtPair.Quo(sdk.NewDec(extPairVaultMappingData.TokenMintedAmount.Int64())) vaultsData, _ = k.GetAppExtendedPairVaultMappingData(ctx, appID, extP) for _, vaultID := range vaultsData.VaultIds { diff --git a/x/vault/module.go b/x/vault/module.go index 0cbd94292..14926c14a 100644 --- a/x/vault/module.go +++ b/x/vault/module.go @@ -3,8 +3,8 @@ package vault import ( "context" "encoding/json" - "math/rand" + abcitypes "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -14,7 +14,6 @@ import ( "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abcitypes "github.com/tendermint/tendermint/abci/types" "github.com/comdex-official/comdex/x/vault/client/cli" "github.com/comdex-official/comdex/x/vault/keeper" @@ -99,16 +98,10 @@ func (a AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawM func (a AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} -func (a AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(a.k)) -} - func (a AppModule) QuerierRoute() string { return types.QuerierRoute } -func (a AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { return nil } - func (a AppModule) RegisterServices(configurator module.Configurator) { types.RegisterMsgServer(configurator.QueryServer(), keeper.NewMsgServer(a.k)) types.RegisterQueryServer(configurator.QueryServer(), keeper.NewQueryServer(a.k)) @@ -126,9 +119,9 @@ func (a AppModule) ProposalContents(_ module.SimulationState) []simulation.Weigh return nil } -func (a AppModule) RandomizedParams(_ *rand.Rand) []simulation.ParamChange { - return nil -} +// func (a AppModule) RandomizedParams(_ *rand.Rand) []simulation.ParamChange { +// return nil +// } func (a AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} diff --git a/x/vault/module_test.go b/x/vault/module_test.go index f946e2a75..cdd18577b 100644 --- a/x/vault/module_test.go +++ b/x/vault/module_test.go @@ -4,8 +4,8 @@ import ( "encoding/binary" "testing" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/stretchr/testify/suite" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" From 7753f7a83571d8105bceb344b4724c3eb05bfaf9 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Fri, 7 Jul 2023 05:06:55 +0530 Subject: [PATCH 02/90] refactored files --- app/test_helpers.go | 9 +++-- cmd/comdex/genaccounts.go | 7 ++-- cmd/comdex/main.go | 2 +- cmd/comdex/root.go | 49 ++++++++++++++++++++++++---- cmd/comdex/testnet.go | 4 +-- testutil/network/network.go | 12 +++---- testutil/simapp/simapp.go | 4 +-- x/liquidity/amm/match.go | 4 +-- x/liquidity/amm/match_test.go | 4 +-- x/liquidity/amm/pool_test.go | 30 ++++++++--------- x/liquidity/client/testutil/suite.go | 10 +++--- x/liquidity/keeper/swap.go | 4 +-- x/liquidity/keeper/swap_test.go | 10 +++--- x/rewards/keeper/iter.go | 14 ++++---- x/vault/client/testutil/suite.go | 9 ++--- 15 files changed, 105 insertions(+), 67 deletions(-) diff --git a/app/test_helpers.go b/app/test_helpers.go index 19196b9b1..b70eb5ff8 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -10,14 +10,13 @@ import ( tmproto "github.com/cometbft/cometbft/proto/tendermint/types" tmtypes "github.com/cometbft/cometbft/types" "github.com/cosmos/cosmos-sdk/std" - simappparams "github.com/cosmos/cosmos-sdk/testutil/sims" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" ) // DefaultConsensusParams defines the default Tendermint consensus params used in // App testing. -var DefaultConsensusParams = &abci.ConsensusParams{ - Block: &abci.BlockParams{ +var DefaultConsensusParams = &tmproto.ConsensusParams{ + Block: &tmproto.BlockParams{ MaxBytes: 200000, MaxGas: 2000000, }, @@ -33,8 +32,8 @@ var DefaultConsensusParams = &abci.ConsensusParams{ }, } -func MakeTestEncodingConfig() simappparams.EncodingConfig { - encodingConfig := simappparams.MakeTestEncodingConfig() +func MakeTestEncodingConfig() simtestutil.EncodingConfig { + encodingConfig := simtestutil.MakeTestEncodingConfig() std.RegisterLegacyAminoCodec(encodingConfig.Amino) std.RegisterInterfaces(encodingConfig.InterfaceRegistry) ModuleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino) diff --git a/cmd/comdex/genaccounts.go b/cmd/comdex/genaccounts.go index 1fea27ae6..fe4afcbce 100644 --- a/cmd/comdex/genaccounts.go +++ b/cmd/comdex/genaccounts.go @@ -54,7 +54,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa return err } - kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, clientCtx.HomeDir, inBuf) + kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, clientCtx.HomeDir, inBuf, clientCtx.Codec) if err != nil { return err } @@ -64,7 +64,10 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa return fmt.Errorf("failed to get address from Keybase: %w", err) } - addr = info.GetAddress() + addr, err = info.GetAddress() + if err != nil { + return err + } } coins, err := sdk.ParseCoinsNormalized(args[1]) diff --git a/cmd/comdex/main.go b/cmd/comdex/main.go index 1b746d1fe..4173b50d5 100644 --- a/cmd/comdex/main.go +++ b/cmd/comdex/main.go @@ -13,7 +13,7 @@ func main() { comdex.SetAccountAddressPrefixes() root, _ := NewRootCmd() - if err := servercmd.Execute(root, comdex.DefaultNodeHome); err != nil { + if err := servercmd.Execute(root, "", comdex.DefaultNodeHome); err != nil { switch e := err.(type) { case server.ErrorCode: os.Exit(e.Code) diff --git a/cmd/comdex/root.go b/cmd/comdex/root.go index d1a560371..b5485cf37 100644 --- a/cmd/comdex/root.go +++ b/cmd/comdex/root.go @@ -11,8 +11,10 @@ import ( "github.com/prometheus/client_golang/prometheus" tmdb "github.com/cometbft/cometbft-db" + tmcfg "github.com/cometbft/cometbft/config" tmcli "github.com/cometbft/cometbft/libs/cli" "github.com/cometbft/cometbft/libs/log" + tmtypes "github.com/cometbft/cometbft/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/config" @@ -24,13 +26,16 @@ import ( "github.com/cosmos/cosmos-sdk/server" servertypes "github.com/cosmos/cosmos-sdk/server/types" "github.com/cosmos/cosmos-sdk/snapshots" + snapshottypes "github.com/cosmos/cosmos-sdk/snapshots/types" "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" authcli "github.com/cosmos/cosmos-sdk/x/auth/client/cli" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/crisis" + "github.com/cosmos/cosmos-sdk/x/genutil" genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" + genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/spf13/cast" "github.com/spf13/cobra" @@ -68,7 +73,10 @@ func NewRootCmd() (*cobra.Command, comdex.EncodingConfig) { return err } - return server.InterceptConfigsPreRunHandler(cmd, "", nil) + // bump47: recheck if customTMConfig is required, else replace with nil + customTMConfig := initTendermintConfig() + + return server.InterceptConfigsPreRunHandler(cmd, "", nil, customTMConfig) }, } @@ -76,10 +84,21 @@ func NewRootCmd() (*cobra.Command, comdex.EncodingConfig) { return root, encodingConfig } +func initTendermintConfig() *tmcfg.Config { + cfg := tmcfg.DefaultConfig() + + // these values put a higher strain on node memory + // cfg.P2P.MaxNumInboundPeers = 100 + // cfg.P2P.MaxNumOutboundPeers = 40 + + return cfg +} + func initRootCmd(rootCmd *cobra.Command, encoding comdex.EncodingConfig) { + gentxModule := comdex.ModuleBasics[genutiltypes.ModuleName].(genutil.AppModuleBasic) rootCmd.AddCommand( genutilcli.InitCmd(comdex.ModuleBasics, comdex.DefaultNodeHome), - genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, comdex.DefaultNodeHome), + genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, comdex.DefaultNodeHome, gentxModule.GenTxValidator), genutilcli.GenTxCmd(comdex.ModuleBasics, encoding.TxConfig, banktypes.GenesisBalancesIterator{}, comdex.DefaultNodeHome), genutilcli.ValidateGenesisCmd(comdex.ModuleBasics), AddGenesisAccountCmd(comdex.DefaultNodeHome), @@ -171,7 +190,7 @@ func appCreatorFunc(logger log.Logger, db tmdb.DB, tracer io.Writer, options ser } snapshotDir := filepath.Join(cast.ToString(options.Get(flags.FlagHome)), "data", "snapshots") - snapshotDB, err := sdk.NewLevelDB("metadata", snapshotDir) + snapshotDB, err := tmdb.NewDB("metadata", tmdb.GoLevelDBBackend, snapshotDir) if err != nil { panic(err) } @@ -183,6 +202,23 @@ func appCreatorFunc(logger log.Logger, db tmdb.DB, tracer io.Writer, options ser if cast.ToBool(options.Get("telemetry.enabled")) { wasmOpts = append(wasmOpts, wasmkeeper.WithVMCacheMetrics(prometheus.DefaultRegisterer)) } + snapshotOptions := snapshottypes.NewSnapshotOptions( + cast.ToUint64(options.Get(server.FlagStateSyncSnapshotInterval)), + cast.ToUint32(options.Get(server.FlagStateSyncSnapshotKeepRecent)), + ) + + homeDir := cast.ToString(options.Get(flags.FlagHome)) + chainID := cast.ToString(options.Get(flags.FlagChainID)) + if chainID == "" { + // fallback to genesis chain-id + appGenesis, err := tmtypes.GenesisDocFromFile(filepath.Join(homeDir, "config", "genesis.json")) + if err != nil { + panic(err) + } + + chainID = appGenesis.ChainID + } + return comdex.New( logger, db, tracer, true, skipUpgradeHeights, cast.ToString(options.Get(flags.FlagHome)), @@ -199,14 +235,13 @@ func appCreatorFunc(logger log.Logger, db tmdb.DB, tracer io.Writer, options ser baseapp.SetInterBlockCache(cache), baseapp.SetTrace(cast.ToBool(options.Get(server.FlagTrace))), baseapp.SetIndexEvents(cast.ToStringSlice(options.Get(server.FlagIndexEvents))), - baseapp.SetSnapshotStore(snapshotStore), - baseapp.SetSnapshotInterval(cast.ToUint64(options.Get(server.FlagStateSyncSnapshotInterval))), - baseapp.SetSnapshotKeepRecent(cast.ToUint32(options.Get(server.FlagStateSyncSnapshotKeepRecent))), + baseapp.SetSnapshot(snapshotStore, snapshotOptions), + baseapp.SetChainID(chainID), ) } func appExportFunc(logger log.Logger, db tmdb.DB, tracer io.Writer, height int64, - forZeroHeight bool, jailAllowedAddrs []string, options servertypes.AppOptions, + forZeroHeight bool, jailAllowedAddrs []string, options servertypes.AppOptions, modulesToExport []string, ) (servertypes.ExportedApp, error) { config := comdex.MakeEncodingConfig() config.Marshaler = codec.NewProtoCodec(config.InterfaceRegistry) diff --git a/cmd/comdex/testnet.go b/cmd/comdex/testnet.go index 188bc9d10..9744b1cf4 100644 --- a/cmd/comdex/testnet.go +++ b/cmd/comdex/testnet.go @@ -69,7 +69,7 @@ Example: nodeDaemonHome, _ := cmd.Flags().GetString(flagNodeDaemonHome) startingIPAddress, _ := cmd.Flags().GetString(flagStartingIPAddress) numValidators, _ := cmd.Flags().GetInt(flagNumValidators) - algo, _ := cmd.Flags().GetString(flags.FlagKeyAlgorithm) + algo, _ := cmd.Flags().GetString(flags.FlagKeyType) return InitTestnet( clientCtx, cmd, config, mbm, genBalIterator, outputDir, chainID, minGasPrices, @@ -86,7 +86,7 @@ Example: cmd.Flags().String(flags.FlagChainID, "", "genesis file chain-id, if left blank will be randomly created") cmd.Flags().String(server.FlagMinGasPrices, fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), "Minimum gas prices to accept for transactions; All fees in a tx must meet this minimum (e.g. 0.01photino,0.001stake)") cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|test)") - cmd.Flags().String(flags.FlagKeyAlgorithm, string(hd.Secp256k1Type), "Key signing algorithm to generate keys for") + cmd.Flags().String(flags.FlagKeyType, string(hd.Secp256k1Type), "Key signing algorithm to generate keys for") return cmd } diff --git a/testutil/network/network.go b/testutil/network/network.go index a42a3f56a..85165ace3 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -11,11 +11,11 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keyring" servertypes "github.com/cosmos/cosmos-sdk/server/types" - storetypes "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/testutil/network" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + pruningtypes "github.com/cosmos/cosmos-sdk/store/pruning/types" comdex "github.com/comdex-official/comdex/app" ) @@ -52,15 +52,15 @@ func DefaultConfig() network.Config { LegacyAmino: encoding.Amino, InterfaceRegistry: encoding.InterfaceRegistry, AccountRetriever: authtypes.AccountRetriever{}, - AppConstructor: func(val network.Validator) servertypes.Application { + AppConstructor: func(val network.ValidatorI) servertypes.Application { return comdex.New( - val.Ctx.Logger, tmdb.NewMemDB(), nil, true, map[int64]bool{}, val.Ctx.Config.RootDir, 0, + val.GetCtx().Logger, tmdb.NewMemDB(), nil, true, map[int64]bool{}, val.GetCtx().Config.RootDir, 0, encoding, simtestutil.EmptyAppOptions{}, comdex.GetWasmEnabledProposals(), comdex.EmptyWasmOpts, - baseapp.SetPruning(storetypes.NewPruningOptionsFromString(val.AppConfig.Pruning)), - baseapp.SetMinGasPrices(val.AppConfig.MinGasPrices), + baseapp.SetPruning(pruningtypes.NewPruningOptionsFromString(val.GetAppConfig().Pruning)), + baseapp.SetMinGasPrices(val.GetAppConfig().MinGasPrices), ) }, GenesisState: comdex.ModuleBasics.DefaultGenesis(encoding.Marshaler), @@ -72,7 +72,7 @@ func DefaultConfig() network.Config { AccountTokens: sdk.TokensFromConsensusPower(1000, sdk.OneInt()), StakingTokens: sdk.TokensFromConsensusPower(500, sdk.OneInt()), BondedTokens: sdk.TokensFromConsensusPower(100, sdk.OneInt()), - PruningStrategy: storetypes.PruningOptionNothing, + PruningStrategy: pruningtypes.PruningOptionNothing, CleanupDir: true, SigningAlgo: string(hd.Secp256k1Type), KeyringOptions: []keyring.Option{}, diff --git a/testutil/simapp/simapp.go b/testutil/simapp/simapp.go index 8e8f1bd7d..c96425a12 100644 --- a/testutil/simapp/simapp.go +++ b/testutil/simapp/simapp.go @@ -31,8 +31,8 @@ func New(dir string) *comdex.App { return a } -var defaultConsensusParams = &abcitypes.ConsensusParams{ - Block: &abcitypes.BlockParams{ +var defaultConsensusParams = &tmprototypes.ConsensusParams{ + Block: &tmprototypes.BlockParams{ MaxBytes: 200000, MaxGas: 2000000, }, diff --git a/x/liquidity/amm/match.go b/x/liquidity/amm/match.go index 97527aac6..9e91e1924 100644 --- a/x/liquidity/amm/match.go +++ b/x/liquidity/amm/match.go @@ -344,8 +344,8 @@ func DistributeOrderAmountToOrders(orders []Order, amt sdk.Int, price sdk.Dec) ( if matchableAmt.IsZero() { continue } - orderAmt := order.GetAmount().ToDec() - proportion := orderAmt.QuoTruncate(totalAmt.ToDec()) + orderAmt := sdk.NewDec(order.GetAmount().Int64()) + proportion := orderAmt.QuoTruncate(sdk.NewDec(totalAmt.Int64())) matchedAmt := sdk.MinInt(matchableAmt, proportion.MulInt(amt).TruncateInt()) if matchedAmt.IsPositive() { matchedAmtByOrder[order] = matchedAmt diff --git a/x/liquidity/amm/match_test.go b/x/liquidity/amm/match_test.go index 0f573285b..b75e452fb 100644 --- a/x/liquidity/amm/match_test.go +++ b/x/liquidity/amm/match_test.go @@ -148,9 +148,9 @@ func TestMatchOrders(t *testing.T) { var effPrice sdk.Dec // Effective swap price switch order.GetDirection() { case amm.Buy: - effPrice = paid.ToDec().QuoInt(received) + effPrice = sdk.NewDec(paid.Int64()).QuoInt(received) case amm.Sell: - effPrice = received.ToDec().QuoInt(paid) + effPrice = sdk.NewDec(received.Int64()).QuoInt(paid) } require.True(t, utils.DecApproxEqual(tc.lastPrice, effPrice)) } diff --git a/x/liquidity/amm/pool_test.go b/x/liquidity/amm/pool_test.go index e6925aa37..1648d60c9 100644 --- a/x/liquidity/amm/pool_test.go +++ b/x/liquidity/amm/pool_test.go @@ -514,7 +514,7 @@ func TestCreateRangedPool(t *testing.T) { intApproxEq := func(exp, got sdk.Int) (*testing.T, bool, string, string, string) { c := exp.Sub(got).Abs().LTE(sdk.OneInt()) if c && !exp.IsZero() { - c = exp.ToDec().Sub(got.ToDec()).Abs().Quo(exp.ToDec()).LTE(sdk.NewDecWithPrec(1, 3)) + c = sdk.NewDec(exp.Int64()).Sub(sdk.NewDec(got.Int64())).Abs().Quo(sdk.NewDec(exp.Int64())).LTE(sdk.NewDecWithPrec(1, 3)) } return t, c, "expected:\t%v\ngot:\t\t%v", exp.String(), got.String() } @@ -696,21 +696,21 @@ func TestRangedPool_Deposit(t *testing.T) { var reserveRatio sdk.Dec switch { case tc.rx.IsZero(): - reserveRatio = ay.ToDec().Quo(tc.ry.ToDec()) + reserveRatio = sdk.NewDec(ay.Int64()).Quo(sdk.NewDec(tc.ry.Int64())) case tc.ry.IsZero(): - reserveRatio = ax.ToDec().Quo(tc.rx.ToDec()) + reserveRatio = sdk.NewDec(ax.Int64()).Quo(sdk.NewDec(tc.rx.Int64())) default: - reserveRatio = ax.ToDec().Quo(tc.rx.ToDec()) - require.True(t, utils.DecApproxEqual(reserveRatio, ay.ToDec().Quo(tc.ry.ToDec()))) + reserveRatio = sdk.NewDec(ax.Int64()).Quo(sdk.NewDec(tc.rx.Int64())) + require.True(t, utils.DecApproxEqual(reserveRatio, sdk.NewDec(ay.Int64()).Quo(sdk.NewDec(tc.ry.Int64())))) } // check ax/ay == rx/ry if !tc.rx.IsZero() && !tc.ry.IsZero() { - require.True(t, utils.DecApproxEqual(ax.ToDec().Quo(ay.ToDec()), tc.rx.ToDec().Quo(tc.ry.ToDec()))) + require.True(t, utils.DecApproxEqual(sdk.NewDec(ax.Int64()).Quo(sdk.NewDec(ay.Int64())), sdk.NewDec(tc.rx.Int64()).Quo(sdk.NewDec(tc.ry.Int64())))) } // check ax/rx == ay/ry == pc/ps - require.True(t, utils.DecApproxEqual(reserveRatio, pc.ToDec().Quo(tc.ps.ToDec()))) + require.True(t, utils.DecApproxEqual(reserveRatio, sdk.NewDec(pc.Int64()).Quo(sdk.NewDec(tc.ps.Int64())))) // check pool price before == pool price after require.True(t, utils.DecApproxEqual(pool.Price(), newPool.Price())) @@ -769,21 +769,21 @@ func TestRangedPool_Withdraw(t *testing.T) { var reserveRatio sdk.Dec switch { case tc.rx.IsZero(): - reserveRatio = y.ToDec().Quo(tc.ry.ToDec()) + reserveRatio = sdk.NewDec(y.Int64()).Quo(sdk.NewDec(tc.ry.Int64())) case tc.ry.IsZero(): - reserveRatio = x.ToDec().Quo(tc.rx.ToDec()) + reserveRatio = sdk.NewDec(y.Int64()).Quo(sdk.NewDec(tc.rx.Int64())) default: - reserveRatio = x.ToDec().Quo(tc.rx.ToDec()) - require.True(t, utils.DecApproxEqual(reserveRatio, y.ToDec().Quo(tc.ry.ToDec()))) + reserveRatio = sdk.NewDec(y.Int64()).Quo(sdk.NewDec(tc.rx.Int64())) + require.True(t, utils.DecApproxEqual(reserveRatio, sdk.NewDec(y.Int64()).Quo(sdk.NewDec(tc.ry.Int64())))) } // check x/y == rx/ry if !tc.rx.IsZero() && !tc.ry.IsZero() { - require.True(t, utils.DecApproxEqual(x.ToDec().Quo(y.ToDec()), tc.rx.ToDec().Quo(tc.ry.ToDec()))) + require.True(t, utils.DecApproxEqual(sdk.NewDec(x.Int64()).Quo(sdk.NewDec(y.Int64())), sdk.NewDec(tc.rx.Int64()).Quo(sdk.NewDec(tc.ry.Int64())))) } // check x/rx == y/ry == pc/ps - require.True(t, utils.DecApproxEqual(reserveRatio, tc.pc.ToDec().Quo(tc.ps.ToDec()))) + require.True(t, utils.DecApproxEqual(reserveRatio, sdk.NewDec(tc.pc.Int64()).Quo(sdk.NewDec(tc.ps.Int64())))) // check pool price before == pool price after require.True(t, utils.DecApproxEqual(pool.Price(), newPool.Price())) @@ -921,14 +921,14 @@ func TestRangedPool_exhaust(t *testing.T) { orders := amm.PoolSellOrders(tc.pool, amm.DefaultOrderer, minPrice, maxPrice, 4) amt := amm.TotalAmount(orders) require.True(t, amt.LTE(ry)) - require.True(t, amt.GTE(ry.ToDec().Mul(utils.ParseDec("0.99")).TruncateInt())) + require.True(t, amt.GTE(sdk.NewDec(ry.Int64()).Mul(utils.ParseDec("0.99")).TruncateInt())) orders = amm.PoolBuyOrders(tc.pool, amm.DefaultOrderer, minPrice, maxPrice, 4) x := sdk.ZeroInt() for _, order := range orders { x = x.Add(order.GetPrice().MulInt(order.GetAmount()).TruncateInt()) } require.True(t, x.LTE(rx)) - require.True(t, x.GTE(rx.ToDec().Mul(utils.ParseDec("0.99")).TruncateInt())) + require.True(t, x.GTE(sdk.NewDec(rx.Int64()).Mul(utils.ParseDec("0.99")).TruncateInt())) }) } } diff --git a/x/liquidity/client/testutil/suite.go b/x/liquidity/client/testutil/suite.go index a7820ca75..30d778f4f 100644 --- a/x/liquidity/client/testutil/suite.go +++ b/x/liquidity/client/testutil/suite.go @@ -12,10 +12,10 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" servertypes "github.com/cosmos/cosmos-sdk/server/types" - store "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/testutil/network" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" + pruningtypes "github.com/cosmos/cosmos-sdk/store/pruning/types" dbm "github.com/cometbft/cometbft-db" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" @@ -33,12 +33,12 @@ type LiquidityIntegrationTestSuite struct { } func NewAppConstructor() network.AppConstructor { - return func(val network.Validator) servertypes.Application { + return func(val network.ValidatorI) servertypes.Application { return chain.New( - val.Ctx.Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.Ctx.Config.RootDir, 0, + val.GetCtx().Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.GetCtx().Config.RootDir, 0, chain.MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, chain.GetWasmEnabledProposals(), chain.EmptyWasmOpts, - baseapp.SetPruning(store.NewPruningOptionsFromString(val.AppConfig.Pruning)), - baseapp.SetMinGasPrices(val.AppConfig.MinGasPrices), + baseapp.SetPruning(pruningtypes.NewPruningOptionsFromString(val.GetAppConfig().Pruning)), + baseapp.SetMinGasPrices(val.GetAppConfig().MinGasPrices), ) } } diff --git a/x/liquidity/keeper/swap.go b/x/liquidity/keeper/swap.go index 3101d87dc..f2b647d45 100644 --- a/x/liquidity/keeper/swap.go +++ b/x/liquidity/keeper/swap.go @@ -14,7 +14,7 @@ import ( ) func CalculateSwapFeeAmount(ctx sdk.Context, params types.GenericParams, calculatedOfferCoinAmt sdk.Int) sdk.Int { - return calculatedOfferCoinAmt.ToDec().MulTruncate(params.SwapFeeRate).TruncateInt() + return sdk.NewDec(calculatedOfferCoinAmt.Int64()).MulTruncate(params.SwapFeeRate).TruncateInt() } func (k Keeper) PriceLimits(ctx sdk.Context, lastPrice sdk.Dec, params types.GenericParams) (lowest, highest sdk.Dec) { @@ -1001,7 +1001,7 @@ func (k Keeper) ConvertAccumulatedSwapFeesWithSwapDistrToken(ctx sdk.Context, ap switch orderDirection { case types.OrderDirectionBuy: maxPrice := lastPrice.Mul(sdk.OneDec().Add(params.MaxPriceLimitRatio)) - amount = offerCoin.Amount.ToDec().Quo(maxPrice).TruncateInt() + amount = sdk.NewDec(offerCoin.Amount.Int64()).Quo(maxPrice).TruncateInt() demandCoinDenom = swappablePair.BaseCoinDenom case types.OrderDirectionSell: amount = offerCoin.Amount diff --git a/x/liquidity/keeper/swap_test.go b/x/liquidity/keeper/swap_test.go index 033417045..6afb60742 100644 --- a/x/liquidity/keeper/swap_test.go +++ b/x/liquidity/keeper/swap_test.go @@ -2143,7 +2143,7 @@ func (s *KeeperTestSuite) TestPoolPreserveK() { rx, ry := s.keeper.GetPoolBalances(s.ctx, pool) ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}).(*amm.RangedPool) transX, transY := ammPool.Translation() - ks[pool.Id] = rx.Amount.ToDec().Add(transX).Mul(ry.Amount.ToDec().Add(transY)) + ks[pool.Id] = sdk.NewDec(rx.Amount.Int64()).Add(transX).Mul(sdk.NewDec(ry.Amount.Int64()).Add(transY)) } for i := 0; i < 20; i++ { @@ -2172,7 +2172,7 @@ func (s *KeeperTestSuite) TestPoolPreserveK() { rx, ry := s.keeper.GetPoolBalances(s.ctx, pool) ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}).(*amm.RangedPool) transX, transY := ammPool.Translation() - k := rx.Amount.ToDec().Add(transX).Mul(ry.Amount.ToDec().Add(transY)) + k := sdk.NewDec(rx.Amount.Int64()).Add(transX).Mul(sdk.NewDec(ry.Amount.Int64()).Add(transY)) s.Require().True(k.GTE(ks[pool.Id].Mul(utils.ParseDec("0.99999")))) // there may be a small error ks[pool.Id] = k } @@ -2217,7 +2217,7 @@ func (s *KeeperTestSuite) TestRangedLiquidity() { paid := order.OfferCoin.Sub(order.RemainingOfferCoin).Amount received := order.ReceivedCoin.Amount s.Require().True(received.LT(orderAmt)) - s.Require().True(paid.ToDec().QuoInt(received).LTE(orderPrice)) + s.Require().True(sdk.NewDec(paid.Int64()).QuoInt(received).LTE(orderPrice)) liquidity.BeginBlocker(s.ctx, s.keeper, s.app.AssetKeeper) pair = s.CreateNewLiquidityPair(appID1, s.addr(0), asset3.Denom, asset4.Denom) @@ -2231,7 +2231,7 @@ func (s *KeeperTestSuite) TestRangedLiquidity() { paid = order.OfferCoin.Sub(order.RemainingOfferCoin).Amount received = order.ReceivedCoin.Amount s.Require().True(intEq(orderAmt, received)) - s.Require().True(paid.ToDec().QuoInt(received).LTE(orderPrice)) + s.Require().True(sdk.NewDec(paid.Int64()).QuoInt(received).LTE(orderPrice)) } func (s *KeeperTestSuite) TestOneSidedRangedPool() { @@ -2259,7 +2259,7 @@ func (s *KeeperTestSuite) TestOneSidedRangedPool() { paid := order.OfferCoin.Sub(order.RemainingOfferCoin).Amount received := order.ReceivedCoin.Amount s.Require().True(intEq(orderAmt, received)) - s.Require().True(paid.ToDec().QuoInt(received).LTE(orderPrice)) + s.Require().True(sdk.NewDec(paid.Int64()).QuoInt(received).LTE(orderPrice)) rx, _ = s.keeper.GetPoolBalances(s.ctx, pool) s.Require().True(rx.IsPositive()) diff --git a/x/rewards/keeper/iter.go b/x/rewards/keeper/iter.go index 020dce216..1d55b6530 100644 --- a/x/rewards/keeper/iter.go +++ b/x/rewards/keeper/iter.go @@ -58,11 +58,11 @@ func (k Keeper) DistributeExtRewardLocker(ctx sdk.Context) error { continue } } - userShare := (locker.NetBalance.ToDec()).Quo(totalShare.ToDec()) // getting share percentage + userShare := (sdk.NewDec(locker.NetBalance.Int64())).Quo(sdk.NewDec(totalShare.Int64())) // getting share percentage availableRewards := v.AvailableRewards // Available Rewards Duration := v.DurationDays - int64(epoch.Count) // duration left (total duration - current count) - epochRewards := availableRewards.Amount.ToDec().Quo(sdk.NewDec(Duration)) + epochRewards := sdk.NewDec(availableRewards.Amount.Int64()).Quo(sdk.NewDec(Duration)) dailyRewards := userShare.Mul(epochRewards) user, _ := sdk.AccAddressFromBech32(locker.Depositor) finalDailyRewards := dailyRewards.TruncateInt() @@ -139,9 +139,9 @@ func (k Keeper) DistributeExtRewardVault(ctx sdk.Context) error { continue } } - individualUserShare := userVault.AmountOut.ToDec().Quo(sdk.NewDecFromInt(appExtPairVaultData.TokenMintedAmount)) // getting share percentage + individualUserShare := sdk.NewDec(userVault.AmountOut.Int64()).Quo(sdk.NewDecFromInt(appExtPairVaultData.TokenMintedAmount)) // getting share percentage Duration := v.DurationDays - int64(epoch.Count) // duration left (total duration - current count) - epochRewards := (totalRewards.Amount.ToDec()).Quo(sdk.NewDec(Duration)) + epochRewards := (sdk.NewDec(totalRewards.Amount.Int64())).Quo(sdk.NewDec(Duration)) dailyRewards := individualUserShare.Mul(epochRewards) finalDailyRewards := dailyRewards.TruncateInt() @@ -194,7 +194,7 @@ func (k Keeper) CalculationOfRewards( factor1 := a.Add(b) intPerBlockFactor := math.Pow(factor1.MustFloat64(), yearsElapsed.MustFloat64()) intAccPerBlock := intPerBlockFactor - types.Float64One - amtFloat := amount.ToDec().MustFloat64() + amtFloat := sdk.NewDec(amount.Int64()).MustFloat64() newAmount := intAccPerBlock * amtFloat // s := fmt.Sprint(newAmount) @@ -453,9 +453,9 @@ func (k Keeper) DistributeExtRewardStableVault(ctx sdk.Context) error { } } - individualUserShare := eligibleRewardAmt.ToDec().Quo(sdk.NewDecFromInt(totalMintedData)) // getting share percentage + individualUserShare := sdk.NewDec(eligibleRewardAmt.Int64()).Quo(sdk.NewDecFromInt(totalMintedData)) // getting share percentage Duration := extRew.DurationDays - int64(epoch.Count) // duration left (total duration - current count) - epochRewards := (totalRewards.Amount.ToDec()).Quo(sdk.NewDec(Duration)) + epochRewards := (sdk.NewDec(totalRewards.Amount.Int64())).Quo(sdk.NewDec(Duration)) dailyRewards := individualUserShare.Mul(epochRewards) finalDailyRewards := dailyRewards.TruncateInt() diff --git a/x/vault/client/testutil/suite.go b/x/vault/client/testutil/suite.go index e2721aee5..50e1dc4ea 100644 --- a/x/vault/client/testutil/suite.go +++ b/x/vault/client/testutil/suite.go @@ -18,6 +18,7 @@ import ( "github.com/cosmos/cosmos-sdk/testutil/network" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" + pruningtypes "github.com/cosmos/cosmos-sdk/store/pruning/types" dbm "github.com/cometbft/cometbft-db" tmcli "github.com/cometbft/cometbft/libs/cli" @@ -36,12 +37,12 @@ type VaultIntegrationTestSuite struct { } func NewAppConstructor() network.AppConstructor { - return func(val network.Validator) servertypes.Application { + return func(val network.ValidatorI) servertypes.Application { return chain.New( - val.Ctx.Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.Ctx.Config.RootDir, 0, + val.GetCtx().Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.GetCtx().Config.RootDir, 0, chain.MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, chain.GetWasmEnabledProposals(), chain.EmptyWasmOpts, - baseapp.SetPruning(store.NewPruningOptionsFromString(val.AppConfig.Pruning)), - baseapp.SetMinGasPrices(val.AppConfig.MinGasPrices), + baseapp.SetPruning(pruningtypes.NewPruningOptionsFromString(val.GetAppConfig().Pruning)), + baseapp.SetMinGasPrices(val.GetAppConfig().MinGasPrices), ) } } From fc3ab6aa4dba24cb0e42b3236e5ec4932089a681 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 10 Jul 2023 00:09:55 +0530 Subject: [PATCH 03/90] version upgrade --- go.mod | 36 ++++++++++++++++++------------------ go.sum | 57 ++++++++++++++++++++++++++++++++++++--------------------- 2 files changed, 54 insertions(+), 39 deletions(-) diff --git a/go.mod b/go.mod index df23e315d..a09d4fe29 100644 --- a/go.mod +++ b/go.mod @@ -3,10 +3,10 @@ module github.com/comdex-official/comdex go 1.19 require ( - github.com/CosmWasm/wasmd v0.40.1 + github.com/CosmWasm/wasmd v0.40.2 github.com/CosmWasm/wasmvm v1.2.4 github.com/bandprotocol/bandchain-packet v0.0.3 - github.com/cometbft/cometbft v0.37.1 + github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 github.com/cosmos/cosmos-sdk v0.47.3 github.com/gogo/protobuf v1.3.3 @@ -14,13 +14,13 @@ require ( github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.15.0 + github.com/prometheus/client_golang v1.16.0 github.com/spf13/cast v1.5.1 github.com/spf13/cobra v1.7.0 github.com/strangelove-ventures/async-icq/v7 v7.0.0-20230413165143-a3b65ccdc897 - github.com/stretchr/testify v1.8.3 - google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 - google.golang.org/grpc v1.55.0 + github.com/stretchr/testify v1.8.4 + google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 + google.golang.org/grpc v1.56.1 google.golang.org/protobuf v1.30.0 ) @@ -42,9 +42,9 @@ require ( 4d63.com/gocheckcompilerdirectives v1.2.1 // indirect 4d63.com/gochecknoglobals v0.2.1 // indirect cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.18.0 // indirect + cloud.google.com/go/compute v1.19.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.12.0 // indirect + cloud.google.com/go/iam v0.13.0 // indirect cloud.google.com/go/storage v1.29.0 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.5.1 // indirect @@ -156,7 +156,7 @@ require ( github.com/google/orderedcode v0.0.1 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.7.0 // indirect + github.com/googleapis/gax-go/v2 v2.7.1 // indirect github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -229,13 +229,13 @@ require ( github.com/nunnatsa/ginkgolinter v0.8.1 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/pelletier/go-toml/v2 v2.0.7 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/polyfloyd/go-errorlint v1.1.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect + github.com/prometheus/procfs v0.10.1 // indirect github.com/quasilyte/go-ruleguard v0.3.19 // indirect github.com/quasilyte/gogrep v0.5.0 // indirect github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 // indirect @@ -289,19 +289,19 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.10.0 // indirect go.uber.org/zap v1.23.0 // indirect - golang.org/x/crypto v0.8.0 // indirect + golang.org/x/crypto v0.9.0 // indirect golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9 // indirect golang.org/x/mod v0.9.0 // indirect - golang.org/x/net v0.9.0 // indirect - golang.org/x/oauth2 v0.6.0 // indirect - golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.7.0 // indirect - golang.org/x/term v0.7.0 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/oauth2 v0.7.0 // indirect + golang.org/x/sync v0.2.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/term v0.8.0 // indirect golang.org/x/text v0.9.0 // indirect golang.org/x/tools v0.7.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.110.0 // indirect + google.golang.org/api v0.114.0 // indirect google.golang.org/appengine v1.6.7 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 8ef914eef..7c3d6f328 100644 --- a/go.sum +++ b/go.sum @@ -164,8 +164,9 @@ cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= @@ -288,8 +289,9 @@ cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHD cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= -cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= @@ -665,8 +667,8 @@ github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3 github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/CloudyKit/jet/v6 v6.1.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= -github.com/CosmWasm/wasmd v0.40.1 h1:LxbO78t/6S8TkeQlUrJ0m5O87HtAwLx4RGHq3rdrOEU= -github.com/CosmWasm/wasmd v0.40.1/go.mod h1:6EOwnv7MpuFaEqxcUOdFV9i4yvrdOciaY6VQ1o7A3yg= +github.com/CosmWasm/wasmd v0.40.2 h1:GSDHIaeJI7fcDF5mkzSXQI5IZLtvpNq5t3TjJ9bDpPw= +github.com/CosmWasm/wasmd v0.40.2/go.mod h1:vqI238yb4D6aNuigS8mCqTyyCV9HN5eBEZARKRoK3ts= github.com/CosmWasm/wasmvm v1.2.4 h1:6OfeZuEcEH/9iqwrg2pkeVtDCkMoj9U6PpKtcrCyVrQ= github.com/CosmWasm/wasmvm v1.2.4/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= @@ -1059,8 +1061,9 @@ github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZ github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= github.com/cometbft/cometbft v0.34.27-alpha.1/go.mod h1:hct3hasQ2hIF3HoD7foVw4RaqTNSSeJ/lgcrVK6uDvs= -github.com/cometbft/cometbft v0.37.1 h1:KLxkQTK2hICXYq21U2hn1W5hOVYUdQgDQ1uB+90xPIg= github.com/cometbft/cometbft v0.37.1/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= +github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= @@ -1865,8 +1868,9 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.7.1 h1:gF4c0zjUP2H/s/hEGyLA3I0fA2ZWjzYiONAD6cvPr8A= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= @@ -2695,8 +2699,9 @@ github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCko github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= -github.com/pelletier/go-toml/v2 v2.0.7 h1:muncTPStnKRos5dpVKULv2FVd4bMOhNePj9CjgDb8Us= github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= @@ -2761,8 +2766,8 @@ github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqr github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_golang v1.15.0 h1:5fCgGYogn0hFdhyhLbw7hEsWxufKtY9klyvdNfFlFhM= -github.com/prometheus/client_golang v1.15.0/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= +github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= +github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -2807,8 +2812,9 @@ github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= +github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= @@ -3081,8 +3087,9 @@ github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= @@ -3476,8 +3483,8 @@ golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80 golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ= -golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -3665,8 +3672,9 @@ golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -3702,8 +3710,9 @@ golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -3722,8 +3731,9 @@ 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-20220819030929-7fc1605a5dde/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.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/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-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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= @@ -3914,8 +3924,9 @@ golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -3930,8 +3941,9 @@ golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -4196,8 +4208,9 @@ google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4q google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.114.0 h1:1xQPji6cO2E2vLiI+C/XiFAnsn1WV3mjaEwGLhi3grE= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -4368,8 +4381,9 @@ google.golang.org/genproto v0.0.0-20230202175211-008b39050e57/go.mod h1:RGgjbofJ google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -4426,8 +4440,9 @@ google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsA google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc v1.56.1 h1:z0dNfjIl0VpaZ9iSVjA6daGatAYwPGstTjt5vkRMFkQ= +google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= From 60d0ca108ff48f51e43a9c3dacc50f810e27d458 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 10 Jul 2023 00:56:30 +0530 Subject: [PATCH 04/90] version upgrade go, remove tendermint --- .github/workflows/build.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/golangci-lint.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 2 +- Makefile | 8 ++++---- README.md | 2 +- go.mod | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 053e7b2dd..619159dac 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: - name: Set up Go 1.x uses: actions/setup-go@v4.0.1 with: - go-version: 1.19 + go-version: 1.20 id: go - name: Check out code into the Go module directory˛˜ diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 1087b5951..73eb2f706 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -19,7 +19,7 @@ jobs: uses: actions/checkout@v3 - uses: actions/setup-go@v4.0.1 with: - go-version: 1.19 + go-version: 1.20 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 12a02cd0e..f3425749c 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/setup-go@v4.0.1 with: - go-version: 1.19 # we run the linter with go 1.19 to match dev laptops even though we use 1.18 for the chain (don't update the chain to 1.19 please-- there is an issue in golang causing 1.19 to output some hashes differently from 1.18) + go-version: 1.20 # we run the linter with go 1.19 to match dev laptops even though we use 1.18 for the chain (don't update the chain to 1.19 please-- there is an issue in golang causing 1.19 to output some hashes differently from 1.18) - uses: actions/checkout@v3 - name: golangci-lint uses: golangci/golangci-lint-action@v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bb420387f..9c85cb511 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: - name: Set up Go 1.x uses: actions/setup-go@v4.0.1 with: - go-version: 1.19 + go-version: 1.20 id: go - name: Check out code into the Go module directory diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 37bbce692..4fe1ab26e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -41,7 +41,7 @@ jobs: name: Setup Golang uses: actions/setup-go@v4.0.1 with: - go-version: 1.19 + go-version: 1.20 - name: Display go version run: go version diff --git a/Makefile b/Makefile index 7d8547e30..a919992d0 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ endif PACKAGES_SIMTEST=$(shell go list ./... | grep '/simulation') LEDGER_ENABLED ?= true SDK_PACK := $(shell go list -m github.com/cosmos/cosmos-sdk | sed 's/ /\@/g') -TM_VERSION := $(shell go list -m github.com/tendermint/tendermint | sed 's:.* ::') # grab everything after the space in "github.com/tendermint/tendermint v0.34.7" +TM_VERSION := $(shell go list -m github.com/cometbft/cometbft | sed 's:.* ::') # grab everything after the space in "github.com/cometbft/cometbft v0.37.2" DOCKER := $(shell which docker) DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace bufbuild/buf:1.0.0-rc8 BUILDDIR ?= $(CURDIR)/build @@ -71,7 +71,7 @@ ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=comdex \ -X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \ -X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \ -X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)" \ - -X github.com/tendermint/tendermint/version.TMCoreSemVer=$(TM_VERSION) + -X github.com/cometbft/cometbft/version.TMCoreSemVer=$(TM_VERSION) ifeq (cleveldb,$(findstring cleveldb,$(COMDEX_BUILD_OPTIONS))) ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend=cleveldb @@ -94,8 +94,8 @@ endif #$(info $$BUILD_FLAGS is [$(BUILD_FLAGS)]) check_version: -ifneq ($(GO_MINOR_VERSION),19) - @echo "ERROR: Please upgrade Go version to 1.19+" +ifneq ($(GO_MINOR_VERSION),20) + @echo "ERROR: Please upgrade Go version to 1.20+" exit 1 endif diff --git a/README.md b/README.md index 04428c73f..93f6fad5f 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ If you have technical questions or concerns, ask a developer or community member ### Installation -Requires [Go 1.19+](https://golang.org/dl/) +Requires [Go 1.20+](https://golang.org/dl/) ### Linux diff --git a/go.mod b/go.mod index a09d4fe29..47bfe9229 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/comdex-official/comdex -go 1.19 +go 1.20 require ( github.com/CosmWasm/wasmd v0.40.2 From c66550ef73ff31df00134a977dd4756bef948ac3 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 10 Jul 2023 01:44:58 +0530 Subject: [PATCH 05/90] workflow updated --- .github/workflows/build.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/golangci-lint.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 619159dac..bf2b2b938 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: - name: Set up Go 1.x uses: actions/setup-go@v4.0.1 with: - go-version: 1.20 + go-version: 1.20.5 id: go - name: Check out code into the Go module directory˛˜ diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 73eb2f706..8c34a32fb 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -19,7 +19,7 @@ jobs: uses: actions/checkout@v3 - uses: actions/setup-go@v4.0.1 with: - go-version: 1.20 + go-version: 1.20.5 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index f3425749c..d3ec605b0 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/setup-go@v4.0.1 with: - go-version: 1.20 # we run the linter with go 1.19 to match dev laptops even though we use 1.18 for the chain (don't update the chain to 1.19 please-- there is an issue in golang causing 1.19 to output some hashes differently from 1.18) + go-version: 1.20.5 # we run the linter with go 1.19 to match dev laptops even though we use 1.18 for the chain (don't update the chain to 1.19 please-- there is an issue in golang causing 1.19 to output some hashes differently from 1.18) - uses: actions/checkout@v3 - name: golangci-lint uses: golangci/golangci-lint-action@v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9c85cb511..b90949eec 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: - name: Set up Go 1.x uses: actions/setup-go@v4.0.1 with: - go-version: 1.20 + go-version: 1.20.5 id: go - name: Check out code into the Go module directory diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4fe1ab26e..abe696c52 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -41,7 +41,7 @@ jobs: name: Setup Golang uses: actions/setup-go@v4.0.1 with: - go-version: 1.20 + go-version: 1.20.5 - name: Display go version run: go version From e80964bccb7f73e7bc524e87f66ca0145c36b83d Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 10 Jul 2023 16:41:41 +0530 Subject: [PATCH 06/90] yml fix --- .github/workflows/golangci-lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index d3ec605b0..c687d75be 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/setup-go@v4.0.1 with: - go-version: 1.20.5 # we run the linter with go 1.19 to match dev laptops even though we use 1.18 for the chain (don't update the chain to 1.19 please-- there is an issue in golang causing 1.19 to output some hashes differently from 1.18) + go-version: 1.20.5 # we run the linter with go 1.20 to match dev laptops even though we use 1.18 for the chain (don't update the chain to 1.19 please-- there is an issue in golang causing 1.19 to output some hashes differently from 1.18) - uses: actions/checkout@v3 - name: golangci-lint uses: golangci/golangci-lint-action@v3 From 80a6ab06cac16508826cd02bb39002e8d028cb75 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 12 Jul 2023 04:03:47 +0530 Subject: [PATCH 07/90] fixes added for app.go, upgrades, pool --- app/app.go | 50 +++++++++++++------------ app/upgrades/mainnet/v11/upgrades.go | 4 +- app/upgrades/mainnet/v5/upgrades.go | 2 +- app/upgrades/testnet/v2_0_0/upgrades.go | 2 +- x/liquidity/keeper/pool.go | 2 +- 5 files changed, 31 insertions(+), 29 deletions(-) diff --git a/app/app.go b/app/app.go index b35eb68ca..fa5ae746a 100644 --- a/app/app.go +++ b/app/app.go @@ -492,16 +492,17 @@ func New( app.AccountKeeper = authkeeper.NewAccountKeeper( app.cdc, app.keys[authtypes.StoreKey], - app.GetSubspace(authtypes.ModuleName), authtypes.ProtoBaseAccount, app.ModuleAccountsPermissions(), + AccountAddressPrefix, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) app.BankKeeper = bankkeeper.NewBaseKeeper( app.cdc, app.keys[banktypes.StoreKey], app.AccountKeeper, - app.GetSubspace(banktypes.ModuleName), - app.ModuleAccountAddrs(), + nil, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) stakingKeeper := stakingkeeper.NewKeeper( app.cdc, @@ -513,39 +514,42 @@ func New( app.MintKeeper = mintkeeper.NewKeeper( app.cdc, app.keys[minttypes.StoreKey], - app.GetSubspace(minttypes.ModuleName), - &stakingKeeper, + stakingKeeper, app.AccountKeeper, app.BankKeeper, authtypes.FeeCollectorName, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) app.DistrKeeper = distrkeeper.NewKeeper( app.cdc, app.keys[distrtypes.StoreKey], - app.GetSubspace(distrtypes.ModuleName), app.AccountKeeper, app.BankKeeper, - &stakingKeeper, + stakingKeeper, authtypes.FeeCollectorName, - app.ModuleAccountAddrs(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) app.SlashingKeeper = slashingkeeper.NewKeeper( app.cdc, + encoding.Amino, app.keys[slashingtypes.StoreKey], - &stakingKeeper, - app.GetSubspace(slashingtypes.ModuleName), + stakingKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) app.CrisisKeeper = crisiskeeper.NewKeeper( - app.GetSubspace(crisistypes.ModuleName), + app.cdc, + app.keys[crisistypes.StoreKey], invCheckPeriod, app.BankKeeper, authtypes.FeeCollectorName, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) app.AuthzKeeper = authzkeeper.NewKeeper( keys[authzkeeper.StoreKey], app.cdc, baseApp.MsgServiceRouter(), + app.AccountKeeper, ) app.UpgradeKeeper = upgradekeeper.NewKeeper( @@ -554,6 +558,7 @@ func New( app.cdc, homePath, app.BaseApp, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) // register the staking hooks // NOTE: StakingKeeper above is passed by reference, so that it will contain these hooks @@ -585,6 +590,7 @@ func New( app.ICAHostKeeper = icahostkeeper.NewKeeper( appCodec, app.keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), + app.IbcKeeper.ChannelKeeper, // ICS4Wrapper app.IbcKeeper.ChannelKeeper, &app.IbcKeeper.PortKeeper, app.AccountKeeper, @@ -787,18 +793,18 @@ func New( if err != nil { panic(fmt.Sprintf("error while reading wasm config: %s", err)) } - supportedFeatures := "iterator,staking,stargate,comdex,cosmwasm_1_1" + supportedFeatures := "iterator,staking,stargate,comdex,cosmwasm_1_1,cosmwasm_1_2" wasmOpts = append(cwasm.RegisterCustomPlugins(&app.LockerKeeper, &app.TokenmintKeeper, &app.AssetKeeper, &app.Rewardskeeper, &app.CollectorKeeper, &app.LiquidationKeeper, &app.AuctionKeeper, &app.EsmKeeper, &app.VaultKeeper, &app.LendKeeper, &app.LiquidityKeeper), wasmOpts...) app.WasmKeeper = wasmkeeper.NewKeeper( app.cdc, keys[wasmtypes.StoreKey], - app.GetSubspace(wasmtypes.ModuleName), app.AccountKeeper, app.BankKeeper, app.StakingKeeper, - app.DistrKeeper, + distrkeeper.NewQuerier(app.DistrKeeper), + app.IbcKeeper.ChannelKeeper, // ICS4Wrapper app.IbcKeeper.ChannelKeeper, &app.IbcKeeper.PortKeeper, scopedWasmKeeper, @@ -808,6 +814,7 @@ func New( wasmDir, wasmConfig, supportedFeatures, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), wasmOpts..., ) @@ -820,7 +827,7 @@ func New( govRouter := govtypesv1beta1.NewRouter() govRouter.AddRoute(govtypes.RouterKey, govtypesv1beta1.ProposalHandler). AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). - AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)). + AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(&app.UpgradeKeeper)). AddRoute(assettypes.RouterKey, asset.NewUpdateAssetProposalHandler(app.AssetKeeper)). AddRoute(lendtypes.RouterKey, lend.NewLendHandler(app.LendKeeper)). AddRoute(bandoraclemoduletypes.RouterKey, bandoraclemodule.NewFetchPriceHandler(app.BandoracleKeeper)). @@ -892,11 +899,11 @@ func New( capability.NewAppModule(app.cdc, *app.CapabilityKeeper, false), crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), gov.NewAppModule(app.cdc, &app.GovKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(govtypes.ModuleName)), - mint.NewAppModule(app.cdc, app.MintKeeper, app.AccountKeeper), + mint.NewAppModule(app.cdc, app.MintKeeper, app.AccountKeeper, nil, app.GetSubspace(minttypes.ModuleName)), slashing.NewAppModule(app.cdc, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName)), distr.NewAppModule(app.cdc, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)), staking.NewAppModule(app.cdc, &app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)), - upgrade.NewAppModule(app.UpgradeKeeper), + upgrade.NewAppModule(&app.UpgradeKeeper), evidence.NewAppModule(app.EvidenceKeeper), authzmodule.NewAppModule(app.cdc, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), ibc.NewAppModule(app.IbcKeeper), @@ -912,7 +919,7 @@ func New( collector.NewAppModule(app.cdc, app.CollectorKeeper, app.AccountKeeper, app.BankKeeper), esm.NewAppModule(app.cdc, app.EsmKeeper, app.AccountKeeper, app.BankKeeper, app.AssetKeeper), lend.NewAppModule(app.cdc, app.LendKeeper, app.AccountKeeper, app.BankKeeper), - wasm.NewAppModule(app.cdc, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + wasm.NewAppModule(app.cdc, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)), auction.NewAppModule(app.cdc, app.AuctionKeeper, app.AccountKeeper, app.BankKeeper, app.CollectorKeeper, app.AssetKeeper, app.EsmKeeper), tokenmint.NewAppModule(app.cdc, app.TokenmintKeeper, app.AccountKeeper, app.BankKeeper), liquidity.NewAppModule(app.cdc, app.LiquidityKeeper, app.AccountKeeper, app.BankKeeper, app.AssetKeeper), @@ -1320,11 +1327,6 @@ func (a *App) RegisterAPIRoutes(server *api.Server, apiConfig serverconfig.APICo } } -// RegisterNodeService registers the node gRPC Query service. -func (a *App) RegisterNodeService(ctx client.Context) { - nodeservice.RegisterNodeService(ctx, a.GRPCQueryRouter()) -} - // RegisterSwaggerAPI registers swagger route with API Server. func RegisterSwaggerAPI(ctx client.Context, rtr *mux.Router) { statikFS, err := fs.New() @@ -1409,7 +1411,7 @@ func (a *App) registerUpgradeHandlers() { } } -func upgradeHandlers(upgradeInfo storetypes.UpgradeInfo, a *App, storeUpgrades *storetypes.StoreUpgrades) *storetypes.StoreUpgrades { +func upgradeHandlers(upgradeInfo upgradetypes.Plan, a *App, storeUpgrades *storetypes.StoreUpgrades) *storetypes.StoreUpgrades { switch { case upgradeInfo.Name == mv12.UpgradeName && !a.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height): diff --git a/app/upgrades/mainnet/v11/upgrades.go b/app/upgrades/mainnet/v11/upgrades.go index 736ac65c0..9f20da82d 100644 --- a/app/upgrades/mainnet/v11/upgrades.go +++ b/app/upgrades/mainnet/v11/upgrades.go @@ -23,7 +23,7 @@ import ( upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" icahostkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper" icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" + // icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" ) @@ -92,7 +92,7 @@ func CreateUpgradeHandlerV11( return func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { ctx.Logger().Info("Applying main net upgrade - v.11.5.0") - fromVM[icatypes.ModuleName] = mm.Modules[icatypes.ModuleName].ConsensusVersion() + // fromVM[icatypes.ModuleName] = mm.Modules[icatypes.ModuleName].ConsensusVersion() hostParams := icahosttypes.Params{ HostEnabled: true, diff --git a/app/upgrades/mainnet/v5/upgrades.go b/app/upgrades/mainnet/v5/upgrades.go index 4c605852c..e0028d2ee 100644 --- a/app/upgrades/mainnet/v5/upgrades.go +++ b/app/upgrades/mainnet/v5/upgrades.go @@ -240,7 +240,7 @@ func CreateUpgradeHandler( // Deleting these modules from the upgrades current state // Add Interchain Accounts host module // set the ICS27 consensus version so InitGenesis is not run - fromVM[icatypes.ModuleName] = mm.Modules[icatypes.ModuleName].ConsensusVersion() + // fromVM[icatypes.ModuleName] = mm.Modules[icatypes.ModuleName].ConsensusVersion() // create ICS27 Controller submodule params, controller module not enabled. controllerParams := icacontrollertypes.Params{} diff --git a/app/upgrades/testnet/v2_0_0/upgrades.go b/app/upgrades/testnet/v2_0_0/upgrades.go index 222e06a69..1b63a71cd 100644 --- a/app/upgrades/testnet/v2_0_0/upgrades.go +++ b/app/upgrades/testnet/v2_0_0/upgrades.go @@ -40,7 +40,7 @@ func CreateUpgradeHandlerV2( // Add Interchain Accounts host module // set the ICS27 consensus version so InitGenesis is not run - fromVM[icatypes.ModuleName] = mm.Modules[icatypes.ModuleName].ConsensusVersion() + // fromVM[icatypes.ModuleName] = mm.Modules[icatypes.ModuleName].ConsensusVersion() // create ICS27 Controller submodule params, controller module not enabled. controllerParams := icacontrollertypes.Params{} diff --git a/x/liquidity/keeper/pool.go b/x/liquidity/keeper/pool.go index fbc3c622f..b8c5747c7 100644 --- a/x/liquidity/keeper/pool.go +++ b/x/liquidity/keeper/pool.go @@ -548,7 +548,7 @@ func (k Keeper) FinishDepositRequest(ctx sdk.Context, req types.DepositRequest, return nil } - refundingCoins := req.DepositCoins.Sub(req.AcceptedCoins) + refundingCoins := req.DepositCoins.Sub(req.AcceptedCoins...) if !refundingCoins.IsZero() { if err := k.bankKeeper.SendCoins(ctx, types.GlobalEscrowAddress, req.GetDepositor(), refundingCoins); err != nil { return err From 15813fa982056a6fc31c755bb210c9fd35d71b28 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 13 Jul 2023 04:01:08 +0530 Subject: [PATCH 08/90] testutil, ante, tx fixes --- app/ante.go | 9 +++--- testutil/network/network.go | 2 +- types/utils.go | 2 +- x/asset/client/cli/tx.go | 24 +++++++++++++--- x/lend/client/cli/tx.go | 42 +++++++++++++++++++++++----- x/liquidity/client/testutil/suite.go | 2 +- x/rewards/client/cli/tx.go | 6 +++- x/vault/client/testutil/suite.go | 4 +-- 8 files changed, 69 insertions(+), 22 deletions(-) diff --git a/app/ante.go b/app/ante.go index 6f9289de3..b9dfcfa1e 100644 --- a/app/ante.go +++ b/app/ante.go @@ -9,7 +9,7 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" - ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" + // ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" storetypes "github.com/cosmos/cosmos-sdk/store/types" ) @@ -45,21 +45,20 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewSetUpContextDecorator(), wasmkeeper.NewLimitSimulationGasDecorator(options.wasmConfig.SimulationGasLimit), wasmkeeper.NewCountTXDecorator(options.txCounterStoreKey), - ante.NewRejectExtensionOptionsDecorator(), decorators.NewGovPreventSpamDecorator(options.Cdc, options.GovKeeper), - ante.NewMempoolFeeDecorator(), + ante.NewExtensionOptionsDecorator(options.ExtensionOptionChecker), ante.NewValidateBasicDecorator(), ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), - ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper), + ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewSetPubKeyDecorator(options.AccountKeeper), ante.NewValidateSigCountDecorator(options.AccountKeeper), ante.NewSigGasConsumeDecorator(options.AccountKeeper, sigGasConsumer), ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler), ante.NewIncrementSequenceDecorator(options.AccountKeeper), - ibcante.NewAnteDecorator(options.IBCChannelKeeper), + // ibcante.NewAnteDecorator(options.IBCChannelKeeper), } return sdk.ChainAnteDecorators(anteDecorators...), nil diff --git a/testutil/network/network.go b/testutil/network/network.go index 85165ace3..bbf40cd21 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -37,7 +37,7 @@ func New(t *testing.T, configs ...network.Config) *network.Network { } else { cfg = configs[0] } - net := network.New(t, cfg) + net, _ := network.New(t,t.TempDir(), cfg) t.Cleanup(net.Cleanup) return net } diff --git a/types/utils.go b/types/utils.go index f2b44715e..083e193ad 100644 --- a/types/utils.go +++ b/types/utils.go @@ -172,7 +172,7 @@ func GenAndDeliverTxWithFees(txCtx simulation.OperationInput, gas uint64, fees s var err error - _, hasNeg := spendable.SafeSub(txCtx.CoinsSpentInMsg) + _, hasNeg := spendable.SafeSub(txCtx.CoinsSpentInMsg...) if hasNeg { return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "message doesn't leave room for fees"), nil, err } diff --git a/x/asset/client/cli/tx.go b/x/asset/client/cli/tx.go index d563b9686..44c666bed 100644 --- a/x/asset/client/cli/tx.go +++ b/x/asset/client/cli/tx.go @@ -41,7 +41,11 @@ Sample json content return err } - txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } + txf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewCreateMultipleAssets(clientCtx, txf, cmd.Flags()) if err != nil { @@ -155,7 +159,11 @@ Sample json content return err } - txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } + txf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewCreateAssets(clientCtx, txf, cmd.Flags()) if err != nil { @@ -721,7 +729,11 @@ Sample json content return err } - txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } + txf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewCreateAssetInAppMsg(clientCtx, txf, cmd.Flags()) if err != nil { @@ -839,7 +851,11 @@ Sample json content return err } - txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } + txf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewCreateMultipleAssetsPairs(clientCtx, txf, cmd.Flags()) if err != nil { diff --git a/x/lend/client/cli/tx.go b/x/lend/client/cli/tx.go index 4ac9e2489..1027a3bac 100644 --- a/x/lend/client/cli/tx.go +++ b/x/lend/client/cli/tx.go @@ -465,7 +465,11 @@ func CmdAddNewLendPairsProposal() *cobra.Command { if err != nil { return err } - txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } + txf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewCreateNewLendPairs(clientCtx, txf, cmd.Flags()) if err != nil { @@ -548,7 +552,11 @@ func CmdAddNewMultipleLendPairsProposal() *cobra.Command { if err != nil { return err } - txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } + txf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewCreateNewMultipleLendPairs(clientCtx, txf, cmd.Flags()) if err != nil { @@ -637,7 +645,11 @@ func CmdAddPoolProposal() *cobra.Command { if err != nil { return err } - txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } + txf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewCreateLendPool(clientCtx, txf, cmd.Flags()) if err != nil { @@ -866,7 +878,11 @@ func CmdAddNewAssetRatesParamsProposal() *cobra.Command { if err != nil { return err } - txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } + txf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewCreateassetRatesParams(clientCtx, txf, cmd.Flags()) if err != nil { @@ -985,7 +1001,11 @@ func CmdAddNewAuctionParamsProposal() *cobra.Command { if err != nil { return err } - txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } + txf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewAddAuctionParams(clientCtx, txf, cmd.Flags()) if err != nil { @@ -1126,7 +1146,11 @@ func CmdAddPoolPairsProposal() *cobra.Command { if err != nil { return err } - txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } + txf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewCreateLendPoolPairs(clientCtx, txf, cmd.Flags()) if err != nil { @@ -1214,7 +1238,11 @@ func CmdAddAssetRatesPoolPairsProposal() *cobra.Command { if err != nil { return err } - txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } + txf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewCreateAssetRatesPoolPairs(clientCtx, txf, cmd.Flags()) if err != nil { diff --git a/x/liquidity/client/testutil/suite.go b/x/liquidity/client/testutil/suite.go index 30d778f4f..8d850282a 100644 --- a/x/liquidity/client/testutil/suite.go +++ b/x/liquidity/client/testutil/suite.go @@ -60,7 +60,7 @@ func (s *LiquidityIntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) s.val = s.network.Validators[0] diff --git a/x/rewards/client/cli/tx.go b/x/rewards/client/cli/tx.go index 213f9aa2e..98b686f5c 100644 --- a/x/rewards/client/cli/tx.go +++ b/x/rewards/client/cli/tx.go @@ -50,7 +50,11 @@ func NewCreateGaugeCmd() *cobra.Command { return err } - txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } + txf = txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) gaugeTypeID, err := strconv.ParseUint(args[0], 10, 64) if err != nil { diff --git a/x/vault/client/testutil/suite.go b/x/vault/client/testutil/suite.go index 50e1dc4ea..25ed2c192 100644 --- a/x/vault/client/testutil/suite.go +++ b/x/vault/client/testutil/suite.go @@ -13,7 +13,7 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" servertypes "github.com/cosmos/cosmos-sdk/server/types" - store "github.com/cosmos/cosmos-sdk/store/types" + // store "github.com/cosmos/cosmos-sdk/store/types" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" "github.com/cosmos/cosmos-sdk/testutil/network" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" @@ -64,7 +64,7 @@ func (s *VaultIntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) s.val = s.network.Validators[0] From abf24882e40761927bbef180ce0ffa398691064c Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 13 Jul 2023 17:47:15 +0530 Subject: [PATCH 09/90] added simapp, fixed test and utils --- app/decorators/gov_filter.go | 2 +- app/test_helpers.go | 7 ++++--- app/wasm/test/helpers_test.go | 14 ++++++++++++-- cmd/comdex/testnet.go | 4 ++-- go.mod | 1 + go.sum | 2 ++ types/utils.go | 6 ++++-- 7 files changed, 26 insertions(+), 10 deletions(-) diff --git a/app/decorators/gov_filter.go b/app/decorators/gov_filter.go index 110274bf9..0dc94c5de 100644 --- a/app/decorators/gov_filter.go +++ b/app/decorators/gov_filter.go @@ -42,7 +42,7 @@ func (gpsd GovPreventSpamDecorator) checkSpamSubmitProposalMsg(ctx sdk.Context, validMsg := func(m sdk.Msg) error { if msg, ok := m.(*govtypes.MsgSubmitProposal); ok { // prevent spam gov msg - depositParams := gpsd.govKeeper.GetDepositParams(ctx) + depositParams := gpsd.govKeeper.GetParams(ctx) miniumInitialDeposit := gpsd.calcMiniumInitialDeposit(depositParams.MinDeposit) if msg.InitialDeposit.IsAllLT(miniumInitialDeposit) { return sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "not enough initial deposit. required: %v", miniumInitialDeposit) diff --git a/app/test_helpers.go b/app/test_helpers.go index b70eb5ff8..7f0c693ad 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -3,6 +3,7 @@ package app import ( "encoding/json" "time" + simappparams "cosmossdk.io/simapp/params" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" @@ -32,8 +33,8 @@ var DefaultConsensusParams = &tmproto.ConsensusParams{ }, } -func MakeTestEncodingConfig() simtestutil.EncodingConfig { - encodingConfig := simtestutil.MakeTestEncodingConfig() +func MakeTestEncodingConfig() simappparams.EncodingConfig { + encodingConfig := simappparams.MakeTestEncodingConfig() std.RegisterLegacyAminoCodec(encodingConfig.Amino) std.RegisterInterfaces(encodingConfig.InterfaceRegistry) ModuleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino) @@ -46,7 +47,7 @@ func setup(withGenesis bool, invCheckPeriod uint) (*App, GenesisState) { encCdc := MakeTestEncodingConfig() app := New(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, invCheckPeriod, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, GetWasmEnabledProposals(), EmptyWasmOpts) if withGenesis { - return app, NewDefaultGenesisState(encCdc.Marshaler) + return app, NewDefaultGenesisState(encCdc.Codec) } return app, GenesisState{} } diff --git a/app/wasm/test/helpers_test.go b/app/wasm/test/helpers_test.go index 0efcab2d9..8a718309e 100644 --- a/app/wasm/test/helpers_test.go +++ b/app/wasm/test/helpers_test.go @@ -8,13 +8,15 @@ import ( "github.com/comdex-official/comdex/app/wasm/bindings" assetTypes "github.com/comdex-official/comdex/x/asset/types" tokenmintTypes "github.com/comdex-official/comdex/x/tokenmint/types" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" "github.com/stretchr/testify/require" "github.com/cometbft/cometbft/crypto" "github.com/cometbft/cometbft/crypto/ed25519" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + // simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/comdex-official/comdex/app" @@ -33,7 +35,7 @@ func CreateTestInput() (*app.App, *sdk.Context) { } func FundAccount(t *testing.T, ctx sdk.Context, comdex *app.App, acct sdk.AccAddress) { - err := simtestutil.FundAccount(comdex.BankKeeper, ctx, acct, sdk.NewCoins( + err := FundAccountFunc(comdex.BankKeeper, ctx, acct, sdk.NewCoins( sdk.NewCoin("ucmdx", sdk.NewInt(10000000000)), )) require.NoError(t, err) @@ -235,3 +237,11 @@ func MsgMintNewTokens(app *app.App, ctx1 sdk.Context) { fmt.Println(err) } } + +func FundAccountFunc(bankKeeper bankkeeper.Keeper, ctx sdk.Context, addr sdk.AccAddress, amounts sdk.Coins) error { + if err := bankKeeper.MintCoins(ctx, minttypes.ModuleName, amounts); err != nil { + return err + } + + return bankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, addr, amounts) +} diff --git a/cmd/comdex/testnet.go b/cmd/comdex/testnet.go index 9744b1cf4..52a4740fe 100644 --- a/cmd/comdex/testnet.go +++ b/cmd/comdex/testnet.go @@ -161,7 +161,7 @@ func InitTestnet( memo := fmt.Sprintf("%s@%s:26656", nodeIDs[i], ip) genFiles = append(genFiles, nodeConfig.GenesisFile()) - kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, nodeDir, inBuf) + kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, nodeDir, inBuf, clientCtx.Codec) if err != nil { return err } @@ -325,7 +325,7 @@ func collectGenFiles( return err } - nodeAppState, err := genutil.GenAppStateFromConfig(clientCtx.Codec, clientCtx.TxConfig, nodeConfig, initCfg, *genDoc, genBalIterator) + nodeAppState, err := genutil.GenAppStateFromConfig(clientCtx.Codec, clientCtx.TxConfig, nodeConfig, initCfg, *genDoc, genBalIterator, genutiltypes.DefaultMessageValidator) if err != nil { return err } diff --git a/go.mod b/go.mod index 47bfe9229..e31f1e150 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/comdex-official/comdex go 1.20 require ( + cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff github.com/CosmWasm/wasmd v0.40.2 github.com/CosmWasm/wasmvm v1.2.4 github.com/bandprotocol/bandchain-packet v0.0.3 diff --git a/go.sum b/go.sum index 7c3d6f328..393be7d2f 100644 --- a/go.sum +++ b/go.sum @@ -567,6 +567,8 @@ cosmossdk.io/math v1.0.0-beta.4/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp cosmossdk.io/math v1.0.0-beta.6/go.mod h1:gUVtWwIzfSXqcOT+lBVz2jyjfua8DoBdzRsIyaUAT/8= cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff h1:P1ialzTepD1oxdNPYc5N8Eggq3RdejZq3cJs8YYMs9Y= +cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff/go.mod h1:AKzx6Mb544LjJ9RHmGFHjY9rEOLiUAi8I0F727TR0dY= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= diff --git a/types/utils.go b/types/utils.go index 083e193ad..099e80d07 100644 --- a/types/utils.go +++ b/types/utils.go @@ -15,6 +15,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" ) // GetShareValue multiplies with truncation by receiving int amount and decimal ratio and returns int result. @@ -143,7 +144,8 @@ func RandomDec(r *rand.Rand, min, max sdk.Dec) sdk.Dec { // GenAndDeliverTx generates a transactions and delivers it. func GenAndDeliverTx(txCtx simulation.OperationInput, fees sdk.Coins, gas uint64) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { account := txCtx.AccountKeeper.GetAccount(txCtx.Context, txCtx.SimAccount.Address) - tx, err := helpers.GenTx( + tx, err := simtestutil.GenSignedMockTx( + rand.New(rand.NewSource(time.Now().UnixNano())), txCtx.TxGen, []sdk.Msg{txCtx.Msg}, fees, @@ -157,7 +159,7 @@ func GenAndDeliverTx(txCtx simulation.OperationInput, fees sdk.Coins, gas uint64 return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "unable to generate mock tx"), nil, err } - _, _, err = txCtx.App.Deliver(txCtx.TxGen.TxEncoder(), tx) + _, _, err = txCtx.App.SimDeliver(txCtx.TxGen.TxEncoder(), tx) if err != nil { return simtypes.NoOpMsg(txCtx.ModuleName, txCtx.MsgType, "unable to deliver tx"), nil, err } From e880f288a9bd757bf73e10d82d281e68d1991339 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 19 Jul 2023 01:33:10 +0530 Subject: [PATCH 10/90] ibc-hooks added --- app/app.go | 10 +++++----- go.mod | 12 ++++++------ go.sum | 11 ++++++++--- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/app/app.go b/app/app.go index fa5ae746a..3bfe3218b 100644 --- a/app/app.go +++ b/app/app.go @@ -16,11 +16,11 @@ import ( authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation" - // bump47: uncomment below 6 - // ibchooks "github.com/osmosis-labs/osmosis/x/ibc-hooks" - // ibchookskeeper "github.com/osmosis-labs/osmosis/x/ibc-hooks/keeper" - // ibchookstypes "github.com/osmosis-labs/osmosis/x/ibc-hooks/types" + ibchooks "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7" + ibchookskeeper "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/keeper" + ibchookstypes "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types" + // bump47: uncomment below 3 // ibcratelimit "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit" // "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/ibcratelimitmodule" // ibcratelimittypes "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/types" @@ -40,8 +40,8 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" nodeservice "github.com/cosmos/cosmos-sdk/client/grpc/node" + "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/server/api" diff --git a/go.mod b/go.mod index e31f1e150..fb94c6b41 100644 --- a/go.mod +++ b/go.mod @@ -26,12 +26,12 @@ require ( ) require ( + // bump47: uncomment below + // github.com/osmosis-labs/osmosis/v15 v15.1.2 + github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230629164013-34f5e666f806 github.com/cosmos/ibc-go/v7 v7.1.0 github.com/cosmos/ics23/go v0.10.0 // indirect github.com/golangci/golangci-lint v1.51.2 - // bump47: uncomment below 2 - // github.com/osmosis-labs/osmosis/v15 v15.1.2 - // github.com/osmosis-labs/osmosis/x/ibc-hooks v0.0.6 github.com/rakyll/statik v0.1.7 github.com/spf13/pflag v1.0.5 github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0-20230523193151-73dea436e53f @@ -48,7 +48,7 @@ require ( cloud.google.com/go/iam v0.13.0 // indirect cloud.google.com/go/storage v1.29.0 // indirect cosmossdk.io/api v0.3.1 // indirect - cosmossdk.io/core v0.5.1 // indirect + cosmossdk.io/core v0.6.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect cosmossdk.io/errors v1.0.0-beta.7 // indirect cosmossdk.io/log v1.1.0 // indirect @@ -56,7 +56,7 @@ require ( cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.1 // indirect + github.com/99designs/keyring v1.2.2 // indirect github.com/Abirdcfly/dupword v0.0.9 // indirect github.com/Antonboom/errname v0.1.7 // indirect github.com/Antonboom/nilnil v0.1.1 // indirect @@ -92,7 +92,7 @@ require ( github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 // indirect diff --git a/go.sum b/go.sum index 393be7d2f..e3649aae4 100644 --- a/go.sum +++ b/go.sum @@ -554,8 +554,9 @@ cosmossdk.io/api v0.3.0/go.mod h1:2HDRQHwVIyklENrrXko0E/waZrRFZWHhPyhcBO4qHq4= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.3.2/go.mod h1:CO7vbe+evrBvHc0setFHL/u7nlY7HJGzdRSBkT/sirc= -cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= +cosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s= +cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= @@ -583,8 +584,9 @@ git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFN git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= 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/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= +github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= github.com/Abirdcfly/dupword v0.0.9 h1:MxprGjKq3yDBICXDgEEsyGirIXfMYXkLNT/agPsE1tk= github.com/Abirdcfly/dupword v0.0.9/go.mod h1:PzmHVLLZ27MvHSzV7eFmMXSFArWXZPZmfuuziuUrf2g= @@ -1222,8 +1224,9 @@ github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32/go.mod h1:kwMlEC4 github.com/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= github.com/cosmos/cosmos-proto v1.0.0-alpha8/go.mod h1:6/p+Bc4O8JKeZqe0VqUGTX31eoYqemTT4C1hLCWsO7I= github.com/cosmos/cosmos-proto v1.0.0-beta.1/go.mod h1:8k2GNZghi5sDRFw/scPL8gMSowT1vDA+5ouxL8GjaUE= -github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= +github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= +github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= @@ -1243,6 +1246,8 @@ github.com/cosmos/iavl v0.15.3/go.mod h1:OLjQiAQ4fGD2KDZooyJG9yz+p2ao2IAYSbke8mV github.com/cosmos/iavl v0.20.0-alpha4/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230629164013-34f5e666f806 h1:ygkYdRulR9lGLSYOAQUBOBTyeRKZc1svBw5Bnv9Boe4= +github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230629164013-34f5e666f806/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= github.com/cosmos/ibc-go v1.0.0/go.mod h1:2wHKQUa+BLJMEyN635KrHfmTTwSNHBtXcqdY8JWGuXA= github.com/cosmos/ibc-go/v7 v7.1.0 h1:SCLgs7tqVnzdIDO5MRLgovAnc696vTTKl+8qsTu8IMM= github.com/cosmos/ibc-go/v7 v7.1.0/go.mod h1:7MptlWeIyqmDiuJeRAFqBvXKY8Hybd+rF8vMSmGd2zg= From 74b5ab5659a9100df3dc7530fdcc65344c8d15a9 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 19 Jul 2023 01:43:36 +0530 Subject: [PATCH 11/90] wasm keeper fix --- app/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index 3bfe3218b..e0c79e99e 100644 --- a/app/app.go +++ b/app/app.go @@ -821,7 +821,7 @@ func New( // Pass the contract keeper to all the structs (generally ICS4Wrappers for ibc middlewares) that need it app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) app.RateLimitingICS4Wrapper.ContractKeeper = app.ContractKeeper - app.Ics20WasmHooks.ContractKeeper = app.ContractKeeper + app.Ics20WasmHooks.ContractKeeper = &app.WasmKeeper // register the proposal types govRouter := govtypesv1beta1.NewRouter() From 08f0260eeffbe5e09a37d256bec97d999ea52c91 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 19 Jul 2023 02:10:44 +0530 Subject: [PATCH 12/90] icq keeper fix --- app/app.go | 2 +- app/querier.go | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 app/querier.go diff --git a/app/app.go b/app/app.go index e0c79e99e..a631376c3 100644 --- a/app/app.go +++ b/app/app.go @@ -779,7 +779,7 @@ func New( app.IbcKeeper.ChannelKeeper, &app.IbcKeeper.PortKeeper, app.ScopedICQKeeper, - app.GRPCQueryRouter(), + NewQuerierWrapper(baseApp), ) app.ICQKeeper = &icqKeeper diff --git a/app/querier.go b/app/querier.go new file mode 100644 index 000000000..1cda480f7 --- /dev/null +++ b/app/querier.go @@ -0,0 +1,26 @@ +// this file used from osmosis, ref: https://github.com/CosmosContracts/juno/v16/blob/2ce971f4c6aa85d3ef7ba33d60e0ae74b923ab83/app/keepers/querier.go +// Original Author: https://github.com/nicolaslara + +package app + +import ( + abci "github.com/cometbft/cometbft/abci/types" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// QuerierWrapper is a local wrapper around BaseApp that exports only the Queryable interface. +// This is used to pass the baseApp to Async ICQ without exposing all methods +type QuerierWrapper struct { + querier sdk.Queryable +} + +var _ sdk.Queryable = QuerierWrapper{} + +func NewQuerierWrapper(querier sdk.Queryable) QuerierWrapper { + return QuerierWrapper{querier: querier} +} + +func (q QuerierWrapper) Query(req abci.RequestQuery) abci.ResponseQuery { + return q.querier.Query(req) +} From 9f25cbd67ee5a464a90abf26c05a0005bbe3eb2b Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 19 Jul 2023 02:45:14 +0530 Subject: [PATCH 13/90] keepers fixed --- app/app.go | 50 +++++++++++++++++++++++++++++++------------------- app/export.go | 2 +- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/app/app.go b/app/app.go index a631376c3..3d5b918ce 100644 --- a/app/app.go +++ b/app/app.go @@ -20,6 +20,9 @@ import ( ibchookskeeper "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/keeper" ibchookstypes "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types" + consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" + consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" + // bump47: uncomment below 3 // ibcratelimit "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit" // "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/ibcratelimitmodule" @@ -322,13 +325,13 @@ type App struct { BankBaseKeeper *bankkeeper.BaseKeeper AuthzKeeper authzkeeper.Keeper CapabilityKeeper *capabilitykeeper.Keeper - StakingKeeper stakingkeeper.Keeper + StakingKeeper *stakingkeeper.Keeper SlashingKeeper slashingkeeper.Keeper MintKeeper mintkeeper.Keeper DistrKeeper distrkeeper.Keeper GovKeeper govkeeper.Keeper - CrisisKeeper crisiskeeper.Keeper - UpgradeKeeper upgradekeeper.Keeper + CrisisKeeper *crisiskeeper.Keeper + UpgradeKeeper *upgradekeeper.Keeper ParamsKeeper paramskeeper.Keeper IbcKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly IbcHooksKeeper *ibchookskeeper.Keeper @@ -370,6 +373,8 @@ type App struct { PacketForwardKeeper *packetforwardkeeper.Keeper ICQKeeper *icqkeeper.Keeper + ConsensusParamsKeeper consensusparamkeeper.Keeper + WasmKeeper wasm.Keeper ContractKeeper *wasmkeeper.PermissionedKeeper // the module manager @@ -464,11 +469,13 @@ func New( app.ParamsKeeper.Subspace(packetforwardtypes.ModuleName).WithKeyTable(packetforwardtypes.ParamKeyTable()) // set the BaseApp's parameter store - baseApp.SetParamStore( - app.ParamsKeeper. - Subspace(baseapp.Paramspace). - WithKeyTable(paramskeeper.ConsensusParamsKeyTable()), - ) + // baseApp.SetParamStore( + // app.ParamsKeeper. + // Subspace(baseapp.Paramspace). + // WithKeyTable(paramskeeper.ConsensusParamsKeyTable()), + // ) + app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper(appCodec, keys[consensusparamtypes.StoreKey], authtypes.NewModuleAddress(govtypes.ModuleName).String()) + baseApp.SetParamStore(&app.ConsensusParamsKeeper) // add capability keeper and ScopeToModule for ibc module app.CapabilityKeeper = capabilitykeeper.NewKeeper( @@ -562,12 +569,17 @@ func New( ) // register the staking hooks // NOTE: StakingKeeper above is passed by reference, so that it will contain these hooks - app.StakingKeeper = *stakingKeeper.SetHooks( - stakingtypes.NewMultiStakingHooks( - app.DistrKeeper.Hooks(), - app.SlashingKeeper.Hooks(), - ), + // app.StakingKeeper = *stakingKeeper.SetHooks( + // stakingtypes.NewMultiStakingHooks( + // app.DistrKeeper.Hooks(), + // app.SlashingKeeper.Hooks(), + // ), + // ) + stakingKeeper.SetHooks( + stakingtypes.NewMultiStakingHooks(app.DistrKeeper.Hooks(), + app.SlashingKeeper.Hooks()), ) + app.StakingKeeper = stakingKeeper // Create IBC Keeper app.IbcKeeper = ibckeeper.NewKeeper( @@ -827,7 +839,7 @@ func New( govRouter := govtypesv1beta1.NewRouter() govRouter.AddRoute(govtypes.RouterKey, govtypesv1beta1.ProposalHandler). AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). - AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(&app.UpgradeKeeper)). + AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)). AddRoute(assettypes.RouterKey, asset.NewUpdateAssetProposalHandler(app.AssetKeeper)). AddRoute(lendtypes.RouterKey, lend.NewLendHandler(app.LendKeeper)). AddRoute(bandoraclemoduletypes.RouterKey, bandoraclemodule.NewFetchPriceHandler(app.BandoracleKeeper)). @@ -877,7 +889,7 @@ func New( app.EvidenceKeeper = *evidencekeeper.NewKeeper( app.cdc, app.keys[evidencetypes.StoreKey], - &app.StakingKeeper, + app.StakingKeeper, app.SlashingKeeper, ) app.EvidenceKeeper.SetRouter(evidenceRouter) @@ -897,13 +909,13 @@ func New( vesting.NewAppModule(app.AccountKeeper, app.BankKeeper), bank.NewAppModule(app.cdc, app.BankKeeper, app.AccountKeeper, app.GetSubspace(banktypes.ModuleName)), capability.NewAppModule(app.cdc, *app.CapabilityKeeper, false), - crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), + crisis.NewAppModule(app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), gov.NewAppModule(app.cdc, &app.GovKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(govtypes.ModuleName)), mint.NewAppModule(app.cdc, app.MintKeeper, app.AccountKeeper, nil, app.GetSubspace(minttypes.ModuleName)), slashing.NewAppModule(app.cdc, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName)), distr.NewAppModule(app.cdc, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)), - staking.NewAppModule(app.cdc, &app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)), - upgrade.NewAppModule(&app.UpgradeKeeper), + staking.NewAppModule(app.cdc, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)), + upgrade.NewAppModule(app.UpgradeKeeper), evidence.NewAppModule(app.EvidenceKeeper), authzmodule.NewAppModule(app.cdc, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), ibc.NewAppModule(app.IbcKeeper), @@ -1058,7 +1070,7 @@ func New( packetforwardtypes.ModuleName, ) - app.mm.RegisterInvariants(&app.CrisisKeeper) + app.mm.RegisterInvariants(app.CrisisKeeper) app.configurator = module.NewConfigurator(app.cdc, app.MsgServiceRouter(), app.GRPCQueryRouter()) app.mm.RegisterServices(app.configurator) app.registerUpgradeHandlers() diff --git a/app/export.go b/app/export.go index 4167d3912..153a8f388 100644 --- a/app/export.go +++ b/app/export.go @@ -33,7 +33,7 @@ func (a *App) ExportAppStateAndValidators( return servertypes.ExportedApp{}, err } - validators, err := staking.WriteValidators(ctx, &a.StakingKeeper) + validators, err := staking.WriteValidators(ctx, a.StakingKeeper) if err != nil { return servertypes.ExportedApp{}, err } From 3ba9ed0d2792a782cc1e28ca4f2200b58169b018 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 31 Jul 2023 01:30:42 +0530 Subject: [PATCH 14/90] ibc rate limit included --- app/app.go | 4 + osmoutils/ibc.go | 652 +++++++++++++ .../comdex/ibcratelimit/v1beta1/genesis.proto | 16 + .../comdex/ibcratelimit/v1beta1/params.proto | 12 + proto/comdex/ibcratelimit/v1beta1/query.proto | 27 + proto/comdex/ibcratelimit/v1beta1/query.yml | 10 + x/ibcratelimit/Beaker.toml | 1 + x/ibcratelimit/Cargo.lock | 914 ++++++++++++++++++ x/ibcratelimit/Cargo.toml | 16 + x/ibcratelimit/README.md | 307 ++++++ x/ibcratelimit/bytecode/rate_limiter.wasm | Bin 0 -> 264433 bytes x/ibcratelimit/client/cli/query.go | 21 + x/ibcratelimit/client/grpc/grpc_query.go | 32 + x/ibcratelimit/client/query_proto_wrap.go | 21 + x/ibcratelimit/client/queryproto/query.pb.go | 544 +++++++++++ .../client/queryproto/query.pb.gw.go | 153 +++ .../contracts/rate-limiter/.cargo/config | 3 + .../contracts/rate-limiter/Cargo.toml | 51 + .../contracts/rate-limiter/examples/schema.rs | 13 + .../contracts/rate-limiter/src/contract.rs | 106 ++ .../rate-limiter/src/contract_tests.rs | 399 ++++++++ .../contracts/rate-limiter/src/error.rs | 29 + .../contracts/rate-limiter/src/execute.rs | 249 +++++ .../contracts/rate-limiter/src/helpers.rs | 61 ++ .../rate-limiter/src/integration_tests.rs | 417 ++++++++ .../contracts/rate-limiter/src/lib.rs | 21 + .../contracts/rate-limiter/src/management.rs | 250 +++++ .../contracts/rate-limiter/src/msg.rs | 105 ++ .../contracts/rate-limiter/src/packet.rs | 482 +++++++++ .../contracts/rate-limiter/src/query.rs | 12 + .../contracts/rate-limiter/src/state.rs | 372 +++++++ .../contracts/rate-limiter/src/sudo.rs | 193 ++++ x/ibcratelimit/genesis.go | 20 + x/ibcratelimit/genesis_test.go | 43 + x/ibcratelimit/ibc_middleware_test.go | 540 +++++++++++ x/ibcratelimit/ibc_module.go | 245 +++++ x/ibcratelimit/ibcratelimitmodule/module.go | 136 +++ x/ibcratelimit/ics4_wrapper.go | 109 +++ x/ibcratelimit/rate_limit.go | 154 +++ x/ibcratelimit/types/errors.go | 11 + x/ibcratelimit/types/events.go | 8 + x/ibcratelimit/types/genesis.go | 17 + x/ibcratelimit/types/genesis.pb.go | 329 +++++++ x/ibcratelimit/types/keys.go | 12 + x/ibcratelimit/types/params.go | 73 ++ x/ibcratelimit/types/params.pb.go | 322 ++++++ x/ibcratelimit/types/params_test.go | 79 ++ x/ibcratelimit/types/query.pb.go | 542 +++++++++++ x/ibcratelimit/types/query.pb.gw.go | 153 +++ 49 files changed, 8286 insertions(+) create mode 100644 osmoutils/ibc.go create mode 100644 proto/comdex/ibcratelimit/v1beta1/genesis.proto create mode 100644 proto/comdex/ibcratelimit/v1beta1/params.proto create mode 100644 proto/comdex/ibcratelimit/v1beta1/query.proto create mode 100644 proto/comdex/ibcratelimit/v1beta1/query.yml create mode 100644 x/ibcratelimit/Beaker.toml create mode 100644 x/ibcratelimit/Cargo.lock create mode 100644 x/ibcratelimit/Cargo.toml create mode 100644 x/ibcratelimit/README.md create mode 100644 x/ibcratelimit/bytecode/rate_limiter.wasm create mode 100644 x/ibcratelimit/client/cli/query.go create mode 100644 x/ibcratelimit/client/grpc/grpc_query.go create mode 100644 x/ibcratelimit/client/query_proto_wrap.go create mode 100644 x/ibcratelimit/client/queryproto/query.pb.go create mode 100644 x/ibcratelimit/client/queryproto/query.pb.gw.go create mode 100644 x/ibcratelimit/contracts/rate-limiter/.cargo/config create mode 100644 x/ibcratelimit/contracts/rate-limiter/Cargo.toml create mode 100644 x/ibcratelimit/contracts/rate-limiter/examples/schema.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/contract.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/contract_tests.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/error.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/execute.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/helpers.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/integration_tests.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/lib.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/management.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/msg.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/packet.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/query.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/state.rs create mode 100644 x/ibcratelimit/contracts/rate-limiter/src/sudo.rs create mode 100644 x/ibcratelimit/genesis.go create mode 100644 x/ibcratelimit/genesis_test.go create mode 100644 x/ibcratelimit/ibc_middleware_test.go create mode 100644 x/ibcratelimit/ibc_module.go create mode 100644 x/ibcratelimit/ibcratelimitmodule/module.go create mode 100644 x/ibcratelimit/ics4_wrapper.go create mode 100644 x/ibcratelimit/rate_limit.go create mode 100644 x/ibcratelimit/types/errors.go create mode 100644 x/ibcratelimit/types/events.go create mode 100644 x/ibcratelimit/types/genesis.go create mode 100644 x/ibcratelimit/types/genesis.pb.go create mode 100644 x/ibcratelimit/types/keys.go create mode 100644 x/ibcratelimit/types/params.go create mode 100644 x/ibcratelimit/types/params.pb.go create mode 100644 x/ibcratelimit/types/params_test.go create mode 100644 x/ibcratelimit/types/query.pb.go create mode 100644 x/ibcratelimit/types/query.pb.gw.go diff --git a/app/app.go b/app/app.go index 3d5b918ce..e45e64ffb 100644 --- a/app/app.go +++ b/app/app.go @@ -28,6 +28,10 @@ import ( // "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/ibcratelimitmodule" // ibcratelimittypes "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/types" + ibcratelimit "github.com/comdex-official/comdex/x/ibcratelimit" + "github.com/comdex-official/comdex/x/ibcratelimit/ibcratelimitmodule" + ibcratelimittypes "github.com/comdex-official/comdex/x/ibcratelimit/types" + packetforward "github.com/strangelove-ventures/packet-forward-middleware/v7/router" packetforwardkeeper "github.com/strangelove-ventures/packet-forward-middleware/v7/router/keeper" packetforwardtypes "github.com/strangelove-ventures/packet-forward-middleware/v7/router/types" diff --git a/osmoutils/ibc.go b/osmoutils/ibc.go new file mode 100644 index 000000000..b672b14e7 --- /dev/null +++ b/osmoutils/ibc.go @@ -0,0 +1,652 @@ +package osmoutils + +import ( + "fmt" + "encoding/json" + "context" + "strings" + "github.com/cosmos/cosmos-sdk/client/flags" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + grpc1 "github.com/gogo/protobuf/grpc" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/version" + "github.com/spf13/cobra" + "github.com/spf13/pflag" + "text/template" + "reflect" + "time" + "strconv" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" +) + +type FieldReadLocation = bool + +const paginationType = "*query.PageRequest" + +var lastQueryModuleName string + +type CustomFieldParserFn = func(arg string, flags *pflag.FlagSet) (valueToSet any, usedArg FieldReadLocation, err error) + +type FlagAdvice struct { + HasPagination bool + + // Map of FieldName -> FlagName + CustomFlagOverrides map[string]string + CustomFieldParsers map[string]CustomFieldParserFn + + // Tx sender value + IsTx bool + TxSenderFieldName string + FromValue string +} + +type FlagDesc struct { + RequiredFlags []*pflag.FlagSet + OptionalFlags []*pflag.FlagSet +} + +type QueryDescriptor struct { + Use string + Short string + Long string + + HasPagination bool + + QueryFnName string + + Flags FlagDesc + // Map of FieldName -> FlagName + CustomFlagOverrides map[string]string + // Map of FieldName -> CustomParseFn + CustomFieldParsers map[string]CustomFieldParserFn + + ParseQuery func(args []string, flags *pflag.FlagSet) (proto.Message, error) + + ModuleName string + numArgs int +} + +type LongMetadata struct { + BinaryName string + CommandPrefix string + Short string + + // Newline Example: + ExampleHeader string +} + +const IbcAcknowledgementErrorType = "ibc-acknowledgement-error" + +// NewEmitErrorAcknowledgement creates a new error acknowledgement after having emitted an event with the +// details of the error. +func NewEmitErrorAcknowledgement(ctx sdk.Context, err error, errorContexts ...string) channeltypes.Acknowledgement { + logger := ctx.Logger().With("module", IbcAcknowledgementErrorType) + + attributes := make([]sdk.Attribute, len(errorContexts)+1) + attributes[0] = sdk.NewAttribute("error", err.Error()) + for i, s := range errorContexts { + attributes[i+1] = sdk.NewAttribute("error-context", s) + logger.Error(fmt.Sprintf("error-context: %v", s)) + } + + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( + IbcAcknowledgementErrorType, + attributes..., + ), + }) + + return channeltypes.NewErrorAcknowledgement(err) +} + +// IsAckError checks an IBC acknowledgement to see if it's an error. +// This is a replacement for ack.Success() which is currently not working on some circumstances +func IsAckError(acknowledgement []byte) bool { + var ackErr channeltypes.Acknowledgement_Error + if err := json.Unmarshal(acknowledgement, &ackErr); err == nil && len(ackErr.Error) > 0 { + return true + } + return false +} + + +// Index command, but short is not set. That is left to caller. +func IndexCmd(moduleName string) *cobra.Command { + return &cobra.Command{ + Use: moduleName, + Short: fmt.Sprintf("Querying commands for the %s module", moduleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: indexRunCmd, + } +} + +func indexRunCmd(cmd *cobra.Command, args []string) error { + usageTemplate := `Usage:{{if .HasAvailableSubCommands}} + {{.CommandPath}} [command]{{end}} + +{{if .HasAvailableSubCommands}}Available Commands:{{range .Commands}}{{if .IsAvailableCommand}} + {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}} + +Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}} +` + cmd.SetUsageTemplate(usageTemplate) + return cmd.Help() +} + +func QueryIndexCmd(moduleName string) *cobra.Command { + cmd := IndexCmd(moduleName) + cmd.Short = fmt.Sprintf("Querying commands for the %s module", moduleName) + lastQueryModuleName = moduleName + return cmd +} + +func NewLongMetadata(moduleName string) *LongMetadata { + commandPrefix := fmt.Sprintf("$ %s q %s", version.AppName, moduleName) + return &LongMetadata{ + BinaryName: version.AppName, + CommandPrefix: commandPrefix, + } +} + +func ParseUint(arg string, fieldName string) (uint64, error) { + v, err := strconv.ParseUint(arg, 10, 64) + if err != nil { + return 0, fmt.Errorf("could not parse %s as uint for field %s: %w", arg, fieldName, err) + } + return v, nil +} + +func ParseFloat(arg string, fieldName string) (float64, error) { + v, err := strconv.ParseFloat(arg, 64) + if err != nil { + return 0, fmt.Errorf("could not parse %s as float for field %s: %w", arg, fieldName, err) + } + return v, nil +} + +func ParseInt(arg string, fieldName string) (int64, error) { + v, err := strconv.ParseInt(arg, 10, 64) + if err != nil { + return 0, fmt.Errorf("could not parse %s as int for field %s: %w", arg, fieldName, err) + } + return v, nil +} + +func ParseDenom(arg string, fieldName string) (string, error) { + return strings.TrimSpace(arg), nil +} + +func ParseFieldFromArg(fVal reflect.Value, fType reflect.StructField, arg string) error { + // We cant pass in a negative number due to the way pflags works... + // This is an (extraordinarily ridiculous) workaround that checks if a negative int is encapsulated in square brackets, + // and if so, trims the square brackets + if strings.HasPrefix(arg, "[") && strings.HasSuffix(arg, "]") && arg[1] == '-' { + arg = strings.TrimPrefix(arg, "[") + arg = strings.TrimSuffix(arg, "]") + } + + switch fType.Type.Kind() { + // SetUint allows anyof type u8, u16, u32, u64, and uint + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: + u, err := ParseUint(arg, fType.Name) + if err != nil { + return err + } + fVal.SetUint(u) + return nil + // SetInt allows anyof type i8,i16,i32,i64 and int + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: + typeStr := fType.Type.String() + var i int64 + var err error + if typeStr == "time.Duration" { + dur, err2 := time.ParseDuration(arg) + i, err = int64(dur), err2 + } else { + i, err = ParseInt(arg, fType.Name) + } + if err != nil { + return err + } + fVal.SetInt(i) + return nil + case reflect.Float32, reflect.Float64: + typeStr := fType.Type.String() + f, err := ParseFloat(arg, typeStr) + if err != nil { + return err + } + fVal.SetFloat(f) + return nil + case reflect.String: + s, err := ParseDenom(arg, fType.Name) + if err != nil { + return err + } + fVal.SetString(s) + return nil + case reflect.Ptr: + case reflect.Slice: + typeStr := fType.Type.String() + if typeStr == "[]uint64" { + // Parse comma-separated uint64 values into []uint64 slice + strValues := strings.Split(arg, ",") + values := make([]uint64, len(strValues)) + for i, strValue := range strValues { + u, err := strconv.ParseUint(strValue, 10, 64) + if err != nil { + return err + } + values[i] = u + } + fVal.Set(reflect.ValueOf(values)) + return nil + } + if typeStr == "types.Coins" { + coins, err := ParseCoins(arg, fType.Name) + if err != nil { + return err + } + fVal.Set(reflect.ValueOf(coins)) + return nil + } + case reflect.Struct: + typeStr := fType.Type.String() + var v any + var err error + if typeStr == "types.Coin" { + v, err = ParseCoin(arg, fType.Name) + } else if typeStr == "types.Int" { + v, err = ParseSdkInt(arg, fType.Name) + } else if typeStr == "time.Time" { + v, err = ParseUnixTime(arg, fType.Name) + } else if typeStr == "types.Dec" { + v, err = ParseSdkDec(arg, fType.Name) + } else { + return fmt.Errorf("struct field type not recognized. Got type %v", fType) + } + + if err != nil { + return err + } + fVal.Set(reflect.ValueOf(v)) + return nil + } + fmt.Println(fType.Type.Kind().String()) + return fmt.Errorf("field type not recognized. Got type %v", fType) +} + +func ParseSdkDec(arg, fieldName string) (sdk.Dec, error) { + i, err := sdk.NewDecFromStr(arg) + if err != nil { + return sdk.Dec{}, fmt.Errorf("could not parse %s as sdk.Dec for field %s: %w", arg, fieldName, err) + } + return i, nil +} + +func ParseUnixTime(arg string, fieldName string) (time.Time, error) { + timeUnix, err := strconv.ParseInt(arg, 10, 64) + if err != nil { + parsedTime, err := time.Parse(sdk.SortableTimeFormat, arg) + if err != nil { + return time.Time{}, fmt.Errorf("could not parse %s as time for field %s: %w", arg, fieldName, err) + } + + return parsedTime, nil + } + startTime := time.Unix(timeUnix, 0) + return startTime, nil +} + +func ParseSdkInt(arg string, fieldName string) (sdk.Int, error) { + i, ok := sdk.NewIntFromString(arg) + if !ok { + return sdk.Int{}, fmt.Errorf("could not parse %s as sdk.Int for field %s", arg, fieldName) + } + return i, nil +} + +func ParseCoin(arg string, fieldName string) (sdk.Coin, error) { + coin, err := sdk.ParseCoinNormalized(arg) + if err != nil { + return sdk.Coin{}, fmt.Errorf("could not parse %s as sdk.Coin for field %s: %w", arg, fieldName, err) + } + return coin, nil +} + +func ParseCoins(arg string, fieldName string) (sdk.Coins, error) { + coins, err := sdk.ParseCoinsNormalized(arg) + if err != nil { + return sdk.Coins{}, fmt.Errorf("could not parse %s as sdk.Coins for field %s: %w", arg, fieldName, err) + } + return coins, nil +} + +func parseFieldFromDirectlySetFlag(fVal reflect.Value, fType reflect.StructField, flagAdvice FlagAdvice, flagName string, flags *pflag.FlagSet) error { + // get string. If its a string great, run through arg parser. Otherwise try setting directly + s, err := flags.GetString(flagName) + if err != nil { + flag := flags.Lookup(flagName) + if flag == nil { + return fmt.Errorf("Programmer set the flag name wrong. Flag %s does not exist", flagName) + } + t := flag.Value.Type() + if t == "uint64" { + u, err := flags.GetUint64(flagName) + if err != nil { + return err + } + fVal.SetUint(u) + return nil + } + } + return ParseFieldFromArg(fVal, fType, s) +} + +// ParseFieldFromFlag attempts to parses the value of a field in a struct from a flag. +// The field is identified by the provided `reflect.StructField`. +// The flag advice and `pflag.FlagSet` are used to determine the flag to parse the field from. +// If the field corresponds to a value from a flag, true is returned. +// Otherwise, `false` is returned. +// In the true case, the parsed value is set on the provided `reflect.Value`. +// An error is returned if there is an issue parsing the field from the flag. +func ParseFieldFromFlag(fVal reflect.Value, fType reflect.StructField, flagAdvice FlagAdvice, flags *pflag.FlagSet) (bool, error) { + lowercaseFieldNameStr := strings.ToLower(fType.Name) + if flagName, ok := flagAdvice.CustomFlagOverrides[lowercaseFieldNameStr]; ok { + return true, parseFieldFromDirectlySetFlag(fVal, fType, flagAdvice, flagName, flags) + } + + kind := fType.Type.Kind() + switch kind { + case reflect.String: + if flagAdvice.IsTx { + // matchesFieldName is true if lowercaseFieldNameStr is the same as TxSenderFieldName, + // or if TxSenderFieldName is left blank, then matches fields named "sender" or "owner" + matchesFieldName := (flagAdvice.TxSenderFieldName == lowercaseFieldNameStr) || + (flagAdvice.TxSenderFieldName == "" && (lowercaseFieldNameStr == "sender" || lowercaseFieldNameStr == "owner")) + if matchesFieldName { + fVal.SetString(flagAdvice.FromValue) + return true, nil + } + } + case reflect.Ptr: + if flagAdvice.HasPagination { + typeStr := fType.Type.String() + if typeStr == paginationType { + pageReq, err := client.ReadPageRequest(flags) + if err != nil { + return true, err + } + fVal.Set(reflect.ValueOf(pageReq)) + return true, nil + } + } + } + return false, nil +} + +// ParseField parses field #fieldIndex from either an arg or a flag. +// Returns true if it was parsed from an argument. +// Returns error if there was an issue in parsing this field. +func ParseField(v reflect.Value, t reflect.Type, fieldIndex int, arg string, flagAdvice FlagAdvice, flags *pflag.FlagSet) (bool, error) { + fVal := v.Field(fieldIndex) + fType := t.Field(fieldIndex) + // fmt.Printf("Field %d: %s %s %s\n", fieldIndex, fType.Name, fType.Type, fType.Type.Kind()) + + lowercaseFieldNameStr := strings.ToLower(fType.Name) + if parseFn, ok := flagAdvice.CustomFieldParsers[lowercaseFieldNameStr]; ok { + v, usedArg, err := parseFn(arg, flags) + if err == nil { + fVal.Set(reflect.ValueOf(v)) + } + return usedArg, err + } + + parsedFromFlag, err := ParseFieldFromFlag(fVal, fType, flagAdvice, flags) + if err != nil { + return false, err + } + if parsedFromFlag { + return false, nil + } + return true, ParseFieldFromArg(fVal, fType, arg) +} + +func MakeNew[T any]() T { + var v T + if typ := reflect.TypeOf(v); typ.Kind() == reflect.Ptr { + elem := typ.Elem() + //nolint:forcetypeassert + return reflect.New(elem).Interface().(T) // must use reflect + } else { + return *new(T) // v is not ptr, alloc with new + } +} + +// makes an exception, where it allows Pagination to come from flags. +func ParseFieldsFromFlagsAndArgs[reqP any](flagAdvice FlagAdvice, flags *pflag.FlagSet, args []string) (reqP, error) { + req := MakeNew[reqP]() + v := reflect.ValueOf(req).Elem() + t := v.Type() + + argIndexOffset := 0 + // Iterate over the fields in the struct + for i := 0; i < t.NumField(); i++ { + arg := "" + if len(args) > i+argIndexOffset { + arg = args[i+argIndexOffset] + } + usedArg, err := ParseField(v, t, i, arg, flagAdvice, flags) + if err != nil { + return req, err + } + if !usedArg { + argIndexOffset -= 1 + } + } + return req, nil +} + +func BuildQueryCli[reqP proto.Message, querier any](desc *QueryDescriptor, newQueryClientFn func(grpc1.ClientConn) querier) *cobra.Command { + prepareDescriptor[reqP](desc) + if desc.ParseQuery == nil { + desc.ParseQuery = func(args []string, fs *pflag.FlagSet) (proto.Message, error) { + flagAdvice := FlagAdvice{ + HasPagination: desc.HasPagination, + CustomFlagOverrides: desc.CustomFlagOverrides, + CustomFieldParsers: desc.CustomFieldParsers, + }.Sanitize() + return ParseFieldsFromFlagsAndArgs[reqP](flagAdvice, fs, args) + } + } + + cmd := &cobra.Command{ + Use: desc.Use, + Short: desc.Short, + Long: desc.Long, + Args: cobra.ExactArgs(desc.numArgs), + RunE: queryLogic(desc, newQueryClientFn), + } + flags.AddQueryFlagsToCmd(cmd) + AddFlags(cmd, desc.Flags) + if desc.HasPagination { + cmdName := strings.Split(desc.Use, " ")[0] + flags.AddPaginationFlagsToCmd(cmd, cmdName) + } + + return cmd +} + +func queryLogic[querier any](desc *QueryDescriptor, + newQueryClientFn func(grpc1.ClientConn) querier, +) func(cmd *cobra.Command, args []string) error { + return func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := newQueryClientFn(clientCtx) + + req, err := desc.ParseQuery(args, cmd.Flags()) + if err != nil { + return err + } + + res, err := callQueryClientFn(cmd.Context(), desc.QueryFnName, req, queryClient) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + } +} + +func callQueryClientFn(ctx context.Context, fnName string, req proto.Message, q any) (res proto.Message, err error) { + qVal := reflect.ValueOf(q) + method := qVal.MethodByName(fnName) + if (method == reflect.Value{}) { + return nil, fmt.Errorf("Method %s does not exist on the querier."+ + " You likely need to override QueryFnName in your Query descriptor", fnName) + } + args := []reflect.Value{ + reflect.ValueOf(ctx), + reflect.ValueOf(req), + } + results := method.Call(args) + if len(results) != 2 { + panic("We got something wrong") + } + if !results[1].IsNil() { + //nolint:forcetypeassert + err = results[1].Interface().(error) + return res, err + } + //nolint:forcetypeassert + res = results[0].Interface().(proto.Message) + return res, nil +} + +func (f FlagAdvice) Sanitize() FlagAdvice { + // map CustomFlagOverrides & CustomFieldParser keys to lower-case + // initialize if uninitialized + newFlagOverrides := make(map[string]string, len(f.CustomFlagOverrides)) + for k, v := range f.CustomFlagOverrides { + newFlagOverrides[strings.ToLower(k)] = v + } + f.CustomFlagOverrides = newFlagOverrides + newFlagParsers := make(map[string]CustomFieldParserFn, len(f.CustomFieldParsers)) + for k, v := range f.CustomFieldParsers { + newFlagParsers[strings.ToLower(k)] = v + } + f.CustomFieldParsers = newFlagParsers + return f + +} + +// Required flags are marked as required. +func AddFlags(cmd *cobra.Command, desc FlagDesc) { + for i := 0; i < len(desc.OptionalFlags); i++ { + cmd.Flags().AddFlagSet(desc.OptionalFlags[i]) + } + for i := 0; i < len(desc.RequiredFlags); i++ { + fs := desc.RequiredFlags[i] + cmd.Flags().AddFlagSet(fs) + + // mark all these flags as required. + fs.VisitAll(func(flag *pflag.Flag) { + err := cmd.MarkFlagRequired(flag.Name) + if err != nil { + panic(err) + } + }) + } +} + +func ParseHasPagination[reqP any]() bool { + req := MakeNew[reqP]() + t := reflect.ValueOf(req).Elem().Type() + for i := 0; i < t.NumField(); i++ { + fType := t.Field(i) + if fType.Type.String() == paginationType { + return true + } + } + return false +} + +func prepareDescriptor[reqP proto.Message](desc *QueryDescriptor) { + if !desc.HasPagination { + desc.HasPagination = ParseHasPagination[reqP]() + } + if desc.QueryFnName == "" { + desc.QueryFnName = ParseExpectedQueryFnName[reqP]() + } + if strings.Contains(desc.Long, "{") { + if desc.ModuleName == "" { + desc.ModuleName = lastQueryModuleName + } + desc.FormatLong(desc.ModuleName) + } + + desc.numArgs = ParseNumFields[reqP]() - len(desc.CustomFlagOverrides) + if desc.HasPagination { + desc.numArgs = desc.numArgs - 1 + } +} + +func ParseNumFields[reqP any]() int { + req := MakeNew[reqP]() + v := reflect.ValueOf(req).Elem() + t := v.Type() + return t.NumField() +} + +func (desc *QueryDescriptor) FormatLong(moduleName string) { + desc.Long = FormatLongDesc(desc.Long, NewLongMetadata(moduleName).WithShort(desc.Short)) +} + +func FormatLongDesc(longString string, meta *LongMetadata) string { + template, err := template.New("long_description").Parse(longString) + if err != nil { + panic("incorrectly configured long message") + } + bld := strings.Builder{} + meta.ExampleHeader = "\n\nExample:" + err = template.Execute(&bld, meta) + if err != nil { + panic("incorrectly configured long message") + } + return strings.TrimSpace(bld.String()) +} + +func (m *LongMetadata) WithShort(short string) *LongMetadata { + m.Short = short + return m +} + +func GetParams[reqP proto.Message, querier any](moduleName string, + newQueryClientFn func(grpc1.ClientConn) querier, +) *cobra.Command { + return BuildQueryCli[reqP](&QueryDescriptor{ + Use: "params [flags]", + Short: fmt.Sprintf("Get the params for the x/%s module", moduleName), + QueryFnName: "Params", + }, newQueryClientFn) +} + +func ParseExpectedQueryFnName[reqP any]() string { + req := MakeNew[reqP]() + v := reflect.ValueOf(req).Elem() + s := v.Type().String() + // handle some non-std queries + var prefixTrimmed string + if strings.Contains(s, "Query") { + prefixTrimmed = strings.Split(s, "Query")[1] + } else { + prefixTrimmed = strings.Split(s, ".")[1] + } + suffixTrimmed := strings.TrimSuffix(prefixTrimmed, "Request") + return suffixTrimmed +} diff --git a/proto/comdex/ibcratelimit/v1beta1/genesis.proto b/proto/comdex/ibcratelimit/v1beta1/genesis.proto new file mode 100644 index 000000000..9b204aef4 --- /dev/null +++ b/proto/comdex/ibcratelimit/v1beta1/genesis.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; + +package comdex.ibcratelimit.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "google/protobuf/any.proto"; +import "comdex/ibcratelimit/v1beta1/params.proto"; + +option go_package = "github.com/comdex-official/comdex/x/ibcratelimit/types"; + +// GenesisState defines the ibcratelimit module's genesis state. +message GenesisState { + // params are all the parameters of the module + Params params = 1 [ (gogoproto.nullable) = false ]; +} diff --git a/proto/comdex/ibcratelimit/v1beta1/params.proto b/proto/comdex/ibcratelimit/v1beta1/params.proto new file mode 100644 index 000000000..82e32fbbf --- /dev/null +++ b/proto/comdex/ibcratelimit/v1beta1/params.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; +package comdex.ibcratelimit.v1beta1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/comdex-official/comdex/x/ibcratelimit/types"; + +// Params defines the parameters for the ibcratelimit module. +message Params { + string contract_address = 1 + [ (gogoproto.moretags) = "yaml:\"contract_address\"" ]; +} diff --git a/proto/comdex/ibcratelimit/v1beta1/query.proto b/proto/comdex/ibcratelimit/v1beta1/query.proto new file mode 100644 index 000000000..ac071e15d --- /dev/null +++ b/proto/comdex/ibcratelimit/v1beta1/query.proto @@ -0,0 +1,27 @@ +syntax = "proto3"; +package comdex.ibcratelimit.v1beta1; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "comdex/ibcratelimit/v1beta1/params.proto"; + +option go_package = "github.com/comdex-official/comdex/x/ibcratelimit/types"; + +// Query defines the gRPC querier service. +service Query { + // Params defines a gRPC query method that returns the ibcratelimit module's + // parameters. + rpc Params(ParamsRequest) returns (ParamsResponse) { + option (google.api.http).get = "/comdex/ibcratelimit/v1beta1/params"; + } +} + +// ParamsRequest is the request type for the Query/Params RPC method. +message ParamsRequest {} + +// aramsResponse is the response type for the Query/Params RPC method. +message ParamsResponse { + // params defines the parameters of the module. + Params params = 1 [ (gogoproto.nullable) = false ]; +} diff --git a/proto/comdex/ibcratelimit/v1beta1/query.yml b/proto/comdex/ibcratelimit/v1beta1/query.yml new file mode 100644 index 000000000..53db95ab7 --- /dev/null +++ b/proto/comdex/ibcratelimit/v1beta1/query.yml @@ -0,0 +1,10 @@ +keeper: + path: "github.com/comdex-official/comdex/x/ibcratelimit" + struct: "Keeper" +client_path: "github.com/comdex-official/comdex/x/ibcratelimit/client" +queries: + Params: + proto_wrapper: + query_func: "k.GetParams" + cli: + cmd: "GetParams" \ No newline at end of file diff --git a/x/ibcratelimit/Beaker.toml b/x/ibcratelimit/Beaker.toml new file mode 100644 index 000000000..46da1ec58 --- /dev/null +++ b/x/ibcratelimit/Beaker.toml @@ -0,0 +1 @@ +name = "ibcratelimit" diff --git a/x/ibcratelimit/Cargo.lock b/x/ibcratelimit/Cargo.lock new file mode 100644 index 000000000..07e4f7e4a --- /dev/null +++ b/x/ibcratelimit/Cargo.lock @@ -0,0 +1,914 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "anyhow" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base16ct" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64ct" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "const-oid" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "722e23542a15cea1f65d4a1419c4cfd7a26706c70871a13a04238ca3f40f1661" + +[[package]] +name = "cosmwasm-crypto" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28376836c7677e1ea6d6656a754582e88b91e544ce22fae42956d5fe5549a958" +dependencies = [ + "digest 0.10.5", + "ed25519-zebra", + "k256", + "rand_core 0.6.4", + "thiserror", +] + +[[package]] +name = "cosmwasm-derive" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb69f4f7a8a4bce68c8fbd3646238fede1e77056e4ea31c5b6bfc37b709eec3" +dependencies = [ + "syn", +] + +[[package]] +name = "cosmwasm-schema" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a227cfeb9a7152b26a354b1c990e930e962f75fd68f57ab5ae2ef888c8524292" +dependencies = [ + "cosmwasm-schema-derive", + "schemars", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cosmwasm-schema-derive" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3626cb42eef870de67f791e873711255325224d86f281bf628c42abd295f3a14" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "cosmwasm-std" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46bf9157d060abbc55152aeadcace799d03dc630575daa66604079a1206cb060" +dependencies = [ + "base64", + "cosmwasm-crypto", + "cosmwasm-derive", + "derivative", + "forward_ref", + "hex", + "schemars", + "serde", + "serde-json-wasm", + "thiserror", + "uint", +] + +[[package]] +name = "cosmwasm-storage" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b61fcfef87d15af0263e2e4d792af80355929674a3b4e29ffb3c898ec6e25852" +dependencies = [ + "cosmwasm-std", + "serde", +] + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +dependencies = [ + "libc", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "cw-multi-test" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f9a8ab7c3c29ec93cb7a39ce4b14a05e053153b4a17ef7cf2246af1b7c087e" +dependencies = [ + "anyhow", + "cosmwasm-std", + "cosmwasm-storage", + "cw-storage-plus 0.13.4", + "cw-utils", + "derivative", + "itertools", + "prost 0.9.0", + "schemars", + "serde", + "thiserror", +] + +[[package]] +name = "cw-storage-plus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "648b1507290bbc03a8d88463d7cd9b04b1fa0155e5eef366c4fa052b9caaac7a" +dependencies = [ + "cosmwasm-std", + "schemars", + "serde", +] + +[[package]] +name = "cw-storage-plus" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b6f91c0b94481a3e9ef1ceb183c37d00764f8751e39b45fc09f4d9b970d469" +dependencies = [ + "cosmwasm-std", + "schemars", + "serde", +] + +[[package]] +name = "cw-utils" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dbaecb78c8e8abfd6b4258c7f4fbeb5c49a5e45ee4d910d3240ee8e1d714e1b" +dependencies = [ + "cosmwasm-std", + "schemars", + "serde", + "thiserror", +] + +[[package]] +name = "cw2" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04cf4639517490dd36b333bbd6c4fbd92e325fd0acf4683b41753bc5eb63bfc1" +dependencies = [ + "cosmwasm-std", + "cw-storage-plus 0.13.4", + "schemars", + "serde", +] + +[[package]] +name = "der" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dd2ae565c0a381dde7fade45fce95984c568bdcb4700a4fdbe3175e0380b2f" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" +dependencies = [ + "block-buffer 0.10.3", + "crypto-common", + "subtle", +] + +[[package]] +name = "dyn-clone" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" + +[[package]] +name = "ecdsa" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +dependencies = [ + "der", + "elliptic-curve", + "rfc6979", + "signature", +] + +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek", + "hashbrown", + "hex", + "rand_core 0.6.4", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" + +[[package]] +name = "elliptic-curve" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +dependencies = [ + "base16ct", + "crypto-bigint", + "der", + "digest 0.10.5", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "forward_ref" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.5", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" + +[[package]] +name = "k256" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "sha2 0.10.6", +] + +[[package]] +name = "libc" +version = "0.2.137" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "osmosis-std" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b3792977036dc49cfc9af9fd7a6c021fd48dfffc8ebf09324201506c65a47a" +dependencies = [ + "chrono", + "cosmwasm-std", + "osmosis-std-derive", + "prost 0.11.2", + "prost-types", + "schemars", + "serde", + "serde-cw-value", +] + +[[package]] +name = "osmosis-std-derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c501f2b8ff88b1c60ab671d7b808e947f384fa2524fe4ec8c06f63ef4be29979" +dependencies = [ + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "proc-macro2" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +dependencies = [ + "bytes", + "prost-derive 0.9.0", +] + +[[package]] +name = "prost" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0841812012b2d4a6145fae9a6af1534873c32aa67fff26bd09f8fa42c83f95a" +dependencies = [ + "bytes", + "prost-derive 0.11.2", +] + +[[package]] +name = "prost-derive" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "164ae68b6587001ca506d3bf7f1000bfa248d0e1217b618108fba4ec1d0cc306" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-types" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747761bc3dc48f9a34553bf65605cf6cb6288ba219f3450b4275dbd81539551a" +dependencies = [ + "bytes", + "prost 0.11.2", +] + +[[package]] +name = "quote" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rate-limiter" +version = "0.1.0" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-multi-test", + "cw-storage-plus 0.16.0", + "cw2", + "hex", + "osmosis-std", + "osmosis-std-derive", + "prost 0.11.2", + "schemars", + "serde", + "serde-json-wasm", + "sha2 0.10.6", + "thiserror", +] + +[[package]] +name = "rfc6979" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +dependencies = [ + "crypto-bigint", + "hmac", + "zeroize", +] + +[[package]] +name = "ryu" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" + +[[package]] +name = "schemars" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a5fb6c61f29e723026dc8e923d94c694313212abbecbbe5f55a7748eec5b307" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f188d036977451159430f3b8dc82ec76364a42b7e289c2b18a9a18f4470058e9" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn", +] + +[[package]] +name = "sec1" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "serde" +version = "1.0.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-cw-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75d32da6b8ed758b7d850b6c3c08f1d7df51a4df3cb201296e63e34a78e99d4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-json-wasm" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479b4dbc401ca13ee8ce902851b834893251404c4f3c65370a49e047a6be09a5" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_derive_internals" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.5", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +dependencies = [ + "digest 0.10.5", + "rand_core 0.6.4", +] + +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "uint" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a45526d29728d135c2900b0d30573fe3ee79fceb12ef534c7bb30e810a91b601" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unicode-ident" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "zeroize" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" diff --git a/x/ibcratelimit/Cargo.toml b/x/ibcratelimit/Cargo.toml new file mode 100644 index 000000000..9e4bf04d4 --- /dev/null +++ b/x/ibcratelimit/Cargo.toml @@ -0,0 +1,16 @@ +[workspace] + +members = [ + 'contracts/*', +] + +[profile.release] +codegen-units = 1 +debug = false +debug-assertions = false +incremental = false +lto = true +opt-level = 3 +overflow-checks = true +panic = 'abort' +rpath = false diff --git a/x/ibcratelimit/README.md b/x/ibcratelimit/README.md new file mode 100644 index 000000000..f8a0b91bd --- /dev/null +++ b/x/ibcratelimit/README.md @@ -0,0 +1,307 @@ +# IBC Rate Limit + +The IBC Rate Limit module is responsible for adding a governance-configurable rate limit to IBC transfers. +This is a safety control, intended to protect assets on osmosis in event of: + +* a bug/hack on osmosis +* a bug/hack on the counter-party chain +* a bug/hack in IBC itself + +This is done in exchange for a potential (one-way) bridge liveness tradeoff, in periods of high deposits or withdrawals. + +The architecture of this package is a minimal go package which implements an [IBC Middleware](https://github.com/cosmos/ibc-go/blob/f57170b1d4dd202a3c6c1c61dcf302b6a9546405/docs/ibc/middleware/develop.md) that wraps the [ICS20 transfer](https://ibc.cosmos.network/main/apps/transfer/overview.html) app, and calls into a cosmwasm contract. +The cosmwasm contract then has all of the actual IBC rate limiting logic. +The Cosmwasm code can be found in the [`contracts`](./contracts/) package, with bytecode findable in the [`bytecode`](./bytecode/) folder. The cosmwasm VM usage allows Osmosis chain governance to choose to change this safety control with no hard forks, via a parameter change proposal, a great mitigation for faster threat adaptavity. + +The status of the module is being in a state suitable for some initial governance settable rate limits for high value bridged assets. +Its not in its long term / end state for all channels by any means, but does act as a strong protection we +can instantiate today for high value IBC connections. + +## Motivation + +The motivation of IBC-rate-limit comes from the empirical observations of blockchain bridge hacks that a rate limit would have massively reduced the stolen amount of assets in: + +- [Polynetwork Bridge Hack ($611 million)](https://rekt.news/polynetwork-rekt/) +- [BNB Bridge Hack ($586 million)](https://rekt.news/bnb-bridge-rekt/) +- [Wormhole Bridge Hack ($326 million)](https://rekt.news/wormhole-rekt/) +- [Nomad Bridge Hack ($190 million)](https://rekt.news/nomad-rekt/) +- [Harmony Bridge Hack ($100 million)](https://rekt.news/harmony-rekt/) - (Would require rate limit + monitoring) +- [Dragonberry IBC bug](https://forum.cosmos.network/t/ibc-security-advisory-dragonberry/7702) (can't yet disclose amount at risk, but was saved due to being found first by altruistic Osmosis core developers) + +In the presence of a software bug on Osmosis, IBC itself, or on a counterparty chain, we would like to prevent the bridge from being fully depegged. +This stems from the idea that a 30% asset depeg is ~infinitely better than a 100% depeg. +Its _crazy_ that today these complex bridged assets can instantly go to 0 in event of bug. +The goal of a rate limit is to raise an alert that something has potentially gone wrong, allowing validators and developers to have time to analyze, react, and protect larger portions of user funds. + +The thesis of this is that, it is worthwile to sacrifice liveness in the case of legitimate demand to send extreme amounts of funds, to prevent the terrible long-tail full fund risks. +Rate limits aren't the end-all of safety controls, they're merely the simplest automated one. More should be explored and added onto IBC! + +## Rate limit types + +We express rate limits in time-based periods. +This means, we set rate limits for (say) 6-hour, daily, and weekly intervals. +The rate limit for a given time period stores the relevant amount of assets at the start of the rate limit. +Rate limits are then defined on percentage terms of the asset. +The time windows for rate limits are currently _not_ rolling, they have discrete start/end times. + +We allow setting separate rate limits for the inflow and outflow of assets. +We do all of our rate limits based on the _net flow_ of assets on a channel pair. This prevents DOS issues, of someone repeatedly sending assets back and forth, to trigger rate limits and break liveness. + +We currently envision creating two kinds of rate limits: + +* Per denomination rate limits + - allows safety statements like "Only 30% of Stars on Osmosis can flow out in one day" or "The amount of Atom on Osmosis can at most double per day". +* Per channel rate limits + - Limit the total inflow and outflow on a given IBC channel, based on "USDC" equivalent, using Osmosis as the price oracle. + +We currently only implement per denomination rate limits for non-native assets. We do not yet implement channel based rate limits. + +Currently these rate limits automatically "expire" at the end of the quota duration. TODO: Think of better designs here. E.g. can we have a constant number of subsequent quotas start filled? Or perhaps harmonically decreasing amounts of next few quotas pre-filled? Halted until DAO override seems not-great. + +## Instantiating rate limits + +Today all rate limit quotas must be set manually by governance. +In the future, we should design towards some conservative rate limit to add as a safety-backstop automatically for channels. +Ideas for how this could look: + +* One month after a channel has been created, automatically add in some USDC-based rate limit +* One month after governance incentivizes an asset, add on a per-denomination rate limit. + +Definitely needs far more ideation and iteration! + +## Parameterizing the rate limit + +One element is we don't want any rate limit timespan thats too short, e.g. not enough time for humans to react to. So we wouldn't want a 1 hour rate limit, unless we think that if its hit, it could be assessed within an hour. + +### Handling rate limit boundaries + +We want to be safe against the case where say we have a daily rate limit ending at a given time, and an adversary attempts to attack near the boundary window. +We would not like them to be able to "double extract funds" by timing their extraction near a window boundary. + +Admittedly, not a lot of thought has been put into how to deal with this well. +Right now we envision simply handling this by saying if you want a quota of duration D, instead include two quotas of duration D, but offset by `D/2` from each other. + +Ideally we can change windows to be more 'rolling' in the future, to avoid this overhead and more cleanly handle the problem. (Perhaps rolling ~1 hour at a time) + +### Inflow parameterization + +The "Inflow" side of a rate limit is essentially protection against unforeseen bug on a counterparty chain. +This can be quite conservative (e.g. bridged amount doubling in one week). This covers a few cases: + +* Counter-party chain B having a token theft attack + - TODO: description of how this looks +* Counter-party chain B runaway mint + - TODO: description of how this looks +* IBC theft + - TODO: description of how this looks + +It does get more complex when the counterparty chain is itself a DEX, but this is still much more protection than nothing. + +### Outflow parameterization + +The "Outflow" side of a rate limit is protection against a bug on Osmosis OR IBC. +This has potential for much more user-frustrating issues, if set too low. +E.g. if theres some event that causes many people to suddenly withdraw many STARS or many USDC. + +So this parameterization has to contend with being a tradeoff of withdrawal liveness in high volatility periods vs being a crucial safety rail, in event of on-Osmosis bug. + +TODO: Better fill out + +### Example suggested parameterization + +## Code structure + +As mentioned at the beginning of the README, the go code is a relatively minimal ICS 20 wrapper, that dispatches relevant calls to a cosmwasm contract that implements the rate limiting functionality. + +### Go Middleware + +To achieve this, the middleware needs to implement the `porttypes.Middleware` interface and the +`porttypes.ICS4Wrapper` interface. This allows the middleware to send and receive IBC messages by wrapping +any IBC module, and be used as an ICS4 wrapper by a transfer module (for sending packets or writing acknowledgements). + +Of those interfaces, just the following methods have custom logic: + +* `ICS4Wrapper.SendPacket` forwards to contract, with intent of tracking of value sent via an ibc channel +* `Middleware.OnRecvPacket` forwards to contract, with intent of tracking of value received via an ibc channel +* `Middleware.OnAcknowledgementPacket` forwards to contract, with intent of undoing the tracking of a sent packet if the acknowledgment is not a success +* `OnTimeoutPacket` forwards to contract, with intent of undoing the tracking of a sent packet if the packet times out (is not relayed) + +All other methods from those interfaces are passthroughs to the underlying implementations. + +#### Parameters + +The middleware uses the following parameters: + +| Key | Type | +|-----------------|--------| +| ContractAddress | string | + +1. **ContractAddress** - + The contract address is the address of an instantiated version of the contract provided under `./contracts/` + +### Cosmwasm Contract Concepts + +Something to keep in mind with all of the code, is that we have to reason separately about every item in the following matrix: + +| Native Token | Non-Native Token | +|----------------------|--------------------------| +| Send Native Token | Send Non-Native Token | +| Receive Native Token | Receive Non-Native Token | +| Timeout Native Send | Timeout Non-native Send | + +(Error ACK can reuse the same code as timeout) + +TODO: Spend more time on sudo messages in the following description. We need to better describe how we map the quota concepts onto the code. +Need to describe how we get the quota beginning balance, and that its different for sends and receives. +Explain intracacies of tracking that a timeout and/or ErrorAck must appear from the same quota, else we ignore its update to the quotas. + + +The tracking contract uses the following concepts + +1. **RateLimit** - tracks the value flow transferred and the quota for a path. +2. **Path** - is a (denom, channel) pair. +3. **Flow** - tracks the value that has moved through a path during the current time window. +4. **Quota** - is the percentage of the denom's total value that can be transferred through the path in a given period of time (duration) + +#### Messages + +The contract specifies the following messages: + +##### Query + +* GetQuotas - Returns the quotas for a path + +##### Exec + +* AddPath - Adds a list of quotas for a path +* RemovePath - Removes a path +* ResetPathQuota - If a rate limit has been reached, the contract's governance address can reset the quota so that transfers are allowed again + +##### Sudo + +Sudo messages can only be executed by the chain. + +* SendPacket - Increments the amount used out of the send quota and checks that the send is allowed. If it isn't, it will return a RateLimitExceeded error +* RecvPacket - Increments the amount used out of the receive quota and checks that the receive is allowed. If it isn't, it will return a RateLimitExceeded error +* UndoSend - If a send has failed, the undo message is used to remove its cost from the send quota + +All of these messages receive the packet from the chain and extract the necessary information to process the packet and determine if it should be the rate limited. + +### Necessary information + +To determine if a packet should be rate limited, we need: + +* Channel: The channel on the Osmosis side: `packet.SourceChannel` for sends, and `packet.DestinationChannel` for receives. +* Denom: The denom of the token being transferred as known on the Osmosis side (more on that bellow) +* Channel Value: The total value of the chanel denominated in `Denom` (i.e.: channel-17 is worth 10k osmo). +* Funds: the amount being transferred + +#### Notes on Channel +The contract also supports quotas on a custom channel called "any" that is checked on every transfer. If either the +transfer channel or the "any" channel have a quota that has been filled, the transaction will be rate limited. + +#### Notes on Denom +We always use the the denom as represented on Osmosis. For native assets that is the local denom, and for non-native +assets it's the "ibc" prefix and the sha256 hash of the denom trace (`ibc/...`). + +##### Sends + +For native denoms, we can just use the denom in the packet. If the denom is invalid, it will fail somewhere else along the chain. Example result: `uosmo` + +For non-native denoms, the contract needs to hash the denom trace and append it to the `ibc/` prefix. The +contract always receives the parsed denom (i.e.: `transfer/channel-32/uatom` instead of +`ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2`). This is because of the order in which +the middleware is called. When sending a non-native denom, the packet contains `transfer/source-channel/denom` as it +is built on the `relay.SendTransfer()` in the transfer module and then passed to the middleware. Example result: `ibc/` + +##### Receives + +This behaves slightly different if the asset is an osmosis asset that was sent to the counterparty and is being +returned to the chain, or if the asset is being received by the chain and originates on the counterparty. In ibc this +is called being a "source" or a "sink" respectively. + +If the chain is a sink for the denom, we build the local denom by prefixing the port and the channel +(`transfer/local-channel`) and hashing that denom. Example result: `ibc/` + +If the chain is the source for the denom, there are two possibilities: + +* The token is a native token, in which case we just remove the prefix added by the counterparty. Example result: `uosmo` +* The token is a non-native token, in which case we remove the extra prefix and hash it. Example result `ibc/` + +#### Notes on Channel Value +We have iterated on different strategies for calculating the channel value. Our preferred strategy is the following: +* For non-native tokens (`ibc/...`), the channel value should be the supply of those tokens in Osmosis +* For native tokens, the channel value should be the total amount of tokens in escrow across all ibc channels + +The later ensures the limits are lower and represent the amount of native tokens that exist outside Osmosis. This is +beneficial as we assume the majority of native tokens exist on the native chain and the amount "normal" ibc transfers is +proportional to the tokens that have left the chain. + +This strategy cannot be implemented at the moment because IBC does not track the amount of tokens in escrow across +all channels ([github issue](https://github.com/cosmos/ibc-go/issues/2664)). Instead, we use the current supply on +Osmosis for all denoms (i.e.: treat native and non-native tokens the same way). Once that ticket is fixed, we will +update this strategy. + +##### Caching + +The channel value varies constantly. To have better predictability, and avoid issues of the value growing if there is +a potential infinite mint bug, we cache the channel value at the beginning of the period for every quota. + +This means that if we have a daily quota of 1% of the osmo supply, and the channel value is 1M osmo at the beginning of +the quota, no more than 100k osmo can transferred during that day. If 10M osmo were to be minted or IBC'd in during that +period, the quota will not increase until the period expired. Then it will be 1% of the new channel value (~11M) + +### Integration + +The rate limit middleware wraps the `transferIBCModule` and is added as the entry route for IBC transfers. + +The module is also provided to the underlying `transferIBCModule` as its `ICS4Wrapper`; previously, this would have +pointed to a channel, which also implements the `ICS4Wrapper` interface. + +This integration can be seen in [osmosis/app/keepers/keepers.go](https://github.com/osmosis-labs/osmosis/blob/main/app/keepers/keepers.go) + +## Testing strategy + + +A general testing strategy is as follows: + +* Setup two chains. +* Send some tokens from A->B and some from B->A (so that there are IBC tokens to play with in both sides) +* Add the rate limiter on A with low limits (i.e. 1% of supply) +* Test Function for chains A' and B' and denom d + * Send some d tokens from A' to B' and get close to the limit. + * Do the same transfer making sure the amount is above the quota and verify it fails with the rate limit error + * Wait until the reset time has passed, and send again. The transfer should now succeed +* Repeat the above test for the following combination of chains and tokens: `(A,B,a)`, `(B,A,a)`, `(A,B,b)`, `(B,A,b)`, + where `a` and `b` are native tokens to chains A and B respectively. + +For more comprehensive tests we can also: +* Add a third chain C and make sure everything works properly for C tokens that have been transferred to A and to B +* Test that the contracts gov address can reset rate limits if the quota has been hit +* Test the queries for getting information about the state of the quotas +* Test that rate limit symmetries hold (i.e.: sending the a token through a rate-limited channel and then sending back + reduces the rate limits by the same amount that it was increased during the first send) +* Ensure that the channels between the test chains have different names (A->B="channel-0", B->A="channel-1", for example) + +## Known Future work + +Items that have been highlighted above: + +* Making automated rate limits get added for channels, instead of manual configuration only +* Improving parameterization strategies / data analysis +* Adding the USDC based rate limits +* We need better strategies for how rate limits "expire". + +Not yet highlighted + +* Making monitoring tooling to know when approaching rate limiting and when they're hit +* Making tooling to easily give us summaries we can use, to reason about "bug or not bug" in event of rate limit being hit +* Enabling ways to pre-declare large transfers so as to not hit rate limits. + * Perhaps you can on-chain declare intent to send these assets with a large delay, that raises monitoring but bypasses rate limits? + * Maybe contract-based tooling to split up the transfer suffices? +* Strategies to account for high volatility periods without hitting rate limits + * Can imagine "Hop network" style markets emerging + * Could imagine tieng it into looking at AMM volatility, or off-chain oracles + * but these are both things we should be wary of security bugs in. + * Maybe [constraint based programming with tracking of provenance](https://youtu.be/HB5TrK7A4pI?t=2852) as a solution +* Analyze changing denom-based rate limits, to just overall withdrawal amount for Osmosis \ No newline at end of file diff --git a/x/ibcratelimit/bytecode/rate_limiter.wasm b/x/ibcratelimit/bytecode/rate_limiter.wasm new file mode 100644 index 0000000000000000000000000000000000000000..30b545e0612d86ee2751dbcfa11595954e0575e5 GIT binary patch literal 264433 zcmeFa3zS@Eb?18?_3EywR<$0sp7yD-z%6iN+1QdWz8M`2GWGz8VKKQ(7HioCYhrgB zVavjSTwkjp3MhjBB{7MZm_z|F)(tjsh%=Z3W)!Xy1Q;TSNknjxPH>1aae{8*FwPxj za)1B5zjLapU-FBUS+g#}eNLTozSn;5{q67jq8o01OB_W}{0H&+>yv%^;(huXU7zl= zdtIXIV?C~LYxmLhRo!x5v#Wn_S9r>o_WG{q`Y5`-;a}+EdbsW1S*3T~#h2FFUBxFn zu*R$}cg1(VJIun{U`1B}LKQyWYOni?(mL z@y0#Z-EqS$H{W;z<*mALdq#n`?!NiWy!r86QKXXo?M-ic%MH8BXPw)3z4_KlFW)kK z$#r+^+H>>2eTO%)y8n33t~b+@J=fj(wl_`hdPg*_n#OkBc#-GzD667zygW^t%`{0FOR6#}qBKfJs(SBr z4F0vUX&j~06X}QkPvtyFYjh%wS5|7(dOFssR@3%ayPZ~}iV>_np8JOeLu>2#8Hm3n+@e2{+(HyW?4N%zJ1%*^qqxi89}{L|0bb!L`p z{ZHa$wYThg%Uk!nBZ-+Ns(F=WGamt1!VFIL>Vo3H-u4R78h%DVmLx9+}f8;?h? zyAHy?;ksSBZ%pInb=Tdr>xNsed(#cK?@E)AzW_9O+F{&W1VkH%Xs zzv5+A{#yKC{K@#&y>Z+vAr*Qcl=ZFPsCde$A21sCHdF?E`Cq^lktIge|+VU_?Ke7esBEBSNv>z=iy}U z!T5dg2jZWJ-ya`}Z+%z1@BesbJQM$)KYrJihvO?hAOCK=cgq)(Eq@kox$;}_pT~R8 z#8E_uKK`#eW|^8UI6k<{9Eo=@dHN>Ej$tjY^a=e5^Zi|MvBi747a z={QfP@{jj_tG0U4G5TOVn9k#(!eoAh`A43NULHD~=Z_meeyI<*n0E5t<2U0f&{BPlfCO^MrZl=%kju9TqJM;tYi3E_ znc{i3&RxUqhGE`^w?TYMaD9(sF5Z);gS zyfq}MD`1jJC!<$)zK&285+1f1=VReY-o;yzZ7p#8G`=!~o~(Gvc@20J}J= zEyOHhuLYQ8@dER>Yk()G^F~1#BMVSQEk6m|Hbv1^+N^=2{M0aIj0DOk81@aJOYt|>S_oe%Ed>HFe?f^26^jBcuUCah=w-m zRSygY##`U3Z%rH2(VEKaX_VEsCKVp&mx|3sQyZh^BdF(nNYZS&mu!qoOc;;HJKGT- zo9OAKdAt|&#{8>Xvks1HAP5?-(%rt>^YicMRsco{9VDuKb(Uo5mSiQD$okuHZecX5 z;Tlz9ywmwtS%O$b5^;${Mo@+Zpk}Sp8oPK)LyPiv&dkib{VD-QeM_^b^RtYkbGL?* z0BuI|l{ikqXwqUdw3i^nUo|iux_S2TB%*5{4?Wa)XtF;ZaAo5`CNiEBEHECanJ%L* z$3wX}<4G4855O82PwM0O>m;s(@ze`7R|VEV%|R%QZq1~x7!dIj)La!o($TL*w*juR zhQxNwlmcDL;DjMHS1qM;O^jGICFzwL`I=%hM&wml6(d(=wdq%R8K`~S+eEceTBSq^ zoj*v{QYXr`=!26LC0(PbQfaigEe4HduT7)Xjn=bD=Tr<3>Jv%FsK)sOkyQt_{8``U zg?d)sl&tJkwx&WupBE~Fyij*w|G3l6_NgAU14h9wX2FhFWrbf8a8JJXc+~l{5pm}$ zi4(0O+=O7~8?HM=J3yfG9eS1K+ov~1%bNMYgU6$ME5El*@D zEE@Q*QDC~($8=4otP9h+>y7AQCP^(D0n_$+gqPWf&{J2>c@||Ob1+>iFb#o2nG$W%BljU>xOAw7^bbweyI}E7+X{l`VcT(513Y^!t|W7h3#Um4bu%_x&~ua zfhb^T%)@m&}R0(jhrGtLVDSET~@ zoU#SL?R5b7W>}~57{GRLZx(GgAl1nz>WUH#CE($*9vZ5$4-Hb?i|nrD{}kW0vs+7{ zraZolLP&)MCN~!YSZqVq!!ASS7o!w?y6`CIvysz2DyDOeaJ{*mU;$@SU5x53qZeDG z?WmbY2!p0t%%fL!9*vDI_%?D8fCVIq;LnwUf@H4|#bsNQmExU6U+UGfBq#B9^IaoJ zy00SsJ%dN$;$!=Cmh^3Jq``JUG?iR9e-WrCHO)zppP1QhLsRZcT_CmZBz1! zK9>MaBxRaEQrH{P!)O1~M{{A}=V*K2GCyz(?iB#de+z}P6>)o|?W_8~1#SiQA9Y1gY=VoL_@@^Xa zfdl(Z{p^^0H$7f)VE>NKe&k®DTRGfgV2Gtk)wKJ`nVy5}E!1e?-M*0_`U|ALXk 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 z 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

2L+KQ! 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%0DtRrm)^COJ(C@eeZ@KLkrxt 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 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *ParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/ibcratelimit/client/queryproto/query.pb.gw.go b/x/ibcratelimit/client/queryproto/query.pb.gw.go new file mode 100644 index 000000000..b2ea5f77d --- /dev/null +++ b/x/ibcratelimit/client/queryproto/query.pb.gw.go @@ -0,0 +1,153 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: osmosis/ibc-rate-limit/v1beta1/query.proto + +/* +Package queryproto is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package queryproto + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"osmosis", "ibcratelimit", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_Params_0 = runtime.ForwardResponseMessage +) diff --git a/x/ibcratelimit/contracts/rate-limiter/.cargo/config b/x/ibcratelimit/contracts/rate-limiter/.cargo/config new file mode 100644 index 000000000..f31de6c2a --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/.cargo/config @@ -0,0 +1,3 @@ +[alias] +wasm = "build --release --target wasm32-unknown-unknown" +unit-test = "test --lib" diff --git a/x/ibcratelimit/contracts/rate-limiter/Cargo.toml b/x/ibcratelimit/contracts/rate-limiter/Cargo.toml new file mode 100644 index 000000000..9a82ff8d9 --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/Cargo.toml @@ -0,0 +1,51 @@ +[package] +name = "rate-limiter" +version = "0.1.0" +authors = ["Nicolas Lara "] +edition = "2021" + +exclude = [ + # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. + "contract.wasm", + "hash.txt", +] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +crate-type = ["cdylib", "rlib"] + +[features] +# for more explicit tests, cargo test --features=backtraces +backtraces = ["cosmwasm-std/backtraces"] +# use library feature to disable all instantiate/execute/query exports +library = [] +# Use the verbose responses feature if you want to include information about +# the remaining quotas in the SendPacket/RecvPacket responses +verbose_responses = [] + +[package.metadata.scripts] +optimize = """docker run --rm -v "$(pwd)":/code \ + --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ + --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ + cosmwasm/rust-optimizer:0.12.6 +""" + +[dependencies] +cosmwasm-std = { version = "1.1.5", features = ["stargate", "cosmwasm_1_1"]} +cosmwasm-schema = "1.1.5" +cosmwasm-storage = "1.1.5" +cw-storage-plus = "0.16.0" +cw2 = "0.13.2" +schemars = "0.8.8" +serde = { version = "1.0.137", default-features = false, features = ["derive"] } +thiserror = { version = "1.0.31" } +prost = {version = "0.11.2", default-features = false, features = ["prost-derive"]} +osmosis-std-derive = {version = "0.12.0"} +osmosis-std = "0.12.0" +sha2 = "0.10.6" +hex = "0.4.3" + +[dev-dependencies] +cw-multi-test = "0.13.2" +serde-json-wasm = "0.4.1" diff --git a/x/ibcratelimit/contracts/rate-limiter/examples/schema.rs b/x/ibcratelimit/contracts/rate-limiter/examples/schema.rs new file mode 100644 index 000000000..954edd462 --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/examples/schema.rs @@ -0,0 +1,13 @@ +use cosmwasm_schema::write_api; + +use rate_limiter::msg::{ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg, SudoMsg}; + +fn main() { + write_api! { + instantiate: InstantiateMsg, + query: QueryMsg, + execute: ExecuteMsg, + sudo: SudoMsg, + migrate: MigrateMsg, + } +} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/contract.rs b/x/ibcratelimit/contracts/rate-limiter/src/contract.rs new file mode 100644 index 000000000..30bae5b33 --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/contract.rs @@ -0,0 +1,106 @@ +#[cfg(not(feature = "library"))] +use cosmwasm_std::entry_point; +use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; +use cw2::set_contract_version; + +use crate::error::ContractError; +use crate::msg::{ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg, SudoMsg}; +use crate::state::{FlowType, GOVMODULE, IBCMODULE}; +use crate::{execute, query, sudo}; + +// version info for migration info +const CONTRACT_NAME: &str = "crates.io:rate-limiter"; +const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn instantiate( + deps: DepsMut, + env: Env, + _info: MessageInfo, + msg: InstantiateMsg, +) -> Result { + set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; + IBCMODULE.save(deps.storage, &msg.ibc_module)?; + GOVMODULE.save(deps.storage, &msg.gov_module)?; + + execute::add_new_paths(deps, msg.paths, env.block.time)?; + + Ok(Response::new() + .add_attribute("method", "instantiate") + .add_attribute("ibc_module", msg.ibc_module.to_string()) + .add_attribute("gov_module", msg.gov_module.to_string())) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn execute( + deps: DepsMut, + env: Env, + info: MessageInfo, + msg: ExecuteMsg, +) -> Result { + match msg { + ExecuteMsg::AddPath { + channel_id, + denom, + quotas, + } => execute::try_add_path(deps, info.sender, channel_id, denom, quotas, env.block.time), + ExecuteMsg::RemovePath { channel_id, denom } => { + execute::try_remove_path(deps, info.sender, channel_id, denom) + } + ExecuteMsg::ResetPathQuota { + channel_id, + denom, + quota_id, + } => execute::try_reset_path_quota( + deps, + info.sender, + channel_id, + denom, + quota_id, + env.block.time, + ), + } +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn sudo(deps: DepsMut, env: Env, msg: SudoMsg) -> Result { + match msg { + SudoMsg::SendPacket { + packet, + #[cfg(test)] + channel_value_mock, + } => sudo::process_packet( + deps, + packet, + FlowType::Out, + env.block.time, + #[cfg(test)] + channel_value_mock, + ), + SudoMsg::RecvPacket { + packet, + #[cfg(test)] + channel_value_mock, + } => sudo::process_packet( + deps, + packet, + FlowType::In, + env.block.time, + #[cfg(test)] + channel_value_mock, + ), + SudoMsg::UndoSend { packet } => sudo::undo_send(deps, packet), + } +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { + match msg { + QueryMsg::GetQuotas { channel_id, denom } => query::get_quotas(deps, channel_id, denom), + } +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn migrate(_deps: DepsMut, _env: Env, _msg: MigrateMsg) -> Result { + unimplemented!() +} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/contract_tests.rs b/x/ibcratelimit/contracts/rate-limiter/src/contract_tests.rs new file mode 100644 index 000000000..b51009c06 --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/contract_tests.rs @@ -0,0 +1,399 @@ +#![cfg(test)] + +use crate::packet::Packet; +use crate::{contract::*, test_msg_recv, test_msg_send, ContractError}; +use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; +use cosmwasm_std::{from_binary, Addr, Attribute, Uint256}; + +use crate::helpers::tests::verify_query_response; +use crate::msg::{InstantiateMsg, PathMsg, QueryMsg, QuotaMsg, SudoMsg}; +use crate::state::tests::RESET_TIME_WEEKLY; +use crate::state::{RateLimit, GOVMODULE, IBCMODULE, RATE_LIMIT_TRACKERS}; + +const IBC_ADDR: &str = "IBC_MODULE"; +const GOV_ADDR: &str = "GOV_MODULE"; + +#[test] // Tests we ccan instantiate the contract and that the owners are set correctly +fn proper_instantiation() { + let mut deps = mock_dependencies(); + + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![], + }; + let info = mock_info(IBC_ADDR, &vec![]); + + // we can just call .unwrap() to assert this was a success + let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); + assert_eq!(0, res.messages.len()); + + // The ibc and gov modules are properly stored + assert_eq!(IBCMODULE.load(deps.as_ref().storage).unwrap(), IBC_ADDR); + assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap(), GOV_ADDR); +} + +#[test] // Tests that when a packet is transferred, the peropper allowance is consummed +fn consume_allowance() { + let mut deps = mock_dependencies(); + + let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![PathMsg { + channel_id: format!("any"), + denom: format!("denom"), + quotas: vec![quota], + }], + }; + let info = mock_info(GOV_ADDR, &vec![]); + let _res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); + + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom") , + channel_value: 3_300_u32.into(), + funds: 300_u32.into() + ); + let res = sudo(deps.as_mut(), mock_env(), msg).unwrap(); + + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "300"); + + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_300_u32.into(), + funds: 300_u32.into() + ); + let err = sudo(deps.as_mut(), mock_env(), msg).unwrap_err(); + assert!(matches!(err, ContractError::RateLimitExceded { .. })); +} + +#[test] // Tests that the balance of send and receive is maintained (i.e: recives are sustracted from the send allowance and sends from the receives) +fn symetric_flows_dont_consume_allowance() { + let mut deps = mock_dependencies(); + + let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![PathMsg { + channel_id: format!("any"), + denom: format!("denom"), + quotas: vec![quota], + }], + }; + let info = mock_info(GOV_ADDR, &vec![]); + let _res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); + + let send_msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_300_u32.into(), + funds: 300_u32.into() + ); + let recv_msg = test_msg_recv!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 300_u32.into() + ); + + let res = sudo(deps.as_mut(), mock_env(), send_msg.clone()).unwrap(); + let Attribute { key, value } = &res.attributes[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "0"); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "300"); + + let res = sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap(); + let Attribute { key, value } = &res.attributes[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "0"); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "0"); + + // We can still use the path. Even if we have sent more than the + // allowance through the path (900 > 3000*.1), the current "balance" + // of inflow vs outflow is still lower than the path's capacity/quota + let res = sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap(); + let Attribute { key, value } = &res.attributes[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "300"); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "0"); + + let err = sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap_err(); + + assert!(matches!(err, ContractError::RateLimitExceded { .. })); +} + +#[test] // Tests that we can have different quotas for send and receive. In this test we use 4% send and 1% receive +fn asymetric_quotas() { + let mut deps = mock_dependencies(); + + let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 4, 1); + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![PathMsg { + channel_id: format!("any"), + denom: format!("denom"), + quotas: vec![quota], + }], + }; + let info = mock_info(GOV_ADDR, &vec![]); + let _res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); + + // Sending 2% + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_060_u32.into(), + funds: 60_u32.into() + ); + let res = sudo(deps.as_mut(), mock_env(), msg).unwrap(); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "60"); + + // Sending 2% more. Allowed, as sending has a 4% allowance + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_060_u32.into(), + funds: 60_u32.into() + ); + + let res = sudo(deps.as_mut(), mock_env(), msg).unwrap(); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "120"); + + // Receiving 1% should still work. 4% *sent* through the path, but we can still receive. + let recv_msg = test_msg_recv!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 30_u32.into() + ); + let res = sudo(deps.as_mut(), mock_env(), recv_msg).unwrap(); + let Attribute { key, value } = &res.attributes[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "0"); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "90"); + + // Sending 2%. Should fail. In balance, we've sent 4% and received 1%, so only 1% left to send. + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_060_u32.into(), + funds: 60_u32.into() + ); + let err = sudo(deps.as_mut(), mock_env(), msg.clone()).unwrap_err(); + assert!(matches!(err, ContractError::RateLimitExceded { .. })); + + // Sending 1%: Allowed; because sending has a 4% allowance. We've sent 4% already, but received 1%, so there's send cappacity again + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_060_u32.into(), + funds: 30_u32.into() + ); + let res = sudo(deps.as_mut(), mock_env(), msg.clone()).unwrap(); + let Attribute { key, value } = &res.attributes[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "0"); + let Attribute { key, value } = &res.attributes[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "120"); +} + +#[test] // Tests we can get the current state of the trackers +fn query_state() { + let mut deps = mock_dependencies(); + + let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![PathMsg { + channel_id: format!("any"), + denom: format!("denom"), + quotas: vec![quota], + }], + }; + let info = mock_info(GOV_ADDR, &vec![]); + let env = mock_env(); + let _res = instantiate(deps.as_mut(), env.clone(), info, msg).unwrap(); + + let query_msg = QueryMsg::GetQuotas { + channel_id: format!("any"), + denom: format!("denom"), + }; + + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + let value: Vec = from_binary(&res).unwrap(); + assert_eq!(value[0].quota.name, "weekly"); + assert_eq!(value[0].quota.max_percentage_send, 10); + assert_eq!(value[0].quota.max_percentage_recv, 10); + assert_eq!(value[0].quota.duration, RESET_TIME_WEEKLY); + assert_eq!(value[0].flow.inflow, Uint256::from(0_u32)); + assert_eq!(value[0].flow.outflow, Uint256::from(0_u32)); + assert_eq!( + value[0].flow.period_end, + env.block.time.plus_seconds(RESET_TIME_WEEKLY) + ); + + let send_msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_300_u32.into(), + funds: 300_u32.into() + ); + sudo(deps.as_mut(), mock_env(), send_msg.clone()).unwrap(); + + let recv_msg = test_msg_recv!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 30_u32.into() + ); + sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap(); + + // Query + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + let value: Vec = from_binary(&res).unwrap(); + verify_query_response( + &value[0], + "weekly", + (10, 10), + RESET_TIME_WEEKLY, + 30_u32.into(), + 300_u32.into(), + env.block.time.plus_seconds(RESET_TIME_WEEKLY), + ); +} + +#[test] // Tests quota percentages are between [0,100] +fn bad_quotas() { + let mut deps = mock_dependencies(); + + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![PathMsg { + channel_id: format!("any"), + denom: format!("denom"), + quotas: vec![QuotaMsg { + name: "bad_quota".to_string(), + duration: 200, + send_recv: (5000, 101), + }], + }], + }; + let info = mock_info(IBC_ADDR, &vec![]); + + let env = mock_env(); + instantiate(deps.as_mut(), env.clone(), info, msg).unwrap(); + + // If a quota is higher than 100%, we set it to 100% + let query_msg = QueryMsg::GetQuotas { + channel_id: format!("any"), + denom: format!("denom"), + }; + let res = query(deps.as_ref(), env.clone(), query_msg).unwrap(); + let value: Vec = from_binary(&res).unwrap(); + verify_query_response( + &value[0], + "bad_quota", + (100, 100), + 200, + 0_u32.into(), + 0_u32.into(), + env.block.time.plus_seconds(200), + ); +} + +#[test] // Tests that undo reverts a packet send without affecting expiration or channel value +fn undo_send() { + let mut deps = mock_dependencies(); + + let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths: vec![PathMsg { + channel_id: format!("any"), + denom: format!("denom"), + quotas: vec![quota], + }], + }; + let info = mock_info(GOV_ADDR, &vec![]); + let _res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); + + let send_msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_300_u32.into(), + funds: 300_u32.into() + ); + let undo_msg = SudoMsg::UndoSend { + packet: Packet::mock( + format!("channel"), + format!("channel"), + format!("denom"), + 300_u32.into(), + ), + }; + + sudo(deps.as_mut(), mock_env(), send_msg.clone()).unwrap(); + + let trackers = RATE_LIMIT_TRACKERS + .load(&deps.storage, ("any".to_string(), "denom".to_string())) + .unwrap(); + assert_eq!( + trackers.first().unwrap().flow.outflow, + Uint256::from(300_u32) + ); + let period_end = trackers.first().unwrap().flow.period_end; + let channel_value = trackers.first().unwrap().quota.channel_value; + + sudo(deps.as_mut(), mock_env(), undo_msg.clone()).unwrap(); + + let trackers = RATE_LIMIT_TRACKERS + .load(&deps.storage, ("any".to_string(), "denom".to_string())) + .unwrap(); + assert_eq!(trackers.first().unwrap().flow.outflow, Uint256::from(0_u32)); + assert_eq!(trackers.first().unwrap().flow.period_end, period_end); + assert_eq!(trackers.first().unwrap().quota.channel_value, channel_value); +} + +#[test] +fn test_basic_message() { + let json = r#"{"send_packet":{"packet":{"sequence":2,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-0","data":{"denom":"stake","amount":"125000000000011250","sender":"osmo1dwtagd6xzl4eutwtyv6mewra627lkg3n3w26h6","receiver":"osmo1yvjkt8lnpxucjmspaj5ss4aa8562gx0a3rks8s"},"timeout_height":{"revision_height":100}}}}"#; + let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); + //println!("{parsed:?}"); +} + +#[test] +fn test_testnet_message() { + let json = r#"{"send_packet":{"packet":{"sequence":4,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-1491","data":{"denom":"uosmo","amount":"100","sender":"osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks","receiver":"osmo1c584m4lq25h83yp6ag8hh4htjr92d954vklzja"},"timeout_height":{},"timeout_timestamp":1668024637477293371}}}"#; + let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); + //println!("{parsed:?}"); +} + +#[test] +fn test_tokenfactory_message() { + let json = r#"{"send_packet":{"packet":{"sequence":4,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-1491","data":{"denom":"transfer/channel-0/factory/osmo12smx2wdlyttvyzvzg54y2vnqwq2qjateuf7thj/czar","amount":"100000000000000000","sender":"osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks","receiver":"osmo1c584m4lq25h83yp6ag8hh4htjr92d954vklzja"},"timeout_height":{},"timeout_timestamp":1668024476848430980}}}"#; + let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); + //println!("{parsed:?}"); +} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/error.rs b/x/ibcratelimit/contracts/rate-limiter/src/error.rs new file mode 100644 index 000000000..f5dcda946 --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/error.rs @@ -0,0 +1,29 @@ +use cosmwasm_std::{StdError, Timestamp, Uint256}; +use thiserror::Error; + +#[derive(Error, Debug, PartialEq)] +pub enum ContractError { + #[error("{0}")] + Std(#[from] StdError), + + #[error("Unauthorized")] + Unauthorized {}, + + #[error("IBC Rate Limit exceeded for {channel}/{denom}. Tried to transfer {amount} which exceeds capacity on the '{quota_name}' quota ({used}/{max}). Try again after {reset:?}")] + RateLimitExceded { + channel: String, + denom: String, + amount: Uint256, + quota_name: String, + used: Uint256, + max: Uint256, + reset: Timestamp, + }, + + #[error("Quota {quota_id} not found for channel {channel_id}")] + QuotaNotFound { + quota_id: String, + channel_id: String, + denom: String, + }, +} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/execute.rs b/x/ibcratelimit/contracts/rate-limiter/src/execute.rs new file mode 100644 index 000000000..047a2179d --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/execute.rs @@ -0,0 +1,249 @@ +use crate::msg::{PathMsg, QuotaMsg}; +use crate::state::{Flow, Path, RateLimit, GOVMODULE, IBCMODULE, RATE_LIMIT_TRACKERS}; +use crate::ContractError; +use cosmwasm_std::{Addr, DepsMut, Response, Timestamp}; + +pub fn add_new_paths( + deps: DepsMut, + path_msgs: Vec, + now: Timestamp, +) -> Result<(), ContractError> { + for path_msg in path_msgs { + let path = Path::new(path_msg.channel_id, path_msg.denom); + + RATE_LIMIT_TRACKERS.save( + deps.storage, + path.into(), + &path_msg + .quotas + .iter() + .map(|q| RateLimit { + quota: q.into(), + flow: Flow::new(0_u128, 0_u128, now, q.duration), + }) + .collect(), + )? + } + Ok(()) +} + +pub fn try_add_path( + deps: DepsMut, + sender: Addr, + channel_id: String, + denom: String, + quotas: Vec, + now: Timestamp, +) -> Result { + // codenit: should we make a function for checking this authorization? + let ibc_module = IBCMODULE.load(deps.storage)?; + let gov_module = GOVMODULE.load(deps.storage)?; + if sender != ibc_module && sender != gov_module { + return Err(ContractError::Unauthorized {}); + } + add_new_paths(deps, vec![PathMsg::new(&channel_id, &denom, quotas)], now)?; + + Ok(Response::new() + .add_attribute("method", "try_add_channel") + .add_attribute("channel_id", channel_id) + .add_attribute("denom", denom)) +} + +pub fn try_remove_path( + deps: DepsMut, + sender: Addr, + channel_id: String, + denom: String, +) -> Result { + let ibc_module = IBCMODULE.load(deps.storage)?; + let gov_module = GOVMODULE.load(deps.storage)?; + if sender != ibc_module && sender != gov_module { + return Err(ContractError::Unauthorized {}); + } + + let path = Path::new(&channel_id, &denom); + RATE_LIMIT_TRACKERS.remove(deps.storage, path.into()); + Ok(Response::new() + .add_attribute("method", "try_remove_channel") + .add_attribute("denom", denom) + .add_attribute("channel_id", channel_id)) +} + +// Reset specified quote_id for the given channel_id +pub fn try_reset_path_quota( + deps: DepsMut, + sender: Addr, + channel_id: String, + denom: String, + quota_id: String, + now: Timestamp, +) -> Result { + let gov_module = GOVMODULE.load(deps.storage)?; + if sender != gov_module { + return Err(ContractError::Unauthorized {}); + } + + let path = Path::new(&channel_id, &denom); + RATE_LIMIT_TRACKERS.update(deps.storage, path.into(), |maybe_rate_limit| { + match maybe_rate_limit { + None => Err(ContractError::QuotaNotFound { + quota_id, + channel_id: channel_id.clone(), + denom: denom.clone(), + }), + Some(mut limits) => { + // Q: What happens here if quote_id not found? seems like we return ok? + limits.iter_mut().for_each(|limit| { + if limit.quota.name == quota_id.as_ref() { + limit.flow.expire(now, limit.quota.duration) + } + }); + Ok(limits) + } + } + })?; + + Ok(Response::new() + .add_attribute("method", "try_reset_channel") + .add_attribute("channel_id", channel_id)) +} + +#[cfg(test)] +mod tests { + use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; + use cosmwasm_std::{from_binary, Addr, StdError}; + + use crate::contract::{execute, query}; + use crate::helpers::tests::verify_query_response; + use crate::msg::{ExecuteMsg, QueryMsg, QuotaMsg}; + use crate::state::{RateLimit, GOVMODULE, IBCMODULE}; + + const IBC_ADDR: &str = "IBC_MODULE"; + const GOV_ADDR: &str = "GOV_MODULE"; + + #[test] // Tests AddPath and RemovePath messages + fn management_add_and_remove_path() { + let mut deps = mock_dependencies(); + IBCMODULE + .save(deps.as_mut().storage, &Addr::unchecked(IBC_ADDR)) + .unwrap(); + GOVMODULE + .save(deps.as_mut().storage, &Addr::unchecked(GOV_ADDR)) + .unwrap(); + + let msg = ExecuteMsg::AddPath { + channel_id: format!("channel"), + denom: format!("denom"), + quotas: vec![QuotaMsg { + name: "daily".to_string(), + duration: 1600, + send_recv: (3, 5), + }], + }; + let info = mock_info(IBC_ADDR, &vec![]); + + let env = mock_env(); + let res = execute(deps.as_mut(), env.clone(), info, msg).unwrap(); + assert_eq!(0, res.messages.len()); + + let query_msg = QueryMsg::GetQuotas { + channel_id: format!("channel"), + denom: format!("denom"), + }; + + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + + let value: Vec = from_binary(&res).unwrap(); + verify_query_response( + &value[0], + "daily", + (3, 5), + 1600, + 0_u32.into(), + 0_u32.into(), + env.block.time.plus_seconds(1600), + ); + + assert_eq!(value.len(), 1); + + // Add another path + let msg = ExecuteMsg::AddPath { + channel_id: format!("channel2"), + denom: format!("denom"), + quotas: vec![QuotaMsg { + name: "daily".to_string(), + duration: 1600, + send_recv: (3, 5), + }], + }; + let info = mock_info(IBC_ADDR, &vec![]); + + let env = mock_env(); + execute(deps.as_mut(), env.clone(), info, msg).unwrap(); + + // remove the first one + let msg = ExecuteMsg::RemovePath { + channel_id: format!("channel"), + denom: format!("denom"), + }; + + let info = mock_info(IBC_ADDR, &vec![]); + let env = mock_env(); + execute(deps.as_mut(), env.clone(), info, msg).unwrap(); + + // The channel is not there anymore + let err = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap_err(); + assert!(matches!(err, StdError::NotFound { .. })); + + // The second channel is still there + let query_msg = QueryMsg::GetQuotas { + channel_id: format!("channel2"), + denom: format!("denom"), + }; + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + let value: Vec = from_binary(&res).unwrap(); + assert_eq!(value.len(), 1); + verify_query_response( + &value[0], + "daily", + (3, 5), + 1600, + 0_u32.into(), + 0_u32.into(), + env.block.time.plus_seconds(1600), + ); + + // Paths are overriden if they share a name and denom + let msg = ExecuteMsg::AddPath { + channel_id: format!("channel2"), + denom: format!("denom"), + quotas: vec![QuotaMsg { + name: "different".to_string(), + duration: 5000, + send_recv: (50, 30), + }], + }; + let info = mock_info(IBC_ADDR, &vec![]); + + let env = mock_env(); + execute(deps.as_mut(), env.clone(), info, msg).unwrap(); + + let query_msg = QueryMsg::GetQuotas { + channel_id: format!("channel2"), + denom: format!("denom"), + }; + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + let value: Vec = from_binary(&res).unwrap(); + assert_eq!(value.len(), 1); + + verify_query_response( + &value[0], + "different", + (50, 30), + 5000, + 0_u32.into(), + 0_u32.into(), + env.block.time.plus_seconds(5000), + ); + } +} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/helpers.rs b/x/ibcratelimit/contracts/rate-limiter/src/helpers.rs new file mode 100644 index 000000000..530d3b6cf --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/helpers.rs @@ -0,0 +1,61 @@ +#![cfg(test)] +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +use cosmwasm_std::{to_binary, Addr, CosmosMsg, StdResult, WasmMsg}; + +use crate::msg::ExecuteMsg; +use crate::msg::SudoMsg; + +/// CwTemplateContract is a wrapper around Addr that provides a lot of helpers +/// for working with this. +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct RateLimitingContract(pub Addr); + +impl RateLimitingContract { + pub fn addr(&self) -> Addr { + self.0.clone() + } + + pub fn call>(&self, msg: T) -> StdResult { + let msg = to_binary(&msg.into())?; + Ok(WasmMsg::Execute { + contract_addr: self.addr().into(), + msg, + funds: vec![], + } + .into()) + } + + pub fn sudo>(&self, msg: T) -> cw_multi_test::SudoMsg { + let msg = to_binary(&msg.into()).unwrap(); + cw_multi_test::SudoMsg::Wasm(cw_multi_test::WasmSudo { + contract_addr: self.addr().into(), + msg, + }) + } +} + +pub mod tests { + use cosmwasm_std::{Timestamp, Uint256}; + + use crate::state::RateLimit; + + pub fn verify_query_response( + value: &RateLimit, + quota_name: &str, + send_recv: (u32, u32), + duration: u64, + inflow: Uint256, + outflow: Uint256, + period_end: Timestamp, + ) { + assert_eq!(value.quota.name, quota_name); + assert_eq!(value.quota.max_percentage_send, send_recv.0); + assert_eq!(value.quota.max_percentage_recv, send_recv.1); + assert_eq!(value.quota.duration, duration); + assert_eq!(value.flow.inflow, inflow); + assert_eq!(value.flow.outflow, outflow); + assert_eq!(value.flow.period_end, period_end); + } +} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/integration_tests.rs b/x/ibcratelimit/contracts/rate-limiter/src/integration_tests.rs new file mode 100644 index 000000000..bd9befeb8 --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/integration_tests.rs @@ -0,0 +1,417 @@ +#![cfg(test)] +use crate::{helpers::RateLimitingContract, msg::ExecuteMsg, test_msg_send, ContractError}; +use cosmwasm_std::{Addr, Coin, Empty, Timestamp, Uint128, Uint256}; +use cw_multi_test::{App, AppBuilder, Contract, ContractWrapper, Executor}; + +use crate::{ + msg::{InstantiateMsg, PathMsg, QuotaMsg}, + state::tests::{RESET_TIME_DAILY, RESET_TIME_MONTHLY, RESET_TIME_WEEKLY}, +}; + +pub fn contract_template() -> Box> { + let contract = ContractWrapper::new( + crate::contract::execute, + crate::contract::instantiate, + crate::contract::query, + ) + .with_sudo(crate::contract::sudo); + Box::new(contract) +} + +const USER: &str = "USER"; +const IBC_ADDR: &str = "IBC_MODULE"; +const GOV_ADDR: &str = "GOV_MODULE"; +const NATIVE_DENOM: &str = "nosmo"; + +fn mock_app() -> App { + AppBuilder::new().build(|router, _, storage| { + router + .bank + .init_balance( + storage, + &Addr::unchecked(USER), + vec![Coin { + denom: NATIVE_DENOM.to_string(), + amount: Uint128::new(1_000), + }], + ) + .unwrap(); + }) +} + +// Instantiate the contract +fn proper_instantiate(paths: Vec) -> (App, RateLimitingContract) { + let mut app = mock_app(); + let cw_code_id = app.store_code(contract_template()); + + let msg = InstantiateMsg { + gov_module: Addr::unchecked(GOV_ADDR), + ibc_module: Addr::unchecked(IBC_ADDR), + paths, + }; + + let cw_rate_limit_contract_addr = app + .instantiate_contract( + cw_code_id, + Addr::unchecked(GOV_ADDR), + &msg, + &[], + "test", + None, + ) + .unwrap(); + + let cw_rate_limit_contract = RateLimitingContract(cw_rate_limit_contract_addr); + + (app, cw_rate_limit_contract) +} + +use cosmwasm_std::Attribute; + +#[test] // Checks that the RateLimit flows are expired properly when time passes +fn expiration() { + let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: format!("any"), + denom: format!("denom"), + quotas: vec![quota], + }]); + + // Using all the allowance + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 300_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + let res = app.sudo(cosmos_msg).unwrap(); + + let Attribute { key, value } = &res.custom_attrs(1)[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "0"); + let Attribute { key, value } = &res.custom_attrs(1)[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "300"); + let Attribute { key, value } = &res.custom_attrs(1)[5]; + assert_eq!(key, "weekly_max_in"); + assert_eq!(value, "300"); + let Attribute { key, value } = &res.custom_attrs(1)[6]; + assert_eq!(key, "weekly_max_out"); + assert_eq!(value, "300"); + + // Another packet is rate limited + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 300_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + let err = app.sudo(cosmos_msg).unwrap_err(); + + assert_eq!( + err.downcast_ref::().unwrap(), + &ContractError::RateLimitExceded { + channel: "channel".to_string(), + denom: "denom".to_string(), + amount: Uint256::from_u128(300), + quota_name: "weekly".to_string(), + used: Uint256::from_u128(300), + max: Uint256::from_u128(300), + reset: Timestamp::from_nanos(1572402219879305533), + } + ); + + // ... Time passes + app.update_block(|b| { + b.height += 1000; + b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) + }); + + // Sending the packet should work now + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 300_u32.into() + ); + + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + let res = app.sudo(cosmos_msg).unwrap(); + + let Attribute { key, value } = &res.custom_attrs(1)[3]; + assert_eq!(key, "weekly_used_in"); + assert_eq!(value, "0"); + let Attribute { key, value } = &res.custom_attrs(1)[4]; + assert_eq!(key, "weekly_used_out"); + assert_eq!(value, "300"); + let Attribute { key, value } = &res.custom_attrs(1)[5]; + assert_eq!(key, "weekly_max_in"); + assert_eq!(value, "300"); + let Attribute { key, value } = &res.custom_attrs(1)[6]; + assert_eq!(key, "weekly_max_out"); + assert_eq!(value, "300"); +} + +#[test] // Tests we can have different maximums for different quotaas (daily, weekly, etc) and that they all are active at the same time +fn multiple_quotas() { + let quotas = vec![ + QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), + QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), + QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), + ]; + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: format!("any"), + denom: format!("denom"), + quotas, + }]); + + // Sending 1% to use the daily allowance + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); + + // Another packet is rate limited + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // ... One day passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) + }); + + // Sending the packet should work now + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); + + // Do that for 4 more days + for _ in 1..4 { + // ... One day passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) + }); + + // Sending the packet should work now + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); + } + + // ... One day passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) + }); + + // We now have exceeded the weekly limit! Even if the daily limit allows us, the weekly doesn't + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // ... One week passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) + }); + + // We can still can't send because the weekly and monthly limits are the same + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // Waiting a week again, doesn't help!! + // ... One week passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) + }); + + // We can still can't send because the monthly limit hasn't passed + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // Only after two more weeks we can send again + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds((RESET_TIME_WEEKLY * 2) + 1) // Two weeks + }); + + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 101_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); +} + +#[test] // Tests that the channel value is based on the value at the beginning of the period +fn channel_value_cached() { + let quotas = vec![ + QuotaMsg::new("daily", RESET_TIME_DAILY, 2, 2), + QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), + ]; + + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { + channel_id: format!("any"), + denom: format!("denom"), + quotas, + }]); + + // Sending 1% (half of the daily allowance) + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 100_u32.into(), + funds: 1_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); + + // Sending 3% is now rate limited + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 100_u32.into(), + funds: 3_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // Even if the channel value increases, the percentage is calculated based on the value at period start + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 100000_u32.into(), + funds: 3_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // ... One day passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) + }); + + // New Channel Value world! + + // Sending 1% of a new value (10_000) passes the daily check, cause it + // has expired, but not the weekly check (The value for last week is + // sitll 100, as only 1 day has passed) + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 10_000_u32.into(), + funds: 100_u32.into() + ); + + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); + + // ... One week passes + app.update_block(|b| { + b.height += 10; + b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) + }); + + // Sending 1% of a new value should work and set the value for the day at 10_000 + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 10_000_u32.into(), + funds: 100_u32.into() + ); + + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); + + // If the value magically decreasses. We can still send up to 100 more (1% of 10k) + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 1_u32.into(), + funds: 75_u32.into() + ); + + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap(); +} + +#[test] // Checks that RateLimits added after instantiation are respected +fn add_paths_later() { + let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![]); + + // All sends are allowed + let msg = test_msg_send!( + channel_id: format!("channel"), + denom: format!("denom"), + channel_value: 3_000_u32.into(), + funds: 300_u32.into() + ); + let cosmos_msg = cw_rate_limit_contract.sudo(msg.clone()); + let res = app.sudo(cosmos_msg).unwrap(); + + let Attribute { key, value } = &res.custom_attrs(1)[3]; + assert_eq!(key, "quota"); + assert_eq!(value, "none"); + + // Add a weekly limit of 1% + let management_msg = ExecuteMsg::AddPath { + channel_id: format!("any"), + denom: format!("denom"), + quotas: vec![QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 1, 1)], + }; + + let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); + app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg).unwrap(); + + // Executing the same message again should fail, as it is now rate limited + let cosmos_msg = cw_rate_limit_contract.sudo(msg); + app.sudo(cosmos_msg).unwrap_err(); +} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/lib.rs b/x/ibcratelimit/contracts/rate-limiter/src/lib.rs new file mode 100644 index 000000000..6fcd1c32c --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/lib.rs @@ -0,0 +1,21 @@ +#![allow(clippy::result_large_err)] + +// Contract +pub mod contract; +mod error; +pub mod msg; +mod state; + +pub mod packet; + +// Functions +mod execute; +mod query; +mod sudo; + +// Tests +mod contract_tests; +mod helpers; +mod integration_tests; + +pub use crate::error::ContractError; diff --git a/x/ibcratelimit/contracts/rate-limiter/src/management.rs b/x/ibcratelimit/contracts/rate-limiter/src/management.rs new file mode 100644 index 000000000..04dc47df8 --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/management.rs @@ -0,0 +1,250 @@ +use crate::msg::{PathMsg, QuotaMsg}; +use crate::state::{Flow, Path, RateLimit, GOVMODULE, IBCMODULE, RATE_LIMIT_TRACKERS}; +use crate::ContractError; +use cosmwasm_std::{Addr, DepsMut, Response, Timestamp}; + +pub fn add_new_paths( + deps: DepsMut, + path_msgs: Vec, + now: Timestamp, +) -> Result<(), ContractError> { + for path_msg in path_msgs { + let path = Path::new(path_msg.channel_id, path_msg.denom); + + RATE_LIMIT_TRACKERS.save( + deps.storage, + path.into(), + &path_msg + .quotas + .iter() + .map(|q| RateLimit { + quota: q.into(), + flow: Flow::new(0_u128, 0_u128, now, q.duration), + }) + .collect(), + )? + } + Ok(()) +} + +pub fn try_add_path( + deps: DepsMut, + sender: Addr, + channel_id: String, + denom: String, + quotas: Vec, + now: Timestamp, +) -> Result { + // codenit: should we make a function for checking this authorization? + let ibc_module = IBCMODULE.load(deps.storage)?; + let gov_module = GOVMODULE.load(deps.storage)?; + if sender != ibc_module && sender != gov_module { + return Err(ContractError::Unauthorized {}); + } + add_new_paths(deps, vec![PathMsg::new(&channel_id, &denom, quotas)], now)?; + + Ok(Response::new() + .add_attribute("method", "try_add_channel") + .add_attribute("channel_id", channel_id) + .add_attribute("denom", denom)) +} + +pub fn try_remove_path( + deps: DepsMut, + sender: Addr, + channel_id: String, + denom: String, +) -> Result { + let ibc_module = IBCMODULE.load(deps.storage)?; + let gov_module = GOVMODULE.load(deps.storage)?; + if sender != ibc_module && sender != gov_module { + return Err(ContractError::Unauthorized {}); + } + + let path = Path::new(&channel_id, &denom); + RATE_LIMIT_TRACKERS.remove(deps.storage, path.into()); + Ok(Response::new() + .add_attribute("method", "try_remove_channel") + .add_attribute("denom", denom) + .add_attribute("channel_id", channel_id)) +} + +// Reset specified quote_id for the given channel_id +pub fn try_reset_path_quota( + deps: DepsMut, + sender: Addr, + channel_id: String, + denom: String, + quota_id: String, + now: Timestamp, +) -> Result { + let gov_module = GOVMODULE.load(deps.storage)?; + if sender != gov_module { + return Err(ContractError::Unauthorized {}); + } + + let path = Path::new(&channel_id, &denom); + RATE_LIMIT_TRACKERS.update(deps.storage, path.into(), |maybe_rate_limit| { + match maybe_rate_limit { + None => Err(ContractError::QuotaNotFound { + quota_id, + channel_id: channel_id.clone(), + denom: denom.clone(), + }), + Some(mut limits) => { + // Q: What happens here if quote_id not found? seems like we return ok? + limits.iter_mut().for_each(|limit| { + if limit.quota.name == quota_id.as_ref() { + limit.flow.expire(now, limit.quota.duration) + } + }); + Ok(limits) + } + } + })?; + + Ok(Response::new() + .add_attribute("method", "try_reset_channel") + .add_attribute("channel_id", channel_id)) +} + +#[cfg(test)] +mod tests { + + use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; + use cosmwasm_std::{from_binary, Addr, StdError}; + + use crate::contract::{execute, query}; + use crate::helpers::tests::verify_query_response; + use crate::msg::{ExecuteMsg, QueryMsg, QuotaMsg}; + use crate::state::{RateLimit, GOVMODULE, IBCMODULE}; + + const IBC_ADDR: &str = "IBC_MODULE"; + const GOV_ADDR: &str = "GOV_MODULE"; + + #[test] // Tests AddPath and RemovePath messages + fn management_add_and_remove_path() { + let mut deps = mock_dependencies(); + IBCMODULE + .save(deps.as_mut().storage, &Addr::unchecked(IBC_ADDR)) + .unwrap(); + GOVMODULE + .save(deps.as_mut().storage, &Addr::unchecked(GOV_ADDR)) + .unwrap(); + + let msg = ExecuteMsg::AddPath { + channel_id: format!("channel"), + denom: format!("denom"), + quotas: vec![QuotaMsg { + name: "daily".to_string(), + duration: 1600, + send_recv: (3, 5), + }], + }; + let info = mock_info(IBC_ADDR, &vec![]); + + let env = mock_env(); + let res = execute(deps.as_mut(), env.clone(), info, msg).unwrap(); + assert_eq!(0, res.messages.len()); + + let query_msg = QueryMsg::GetQuotas { + channel_id: format!("channel"), + denom: format!("denom"), + }; + + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + + let value: Vec = from_binary(&res).unwrap(); + verify_query_response( + &value[0], + "daily", + (3, 5), + 1600, + 0, + 0, + env.block.time.plus_seconds(1600), + ); + + assert_eq!(value.len(), 1); + + // Add another path + let msg = ExecuteMsg::AddPath { + channel_id: format!("channel2"), + denom: format!("denom"), + quotas: vec![QuotaMsg { + name: "daily".to_string(), + duration: 1600, + send_recv: (3, 5), + }], + }; + let info = mock_info(IBC_ADDR, &vec![]); + + let env = mock_env(); + execute(deps.as_mut(), env.clone(), info, msg).unwrap(); + + // remove the first one + let msg = ExecuteMsg::RemovePath { + channel_id: format!("channel"), + denom: format!("denom"), + }; + + let info = mock_info(IBC_ADDR, &vec![]); + let env = mock_env(); + execute(deps.as_mut(), env.clone(), info, msg).unwrap(); + + // The channel is not there anymore + let err = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap_err(); + assert!(matches!(err, StdError::NotFound { .. })); + + // The second channel is still there + let query_msg = QueryMsg::GetQuotas { + channel_id: format!("channel2"), + denom: format!("denom"), + }; + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + let value: Vec = from_binary(&res).unwrap(); + assert_eq!(value.len(), 1); + verify_query_response( + &value[0], + "daily", + (3, 5), + 1600, + 0, + 0, + env.block.time.plus_seconds(1600), + ); + + // Paths are overriden if they share a name and denom + let msg = ExecuteMsg::AddPath { + channel_id: format!("channel2"), + denom: format!("denom"), + quotas: vec![QuotaMsg { + name: "different".to_string(), + duration: 5000, + send_recv: (50, 30), + }], + }; + let info = mock_info(IBC_ADDR, &vec![]); + + let env = mock_env(); + execute(deps.as_mut(), env.clone(), info, msg).unwrap(); + + let query_msg = QueryMsg::GetQuotas { + channel_id: format!("channel2"), + denom: format!("denom"), + }; + let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); + let value: Vec = from_binary(&res).unwrap(); + assert_eq!(value.len(), 1); + + verify_query_response( + &value[0], + "different", + (50, 30), + 5000, + 0, + 0, + env.block.time.plus_seconds(5000), + ); + } +} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/msg.rs b/x/ibcratelimit/contracts/rate-limiter/src/msg.rs new file mode 100644 index 000000000..57279c0ad --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/msg.rs @@ -0,0 +1,105 @@ +use cosmwasm_schema::{cw_serde, QueryResponses}; +use cosmwasm_std::Addr; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +#[cfg(test)] +use cosmwasm_std::Uint256; + +use crate::packet::Packet; + +// PathMsg contains a channel_id and denom to represent a unique identifier within ibc-go, and a list of rate limit quotas +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct PathMsg { + pub channel_id: String, + pub denom: String, + pub quotas: Vec, +} + +impl PathMsg { + pub fn new( + channel: impl Into, + denom: impl Into, + quotas: Vec, + ) -> Self { + PathMsg { + channel_id: channel.into(), + denom: denom.into(), + quotas, + } + } +} + +// QuotaMsg represents a rate limiting Quota when sent as a wasm msg +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct QuotaMsg { + pub name: String, + pub duration: u64, + pub send_recv: (u32, u32), +} + +impl QuotaMsg { + pub fn new(name: &str, seconds: u64, send_percentage: u32, recv_percentage: u32) -> Self { + QuotaMsg { + name: name.to_string(), + duration: seconds, + send_recv: (send_percentage, recv_percentage), + } + } +} + +/// Initialize the contract with the address of the IBC module and any existing channels. +/// Only the ibc module is allowed to execute actions on this contract +#[cw_serde] +pub struct InstantiateMsg { + pub gov_module: Addr, + pub ibc_module: Addr, + pub paths: Vec, +} + +/// The caller (IBC module) is responsible for correctly calculating the funds +/// being sent through the channel +#[cw_serde] +pub enum ExecuteMsg { + AddPath { + channel_id: String, + denom: String, + quotas: Vec, + }, + RemovePath { + channel_id: String, + denom: String, + }, + ResetPathQuota { + channel_id: String, + denom: String, + quota_id: String, + }, +} + +#[cw_serde] +#[derive(QueryResponses)] +pub enum QueryMsg { + #[returns(Vec)] + GetQuotas { channel_id: String, denom: String }, +} + +#[cw_serde] +pub enum SudoMsg { + SendPacket { + packet: Packet, + #[cfg(test)] + channel_value_mock: Option, + }, + RecvPacket { + packet: Packet, + #[cfg(test)] + channel_value_mock: Option, + }, + UndoSend { + packet: Packet, + }, +} + +#[cw_serde] +pub enum MigrateMsg {} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/packet.rs b/x/ibcratelimit/contracts/rate-limiter/src/packet.rs new file mode 100644 index 000000000..6e53754bb --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/packet.rs @@ -0,0 +1,482 @@ +use crate::state::FlowType; +use cosmwasm_std::{Addr, Deps, StdError, Uint256}; +use osmosis_std_derive::CosmwasmExt; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; +use sha2::{Digest, Sha256}; + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct Height { + /// Previously known as "epoch" + revision_number: Option, + + /// The height of a block + revision_height: Option, +} + +// IBC transfer data +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct FungibleTokenData { + pub denom: String, + amount: Uint256, + sender: Addr, + receiver: Addr, +} + +// An IBC packet +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct Packet { + pub sequence: u64, + pub source_port: String, + pub source_channel: String, + pub destination_port: String, + pub destination_channel: String, + pub data: FungibleTokenData, + pub timeout_height: Height, + pub timeout_timestamp: Option, +} + +// SupplyOf query message definition. +// osmosis-std doesn't currently support the SupplyOf query, so I'm defining it localy so it can be used to obtain the channel value +#[derive( + Clone, + PartialEq, + Eq, + ::prost::Message, + serde::Serialize, + serde::Deserialize, + schemars::JsonSchema, + CosmwasmExt, +)] +#[proto_message(type_url = "/cosmos.bank.v1beta1.QuerySupplyOfRequest")] +#[proto_query( + path = "/cosmos.bank.v1beta1.Query/SupplyOf", + response_type = QuerySupplyOfResponse +)] +pub struct QuerySupplyOfRequest { + #[prost(string, tag = "1")] + pub denom: ::prost::alloc::string::String, +} + +#[derive( + Clone, + PartialEq, + Eq, + ::prost::Message, + serde::Serialize, + serde::Deserialize, + schemars::JsonSchema, + CosmwasmExt, +)] +#[proto_message(type_url = "/cosmos.bank.v1beta1.QuerySupplyOf")] +pub struct QuerySupplyOfResponse { + #[prost(message, optional, tag = "1")] + pub amount: ::core::option::Option, +} +// End of SupplyOf query message definition + +use std::str::FromStr; // Needed to parse the coin's String as Uint256 + +fn hash_denom(denom: &str) -> String { + let mut hasher = Sha256::new(); + hasher.update(denom.as_bytes()); + let result = hasher.finalize(); + let hash = hex::encode(result); + format!("ibc/{}", hash.to_uppercase()) +} + +impl Packet { + pub fn mock( + source_channel: String, + dest_channel: String, + denom: String, + funds: Uint256, + ) -> Packet { + Packet { + sequence: 0, + source_port: "transfer".to_string(), + source_channel, + destination_port: "transfer".to_string(), + destination_channel: dest_channel, + data: crate::packet::FungibleTokenData { + denom, + amount: funds, + sender: Addr::unchecked("sender"), + receiver: Addr::unchecked("receiver"), + }, + timeout_height: crate::packet::Height { + revision_number: None, + revision_height: None, + }, + timeout_timestamp: None, + } + } + + pub fn channel_value(&self, deps: Deps, direction: &FlowType) -> Result { + let res = QuerySupplyOfRequest { + denom: self.local_denom(direction), + } + .query(&deps.querier)?; + Uint256::from_str(&res.amount.unwrap_or_default().amount) + } + + pub fn get_funds(&self) -> Uint256 { + self.data.amount + } + + fn local_channel(&self, direction: &FlowType) -> String { + // Pick the appropriate channel depending on whether this is a send or a recv + match direction { + FlowType::In => self.destination_channel.clone(), + FlowType::Out => self.source_channel.clone(), + } + } + + fn receiver_chain_is_source(&self) -> bool { + self.data + .denom + .starts_with(&format!("transfer/{}", self.source_channel)) + } + + fn handle_denom_for_sends(&self) -> String { + if !self.data.denom.starts_with("transfer/") { + // For native tokens we just use what's on the packet + return self.data.denom.clone(); + } + // For non-native tokens, we need to generate the IBCDenom + hash_denom(&self.data.denom) + } + + fn handle_denom_for_recvs(&self) -> String { + if self.receiver_chain_is_source() { + // These are tokens that have been sent to the counterparty and are returning + let unprefixed = self + .data + .denom + .strip_prefix(&format!("transfer/{}/", self.source_channel)) + .unwrap_or_default(); + let split: Vec<&str> = unprefixed.split('/').collect(); + if split[0] == unprefixed { + // This is a native token. Return the unprefixed token + unprefixed.to_string() + } else { + // This is a non-native that was sent to the counterparty. + // We need to hash it. + // The ibc-go implementation checks that the denom has been built correctly. We + // don't need to do that here because if it hasn't, the transfer module will catch it. + hash_denom(unprefixed) + } + } else { + // Tokens that come directly from the counterparty. + // Since the sender didn't prefix them, we need to do it here. + let prefixed = format!("transfer/{}/", self.destination_channel) + &self.data.denom; + hash_denom(&prefixed) + } + } + + fn local_denom(&self, direction: &FlowType) -> String { + match direction { + FlowType::In => self.handle_denom_for_recvs(), + FlowType::Out => self.handle_denom_for_sends(), + } + } + + pub fn path_data(&self, direction: &FlowType) -> (String, String) { + (self.local_channel(direction), self.local_denom(direction)) + } +} + +// Helpers + +// Create a new packet for testing +#[cfg(test)] +#[macro_export] +macro_rules! test_msg_send { + (channel_id: $channel_id:expr, denom: $denom:expr, channel_value: $channel_value:expr, funds: $funds:expr) => { + $crate::msg::SudoMsg::SendPacket { + packet: $crate::packet::Packet::mock($channel_id, $channel_id, $denom, $funds), + channel_value_mock: Some($channel_value), + } + }; +} + +#[cfg(test)] +#[macro_export] +macro_rules! test_msg_recv { + (channel_id: $channel_id:expr, denom: $denom:expr, channel_value: $channel_value:expr, funds: $funds:expr) => { + $crate::msg::SudoMsg::RecvPacket { + packet: $crate::packet::Packet::mock( + $channel_id, + $channel_id, + format!("transfer/{}/{}", $channel_id, $denom), + $funds, + ), + channel_value_mock: Some($channel_value), + } + }; +} + +#[cfg(test)] +pub mod tests { + use crate::msg::SudoMsg; + + use super::*; + + #[test] + fn send_native() { + let packet = Packet::mock( + format!("channel-17-local"), + format!("channel-42-counterparty"), + format!("uosmo"), + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::Out), "uosmo"); + } + + #[test] + fn send_non_native() { + // The transfer module "unhashes" the denom from + // ibc/09E4864A262249507925831FBAD69DAD08F66FAAA0640714E765912A0751289A + // to port/channel/denom before passing it along to the contrace + let packet = Packet::mock( + format!("channel-17-local"), + format!("channel-42-counterparty"), + format!("transfer/channel-17-local/ujuno"), + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::Out), + "ibc/09E4864A262249507925831FBAD69DAD08F66FAAA0640714E765912A0751289A" + ); + } + + #[test] + fn receive_non_native() { + // The counterparty chain sends their own native token to us + let packet = Packet::mock( + format!("channel-42-counterparty"), // The counterparty's channel is the source here + format!("channel-17-local"), // Our channel is the dest channel + format!("ujuno"), // This is unwrapped. It is our job to wrap it + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::In), + "ibc/09E4864A262249507925831FBAD69DAD08F66FAAA0640714E765912A0751289A" + ); + } + + #[test] + fn receive_native() { + // The counterparty chain sends us back our native token that they had wrapped + let packet = Packet::mock( + format!("channel-42-counterparty"), // The counterparty's channel is the source here + format!("channel-17-local"), // Our channel is the dest channel + format!("transfer/channel-42-counterparty/uosmo"), + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::In), "uosmo"); + } + + // Let's assume we have two chains A and B (local and counterparty) connected in the following way: + // + // Chain A <---> channel-17-local <---> channel-42-counterparty <---> Chain B + // + // The following tests should pass + // + + const WRAPPED_OSMO_ON_HUB_TRACE: &str = "transfer/channel-141/uosmo"; + const WRAPPED_ATOM_ON_OSMOSIS_TRACE: &str = "transfer/channel-0/uatom"; + const WRAPPED_ATOM_ON_OSMOSIS_HASH: &str = + "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2"; + const WRAPPED_OSMO_ON_HUB_HASH: &str = + "ibc/14F9BC3E44B8A9C1BE1FB08980FAB87034C9905EF17CF2F5008FC085218811CC"; + + #[test] + fn sanity_check() { + // Examples using the official channels as of Nov 2022. + + // uatom sent to osmosis + let packet = Packet::mock( + format!("channel-141"), // from: hub + format!("channel-0"), // to: osmosis + format!("uatom"), + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::In), + WRAPPED_ATOM_ON_OSMOSIS_HASH.clone() + ); + + // uatom on osmosis sent back to the hub + let packet = Packet::mock( + format!("channel-0"), // from: osmosis + format!("channel-141"), // to: hub + WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::In), "uatom"); + + // osmo sent to the hub + let packet = Packet::mock( + format!("channel-0"), // from: osmosis + format!("channel-141"), // to: hub + format!("uosmo"), + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::Out), "uosmo"); + + // osmo on the hub sent back to osmosis + // send + let packet = Packet::mock( + format!("channel-141"), // from: hub + format!("channel-0"), // to: osmosis + WRAPPED_OSMO_ON_HUB_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::Out), WRAPPED_OSMO_ON_HUB_HASH); + + // receive + let packet = Packet::mock( + format!("channel-141"), // from: hub + format!("channel-0"), // to: osmosis + WRAPPED_OSMO_ON_HUB_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::In), "uosmo"); + + // Now let's pretend we're the hub. + // The following tests are from perspective of the the hub (i.e.: if this contract were deployed there) + // + // osmo sent to the hub + let packet = Packet::mock( + format!("channel-0"), // from: osmosis + format!("channel-141"), // to: hub + format!("uosmo"), + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::In), WRAPPED_OSMO_ON_HUB_HASH); + + // uosmo on the hub sent back to the osmosis + let packet = Packet::mock( + format!("channel-141"), // from: hub + format!("channel-0"), // to: osmosis + WRAPPED_OSMO_ON_HUB_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::In), "uosmo"); + + // uatom sent to osmosis + let packet = Packet::mock( + format!("channel-141"), // from: hub + format!("channel-0"), // to: osmosis + format!("uatom"), + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::Out), "uatom"); + + // utaom on the osmosis sent back to the hub + // send + let packet = Packet::mock( + format!("channel-0"), // from: osmosis + format!("channel-141"), // to: hub + WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::Out), + WRAPPED_ATOM_ON_OSMOSIS_HASH + ); + + // receive + let packet = Packet::mock( + format!("channel-0"), // from: osmosis + format!("channel-141"), // to: hub + WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!(packet.local_denom(&FlowType::In), "uatom"); + } + + #[test] + fn sanity_double() { + // Now let's deal with double wrapping + + let juno_wrapped_osmosis_wrapped_atom_hash = + "ibc/6CDD4663F2F09CD62285E2D45891FC149A3568E316CE3EBBE201A71A78A69388"; + + // Send uatom on stored on osmosis to juno + // send + let packet = Packet::mock( + format!("channel-42"), // from: osmosis + format!("channel-0"), // to: juno + WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::Out), + WRAPPED_ATOM_ON_OSMOSIS_HASH + ); + + // receive + let packet = Packet::mock( + format!("channel-42"), // from: osmosis + format!("channel-0"), // to: juno + WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::In), + juno_wrapped_osmosis_wrapped_atom_hash + ); + + // Send back that multi-wrapped token to osmosis + // send + let packet = Packet::mock( + format!("channel-0"), // from: juno + format!("channel-42"), // to: osmosis + format!("{}{}", "transfer/channel-0/", WRAPPED_ATOM_ON_OSMOSIS_TRACE), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::Out), + juno_wrapped_osmosis_wrapped_atom_hash + ); + + // receive + let packet = Packet::mock( + format!("channel-0"), // from: juno + format!("channel-42"), // to: osmosis + format!("{}{}", "transfer/channel-0/", WRAPPED_ATOM_ON_OSMOSIS_TRACE), // unwrapped before reaching the contract + 0_u128.into(), + ); + assert_eq!( + packet.local_denom(&FlowType::In), + WRAPPED_ATOM_ON_OSMOSIS_HASH + ); + } + + #[test] + fn tokenfactory_packet() { + let json = r#"{"send_packet":{"packet":{"sequence":4,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-1491","data":{"denom":"transfer/channel-0/factory/osmo12smx2wdlyttvyzvzg54y2vnqwq2qjateuf7thj/czar","amount":"100000000000000000","sender":"osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks","receiver":"osmo1c584m4lq25h83yp6ag8hh4htjr92d954vklzja"},"timeout_height":{},"timeout_timestamp":1668024476848430980}}}"#; + let parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); + //println!("{parsed:?}"); + + match parsed { + SudoMsg::SendPacket { packet, .. } => { + assert_eq!( + packet.local_denom(&FlowType::Out), + "ibc/07A1508F49D0753EDF95FA18CA38C0D6974867D793EB36F13A2AF1A5BB148B22" + ); + } + _ => panic!("parsed into wrong variant"), + } + } + + #[test] + fn packet_with_memo() { + // extra fields (like memo) get ignored. + let json = r#"{"recv_packet":{"packet":{"sequence":1,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-0","data":{"denom":"stake","amount":"1","sender":"osmo177uaalkhra6wth6hc9hu79f72eq903kwcusx4r","receiver":"osmo1fj6yt4pwfea4865z763fvhwktlpe020ef93dlq","memo":"some info"},"timeout_height":{"revision_height":100}}}}"#; + let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); + //println!("{parsed:?}"); + } +} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/query.rs b/x/ibcratelimit/contracts/rate-limiter/src/query.rs new file mode 100644 index 000000000..6431a837d --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/query.rs @@ -0,0 +1,12 @@ +use cosmwasm_std::{to_binary, Binary, Deps, StdResult}; + +use crate::state::{Path, RATE_LIMIT_TRACKERS}; + +pub fn get_quotas( + deps: Deps, + channel_id: impl Into, + denom: impl Into, +) -> StdResult { + let path = Path::new(channel_id, denom); + to_binary(&RATE_LIMIT_TRACKERS.load(deps.storage, path.into())?) +} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/state.rs b/x/ibcratelimit/contracts/rate-limiter/src/state.rs new file mode 100644 index 000000000..e699936d8 --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/state.rs @@ -0,0 +1,372 @@ +use cosmwasm_std::{Addr, Timestamp, Uint256}; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; +use std::cmp; + +use cw_storage_plus::{Item, Map}; + +use crate::{msg::QuotaMsg, ContractError}; + +/// This represents the key for our rate limiting tracker. A tuple of a denom and +/// a channel. When interactic with storage, it's preffered to use this struct +/// and call path.into() on it to convert it to the composite key of the +/// RATE_LIMIT_TRACKERS map +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct Path { + pub denom: String, + pub channel: String, +} + +impl Path { + pub fn new(channel: impl Into, denom: impl Into) -> Self { + Path { + channel: channel.into(), + denom: denom.into(), + } + } +} + +impl From for (String, String) { + fn from(path: Path) -> (String, String) { + (path.channel, path.denom) + } +} + +impl From<&Path> for (String, String) { + fn from(path: &Path) -> (String, String) { + (path.channel.to_owned(), path.denom.to_owned()) + } +} + +#[derive(Debug, Clone)] +pub enum FlowType { + In, + Out, +} + +/// A Flow represents the transfer of value for a denom through an IBC channel +/// during a time window. +/// +/// It tracks inflows (transfers into osmosis) and outflows (transfers out of +/// osmosis). +/// +/// The period_end represents the last point in time for which this Flow is +/// tracking the value transfer. +/// +/// Periods are discrete repeating windows. A period only starts when a contract +/// call to update the Flow (SendPacket/RecvPackt) is made, and not right after +/// the period ends. This means that if no calls happen after a period expires, +/// the next period will begin at the time of the next call and be valid for the +/// specified duration for the quota. +/// +/// This is a design decision to avoid the period calculations and thus reduce gas consumption +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema, Copy)] +pub struct Flow { + pub inflow: Uint256, + pub outflow: Uint256, + pub period_end: Timestamp, +} + +impl Flow { + pub fn new( + inflow: impl Into, + outflow: impl Into, + now: Timestamp, + duration: u64, + ) -> Self { + Self { + inflow: inflow.into(), + outflow: outflow.into(), + period_end: now.plus_seconds(duration), + } + } + + /// The balance of a flow is how much absolute value for the denom has moved + /// through the channel before period_end. It returns a tuple of + /// (balance_in, balance_out) where balance_in in is how much has been + /// transferred into the flow, and balance_out is how much value transferred + /// out. + pub fn balance(&self) -> (Uint256, Uint256) { + ( + self.inflow.saturating_sub(self.outflow), + self.outflow.saturating_sub(self.inflow), + ) + } + + /// checks if the flow, in the current state, has exceeded a max allowance + pub fn exceeds(&self, direction: &FlowType, max_inflow: Uint256, max_outflow: Uint256) -> bool { + let (balance_in, balance_out) = self.balance(); + match direction { + FlowType::In => balance_in > max_inflow, + FlowType::Out => balance_out > max_outflow, + } + } + + /// returns the balance in a direction. This is used for displaying cleaner errors + pub fn balance_on(&self, direction: &FlowType) -> Uint256 { + let (balance_in, balance_out) = self.balance(); + match direction { + FlowType::In => balance_in, + FlowType::Out => balance_out, + } + } + + /// If now is greater than the period_end, the Flow is considered expired. + pub fn is_expired(&self, now: Timestamp) -> bool { + self.period_end < now + } + + // Mutating methods + + /// Expire resets the Flow to start tracking the value transfer from the + /// moment this method is called. + pub fn expire(&mut self, now: Timestamp, duration: u64) { + self.inflow = Uint256::from(0_u32); + self.outflow = Uint256::from(0_u32); + self.period_end = now.plus_seconds(duration); + } + + /// Updates the current flow incrementing it by a transfer of value. + pub fn add_flow(&mut self, direction: FlowType, value: Uint256) { + match direction { + FlowType::In => self.inflow = self.inflow.saturating_add(value), + FlowType::Out => self.outflow = self.outflow.saturating_add(value), + } + } + + /// Updates the current flow reducing it by a transfer of value. + pub fn undo_flow(&mut self, direction: FlowType, value: Uint256) { + match direction { + FlowType::In => self.inflow = self.inflow.saturating_sub(value), + FlowType::Out => self.outflow = self.outflow.saturating_sub(value), + } + } + + /// Applies a transfer. If the Flow is expired (now > period_end), it will + /// reset it before applying the transfer. + fn apply_transfer( + &mut self, + direction: &FlowType, + funds: Uint256, + now: Timestamp, + quota: &Quota, + ) -> bool { + let mut expired = false; + if self.is_expired(now) { + self.expire(now, quota.duration); + expired = true; + } + self.add_flow(direction.clone(), funds); + expired + } +} + +/// A Quota is the percentage of the denom's total value that can be transferred +/// through the channel in a given period of time (duration) +/// +/// Percentages can be different for send and recv +/// +/// The name of the quota is expected to be a human-readable representation of +/// the duration (i.e.: "weekly", "daily", "every-six-months", ...) +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct Quota { + pub name: String, + pub max_percentage_send: u32, + pub max_percentage_recv: u32, + pub duration: u64, + pub channel_value: Option, +} + +impl Quota { + /// Calculates the max capacity (absolute value in the same unit as + /// total_value) in each direction based on the total value of the denom in + /// the channel. The result tuple represents the max capacity when the + /// transfer is in directions: (FlowType::In, FlowType::Out) + pub fn capacity(&self) -> (Uint256, Uint256) { + match self.channel_value { + Some(total_value) => ( + total_value * Uint256::from(self.max_percentage_recv) / Uint256::from(100_u32), + total_value * Uint256::from(self.max_percentage_send) / Uint256::from(100_u32), + ), + None => (0_u32.into(), 0_u32.into()), // This should never happen, but ig the channel value is not set, we disallow any transfer + } + } + + /// returns the capacity in a direction. This is used for displaying cleaner errors + pub fn capacity_on(&self, direction: &FlowType) -> Uint256 { + let (max_in, max_out) = self.capacity(); + match direction { + FlowType::In => max_in, + FlowType::Out => max_out, + } + } +} + +impl From<&QuotaMsg> for Quota { + fn from(msg: &QuotaMsg) -> Self { + let send_recv = ( + cmp::min(msg.send_recv.0, 100), + cmp::min(msg.send_recv.1, 100), + ); + Quota { + name: msg.name.clone(), + max_percentage_send: send_recv.0, + max_percentage_recv: send_recv.1, + duration: msg.duration, + channel_value: None, + } + } +} + +/// RateLimit is the main structure tracked for each channel/denom pair. Its quota +/// represents rate limit configuration, and the flow its +/// current state (i.e.: how much value has been transfered in the current period) +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] +pub struct RateLimit { + pub quota: Quota, + pub flow: Flow, +} + +// The channel value on send depends on the amount on escrow. The ibc transfer +// module modifies the escrow amount by "funds" on sends before calling the +// contract. This function takes that into account so that the channel value +// that we track matches the channel value at the moment when the ibc +// transaction started executing +fn calculate_channel_value( + channel_value: Uint256, + denom: &str, + funds: Uint256, + direction: &FlowType, +) -> Uint256 { + match direction { + FlowType::Out => { + if denom.contains("ibc") { + channel_value + funds // Non-Native tokens get removed from the supply on send. Add that amount back + } else { + // The commented-out code in the golang calculate channel value is what we want, but we're currently using the whole supply temporarily for efficiency. see rate_limit.go/CalculateChannelValue(..) + //channel_value - funds // Native tokens increase escrow amount on send. Remove that amount here + channel_value + } + } + FlowType::In => channel_value, + } +} + +impl RateLimit { + /// Checks if a transfer is allowed and updates the data structures + /// accordingly. + /// + /// If the transfer is not allowed, it will return a RateLimitExceeded error. + /// + /// Otherwise it will return a RateLimitResponse with the updated data structures + pub fn allow_transfer( + &mut self, + path: &Path, + direction: &FlowType, + funds: Uint256, + channel_value: Uint256, + now: Timestamp, + ) -> Result { + // Flow used before this transaction is applied. + // This is used to make error messages more informative + let initial_flow = self.flow.balance_on(direction); + + // Apply the transfer. From here on, we will updated the flow with the new transfer + // and check if it exceeds the quota at the current time + + let expired = self.flow.apply_transfer(direction, funds, now, &self.quota); + // Cache the channel value if it has never been set or it has expired. + if self.quota.channel_value.is_none() || expired { + self.quota.channel_value = Some(calculate_channel_value( + channel_value, + &path.denom, + funds, + direction, + )) + } + + let (max_in, max_out) = self.quota.capacity(); + // Return the effects of applying the transfer or an error. + match self.flow.exceeds(direction, max_in, max_out) { + true => Err(ContractError::RateLimitExceded { + channel: path.channel.to_string(), + denom: path.denom.to_string(), + amount: funds, + quota_name: self.quota.name.to_string(), + used: initial_flow, + max: self.quota.capacity_on(direction), + reset: self.flow.period_end, + }), + false => Ok(RateLimit { + quota: self.quota.clone(), // Cloning here because self.quota.name (String) does not allow us to implement Copy + flow: self.flow, // We can Copy flow, so this is slightly more efficient than cloning the whole RateLimit + }), + } + } +} + +/// Only this address can manage the contract. This will likely be the +/// governance module, but could be set to something else if needed +pub const GOVMODULE: Item = Item::new("gov_module"); +/// Only this address can execute transfers. This will likely be the +/// IBC transfer module, but could be set to something else if needed +pub const IBCMODULE: Item = Item::new("ibc_module"); + +/// RATE_LIMIT_TRACKERS is the main state for this contract. It maps a path (IBC +/// Channel + denom) to a vector of `RateLimit`s. +/// +/// The `RateLimit` struct contains the information about how much value of a +/// denom has moved through the channel during the currently active time period +/// (channel_flow.flow) and what percentage of the denom's value we are +/// allowing to flow through that channel in a specific duration (quota) +/// +/// For simplicity, the channel in the map keys refers to the "host" channel on +/// the osmosis side. This means that on PacketSend it will refer to the source +/// channel while on PacketRecv it refers to the destination channel. +/// +/// It is the responsibility of the go module to pass the appropriate channel +/// when sending the messages +/// +/// The map key (String, String) represents (channel_id, denom). We use +/// composite keys instead of a struct to avoid having to implement the +/// PrimaryKey trait +pub const RATE_LIMIT_TRACKERS: Map<(String, String), Vec> = Map::new("flow"); + +#[cfg(test)] +pub mod tests { + use super::*; + + pub const RESET_TIME_DAILY: u64 = 60 * 60 * 24; + pub const RESET_TIME_WEEKLY: u64 = 60 * 60 * 24 * 7; + pub const RESET_TIME_MONTHLY: u64 = 60 * 60 * 24 * 30; + + #[test] + fn flow() { + let epoch = Timestamp::from_seconds(0); + let mut flow = Flow::new(0_u32, 0_u32, epoch, RESET_TIME_WEEKLY); + + assert!(!flow.is_expired(epoch)); + assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_DAILY))); + assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY))); + assert!(flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY).plus_nanos(1))); + + assert_eq!(flow.balance(), (0_u32.into(), 0_u32.into())); + flow.add_flow(FlowType::In, 5_u32.into()); + assert_eq!(flow.balance(), (5_u32.into(), 0_u32.into())); + flow.add_flow(FlowType::Out, 2_u32.into()); + assert_eq!(flow.balance(), (3_u32.into(), 0_u32.into())); + // Adding flow doesn't affect expiration + assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_DAILY))); + + flow.expire(epoch.plus_seconds(RESET_TIME_WEEKLY), RESET_TIME_WEEKLY); + assert_eq!(flow.balance(), (0_u32.into(), 0_u32.into())); + assert_eq!(flow.inflow, Uint256::from(0_u32)); + assert_eq!(flow.outflow, Uint256::from(0_u32)); + assert_eq!(flow.period_end, epoch.plus_seconds(RESET_TIME_WEEKLY * 2)); + + // Expiration has moved + assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY).plus_nanos(1))); + assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY * 2))); + assert!(flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY * 2).plus_nanos(1))); + } +} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/sudo.rs b/x/ibcratelimit/contracts/rate-limiter/src/sudo.rs new file mode 100644 index 000000000..36a16f638 --- /dev/null +++ b/x/ibcratelimit/contracts/rate-limiter/src/sudo.rs @@ -0,0 +1,193 @@ +use cosmwasm_std::{DepsMut, Response, Timestamp, Uint256}; + +use crate::{ + packet::Packet, + state::{FlowType, Path, RateLimit, RATE_LIMIT_TRACKERS}, + ContractError, +}; + +// This function will process a packet and extract the paths information, funds, +// and channel value from it. This is will have to interact with the chain via grpc queries to properly +// obtain this information. +// +// For backwards compatibility, we're teporarily letting the chain override the +// denom and channel value, but these should go away in favour of the contract +// extracting these from the packet +pub fn process_packet( + deps: DepsMut, + packet: Packet, + direction: FlowType, + now: Timestamp, + #[cfg(test)] channel_value_mock: Option, +) -> Result { + let (channel_id, denom) = packet.path_data(&direction); + let path = &Path::new(&channel_id, &denom); + let funds = packet.get_funds(); + + #[cfg(test)] + // When testing we override the channel value with the mock since we can't get it from the chain + let channel_value = match channel_value_mock { + Some(channel_value) => channel_value, + None => packet.channel_value(deps.as_ref(), &direction)?, // This should almost never be used, but left for completeness in case we want to send an empty channel_value from the test + }; + + #[cfg(not(test))] + let channel_value = packet.channel_value(deps.as_ref(), &direction)?; + + try_transfer(deps, path, channel_value, funds, direction, now) +} + +/// This function checks the rate limit and, if successful, stores the updated data about the value +/// that has been transfered through the channel for a specific denom. +/// If the period for a RateLimit has ended, the Flow information is reset. +/// +/// The channel_value is the current value of the denom for the the channel as +/// calculated by the caller. This should be the total supply of a denom +pub fn try_transfer( + deps: DepsMut, + path: &Path, + channel_value: Uint256, + funds: Uint256, + direction: FlowType, + now: Timestamp, +) -> Result { + // Sudo call. Only go modules should be allowed to access this + + // Fetch potential trackers for "any" channel of the required token + let any_path = Path::new("any", path.denom.clone()); + let mut any_trackers = RATE_LIMIT_TRACKERS + .may_load(deps.storage, any_path.clone().into())? + .unwrap_or_default(); + // Fetch trackers for the requested path + let mut trackers = RATE_LIMIT_TRACKERS + .may_load(deps.storage, path.into())? + .unwrap_or_default(); + + let not_configured = trackers.is_empty() && any_trackers.is_empty(); + + if not_configured { + // No Quota configured for the current path. Allowing all messages. + return Ok(Response::new() + .add_attribute("method", "try_transfer") + .add_attribute("channel_id", path.channel.to_string()) + .add_attribute("denom", path.denom.to_string()) + .add_attribute("quota", "none")); + } + + // If any of the RateLimits fails, allow_transfer() will return + // ContractError::RateLimitExceded, which we'll propagate out + let results: Vec = trackers + .iter_mut() + .map(|limit| limit.allow_transfer(path, &direction, funds, channel_value, now)) + .collect::>()?; + + let any_results: Vec = any_trackers + .iter_mut() + .map(|limit| limit.allow_transfer(path, &direction, funds, channel_value, now)) + .collect::>()?; + + RATE_LIMIT_TRACKERS.save(deps.storage, path.into(), &results)?; + RATE_LIMIT_TRACKERS.save(deps.storage, any_path.into(), &any_results)?; + + let response = Response::new() + .add_attribute("method", "try_transfer") + .add_attribute("channel_id", path.channel.to_string()) + .add_attribute("denom", path.denom.to_string()); + + // Adds the attributes for each path to the response. In prod, the + // addtribute add_rate_limit_attributes is a noop + let response: Result = + any_results.iter().fold(Ok(response), |acc, result| { + Ok(add_rate_limit_attributes(acc?, result)) + }); + results.iter().fold(Ok(response?), |acc, result| { + Ok(add_rate_limit_attributes(acc?, result)) + }) +} + +// #[cfg(any(feature = "verbose_responses", test))] +fn add_rate_limit_attributes(response: Response, result: &RateLimit) -> Response { + let (used_in, used_out) = result.flow.balance(); + let (max_in, max_out) = result.quota.capacity(); + // These attributes are only added during testing. That way we avoid + // calculating these again on prod. + response + .add_attribute( + format!("{}_used_in", result.quota.name), + used_in.to_string(), + ) + .add_attribute( + format!("{}_used_out", result.quota.name), + used_out.to_string(), + ) + .add_attribute(format!("{}_max_in", result.quota.name), max_in.to_string()) + .add_attribute( + format!("{}_max_out", result.quota.name), + max_out.to_string(), + ) + .add_attribute( + format!("{}_period_end", result.quota.name), + result.flow.period_end.to_string(), + ) +} + +// Leaving the attributes in until we can conditionally compile the contract +// for the go tests in CI: https://github.com/mandrean/cw-optimizoor/issues/19 +// +// #[cfg(not(any(feature = "verbose_responses", test)))] +// fn add_rate_limit_attributes(response: Response, _result: &RateLimit) -> Response { +// response +// } + +// This function manually injects an inflow. This is used when reverting a +// packet that failed ack or timed-out. +pub fn undo_send(deps: DepsMut, packet: Packet) -> Result { + // Sudo call. Only go modules should be allowed to access this + let (channel_id, denom) = packet.path_data(&FlowType::Out); // Sends have direction out. + let path = &Path::new(&channel_id, &denom); + let any_path = Path::new("any", &denom); + let funds = packet.get_funds(); + + let mut any_trackers = RATE_LIMIT_TRACKERS + .may_load(deps.storage, any_path.clone().into())? + .unwrap_or_default(); + let mut trackers = RATE_LIMIT_TRACKERS + .may_load(deps.storage, path.into())? + .unwrap_or_default(); + + let not_configured = trackers.is_empty() && any_trackers.is_empty(); + + if not_configured { + // No Quota configured for the current path. Allowing all messages. + return Ok(Response::new() + .add_attribute("method", "try_transfer") + .add_attribute("channel_id", path.channel.to_string()) + .add_attribute("denom", path.denom.to_string()) + .add_attribute("quota", "none")); + } + + // We force update the flow to remove a failed send + let results: Vec = trackers + .iter_mut() + .map(|limit| { + limit.flow.undo_flow(FlowType::Out, funds); + limit.to_owned() + }) + .collect(); + let any_results: Vec = any_trackers + .iter_mut() + .map(|limit| { + limit.flow.undo_flow(FlowType::Out, funds); + limit.to_owned() + }) + .collect(); + + RATE_LIMIT_TRACKERS.save(deps.storage, path.into(), &results)?; + RATE_LIMIT_TRACKERS.save(deps.storage, any_path.into(), &any_results)?; + + Ok(Response::new() + .add_attribute("method", "undo_send") + .add_attribute("channel_id", path.channel.to_string()) + .add_attribute("denom", path.denom.to_string()) + .add_attribute("any_channel", (!any_trackers.is_empty()).to_string())) +} diff --git a/x/ibcratelimit/genesis.go b/x/ibcratelimit/genesis.go new file mode 100644 index 000000000..2f7bb2b2a --- /dev/null +++ b/x/ibcratelimit/genesis.go @@ -0,0 +1,20 @@ +package ibc_rate_limit + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/comdex-official/comdex/x/ibcratelimit/types" +) + +// InitGenesis initializes the x/ibcratelimit module's state from a provided genesis +// state, which includes the parameter for the contract address. +func (i *ICS4Wrapper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { + i.SetParams(ctx, genState.Params) +} + +// ExportGenesis returns the x/ibcratelimit module's exported genesis. +func (i *ICS4Wrapper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + return &types.GenesisState{ + Params: i.GetParams(ctx), + } +} diff --git a/x/ibcratelimit/genesis_test.go b/x/ibcratelimit/genesis_test.go new file mode 100644 index 000000000..06c560120 --- /dev/null +++ b/x/ibcratelimit/genesis_test.go @@ -0,0 +1,43 @@ +package ibc_rate_limit_test + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/suite" + + "github.com/comdex-official/comdex/x/ibcratelimit/types" + "github.com/osmosis-labs/osmosis/v16/app/apptesting" +) + +type GenesisTestSuite struct { + apptesting.KeeperTestHelper +} + +func TestGenesisTestSuite(t *testing.T) { + suite.Run(t, new(GenesisTestSuite)) +} + +func (suite *GenesisTestSuite) SetupTest() { + suite.Setup() +} + +func (suite *GenesisTestSuite) TestInitExportGenesis() { + testAddress := sdk.AccAddress([]byte("addr1_______________")).String() + suite.SetupTest() + k := suite.App.RateLimitingICS4Wrapper + + initialGenesis := types.GenesisState{ + Params: types.Params{ + ContractAddress: testAddress, + }, + } + + k.InitGenesis(suite.Ctx, initialGenesis) + + suite.Require().Equal(testAddress, k.GetParams(suite.Ctx).ContractAddress) + + exportedGenesis := k.ExportGenesis(suite.Ctx) + + suite.Require().Equal(initialGenesis, *exportedGenesis) +} diff --git a/x/ibcratelimit/ibc_middleware_test.go b/x/ibcratelimit/ibc_middleware_test.go new file mode 100644 index 000000000..13555dd4f --- /dev/null +++ b/x/ibcratelimit/ibc_middleware_test.go @@ -0,0 +1,540 @@ +package ibc_rate_limit_test + +import ( + "fmt" + "strconv" + "strings" + "testing" + "time" + + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + + sdk "github.com/cosmos/cosmos-sdk/types" + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibctesting "github.com/cosmos/ibc-go/v7/testing" + "github.com/stretchr/testify/suite" + + txfeetypes "github.com/osmosis-labs/osmosis/v16/x/txfees/types" + + "github.com/comdex-official/comdex/x/ibcratelimit/types" + "github.com/osmosis-labs/osmosis/v16/app/apptesting" + "github.com/osmosis-labs/osmosis/v16/tests/osmosisibctesting" +) + +type MiddlewareTestSuite struct { + apptesting.KeeperTestHelper + + coordinator *ibctesting.Coordinator + + // testing chains used for convenience and readability + chainA *osmosisibctesting.TestChain + chainB *osmosisibctesting.TestChain + path *ibctesting.Path +} + +var oldConsensusMinFee = txfeetypes.ConsensusMinFee + +// Setup +func TestMiddlewareTestSuite(t *testing.T) { + suite.Run(t, new(MiddlewareTestSuite)) +} + +func NewTransferPath(chainA, chainB *osmosisibctesting.TestChain) *ibctesting.Path { + path := ibctesting.NewPath(chainA.TestChain, chainB.TestChain) + path.EndpointA.ChannelConfig.PortID = ibctesting.TransferPort + path.EndpointB.ChannelConfig.PortID = ibctesting.TransferPort + path.EndpointA.ChannelConfig.Version = transfertypes.Version + path.EndpointB.ChannelConfig.Version = transfertypes.Version + return path +} + +func (suite *MiddlewareTestSuite) SetupTest() { + suite.SkipIfWSL() + // TODO: This needs to get removed. Waiting on https://github.com/cosmos/ibc-go/issues/3123 + txfeetypes.ConsensusMinFee = sdk.ZeroDec() + suite.Setup() + ibctesting.DefaultTestingAppInit = osmosisibctesting.SetupTestingApp + suite.coordinator = ibctesting.NewCoordinator(suite.T(), 2) + suite.chainA = &osmosisibctesting.TestChain{ + TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(1)), + } + // Remove epochs to prevent minting + err := suite.chainA.MoveEpochsToTheFuture() + suite.Require().NoError(err) + suite.chainB = &osmosisibctesting.TestChain{ + TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(2)), + } + suite.path = NewTransferPath(suite.chainA, suite.chainB) + err = suite.chainB.MoveEpochsToTheFuture() + suite.Require().NoError(err) + suite.coordinator.Setup(suite.path) +} + +// TODO: This needs to get removed. Waiting on https://github.com/cosmos/ibc-go/issues/3123 +func (suite *MiddlewareTestSuite) TearDownSuite() { + txfeetypes.ConsensusMinFee = oldConsensusMinFee +} + +// Helpers +func (suite *MiddlewareTestSuite) MessageFromAToB(denom string, amount sdk.Int) sdk.Msg { + coin := sdk.NewCoin(denom, amount) + port := suite.path.EndpointA.ChannelConfig.PortID + channel := suite.path.EndpointA.ChannelID + accountFrom := suite.chainA.SenderAccount.GetAddress().String() + accountTo := suite.chainB.SenderAccount.GetAddress().String() + timeoutHeight := clienttypes.NewHeight(0, 100) + return transfertypes.NewMsgTransfer( + port, + channel, + coin, + accountFrom, + accountTo, + timeoutHeight, + 0, + ) +} + +func (suite *MiddlewareTestSuite) MessageFromBToA(denom string, amount sdk.Int) sdk.Msg { + coin := sdk.NewCoin(denom, amount) + port := suite.path.EndpointB.ChannelConfig.PortID + channel := suite.path.EndpointB.ChannelID + accountFrom := suite.chainB.SenderAccount.GetAddress().String() + accountTo := suite.chainA.SenderAccount.GetAddress().String() + timeoutHeight := clienttypes.NewHeight(0, 100) + return transfertypes.NewMsgTransfer( + port, + channel, + coin, + accountFrom, + accountTo, + timeoutHeight, + 0, + ) +} + +func CalculateChannelValue(ctx sdk.Context, denom string, bankKeeper bankkeeper.Keeper) sdk.Int { + return bankKeeper.GetSupplyWithOffset(ctx, denom).Amount + + // ToDo: The commented-out code bellow is what we want to happen, but we're temporarily + // using the whole supply for efficiency until there's a solution for + // https://github.com/cosmos/ibc-go/issues/2664 + + // For non-native (ibc) tokens, return the supply if the token in osmosis + //if strings.HasPrefix(denom, "ibc/") { + // return bankKeeper.GetSupplyWithOffset(ctx, denom).Amount + //} + // + // For native tokens, obtain the balance held in escrow for all potential channels + //channels := channelKeeper.GetAllChannels(ctx) + //balance := sdk.NewInt(0) + //for _, channel := range channels { + // escrowAddress := transfertypes.GetEscrowAddress("transfer", channel.ChannelId) + // balance = balance.Add(bankKeeper.GetBalance(ctx, escrowAddress, denom).Amount) + // + //} + //return balance +} + +// Tests that a receiver address longer than 4096 is not accepted +func (suite *MiddlewareTestSuite) TestInvalidReceiver() { + msg := transfertypes.NewMsgTransfer( + suite.path.EndpointB.ChannelConfig.PortID, + suite.path.EndpointB.ChannelID, + sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1)), + suite.chainB.SenderAccount.GetAddress().String(), + strings.Repeat("x", 4097), + clienttypes.NewHeight(0, 100), + 0, + ) + _, ack, _ := suite.FullSendBToA(msg) + suite.Require().Contains(ack, "error", + "acknowledgment is not an error") + suite.Require().Contains(ack, fmt.Sprintf("ABCI code: %d", types.ErrBadMessage.ABCICode()), + "acknowledgment error is not of the right type") +} + +func (suite *MiddlewareTestSuite) FullSendBToA(msg sdk.Msg) (*sdk.Result, string, error) { + sendResult, err := suite.chainB.SendMsgsNoCheck(msg) + suite.Require().NoError(err) + + packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) + suite.Require().NoError(err) + + err = suite.path.EndpointA.UpdateClient() + suite.Require().NoError(err) + + res, err := suite.path.EndpointA.RecvPacketWithResult(packet) + suite.Require().NoError(err) + + ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) + suite.Require().NoError(err) + + err = suite.path.EndpointA.UpdateClient() + suite.Require().NoError(err) + err = suite.path.EndpointB.UpdateClient() + suite.Require().NoError(err) + + return sendResult, string(ack), err +} + +func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*sdk.Result, string, error) { + sendResult, err := suite.chainA.SendMsgsNoCheck(msg) + if err != nil { + return nil, "", err + } + + packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) + if err != nil { + return nil, "", err + } + + err = suite.path.EndpointB.UpdateClient() + if err != nil { + return nil, "", err + } + + res, err := suite.path.EndpointB.RecvPacketWithResult(packet) + if err != nil { + return nil, "", err + } + + ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) + if err != nil { + return nil, "", err + } + + err = suite.path.EndpointA.UpdateClient() + if err != nil { + return nil, "", err + } + err = suite.path.EndpointB.UpdateClient() + if err != nil { + return nil, "", err + } + + return sendResult, string(ack), nil +} + +func (suite *MiddlewareTestSuite) AssertReceive(success bool, msg sdk.Msg) (string, error) { + _, ack, err := suite.FullSendBToA(msg) + if success { + suite.Require().NoError(err) + suite.Require().NotContains(ack, "error", + "acknowledgment is an error") + } else { + suite.Require().Contains(ack, "error", + "acknowledgment is not an error") + suite.Require().Contains(ack, fmt.Sprintf("ABCI code: %d", types.ErrRateLimitExceeded.ABCICode()), + "acknowledgment error is not of the right type") + } + return ack, err +} + +func (suite *MiddlewareTestSuite) AssertSend(success bool, msg sdk.Msg) (*sdk.Result, error) { + r, _, err := suite.FullSendAToB(msg) + if success { + suite.Require().NoError(err, "IBC send failed. Expected success. %s", err) + } else { + suite.Require().Error(err, "IBC send succeeded. Expected failure") + suite.ErrorContains(err, types.ErrRateLimitExceeded.Error(), "Bad error type") + } + return r, err +} + +func (suite *MiddlewareTestSuite) BuildChannelQuota(name, channel, denom string, duration, send_percentage, recv_percentage uint32) string { + return fmt.Sprintf(` + {"channel_id": "%s", "denom": "%s", "quotas": [{"name":"%s", "duration": %d, "send_recv":[%d, %d]}] } + `, channel, denom, name, duration, send_percentage, recv_percentage) +} + +// Tests + +// Test that Sending IBC messages works when the middleware isn't configured +func (suite *MiddlewareTestSuite) TestSendTransferNoContract() { + one := sdk.NewInt(1) + _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, one)) + suite.Require().NoError(err) +} + +// Test that Receiving IBC messages works when the middleware isn't configured +func (suite *MiddlewareTestSuite) TestReceiveTransferNoContract() { + one := sdk.NewInt(1) + _, err := suite.AssertReceive(true, suite.MessageFromBToA(sdk.DefaultBondDenom, one)) + suite.Require().NoError(err) +} + +func (suite *MiddlewareTestSuite) initializeEscrow() (totalEscrow, expectedSed sdk.Int) { + osmosisApp := suite.chainA.GetOsmosisApp() + supply := osmosisApp.BankKeeper.GetSupplyWithOffset(suite.chainA.GetContext(), sdk.DefaultBondDenom) + + // Move some funds from chainA to chainB so that there is something in escrow + // Each user has 10% of the supply, so we send most of the funds from one user to chainA + transferAmount := supply.Amount.QuoRaw(20) + + // When sending, the amount we're sending goes into escrow before we enter the middleware and thus + // it's used as part of the channel value in the rate limiting contract + // To account for that, we subtract the amount we'll send first (2.5% of transferAmount) here + sendAmount := transferAmount.QuoRaw(40) + + // Send from A to B + _, _, err := suite.FullSendAToB(suite.MessageFromAToB(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) + suite.Require().NoError(err) + // Send from A to B + _, _, err = suite.FullSendBToA(suite.MessageFromBToA(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) + suite.Require().NoError(err) + + return transferAmount, sendAmount +} + +func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { + quotaPercentage := 5 + suite.initializeEscrow() + // Get the denom and amount to send + denom := sdk.DefaultBondDenom + channel := "channel-0" + if !native { + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", denom)) + fmt.Println(denomTrace) + denom = denomTrace.IBCDenom() + } + + osmosisApp := suite.chainA.GetOsmosisApp() + + // This is the first one. Inside the tests. It works as expected. + channelValue := CalculateChannelValue(suite.chainA.GetContext(), denom, osmosisApp.BankKeeper) + + // The amount to be sent is send 2.5% (quota is 5%) + quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) + sendAmount := quota.QuoRaw(2) + + fmt.Printf("Testing send rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", denom, channelValue, quota, sendAmount) + + // Setup contract + suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + quotas := suite.BuildChannelQuota("weekly", channel, denom, 604800, 5, 5) + fmt.Println(quotas) + addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) + suite.chainA.RegisterRateLimitingContract(addr) + + // send 2.5% (quota is 5%) + fmt.Printf("Sending %s from A to B. Represented in chain A as wrapped? %v\n", denom, !native) + _, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) + suite.Require().NoError(err) + + // send 2.5% (quota is 5%) + fmt.Println("trying to send ", sendAmount) + r, _ := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) + + // Calculate remaining allowance in the quota + attrs := suite.ExtractAttributes(suite.FindEvent(r.GetEvents(), "wasm")) + + used, ok := sdk.NewIntFromString(attrs["weekly_used_out"]) + suite.Require().True(ok) + + suite.Require().Equal(used, sendAmount.MulRaw(2)) + + // Sending above the quota should fail. We use 2 instead of 1 here to avoid rounding issues + _, err = suite.AssertSend(false, suite.MessageFromAToB(denom, sdk.NewInt(2))) + suite.Require().Error(err) + return attrs +} + +// Test rate limiting on sends +func (suite *MiddlewareTestSuite) TestSendTransferWithRateLimitingNative() { + // Sends denom=stake from A->B. Rate limit receives "stake" in the packet. Nothing to do in the contract + suite.fullSendTest(true) +} + +// Test rate limiting on sends +func (suite *MiddlewareTestSuite) TestSendTransferWithRateLimitingNonNative() { + // Sends denom=ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878 from A->B. + // Rate limit receives "transfer/channel-0/stake" in the packet (because transfer.relay.SendTransfer is called before the middleware) + // and should hash it before calculating the value + suite.fullSendTest(false) +} + +// Test rate limits are reset when the specified time period has passed +func (suite *MiddlewareTestSuite) TestSendTransferReset() { + // Same test as above, but the quotas get reset after time passes + attrs := suite.fullSendTest(true) + parts := strings.Split(attrs["weekly_period_end"], ".") // Splitting timestamp into secs and nanos + secs, err := strconv.ParseInt(parts[0], 10, 64) + suite.Require().NoError(err) + nanos, err := strconv.ParseInt(parts[1], 10, 64) + suite.Require().NoError(err) + resetTime := time.Unix(secs, nanos) + + // Move chainA forward one block + suite.chainA.NextBlock() + err = suite.chainA.SenderAccount.SetSequence(suite.chainA.SenderAccount.GetSequence() + 1) + suite.Require().NoError(err) + + // Reset time + one second + oneSecAfterReset := resetTime.Add(time.Second) + suite.coordinator.IncrementTimeBy(oneSecAfterReset.Sub(suite.coordinator.CurrentTime)) + + // Sending should succeed again + _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdk.NewInt(1))) + suite.Require().NoError(err) +} + +// Test rate limiting on receives +func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { + quotaPercentage := 4 + suite.initializeEscrow() + // Get the denom and amount to send + sendDenom := sdk.DefaultBondDenom + localDenom := sdk.DefaultBondDenom + channel := "channel-0" + if native { + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", localDenom)) + localDenom = denomTrace.IBCDenom() + } else { + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", sendDenom)) + sendDenom = denomTrace.IBCDenom() + } + + osmosisApp := suite.chainA.GetOsmosisApp() + + channelValue := CalculateChannelValue(suite.chainA.GetContext(), localDenom, osmosisApp.BankKeeper) + + // The amount to be sent is 2% (quota is 4%) + quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) + sendAmount := quota.QuoRaw(2) + + fmt.Printf("Testing recv rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", localDenom, channelValue, quota, sendAmount) + + // Setup contract + suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + quotas := suite.BuildChannelQuota("weekly", channel, localDenom, 604800, 4, 4) + addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) + suite.chainA.RegisterRateLimitingContract(addr) + + // receive 2.5% (quota is 5%) + fmt.Printf("Sending %s from B to A. Represented in chain A as wrapped? %v\n", sendDenom, native) + _, err := suite.AssertReceive(true, suite.MessageFromBToA(sendDenom, sendAmount)) + suite.Require().NoError(err) + + // receive 2.5% (quota is 5%) + _, err = suite.AssertReceive(true, suite.MessageFromBToA(sendDenom, sendAmount)) + suite.Require().NoError(err) + + // Sending above the quota should fail. We send 2 instead of 1 to account for rounding errors + _, err = suite.AssertReceive(false, suite.MessageFromBToA(sendDenom, sdk.NewInt(2))) + suite.Require().NoError(err) +} + +func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNative() { + // Sends denom=stake from B->A. + // Rate limit receives "stake" in the packet and should wrap it before calculating the value + // types.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), data.Denom) should return false => Wrap the token + suite.fullRecvTest(true) +} + +func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNonNative() { + // Sends denom=ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878 from B->A. + // Rate limit receives "transfer/channel-0/stake" in the packet and should turn it into "stake" + // types.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), data.Denom) should return true => unprefix. If unprefixed is not local, hash. + suite.fullRecvTest(false) +} + +// Test no rate limiting occurs when the contract is set, but not quotas are condifured for the path +func (suite *MiddlewareTestSuite) TestSendTransferNoQuota() { + // Setup contract + suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + addr := suite.chainA.InstantiateRLContract(&suite.Suite, ``) + suite.chainA.RegisterRateLimitingContract(addr) + + // send 1 token. + // If the contract doesn't have a quota for the current channel, all transfers are allowed + _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdk.NewInt(1))) + suite.Require().NoError(err) +} + +// Test rate limits are reverted if a "send" fails +func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { + suite.initializeEscrow() + // Setup contract + suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) + addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) + suite.chainA.RegisterRateLimitingContract(addr) + + // Get the escrowed amount + osmosisApp := suite.chainA.GetOsmosisApp() + // ToDo: This is what we eventually want here, but using the full supply temporarily for performance reasons. See CalculateChannelValue + // escrowAddress := transfertypes.GetEscrowAddress("transfer", "channel-0") + // escrowed := osmosisApp.BankKeeper.GetBalance(suite.chainA.GetContext(), escrowAddress, sdk.DefaultBondDenom) + escrowed := osmosisApp.BankKeeper.GetSupplyWithOffset(suite.chainA.GetContext(), sdk.DefaultBondDenom) + quota := escrowed.Amount.QuoRaw(100) // 1% of the escrowed amount + + // Use the whole quota + coins := sdk.NewCoin(sdk.DefaultBondDenom, quota) + port := suite.path.EndpointA.ChannelConfig.PortID + channel := suite.path.EndpointA.ChannelID + accountFrom := suite.chainA.SenderAccount.GetAddress().String() + timeoutHeight := clienttypes.NewHeight(0, 100) + msg := transfertypes.NewMsgTransfer(port, channel, coins, accountFrom, "INVALID", timeoutHeight, 0) + + // Sending the message manually because AssertSend updates both clients. We need to update the clients manually + // for this test so that the failure to receive on chain B happens after the second packet is sent from chain A. + // That way we validate that chain A is blocking as expected, but the flow is reverted after the receive failure is + // acknowledged on chain A + res, err := suite.chainA.SendMsgsNoCheck(msg) + suite.Require().NoError(err) + + // Sending again fails as the quota is filled + _, err = suite.AssertSend(false, suite.MessageFromAToB(sdk.DefaultBondDenom, quota)) + suite.Require().Error(err) + + // Move forward one block + suite.chainA.NextBlock() + err = suite.chainA.SenderAccount.SetSequence(suite.chainA.SenderAccount.GetSequence() + 1) + suite.Require().NoError(err) + suite.chainA.Coordinator.IncrementTime() + + // Update both clients + err = suite.path.EndpointA.UpdateClient() + suite.Require().NoError(err) + err = suite.path.EndpointB.UpdateClient() + suite.Require().NoError(err) + + // Execute the acknowledgement from chain B in chain A + + // extract the sent packet + packet, err := ibctesting.ParsePacketFromEvents(res.GetEvents()) + suite.Require().NoError(err) + + // recv in chain b + res, err = suite.path.EndpointB.RecvPacketWithResult(packet) + suite.Require().NoError(err) + + // get the ack from the chain b's response + ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) + suite.Require().NoError(err) + + // manually relay it to chain a + err = suite.path.EndpointA.AcknowledgePacket(packet, ack) + suite.Require().NoError(err) + + // We should be able to send again because the packet that exceeded the quota failed and has been reverted + _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdk.NewInt(1))) + suite.Require().NoError(err) +} + +func (suite *MiddlewareTestSuite) TestUnsetRateLimitingContract() { + // Setup contract + suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") + addr := suite.chainA.InstantiateRLContract(&suite.Suite, "") + suite.chainA.RegisterRateLimitingContract(addr) + + // Unset the contract param + params, err := types.NewParams("") + suite.Require().NoError(err) + osmosisApp := suite.chainA.GetOsmosisApp() + paramSpace, ok := osmosisApp.AppKeepers.ParamsKeeper.GetSubspace(types.ModuleName) + suite.Require().True(ok) + // N.B.: this panics if validation fails. + paramSpace.SetParamSet(suite.chainA.GetContext(), ¶ms) +} diff --git a/x/ibcratelimit/ibc_module.go b/x/ibcratelimit/ibc_module.go new file mode 100644 index 000000000..6c3279d77 --- /dev/null +++ b/x/ibcratelimit/ibc_module.go @@ -0,0 +1,245 @@ +package ibc_rate_limit + +import ( + "encoding/json" + "strings" + + "github.com/comdex-official/comdex/osmoutils" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + "github.com/cosmos/ibc-go/v7/modules/core/exported" + + "github.com/comdex-official/comdex/x/ibcratelimit/types" +) + +type IBCModule struct { + app porttypes.IBCModule + ics4Middleware *ICS4Wrapper +} + +func NewIBCModule(app porttypes.IBCModule, ics4 *ICS4Wrapper) IBCModule { + return IBCModule{ + app: app, + ics4Middleware: ics4, + } +} + +// OnChanOpenInit implements the IBCModule interface +func (im *IBCModule) OnChanOpenInit(ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + channelCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) (string, error) { + return im.app.OnChanOpenInit( + ctx, + order, + connectionHops, + portID, + channelID, + channelCap, + counterparty, + version, + ) +} + +// OnChanOpenTry implements the IBCModule interface +func (im *IBCModule) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, + channelID string, + channelCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + counterpartyVersion string, +) (string, error) { + return im.app.OnChanOpenTry(ctx, order, connectionHops, portID, channelID, channelCap, counterparty, counterpartyVersion) +} + +// OnChanOpenAck implements the IBCModule interface +func (im *IBCModule) OnChanOpenAck( + ctx sdk.Context, + portID, + channelID string, + counterpartyChannelID string, + counterpartyVersion string, +) error { + // Here we can add initial limits when a new channel is open. For now, they can be added manually on the contract + return im.app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelID, counterpartyVersion) +} + +// OnChanOpenConfirm implements the IBCModule interface +func (im *IBCModule) OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + // Here we can add initial limits when a new channel is open. For now, they can be added manually on the contract + return im.app.OnChanOpenConfirm(ctx, portID, channelID) +} + +// OnChanCloseInit implements the IBCModule interface +func (im *IBCModule) OnChanCloseInit( + ctx sdk.Context, + portID, + channelID string, +) error { + // Here we can remove the limits when a new channel is closed. For now, they can remove them manually on the contract + return im.app.OnChanCloseInit(ctx, portID, channelID) +} + +// OnChanCloseConfirm implements the IBCModule interface +func (im *IBCModule) OnChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + // Here we can remove the limits when a new channel is closed. For now, they can remove them manually on the contract + return im.app.OnChanCloseConfirm(ctx, portID, channelID) +} + +func ValidateReceiverAddress(packet exported.PacketI) error { + var packetData transfertypes.FungibleTokenPacketData + if err := json.Unmarshal(packet.GetData(), &packetData); err != nil { + return err + } + if len(packetData.Receiver) >= 4096 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "IBC Receiver address too long. Max supported length is %d", 4096) + } + return nil +} + +// OnRecvPacket implements the IBCModule interface +func (im *IBCModule) OnRecvPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) exported.Acknowledgement { + if err := ValidateReceiverAddress(packet); err != nil { + return osmoutils.NewEmitErrorAcknowledgement(ctx, types.ErrBadMessage, err.Error()) + } + + contract := im.ics4Middleware.GetContractAddress(ctx) + if contract == "" { + // The contract has not been configured. Continue as usual + return im.app.OnRecvPacket(ctx, packet, relayer) + } + + err := CheckAndUpdateRateLimits(ctx, im.ics4Middleware.ContractKeeper, "recv_packet", contract, packet) + if err != nil { + if strings.Contains(err.Error(), "rate limit exceeded") { + return osmoutils.NewEmitErrorAcknowledgement(ctx, types.ErrRateLimitExceeded) + } + fullError := errorsmod.Wrap(types.ErrContractError, err.Error()) + return osmoutils.NewEmitErrorAcknowledgement(ctx, fullError) + } + + // if this returns an Acknowledgement that isn't successful, all state changes are discarded + return im.app.OnRecvPacket(ctx, packet, relayer) +} + +// OnAcknowledgementPacket implements the IBCModule interface +func (im *IBCModule) OnAcknowledgementPacket( + ctx sdk.Context, + packet channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + var ack channeltypes.Acknowledgement + if err := json.Unmarshal(acknowledgement, &ack); err != nil { + return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %v", err) + } + + if osmoutils.IsAckError(acknowledgement) { + err := im.RevertSentPacket(ctx, packet) // If there is an error here we should still handle the ack + if err != nil { + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventBadRevert, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyFailureType, "acknowledgment"), + sdk.NewAttribute(types.AttributeKeyPacket, string(packet.GetData())), + sdk.NewAttribute(types.AttributeKeyAck, string(acknowledgement)), + ), + ) + } + } + + return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) +} + +// OnTimeoutPacket implements the IBCModule interface +func (im *IBCModule) OnTimeoutPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) error { + err := im.RevertSentPacket(ctx, packet) // If there is an error here we should still handle the timeout + if err != nil { + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventBadRevert, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyFailureType, "timeout"), + sdk.NewAttribute(types.AttributeKeyPacket, string(packet.GetData())), + ), + ) + } + return im.app.OnTimeoutPacket(ctx, packet, relayer) +} + +// RevertSentPacket Notifies the contract that a sent packet wasn't properly received +func (im *IBCModule) RevertSentPacket( + ctx sdk.Context, + packet exported.PacketI, +) error { + contract := im.ics4Middleware.GetContractAddress(ctx) + if contract == "" { + // The contract has not been configured. Continue as usual + return nil + } + + if err := UndoSendRateLimit( + ctx, + im.ics4Middleware.ContractKeeper, + contract, + packet, + ); err != nil { + return err + } + return nil +} + +// SendPacket implements the ICS4 Wrapper interface +func (im *IBCModule) SendPacket( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet exported.PacketI, +) error { + return im.ics4Middleware.SendPacket(ctx, chanCap, packet) +} + +// WriteAcknowledgement implements the ICS4 Wrapper interface +func (im *IBCModule) WriteAcknowledgement( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet exported.PacketI, + ack exported.Acknowledgement, +) error { + return im.ics4Middleware.WriteAcknowledgement(ctx, chanCap, packet, ack) +} + +func (im *IBCModule) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + return im.ics4Middleware.GetAppVersion(ctx, portID, channelID) +} diff --git a/x/ibcratelimit/ibcratelimitmodule/module.go b/x/ibcratelimit/ibcratelimitmodule/module.go new file mode 100644 index 000000000..c9527ded4 --- /dev/null +++ b/x/ibcratelimit/ibcratelimitmodule/module.go @@ -0,0 +1,136 @@ +package ibcratelimitmodule + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + abci "github.com/cometbft/cometbft/abci/types" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + + ibcratelimit "github.com/comdex-official/comdex/x/ibcratelimit" + ibcratelimitclient "github.com/comdex-official/comdex/x/ibcratelimit/client" + ibcratelimitcli "github.com/comdex-official/comdex/x/ibcratelimit/client/cli" + "github.com/comdex-official/comdex/x/ibcratelimit/client/grpc" + "github.com/comdex-official/comdex/x/ibcratelimit/client/queryproto" + "github.com/comdex-official/comdex/x/ibcratelimit/types" +) + +var ( + _ module.AppModule = AppModule{} + _ module.AppModuleBasic = AppModuleBasic{} +) + +type AppModuleBasic struct{} + +func (AppModuleBasic) Name() string { return types.ModuleName } + +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { +} + +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis performs genesis state validation for the ibcratelimit module. +func (b AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// --------------------------------------- +// Interfaces. +func (b AppModuleBasic) RegisterRESTRoutes(ctx client.Context, r *mux.Router) { +} + +func (b AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + queryproto.RegisterQueryHandlerClient(context.Background(), mux, queryproto.NewQueryClient(clientCtx)) //nolint:errcheck +} + +func (b AppModuleBasic) GetTxCmd() *cobra.Command { + return nil +} + +func (b AppModuleBasic) GetQueryCmd() *cobra.Command { + return ibcratelimitcli.GetQueryCmd() +} + +// RegisterInterfaces registers interfaces and implementations of the ibcratelimit module. +func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface for the capability module. +type AppModule struct { + AppModuleBasic + + ics4wrapper ibcratelimit.ICS4Wrapper +} + +func NewAppModule(ics4wrapper ibcratelimit.ICS4Wrapper) AppModule { + return AppModule{ + AppModuleBasic: AppModuleBasic{}, + ics4wrapper: ics4wrapper, + } +} + +// Name returns the txfees module's name. +func (am AppModule) Name() string { + return am.AppModuleBasic.Name() +} + +// QuerierRoute returns the ibcratelimit module's query routing key. +func (AppModule) QuerierRoute() string { return types.RouterKey } + +// RegisterServices registers a GRPC query service to respond to the +// module-specific GRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + queryproto.RegisterQueryServer(cfg.QueryServer(), grpc.Querier{Q: ibcratelimitclient.Querier{K: am.ics4wrapper}}) +} + +// RegisterInvariants registers the txfees module's invariants. +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the txfees module's genesis initialization It returns +// no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { + var genState types.GenesisState + // Initialize global index to index in genesis state + cdc.MustUnmarshalJSON(gs, &genState) + am.ics4wrapper.InitGenesis(ctx, genState) + + return []abci.ValidatorUpdate{} +} + +// ExportGenesis returns the txfees module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := am.ics4wrapper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(genState) +} + +// BeginBlock executes all ABCI BeginBlock logic respective to the txfees module. +func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} + +// EndBlock executes all ABCI EndBlock logic respective to the txfees module. It +// returns no validator updates. +func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { + return []abci.ValidatorUpdate{} +} + +// ConsensusVersion implements AppModule/ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 1 } diff --git a/x/ibcratelimit/ics4_wrapper.go b/x/ibcratelimit/ics4_wrapper.go new file mode 100644 index 000000000..542173e1e --- /dev/null +++ b/x/ibcratelimit/ics4_wrapper.go @@ -0,0 +1,109 @@ +package ibc_rate_limit + +import ( + errorsmod "cosmossdk.io/errors" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + "github.com/cosmos/ibc-go/v7/modules/core/exported" + + "github.com/comdex-official/comdex/x/ibcratelimit/types" +) + +var ( + _ porttypes.Middleware = &IBCModule{} + _ porttypes.ICS4Wrapper = &ICS4Wrapper{} +) + +type ICS4Wrapper struct { + channel porttypes.ICS4Wrapper + accountKeeper *authkeeper.AccountKeeper + bankKeeper *bankkeeper.BaseKeeper + ContractKeeper *wasmkeeper.PermissionedKeeper + paramSpace paramtypes.Subspace +} + +func (i *ICS4Wrapper) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + return i.channel.GetAppVersion(ctx, portID, channelID) +} + +func NewICS4Middleware( + channel porttypes.ICS4Wrapper, + accountKeeper *authkeeper.AccountKeeper, contractKeeper *wasmkeeper.PermissionedKeeper, + bankKeeper *bankkeeper.BaseKeeper, paramSpace paramtypes.Subspace, +) ICS4Wrapper { + if !paramSpace.HasKeyTable() { + paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) + } + return ICS4Wrapper{ + channel: channel, + accountKeeper: accountKeeper, + ContractKeeper: contractKeeper, + bankKeeper: bankKeeper, + paramSpace: paramSpace, + } +} + +// SendPacket implements the ICS4 interface and is called when sending packets. +// This method retrieves the contract from the middleware's parameters and checks if the limits have been exceeded for +// the current transfer, in which case it returns an error preventing the IBC send from taking place. +// If the contract param is not configured, or the contract doesn't have a configuration for the (channel+denom) being +// used, transfers are not prevented and handled by the wrapped IBC app +func (i *ICS4Wrapper) SendPacket(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet exported.PacketI) error { + contract := i.GetContractAddress(ctx) + if contract == "" { + // The contract has not been configured. Continue as usual + _, err := i.channel.SendPacket(ctx, chanCap, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetTimeoutHeight().(clienttypes.Height), packet.GetTimeoutTimestamp(), packet.GetData()) + return err + } + + // We need the full packet so the contract can process it. If it can't be cast to a channeltypes.Packet, this + // should fail. The only reason that would happen is if another middleware is modifying the packet, though. In + // that case we can modify the middleware order or change this cast so we have all the data we need. + fullPacket, ok := packet.(channeltypes.Packet) + if !ok { + return sdkerrors.ErrInvalidRequest + } + + err := CheckAndUpdateRateLimits(ctx, i.ContractKeeper, "send_packet", contract, fullPacket) + if err != nil { + return errorsmod.Wrap(err, "rate limit SendPacket failed to authorize transfer") + } + + _, err = i.channel.SendPacket(ctx, chanCap, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetTimeoutHeight().(clienttypes.Height), packet.GetTimeoutTimestamp(), packet.GetData()) + return err +} + +func (i *ICS4Wrapper) WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet exported.PacketI, ack exported.Acknowledgement) error { + return i.channel.WriteAcknowledgement(ctx, chanCap, packet, ack) +} + +func (i *ICS4Wrapper) GetContractAddress(ctx sdk.Context) (contract string) { + return i.GetParams(ctx).ContractAddress +} + +func (i *ICS4Wrapper) GetParams(ctx sdk.Context) (params types.Params) { + // This was previously done via i.paramSpace.GetParamSet(ctx, ¶ms). That will + // panic if the params don't exist. This is a workaround to avoid that panic. + // Params should be refactored to just use a raw kvstore. + empty := types.Params{} + for _, pair := range params.ParamSetPairs() { + i.paramSpace.GetIfExists(ctx, pair.Key, pair.Value) + } + if params == empty { + return types.DefaultParams() + } + return params +} + +func (i *ICS4Wrapper) SetParams(ctx sdk.Context, params types.Params) { + i.paramSpace.SetParamSet(ctx, ¶ms) +} diff --git a/x/ibcratelimit/rate_limit.go b/x/ibcratelimit/rate_limit.go new file mode 100644 index 000000000..be4f1fb76 --- /dev/null +++ b/x/ibcratelimit/rate_limit.go @@ -0,0 +1,154 @@ +package ibc_rate_limit + +import ( + "encoding/json" + + errorsmod "cosmossdk.io/errors" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + sdk "github.com/cosmos/cosmos-sdk/types" + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + "github.com/cosmos/ibc-go/v7/modules/core/exported" + + "github.com/comdex-official/comdex/x/ibcratelimit/types" +) + +var ( + msgSend = "send_packet" + msgRecv = "recv_packet" +) + +func CheckAndUpdateRateLimits(ctx sdk.Context, contractKeeper *wasmkeeper.PermissionedKeeper, + msgType, contract string, packet exported.PacketI, +) error { + contractAddr, err := sdk.AccAddressFromBech32(contract) + if err != nil { + return err + } + + sendPacketMsg, err := BuildWasmExecMsg( + msgType, + packet, + ) + if err != nil { + return err + } + + _, err = contractKeeper.Sudo(ctx, contractAddr, sendPacketMsg) + + if err != nil { + return errorsmod.Wrap(types.ErrRateLimitExceeded, err.Error()) + } + + return nil +} + +type UndoSendMsg struct { + UndoSend UndoPacketMsg `json:"undo_send"` +} + +type UndoPacketMsg struct { + Packet UnwrappedPacket `json:"packet"` +} + +func UndoSendRateLimit(ctx sdk.Context, contractKeeper *wasmkeeper.PermissionedKeeper, + contract string, + packet exported.PacketI, +) error { + contractAddr, err := sdk.AccAddressFromBech32(contract) + if err != nil { + return err + } + + unwrapped, err := unwrapPacket(packet) + if err != nil { + return err + } + + msg := UndoSendMsg{UndoSend: UndoPacketMsg{Packet: unwrapped}} + asJson, err := json.Marshal(msg) + if err != nil { + return err + } + + _, err = contractKeeper.Sudo(ctx, contractAddr, asJson) + if err != nil { + return errorsmod.Wrap(types.ErrContractError, err.Error()) + } + + return nil +} + +type SendPacketMsg struct { + SendPacket PacketMsg `json:"send_packet"` +} + +type RecvPacketMsg struct { + RecvPacket PacketMsg `json:"recv_packet"` +} + +type PacketMsg struct { + Packet UnwrappedPacket `json:"packet"` +} + +type UnwrappedPacket struct { + Sequence uint64 `json:"sequence"` + SourcePort string `json:"source_port"` + SourceChannel string `json:"source_channel"` + DestinationPort string `json:"destination_port"` + DestinationChannel string `json:"destination_channel"` + Data transfertypes.FungibleTokenPacketData `json:"data"` + TimeoutHeight clienttypes.Height `json:"timeout_height"` + TimeoutTimestamp uint64 `json:"timeout_timestamp,omitempty"` +} + +func unwrapPacket(packet exported.PacketI) (UnwrappedPacket, error) { + var packetData transfertypes.FungibleTokenPacketData + err := json.Unmarshal(packet.GetData(), &packetData) + if err != nil { + return UnwrappedPacket{}, err + } + height, ok := packet.GetTimeoutHeight().(clienttypes.Height) + if !ok { + return UnwrappedPacket{}, types.ErrBadMessage + } + return UnwrappedPacket{ + Sequence: packet.GetSequence(), + SourcePort: packet.GetSourcePort(), + SourceChannel: packet.GetSourceChannel(), + DestinationPort: packet.GetDestPort(), + DestinationChannel: packet.GetDestChannel(), + Data: packetData, + TimeoutHeight: height, + TimeoutTimestamp: packet.GetTimeoutTimestamp(), + }, nil +} + +func BuildWasmExecMsg(msgType string, packet exported.PacketI) ([]byte, error) { + unwrapped, err := unwrapPacket(packet) + if err != nil { + return []byte{}, err + } + + var asJson []byte + switch { + case msgType == msgSend: + msg := SendPacketMsg{SendPacket: PacketMsg{ + Packet: unwrapped, + }} + asJson, err = json.Marshal(msg) + case msgType == msgRecv: + msg := RecvPacketMsg{RecvPacket: PacketMsg{ + Packet: unwrapped, + }} + asJson, err = json.Marshal(msg) + default: + return []byte{}, types.ErrBadMessage + } + + if err != nil { + return []byte{}, err + } + + return asJson, nil +} diff --git a/x/ibcratelimit/types/errors.go b/x/ibcratelimit/types/errors.go new file mode 100644 index 000000000..42116a7e1 --- /dev/null +++ b/x/ibcratelimit/types/errors.go @@ -0,0 +1,11 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" +) + +var ( + ErrRateLimitExceeded = errorsmod.Register(ModuleName, 2, "rate limit exceeded") + ErrBadMessage = errorsmod.Register(ModuleName, 3, "bad message") + ErrContractError = errorsmod.Register(ModuleName, 4, "contract error") +) diff --git a/x/ibcratelimit/types/events.go b/x/ibcratelimit/types/events.go new file mode 100644 index 000000000..36d31181e --- /dev/null +++ b/x/ibcratelimit/types/events.go @@ -0,0 +1,8 @@ +package types + +const ( + EventBadRevert = "bad_revert" + AttributeKeyPacket = "packet" + AttributeKeyAck = "acknowledgement" + AttributeKeyFailureType = "failure_type" +) diff --git a/x/ibcratelimit/types/genesis.go b/x/ibcratelimit/types/genesis.go new file mode 100644 index 000000000..9167936c6 --- /dev/null +++ b/x/ibcratelimit/types/genesis.go @@ -0,0 +1,17 @@ +package types + +// DefaultGenesis creates a default GenesisState object. +func DefaultGenesis() *GenesisState { + return &GenesisState{ + Params: DefaultParams(), + } +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (gs GenesisState) Validate() error { + if err := gs.Params.Validate(); err != nil { + return err + } + return nil +} diff --git a/x/ibcratelimit/types/genesis.pb.go b/x/ibcratelimit/types/genesis.pb.go new file mode 100644 index 000000000..b1b097e0c --- /dev/null +++ b/x/ibcratelimit/types/genesis.pb.go @@ -0,0 +1,329 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: comdex/ibcratelimit/v1beta1/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/codec/types" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + _ "github.com/regen-network/cosmos-proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the ibcratelimit module's genesis state. +type GenesisState struct { + // params are all the parameters of the module + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_8837623744c0f206, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "comdex.ibcratelimit.v1beta1.GenesisState") +} + +func init() { + proto.RegisterFile("comdex/ibcratelimit/v1beta1/genesis.proto", fileDescriptor_8837623744c0f206) +} + +var fileDescriptor_8837623744c0f206 = []byte{ + // 241 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4c, 0xce, 0xcf, 0x4d, + 0x49, 0xad, 0xd0, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, 0xd1, + 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, + 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x86, 0x28, 0xd5, 0x43, 0x56, 0xaa, 0x07, 0x55, 0x2a, + 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa7, 0x0f, 0x62, 0x41, 0xb4, 0x48, 0x49, 0x26, 0xe7, + 0x17, 0xe7, 0xe6, 0x17, 0xc7, 0x43, 0x24, 0x20, 0x1c, 0x98, 0x54, 0x7a, 0x7e, 0x7e, 0x7a, 0x4e, + 0xaa, 0x3e, 0x98, 0x97, 0x54, 0x9a, 0xa6, 0x9f, 0x98, 0x57, 0x09, 0x95, 0xd2, 0xc0, 0xe7, 0xa6, + 0x82, 0xc4, 0xa2, 0xc4, 0x5c, 0xa8, 0x21, 0x4a, 0x81, 0x5c, 0x3c, 0xee, 0x10, 0x37, 0x06, 0x97, + 0x24, 0x96, 0xa4, 0x0a, 0x39, 0x72, 0xb1, 0x41, 0xe4, 0x25, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, + 0x94, 0xf5, 0xf0, 0xb8, 0x59, 0x2f, 0x00, 0xac, 0xd4, 0x89, 0xe5, 0xc4, 0x3d, 0x79, 0x86, 0x20, + 0xa8, 0x46, 0xa7, 0x80, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, + 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, 0x4b, + 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0x02, 0x19, 0xa9, 0x0f, 0x31, 0x56, 0x37, 0x3f, 0x2d, 0x2d, 0x33, + 0x39, 0x33, 0x31, 0x07, 0xca, 0xd7, 0x47, 0x73, 0x73, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, + 0xd8, 0xad, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x37, 0x08, 0x41, 0x6b, 0x01, 0x00, + 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/ibcratelimit/types/keys.go b/x/ibcratelimit/types/keys.go new file mode 100644 index 000000000..8a278c9f5 --- /dev/null +++ b/x/ibcratelimit/types/keys.go @@ -0,0 +1,12 @@ +package types + +import "strings" + +const ( + ModuleName = "rate-limited-ibc" // IBC at the end to avoid conflicts with the ibc prefix + +) + +// RouterKey is the message route. Can only contain +// alphanumeric characters. +var RouterKey = strings.ReplaceAll(ModuleName, "-", "") diff --git a/x/ibcratelimit/types/params.go b/x/ibcratelimit/types/params.go new file mode 100644 index 000000000..35b172863 --- /dev/null +++ b/x/ibcratelimit/types/params.go @@ -0,0 +1,73 @@ +package types + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +// Parameter store keys. +var ( + KeyContractAddress = []byte("contract") + + _ paramtypes.ParamSet = &Params{} +) + +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +func NewParams(contractAddress string) (Params, error) { + return Params{ + ContractAddress: contractAddress, + }, nil +} + +// default gamm module parameters. +func DefaultParams() Params { + return Params{ + ContractAddress: "", + } +} + +// validate params. +func (p Params) Validate() error { + if err := validateContractAddress(p.ContractAddress); err != nil { + return err + } + + return nil +} + +// Implements params.ParamSet. +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{ + paramtypes.NewParamSetPair(KeyContractAddress, &p.ContractAddress, validateContractAddress), + } +} + +func validateContractAddress(i interface{}) error { + v, ok := i.(string) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + // Empty strings are valid for unsetting the param + if v == "" { + return nil + } + + // Checks that the contract address is valid + bech32, err := sdk.AccAddressFromBech32(v) + if err != nil { + return err + } + + err = sdk.VerifyAddressFormat(bech32) + if err != nil { + return err + } + + return nil +} diff --git a/x/ibcratelimit/types/params.pb.go b/x/ibcratelimit/types/params.pb.go new file mode 100644 index 000000000..b4f795439 --- /dev/null +++ b/x/ibcratelimit/types/params.pb.go @@ -0,0 +1,322 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: comdex/ibcratelimit/v1beta1/params.proto + +package types + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the parameters for the ibcratelimit module. +type Params struct { + ContractAddress string `protobuf:"bytes,1,opt,name=contract_address,json=contractAddress,proto3" json:"contract_address,omitempty" yaml:"contract_address"` +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_d45624c5d834de99, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetContractAddress() string { + if m != nil { + return m.ContractAddress + } + return "" +} + +func init() { + proto.RegisterType((*Params)(nil), "comdex.ibcratelimit.v1beta1.Params") +} + +func init() { + proto.RegisterFile("comdex/ibcratelimit/v1beta1/params.proto", fileDescriptor_d45624c5d834de99) +} + +var fileDescriptor_d45624c5d834de99 = []byte{ + // 211 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x48, 0xce, 0xcf, 0x4d, + 0x49, 0xad, 0xd0, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, 0xd1, + 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, + 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x86, 0xa8, 0xd4, 0x43, 0x56, 0xa9, 0x07, 0x55, 0x29, 0x25, + 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa7, 0x0f, 0x62, 0x41, 0xb4, 0x28, 0x05, 0x70, 0xb1, 0x05, + 0x80, 0x8d, 0x10, 0x72, 0xe3, 0x12, 0x48, 0xce, 0xcf, 0x2b, 0x29, 0x4a, 0x4c, 0x2e, 0x89, 0x4f, + 0x4c, 0x49, 0x29, 0x4a, 0x2d, 0x2e, 0x96, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x74, 0x92, 0xfe, 0x74, + 0x4f, 0x5e, 0xbc, 0x32, 0x31, 0x37, 0xc7, 0x4a, 0x09, 0x5d, 0x85, 0x52, 0x10, 0x3f, 0x4c, 0xc8, + 0x11, 0x22, 0xe2, 0x14, 0x70, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, + 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0x66, + 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x10, 0x97, 0xea, 0xe6, 0xa7, + 0xa5, 0x65, 0x26, 0x67, 0x26, 0xe6, 0x40, 0xf9, 0xfa, 0x68, 0xbe, 0x2c, 0xa9, 0x2c, 0x48, 0x2d, + 0x4e, 0x62, 0x03, 0x3b, 0xd5, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x87, 0xb8, 0xe9, 0x8e, 0x09, + 0x01, 0x00, 0x00, +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ContractAddress) > 0 { + i -= len(m.ContractAddress) + copy(dAtA[i:], m.ContractAddress) + i = encodeVarintParams(dAtA, i, uint64(len(m.ContractAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ContractAddress) + if l > 0 { + n += 1 + l + sovParams(uint64(l)) + } + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContractAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContractAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/ibcratelimit/types/params_test.go b/x/ibcratelimit/types/params_test.go new file mode 100644 index 000000000..f37e4d886 --- /dev/null +++ b/x/ibcratelimit/types/params_test.go @@ -0,0 +1,79 @@ +package types + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestValidateContractAddress(t *testing.T) { + testCases := map[string]struct { + addr interface{} + expected bool + }{ + // ToDo: Why do tests expect the bech32 prefix to be cosmos? + "valid_addr": { + addr: "cosmos1qm0hhug8kszhcp9f3ryuecz5yw8s3e5v0n2ckd", + expected: true, + }, + "invalid_addr": { + addr: "cosmos1234", + expected: false, + }, + "invalid parameter type": { + addr: 123456, + expected: false, + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + err := validateContractAddress(tc.addr) + + // Assertions. + if !tc.expected { + require.Error(t, err) + return + } + + require.NoError(t, err) + }) + } +} + +func TestValidateParams(t *testing.T) { + testCases := map[string]struct { + addr interface{} + expected bool + }{ + // ToDo: Why do tests expect the bech32 prefix to be cosmos? + "valid_addr": { + addr: "cosmos1qm0hhug8kszhcp9f3ryuecz5yw8s3e5v0n2ckd", + expected: true, + }, + "invalid_addr": { + addr: "cosmos1234", + expected: false, + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + addr, ok := tc.addr.(string) + require.True(t, ok, "unexpected type of address") + + params := Params{ + ContractAddress: addr, + } + + err := params.Validate() + + // Assertions. + if !tc.expected { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/x/ibcratelimit/types/query.pb.go b/x/ibcratelimit/types/query.pb.go new file mode 100644 index 000000000..54a011d76 --- /dev/null +++ b/x/ibcratelimit/types/query.pb.go @@ -0,0 +1,542 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: comdex/ibcratelimit/v1beta1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/gogo/protobuf/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// ParamsRequest is the request type for the Query/Params RPC method. +type ParamsRequest struct { +} + +func (m *ParamsRequest) Reset() { *m = ParamsRequest{} } +func (m *ParamsRequest) String() string { return proto.CompactTextString(m) } +func (*ParamsRequest) ProtoMessage() {} +func (*ParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_8427b621352b6b3f, []int{0} +} +func (m *ParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ParamsRequest.Merge(m, src) +} +func (m *ParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *ParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ParamsRequest proto.InternalMessageInfo + +// aramsResponse is the response type for the Query/Params RPC method. +type ParamsResponse struct { + // params defines the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *ParamsResponse) Reset() { *m = ParamsResponse{} } +func (m *ParamsResponse) String() string { return proto.CompactTextString(m) } +func (*ParamsResponse) ProtoMessage() {} +func (*ParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_8427b621352b6b3f, []int{1} +} +func (m *ParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ParamsResponse.Merge(m, src) +} +func (m *ParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *ParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ParamsResponse proto.InternalMessageInfo + +func (m *ParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func init() { + proto.RegisterType((*ParamsRequest)(nil), "comdex.ibcratelimit.v1beta1.ParamsRequest") + proto.RegisterType((*ParamsResponse)(nil), "comdex.ibcratelimit.v1beta1.ParamsResponse") +} + +func init() { + proto.RegisterFile("comdex/ibcratelimit/v1beta1/query.proto", fileDescriptor_8427b621352b6b3f) +} + +var fileDescriptor_8427b621352b6b3f = []byte{ + // 311 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0x4f, 0x4b, 0xfb, 0x30, + 0x18, 0xc7, 0x9b, 0x1f, 0x3f, 0x77, 0x88, 0xa8, 0x50, 0x3c, 0xc8, 0x94, 0x28, 0x1b, 0xe2, 0xd8, + 0xb0, 0x61, 0x13, 0xbc, 0xbb, 0x57, 0x30, 0xe7, 0xcd, 0x5b, 0x5a, 0xb3, 0x18, 0x68, 0xfb, 0x64, + 0x4d, 0x2a, 0xee, 0xea, 0x0b, 0x10, 0xc1, 0x8b, 0x2f, 0x69, 0xc7, 0x81, 0x17, 0x4f, 0x22, 0xad, + 0x2f, 0x44, 0xda, 0x64, 0x22, 0x1e, 0xe6, 0x6e, 0xf9, 0xf3, 0xf9, 0xfe, 0x79, 0x1e, 0x7c, 0x12, + 0x41, 0x72, 0xc3, 0xef, 0xa9, 0x0c, 0xa3, 0x8c, 0x19, 0x1e, 0xcb, 0x44, 0x1a, 0x7a, 0xd7, 0x0f, + 0xb9, 0x61, 0x7d, 0x3a, 0xcd, 0x79, 0x36, 0x0b, 0x54, 0x06, 0x06, 0xfc, 0x7d, 0x0b, 0x06, 0x3f, + 0xc1, 0xc0, 0x81, 0xcd, 0x5d, 0x01, 0x02, 0x6a, 0x8e, 0x56, 0x27, 0x2b, 0x69, 0x1e, 0x08, 0x00, + 0x11, 0x73, 0xca, 0x94, 0xa4, 0x2c, 0x4d, 0xc1, 0x30, 0x23, 0x21, 0xd5, 0xee, 0xb7, 0x1b, 0x81, + 0x4e, 0x40, 0xd3, 0x90, 0x69, 0x6e, 0x93, 0xbe, 0x73, 0x15, 0x13, 0x32, 0xad, 0x61, 0xc7, 0x76, + 0x56, 0xb5, 0x54, 0x2c, 0x63, 0x89, 0x73, 0x6d, 0xed, 0xe0, 0xad, 0x51, 0x7d, 0x1f, 0xf3, 0x69, + 0xce, 0xb5, 0x69, 0x5d, 0xe1, 0xed, 0xe5, 0x83, 0x56, 0x90, 0x6a, 0xee, 0x5f, 0xe0, 0x86, 0x95, + 0xec, 0xa1, 0x23, 0xd4, 0xd9, 0x1c, 0xb4, 0x83, 0x15, 0xa3, 0x05, 0x56, 0x3c, 0xfc, 0x3f, 0x7f, + 0x3f, 0xf4, 0xc6, 0x4e, 0x38, 0x78, 0x41, 0x78, 0xe3, 0xb2, 0xaa, 0xec, 0x3f, 0x22, 0xdc, 0xb0, + 0x88, 0xdf, 0x5d, 0xc3, 0xc7, 0xb5, 0x6a, 0xf6, 0xd6, 0x62, 0x6d, 0xe1, 0x56, 0xef, 0xe1, 0xf5, + 0xf3, 0xf9, 0xdf, 0xb1, 0xdf, 0xa6, 0x7f, 0xaf, 0x61, 0x38, 0x9a, 0x17, 0x04, 0x2d, 0x0a, 0x82, + 0x3e, 0x0a, 0x82, 0x9e, 0x4a, 0xe2, 0x2d, 0x4a, 0xe2, 0xbd, 0x95, 0xc4, 0xbb, 0x3e, 0x17, 0xd2, + 0xdc, 0xe6, 0x61, 0x95, 0xec, 0x8c, 0x4e, 0x61, 0x32, 0x91, 0x91, 0x64, 0xf1, 0xd2, 0xf8, 0x97, + 0xb5, 0x99, 0x29, 0xae, 0xc3, 0x46, 0xbd, 0xd9, 0xb3, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x83, + 0xa6, 0x44, 0x57, 0x2b, 0x02, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Params defines a gRPC query method that returns the ibcratelimit module's + // parameters. + Params(ctx context.Context, in *ParamsRequest, opts ...grpc.CallOption) (*ParamsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *ParamsRequest, opts ...grpc.CallOption) (*ParamsResponse, error) { + out := new(ParamsResponse) + err := c.cc.Invoke(ctx, "/comdex.ibcratelimit.v1beta1.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Params defines a gRPC query method that returns the ibcratelimit module's + // parameters. + Params(context.Context, *ParamsRequest) (*ParamsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *ParamsRequest) (*ParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/comdex.ibcratelimit.v1beta1.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*ParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "comdex.ibcratelimit.v1beta1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "comdex/ibcratelimit/v1beta1/query.proto", +} + +func (m *ParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *ParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *ParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/ibcratelimit/types/query.pb.gw.go b/x/ibcratelimit/types/query.pb.gw.go new file mode 100644 index 000000000..cefc607fe --- /dev/null +++ b/x/ibcratelimit/types/query.pb.gw.go @@ -0,0 +1,153 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: comdex/ibcratelimit/v1beta1/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"comdex", "ibcratelimit", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_Params_0 = runtime.ForwardResponseMessage +) From 0894ec36809c31b6aff552ea08dff35b3c8267e4 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Tue, 1 Aug 2023 02:56:25 +0530 Subject: [PATCH 15/90] ratelimit fix --- x/ibcratelimit/genesis_test.go | 2 +- x/ibcratelimit/ibc_middleware_test.go | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/x/ibcratelimit/genesis_test.go b/x/ibcratelimit/genesis_test.go index 06c560120..ac7766294 100644 --- a/x/ibcratelimit/genesis_test.go +++ b/x/ibcratelimit/genesis_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/suite" "github.com/comdex-official/comdex/x/ibcratelimit/types" - "github.com/osmosis-labs/osmosis/v16/app/apptesting" + // "github.com/osmosis-labs/osmosis/v16/app/apptesting" ) type GenesisTestSuite struct { diff --git a/x/ibcratelimit/ibc_middleware_test.go b/x/ibcratelimit/ibc_middleware_test.go index 13555dd4f..24d876c80 100644 --- a/x/ibcratelimit/ibc_middleware_test.go +++ b/x/ibcratelimit/ibc_middleware_test.go @@ -15,11 +15,11 @@ import ( ibctesting "github.com/cosmos/ibc-go/v7/testing" "github.com/stretchr/testify/suite" - txfeetypes "github.com/osmosis-labs/osmosis/v16/x/txfees/types" + // txfeetypes "github.com/osmosis-labs/osmosis/v16/x/txfees/types" "github.com/comdex-official/comdex/x/ibcratelimit/types" - "github.com/osmosis-labs/osmosis/v16/app/apptesting" - "github.com/osmosis-labs/osmosis/v16/tests/osmosisibctesting" + // "github.com/osmosis-labs/osmosis/v16/app/apptesting" + // "github.com/osmosis-labs/osmosis/v16/tests/osmosisibctesting" ) type MiddlewareTestSuite struct { From 05ccb5c28cbb823f6a194201ce04de9da1c74fe3 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Tue, 1 Aug 2023 02:57:32 +0530 Subject: [PATCH 16/90] liquidity fix --- go.mod | 5 +-- go.sum | 1 + x/liquidity/amm/amm.go | 5 +-- x/liquidity/amm/pool.go | 64 ++++++++++++++++++------------------ x/liquidity/amm/pool_test.go | 9 ++--- x/liquidity/amm/util.go | 2 +- x/liquidity/types/tx.pb.go | 2 +- 7 files changed, 46 insertions(+), 42 deletions(-) diff --git a/go.mod b/go.mod index fb94c6b41..251e695c7 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/comdex-official/comdex go 1.20 require ( + cosmossdk.io/errors v1.0.0-beta.7 cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff github.com/CosmWasm/wasmd v0.40.2 github.com/CosmWasm/wasmvm v1.2.4 @@ -10,12 +11,14 @@ require ( github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 github.com/cosmos/cosmos-sdk v0.47.3 + github.com/cosmos/gogoproto v1.4.10 github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.3 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.16.0 + github.com/regen-network/cosmos-proto v0.3.1 github.com/spf13/cast v1.5.1 github.com/spf13/cobra v1.7.0 github.com/strangelove-ventures/async-icq/v7 v7.0.0-20230413165143-a3b65ccdc897 @@ -50,7 +53,6 @@ require ( cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.6.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect - cosmossdk.io/errors v1.0.0-beta.7 // indirect cosmossdk.io/log v1.1.0 // indirect cosmossdk.io/math v1.0.1 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect @@ -95,7 +97,6 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/gogoproto v1.4.10 // indirect github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect diff --git a/go.sum b/go.sum index e3649aae4..a7e64a087 100644 --- a/go.sum +++ b/go.sum @@ -2851,6 +2851,7 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= diff --git a/x/liquidity/amm/amm.go b/x/liquidity/amm/amm.go index 13032a3a7..d56bdd004 100644 --- a/x/liquidity/amm/amm.go +++ b/x/liquidity/amm/amm.go @@ -1,17 +1,18 @@ package amm import ( + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" ) // The minimum and maximum coin amount used in the amm package. var ( MinCoinAmount = sdk.NewInt(100) - MaxCoinAmount = sdk.NewIntWithDecimal(1, 40) + MaxCoinAmount = sdkmath.NewIntWithDecimal(1, 40) ) var ( MinPoolPrice = sdk.NewDecWithPrec(1, 15) // 10^-15 - MaxPoolPrice = sdk.NewIntWithDecimal(1, 20).ToDec() // 10^20 + MaxPoolPrice = sdk.NewDec(sdkmath.NewIntWithDecimal(1, 20).Int64()) // 10^20 MinRangedPoolPriceGapRatio = sdk.NewDecWithPrec(1, 3) // 0.001, 0.1% ) diff --git a/x/liquidity/amm/pool.go b/x/liquidity/amm/pool.go index 81c2379df..8ea69fb3e 100644 --- a/x/liquidity/amm/pool.go +++ b/x/liquidity/amm/pool.go @@ -56,7 +56,7 @@ func CreateBasicPool(rx, ry sdk.Int) (*BasicPool, error) { if rx.IsZero() || ry.IsZero() { return nil, fmt.Errorf("cannot create basic pool with zero reserve amount") } - p := rx.ToDec().Quo(ry.ToDec()) + p := sdk.NewDec(rx.Int64()).Quo(sdk.NewDec(ry.Int64())) if p.LT(MinPoolPrice) { return nil, fmt.Errorf("pool price is lower than min price %s", MinPoolPrice) } @@ -86,7 +86,7 @@ func (pool *BasicPool) Price() sdk.Dec { if pool.rx.IsZero() || pool.ry.IsZero() { panic("pool price is not defined for a depleted pool") } - return pool.rx.ToDec().Quo(pool.ry.ToDec()) + return sdk.NewDec(pool.rx.Int64()).Quo(sdk.NewDec(pool.ry.Int64())) } // IsDepleted returns whether the pool is depleted or not. @@ -119,7 +119,7 @@ func (pool *BasicPool) BuyAmountOver(price sdk.Dec, _ bool) (amt sdk.Int) { if price.GTE(pool.Price()) { return zeroInt } - dx := pool.rx.ToDec().Sub(price.MulInt(pool.ry)) + dx := sdk.NewDec(pool.rx.Int64()).Sub(price.MulInt(pool.ry)) if !dx.IsPositive() { return zeroInt } @@ -141,7 +141,7 @@ func (pool *BasicPool) SellAmountUnder(price sdk.Dec, _ bool) (amt sdk.Int) { if price.LTE(pool.Price()) { return zeroInt } - amt = pool.ry.ToDec().Sub(pool.rx.ToDec().QuoRoundUp(price)).TruncateInt() + amt = sdk.NewDec(pool.ry.Int64()).Sub(sdk.NewDec(pool.rx.Int64()).QuoRoundUp(price)).TruncateInt() if !amt.IsPositive() { return zeroInt } @@ -159,10 +159,10 @@ func (pool *BasicPool) BuyAmountTo(price sdk.Dec) (amt sdk.Int) { if price.GTE(pool.Price()) { return zeroInt } - sqrtRx := utils.DecApproxSqrt(pool.rx.ToDec()) - sqrtRy := utils.DecApproxSqrt(pool.ry.ToDec()) + sqrtRx := utils.DecApproxSqrt(sdk.NewDec(pool.rx.Int64())) + sqrtRy := utils.DecApproxSqrt(sdk.NewDec(pool.ry.Int64())) sqrtPrice := utils.DecApproxSqrt(price) - dx := pool.rx.ToDec().Sub(sqrtPrice.Mul(sqrtRx.Mul(sqrtRy))) // dx = rx - sqrt(P * rx * ry) + dx := sdk.NewDec(pool.rx.Int64()).Sub(sqrtPrice.Mul(sqrtRx.Mul(sqrtRy))) // dx = rx - sqrt(P * rx * ry) if !dx.IsPositive() { return zeroInt } @@ -187,11 +187,11 @@ func (pool *BasicPool) SellAmountTo(price sdk.Dec) (amt sdk.Int) { if price.LTE(pool.Price()) { return zeroInt } - sqrtRx := utils.DecApproxSqrt(pool.rx.ToDec()) - sqrtRy := utils.DecApproxSqrt(pool.ry.ToDec()) + sqrtRx := utils.DecApproxSqrt(sdk.NewDec(pool.rx.Int64())) + sqrtRy := utils.DecApproxSqrt(sdk.NewDec(pool.ry.Int64())) sqrtPrice := utils.DecApproxSqrt(price) // dy = ry - sqrt(rx * ry / P) - amt = pool.ry.ToDec().Sub(sqrtRx.Mul(sqrtRy).Quo(sqrtPrice)).TruncateInt() + amt = sdk.NewDec(pool.ry.Int64()).Sub(sqrtRx.Mul(sqrtRy).Quo(sqrtPrice)).TruncateInt() if !amt.IsPositive() { return zeroInt } @@ -221,8 +221,8 @@ func NewRangedPool(rx, ry, ps sdk.Int, minPrice, maxPrice sdk.Dec) *RangedPool { maxPrice: maxPrice, transX: transX, transY: transY, - xComp: rx.ToDec().Add(transX), - yComp: ry.ToDec().Add(transY), + xComp: sdk.NewDec(rx.Int64()).Add(transX), + yComp: sdk.NewDec(ry.Int64()).Add(transY), } } @@ -247,7 +247,7 @@ func CreateRangedPool(x, y sdk.Int, minPrice, maxPrice, initialPrice sdk.Dec) (p ay = zeroInt default: // normal pool sqrt := utils.DecApproxSqrt - xDec, yDec := x.ToDec(), y.ToDec() + xDec, yDec := sdk.NewDec(x.Int64()), sdk.NewDec(y.Int64()) sqrtP := sqrt(initialPrice) // sqrt(P) sqrtM := sqrt(minPrice) // sqrt(M) sqrtL := sqrt(maxPrice) // sqrt(L) @@ -306,8 +306,8 @@ func (pool *RangedPool) SetBalances(rx, ry sdk.Int, derive bool) { } pool.rx = rx pool.ry = ry - pool.xComp = pool.rx.ToDec().Add(pool.transX) - pool.yComp = pool.ry.ToDec().Add(pool.transY) + pool.xComp = sdk.NewDec(pool.rx.Int64()).Add(pool.transX) + pool.yComp = sdk.NewDec(pool.ry.Int64()).Add(pool.transY) } // PoolCoinSupply returns the pool coin supply. @@ -368,8 +368,8 @@ func (pool *RangedPool) BuyAmountOver(price sdk.Dec, _ bool) (amt sdk.Int) { dx := pool.xComp.Sub(price.Mul(pool.yComp)) if !dx.IsPositive() { return zeroInt - } else if dx.GT(pool.rx.ToDec()) { - dx = pool.rx.ToDec() + } else if dx.GT(sdk.NewDec(pool.rx.Int64())) { + dx = sdk.NewDec(pool.rx.Int64()) } utils.SafeMath(func() { amt = dx.QuoTruncate(origPrice).TruncateInt() // dy = dx / P @@ -417,11 +417,11 @@ func (pool *RangedPool) BuyAmountTo(price sdk.Dec) (amt sdk.Int) { sqrtYComp := utils.DecApproxSqrt(pool.yComp) sqrtPrice := utils.DecApproxSqrt(price) // dx = rx - (sqrt(P * (rx + transX) * (ry + transY)) - transX) - dx := pool.rx.ToDec().Sub(sqrtPrice.Mul(sqrtXComp.Mul(sqrtYComp)).Sub(pool.transX)) + dx := sdk.NewDec(pool.rx.Int64()).Sub(sqrtPrice.Mul(sqrtXComp.Mul(sqrtYComp)).Sub(pool.transX)) if !dx.IsPositive() { return zeroInt - } else if dx.GT(pool.rx.ToDec()) { - dx = pool.rx.ToDec() + } else if dx.GT(sdk.NewDec(pool.rx.Int64())) { + dx = sdk.NewDec(pool.rx.Int64()) } utils.SafeMath(func() { amt = dx.QuoTruncate(origPrice).TruncateInt() // dy = dx / P @@ -448,7 +448,7 @@ func (pool *RangedPool) SellAmountTo(price sdk.Dec) (amt sdk.Int) { sqrtYComp := utils.DecApproxSqrt(pool.yComp) sqrtPrice := utils.DecApproxSqrt(price) // dy = ry - (sqrt((x + transX) * (y + transY) / P) - b) - amt = pool.ry.ToDec().Sub(sqrtXComp.Mul(sqrtYComp).QuoRoundUp(sqrtPrice).Sub(pool.transY)).TruncateInt() + amt = sdk.NewDec(pool.ry.Int64()).Sub(sqrtXComp.Mul(sqrtYComp).QuoRoundUp(sqrtPrice).Sub(pool.transY)).TruncateInt() if amt.GT(pool.ry) { amt = pool.ry } @@ -480,25 +480,25 @@ func Deposit(rx, ry, ps, x, y sdk.Int) (ax, ay, pc sdk.Int) { // from depositor and mint as little coins as possible. utils.SafeMath(func() { - rx, ry := rx.ToDec(), ry.ToDec() - ps := ps.ToDec() + rx, ry := sdk.NewDec(rx.Int64()), sdk.NewDec(ry.Int64()) + ps := sdk.NewDec(ps.Int64()) // pc = floor(ps * min(x / rx, y / ry)) var ratio sdk.Dec switch { case rx.IsZero(): - ratio = y.ToDec().QuoTruncate(ry) + ratio = sdk.NewDec(y.Int64()).QuoTruncate(ry) case ry.IsZero(): - ratio = x.ToDec().QuoTruncate(rx) + ratio = sdk.NewDec(x.Int64()).QuoTruncate(rx) default: ratio = sdk.MinDec( - x.ToDec().QuoTruncate(rx), - y.ToDec().QuoTruncate(ry), + sdk.NewDec(x.Int64()).QuoTruncate(rx), + sdk.NewDec(y.Int64()).QuoTruncate(ry), ) } pc = ps.MulTruncate(ratio).TruncateInt() - mintProportion := pc.ToDec().Quo(ps) // pc / ps + mintProportion := sdk.NewDec(pc.Int64()).Quo(ps) // pc / ps ax = rx.Mul(mintProportion).Ceil().TruncateInt() // ceil(rx * mintProportion) ay = ry.Mul(mintProportion).Ceil().TruncateInt() // ceil(ry * mintProportion) }, func() { @@ -520,10 +520,10 @@ func Withdraw(rx, ry, ps, pc sdk.Int, feeRate sdk.Dec) (x, y sdk.Int) { } utils.SafeMath(func() { - proportion := pc.ToDec().QuoTruncate(ps.ToDec()) // pc / ps + proportion := sdk.NewDec(pc.Int64()).QuoTruncate(sdk.NewDec(ps.Int64())) // pc / ps multiplier := sdk.OneDec().Sub(feeRate) // 1 - feeRate - x = rx.ToDec().MulTruncate(proportion).MulTruncate(multiplier).TruncateInt() // floor(rx * proportion * multiplier) - y = ry.ToDec().MulTruncate(proportion).MulTruncate(multiplier).TruncateInt() // floor(ry * proportion * multiplier) + x = sdk.NewDec(rx.Int64()).MulTruncate(proportion).MulTruncate(multiplier).TruncateInt() // floor(rx * proportion * multiplier) + y = sdk.NewDec(ry.Int64()).MulTruncate(proportion).MulTruncate(multiplier).TruncateInt() // floor(ry * proportion * multiplier) }, func() { x, y = sdk.ZeroInt(), sdk.ZeroInt() }) @@ -535,7 +535,7 @@ func DeriveTranslation(rx, ry sdk.Int, minPrice, maxPrice sdk.Dec) (transX, tran sqrt := utils.DecApproxSqrt // M = minPrice, L = maxPrice - rxDec, ryDec := rx.ToDec(), ry.ToDec() + rxDec, ryDec := sdk.NewDec(rx.Int64()), sdk.NewDec(ry.Int64()) sqrtM := sqrt(minPrice) sqrtL := sqrt(maxPrice) diff --git a/x/liquidity/amm/pool_test.go b/x/liquidity/amm/pool_test.go index 1648d60c9..6814bcdf0 100644 --- a/x/liquidity/amm/pool_test.go +++ b/x/liquidity/amm/pool_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" utils "github.com/comdex-official/comdex/types" "github.com/comdex-official/comdex/x/liquidity/amm" @@ -50,12 +51,12 @@ func TestCreateBasicPool(t *testing.T) { }, { "too low price", - sdk.NewInt(1000000), sdk.NewIntWithDecimal(1, 26), + sdk.NewInt(1000000), sdkmath.NewIntWithDecimal(1, 26), "pool price is lower than min price 0.000000000000001000", }, { "too high price", - sdk.NewIntWithDecimal(1, 48), sdk.NewInt(1000000), + sdkmath.NewIntWithDecimal(1, 48), sdk.NewInt(1000000), "pool price is greater than max price 100000000000000000000.000000000000000000", }, } { @@ -470,7 +471,7 @@ func TestValidateRangedPoolParams(t *testing.T) { }, { "too high max price", - utils.ParseDec("0.5"), sdk.NewIntWithDecimal(1, 25).ToDec(), + utils.ParseDec("0.5"), sdk.NewDec(sdkmath.NewIntWithDecimal(1, 25).Int64()), utils.ParseDec("1.0"), "max price must not be higher than 100000000000000000000.000000000000000000", }, @@ -602,7 +603,7 @@ func TestCreateRangedPool(t *testing.T) { { "large max price", sdk.NewInt(1_000000000000000000), sdk.NewInt(1_000000000000000000), - utils.ParseDec("1.0"), sdk.NewIntWithDecimal(1, 20).ToDec(), + utils.ParseDec("1.0"), sdk.NewDec(sdkmath.NewIntWithDecimal(1, 20).Int64()), utils.ParseDec("2.0"), "", sdk.NewInt(585786437709747665), sdk.NewInt(1_000000000000000000), diff --git a/x/liquidity/amm/util.go b/x/liquidity/amm/util.go index a01221e1a..44f69d460 100644 --- a/x/liquidity/amm/util.go +++ b/x/liquidity/amm/util.go @@ -36,7 +36,7 @@ func MatchableAmount(order Order, price sdk.Dec) (matchableAmt sdk.Int) { remainingOfferCoinAmt := order.GetOfferCoinAmount().Sub(order.GetPaidOfferCoinAmount()) matchableAmt = sdk.MinInt( order.GetOpenAmount(), - remainingOfferCoinAmt.ToDec().QuoTruncate(price).TruncateInt(), + sdk.NewDec(remainingOfferCoinAmt.Int64()).QuoTruncate(price).TruncateInt(), ) case Sell: matchableAmt = order.GetOpenAmount() diff --git a/x/liquidity/types/tx.pb.go b/x/liquidity/types/tx.pb.go index c6fec1943..c31d79d1d 100644 --- a/x/liquidity/types/tx.pb.go +++ b/x/liquidity/types/tx.pb.go @@ -12,10 +12,10 @@ import ( grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/golang/protobuf/ptypes/duration" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" From f2e3129806ddbb815c2196b85f373077970b5de0 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 2 Aug 2023 01:05:40 +0530 Subject: [PATCH 17/90] sdk upgraded to v0.47.4 --- go.mod | 47 ++++---- go.sum | 376 ++++++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 330 insertions(+), 93 deletions(-) diff --git a/go.mod b/go.mod index 251e695c7..d7fbf5099 100644 --- a/go.mod +++ b/go.mod @@ -3,14 +3,15 @@ module github.com/comdex-official/comdex go 1.20 require ( - cosmossdk.io/errors v1.0.0-beta.7 + cosmossdk.io/errors v1.0.0 + cosmossdk.io/math v1.0.1 cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff github.com/CosmWasm/wasmd v0.40.2 github.com/CosmWasm/wasmvm v1.2.4 github.com/bandprotocol/bandchain-packet v0.0.3 github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 - github.com/cosmos/cosmos-sdk v0.47.3 + github.com/cosmos/cosmos-sdk v0.47.4 github.com/cosmos/gogoproto v1.4.10 github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.3 @@ -23,9 +24,9 @@ require ( github.com/spf13/cobra v1.7.0 github.com/strangelove-ventures/async-icq/v7 v7.0.0-20230413165143-a3b65ccdc897 github.com/stretchr/testify v1.8.4 - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 - google.golang.org/grpc v1.56.1 - google.golang.org/protobuf v1.30.0 + google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 + google.golang.org/grpc v1.56.2 + google.golang.org/protobuf v1.31.0 ) require ( @@ -45,16 +46,15 @@ require ( require ( 4d63.com/gocheckcompilerdirectives v1.2.1 // indirect 4d63.com/gochecknoglobals v0.2.1 // indirect - cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.19.1 // indirect + cloud.google.com/go v0.110.4 // indirect + cloud.google.com/go/compute v1.20.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.13.0 // indirect - cloud.google.com/go/storage v1.29.0 // indirect + cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.6.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect - cosmossdk.io/log v1.1.0 // indirect - cosmossdk.io/math v1.0.1 // indirect + cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect @@ -156,9 +156,10 @@ require ( github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/orderedcode v0.0.1 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.7.1 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -212,7 +213,7 @@ require ( github.com/maratori/testpackage v1.1.0 // indirect github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-runewidth v0.0.10 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mbilski/exhaustivestruct v1.2.0 // indirect @@ -291,20 +292,22 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.10.0 // indirect go.uber.org/zap v1.23.0 // indirect - golang.org/x/crypto v0.9.0 // indirect + golang.org/x/crypto v0.11.0 // indirect golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9 // indirect - golang.org/x/mod v0.9.0 // indirect - golang.org/x/net v0.10.0 // indirect - golang.org/x/oauth2 v0.7.0 // indirect + golang.org/x/mod v0.10.0 // indirect + golang.org/x/net v0.12.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/term v0.8.0 // indirect - golang.org/x/text v0.9.0 // indirect - golang.org/x/tools v0.7.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/term v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect + golang.org/x/tools v0.9.1 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.114.0 // indirect + google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect honnef.co/go/tools v0.4.2 // indirect diff --git a/go.sum b/go.sum index a7e64a087..b30fbbfa4 100644 --- a/go.sum +++ b/go.sum @@ -52,59 +52,90 @@ cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34h cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= +cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accessapproval v1.7.1/go.mod h1:JYczztsHRMK7NTXb6Xw+dwbs/WnOJxbo/2mTI+Kgg68= cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +cloud.google.com/go/accesscontextmanager v1.8.0/go.mod h1:uI+AI/r1oyWK99NN8cQ3UK76AMelMzgZCvJfsi2c+ps= +cloud.google.com/go/accesscontextmanager v1.8.1/go.mod h1:JFJHfvuaTC+++1iL1coPiG1eu5D24db2wXCDWDjIrxo= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= +cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= +cloud.google.com/go/aiplatform v1.45.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= +cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/analytics v0.21.2/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigateway v1.6.1/go.mod h1:ufAS3wpbRjqfZrzpvLC2oh0MFlpRJm2E/ts25yyqmXA= cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeconnect v1.6.1/go.mod h1:C4awq7x0JpLtrlQCr8AzVIzAaYgngRqWf9S5Uhg+wWs= cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= +cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apigeeregistry v0.7.1/go.mod h1:1XgyjZye4Mqtw7T9TsY4NW10U7BojBvG4RMD+vRDrIw= cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= +cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= +cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= +cloud.google.com/go/appengine v1.8.1/go.mod h1:6NJXGLVhZCN9aQ/AEDvmfzKEfoYBlfB80/BHiKVputY= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= +cloud.google.com/go/area120 v0.8.1/go.mod h1:BVfZpGpB7KFVNxPiQBuHkX6Ed0rS51xIgmGyjrAfzsg= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= +cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= +cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= +cloud.google.com/go/artifactregistry v1.14.1/go.mod h1:nxVdG19jTaSTu7yA7+VbWL346r3rIdkZ142BSQqhn5E= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= +cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= +cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= +cloud.google.com/go/asset v1.14.1/go.mod h1:4bEJ3dnHCqWCDbWJ/6Vn7GVI9LerSi7Rfdi03hd+WTQ= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/assuredworkloads v1.11.1/go.mod h1:+F04I52Pgn5nmPG36CWFtxmav6+7Q+c5QyJoL18Lry0= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/automl v1.13.1/go.mod h1:1aowgAHWYZU27MybSCFiukPO7xnyawv7pt3zK4bheQE= cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= @@ -114,6 +145,8 @@ cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oe cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= +cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= +cloud.google.com/go/beyondcorp v0.6.1/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -123,35 +156,51 @@ cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM7 cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= +cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= +cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= +cloud.google.com/go/bigquery v1.52.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= +cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= +cloud.google.com/go/billing v1.16.0/go.mod h1:y8vx09JSSJG02k5QxbycNRrN7FGZB6F3CAcgum7jvGA= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/binaryauthorization v1.6.1/go.mod h1:TKt4pa8xhowwffiBmbrbcxijJRZED4zrqnwZ1lKH51U= cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/certificatemanager v1.7.1/go.mod h1:iW8J3nG6SaRYImIa+wXQ0g8IgoofDFRp5UMzaNk1UqI= cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/channel v1.16.0/go.mod h1:eN/q1PFSl5gyu0dYdmxNXscY/4Fi7ABmeHCJNf/oHmc= cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= +cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/cloudbuild v1.10.1/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/clouddms v1.6.1/go.mod h1:Ygo1vL52Ov4TBZQquhz5fiw2CQ58gvu+PlS6PVXCpZI= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= +cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= +cloud.google.com/go/cloudtasks v1.11.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= @@ -165,8 +214,11 @@ cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARy cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= @@ -175,12 +227,18 @@ cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2Aawl cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/contactcenterinsights v1.9.1/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= +cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= +cloud.google.com/go/container v1.22.1/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= +cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= +cloud.google.com/go/containeranalysis v0.10.1/go.mod h1:Ya2jiILITMY68ZLPaogjmOMNkwsDrWBSTyBubGXO7j0= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= @@ -188,39 +246,56 @@ cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= +cloud.google.com/go/datacatalog v1.14.0/go.mod h1:h0PrGtlihoutNMp/uvwhawLQ9+c63Kz65UFqh49Yo+E= +cloud.google.com/go/datacatalog v1.14.1/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataflow v0.9.1/go.mod h1:Wp7s32QjYuQDWqJPFFlnBKhkAtiFpMTdg00qGbnIHVw= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/dataform v0.8.1/go.mod h1:3BhPSiw8xmppbgzeBbmDvmSWlwouuJkXsXsb8UBih9M= cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datafusion v1.7.1/go.mod h1:KpoTBbFmoToDExJUso/fcCiguGDk7MEzOWXUsJo0wsI= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/datalabeling v0.8.1/go.mod h1:XS62LBSVPbYR54GfYQsPXZjTW8UxCK2fkDciSrpRFdY= cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataplex v1.8.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= +cloud.google.com/go/dataqna v0.8.1/go.mod h1:zxZM0Bl6liMePWsHA8RMGAfmTG34vJMapbHAxQ5+WA8= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +cloud.google.com/go/datastore v1.12.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/datastream v1.9.1/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= +cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= +cloud.google.com/go/deploy v1.11.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= @@ -228,60 +303,84 @@ cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dialogflow v1.38.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/dlp v1.10.1/go.mod h1:IM8BWz1iJd8njcNcG0+Kyd9OPnqnRNkDV8j42VT5KOI= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +cloud.google.com/go/documentai v1.20.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/domains v0.9.1/go.mod h1:aOp1c0MbejQQ2Pjf1iJvnVyT+z6R6s8pX66KaCSDYfE= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/edgecontainer v1.1.1/go.mod h1:O5bYcS//7MELQZs3+7mabRqoWQhXCzenBu0R8bz2rwk= cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/essentialcontacts v1.6.2/go.mod h1:T2tB6tX+TRak7i88Fb2N9Ok3PvY3UNbUsMag9/BARh4= cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/eventarc v1.12.1/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= +cloud.google.com/go/filestore v1.7.1/go.mod h1:y10jsorq40JJnjR/lQ8AfFbbcGlw3g+Dp8oN7i7FjV4= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/firestore v1.8.0/go.mod h1:r3KB8cAdRIe8znzoPWLw8S6gpDVd9treohhn8b09424= cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= +cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= +cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= +cloud.google.com/go/functions v1.15.1/go.mod h1:P5yNWUTkyU+LvW/S9O6V+V423VZooALQlqoXdoPz5AE= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gaming v1.10.1/go.mod h1:XQQvtfP8Rb9Rxnxm5wFVpAp9zCQkJi2bLIb7iHGwB3s= cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkeconnect v0.8.1/go.mod h1:KWiK1g9sDLZqhxB2xEuPV8V9NYzrqTUmQR9shJHpOZw= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkehub v0.14.1/go.mod h1:VEXKIJZ2avzrbd7u+zeMtW00Y8ddk/4V9511C9CQGTY= cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/gkemulticloud v0.6.1/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/grafeas v0.3.0/go.mod h1:P7hgN24EyONOTMyeJH6DxG4zD7fwiYa5Q6GUgyFSOU8= cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/gsuiteaddons v1.6.1/go.mod h1:CodrdOqRZcLp5WOwejHWYBjZvfY0kOphkAKpF/3qdZY= cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= @@ -290,100 +389,143 @@ cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQE cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= -cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= +cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= +cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= +cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/iap v1.8.1/go.mod h1:sJCbeqg3mvWLqjZNsI6dfAtbbV1DL2Rl7e1mTyXYREQ= cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/ids v1.4.1/go.mod h1:np41ed8YMU8zOgv53MMMoCntLTn2lF+SUzlM+O3u/jw= cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= +cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/iot v1.7.1/go.mod h1:46Mgw7ev1k9KqK1ao0ayW9h0lI+3hxeanz+L1zmbbbk= cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= +cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= +cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= +cloud.google.com/go/kms v1.11.0/go.mod h1:hwdiYC0xjnWsKQQCQQmIQnS9asjYVSK6jtXm+zFqXLM= +cloud.google.com/go/kms v1.12.1/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/language v1.10.1/go.mod h1:CPp94nsdVNiQEt1CNjF5WkTcisLiHPyIbMhvR8H2AW0= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/lifesciences v0.9.1/go.mod h1:hACAOd1fFbCGLr/+weUKRAJas82Y4vrL3O5326N//Wc= cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= -cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/longrunning v0.4.2/go.mod h1:OHrnaYyLUV6oqwh0xiS7e5sLQhP1m0QU9R+WhGDMgIQ= +cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc= +cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/managedidentities v1.6.1/go.mod h1:h/irGhTN2SkZ64F43tfGPMbHnypMbu4RB3yl8YcuEak= cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/mediatranslation v0.8.1/go.mod h1:L/7hBdEYbYHQJhX2sldtTO5SZZ1C1vkapubj0T2aGig= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/memcache v1.10.1/go.mod h1:47YRQIarv4I3QS5+hoETgKO40InqzLP6kpNLvyXuyaA= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/metastore v1.11.1/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/monitoring v1.15.1/go.mod h1:lADlSAlFdbqQuwwpaImhsJXu1QSdd3ojypXrFSMr2rM= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkconnectivity v1.12.1/go.mod h1:PelxSWYM7Sh9/guf8CFhi6vIqf19Ir/sbfZRUwXh92E= cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networkmanagement v1.8.0/go.mod h1:Ho/BUGmtyEqrttTgWEe7m+8vDdK74ibQc+Be0q7Fof0= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= +cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +cloud.google.com/go/networksecurity v0.9.1/go.mod h1:MCMdxOKQ30wsBI1eI659f9kEp4wuuAueoC9AJKSPWZQ= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/notebooks v1.9.1/go.mod h1:zqG9/gk05JrzgBt4ghLzEepPHNwE5jgPcHZRKhlC1A8= cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/optimization v1.4.1/go.mod h1:j64vZQP7h9bO49m2rVaTVoNM0vEBEN5eKPUPbZyXOrk= cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orchestration v1.8.1/go.mod h1:4sluRF3wgbYVRqz7zJ1/EUNc90TTprliq9477fGobD8= cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/orgpolicy v1.11.0/go.mod h1:2RK748+FtVvnfuynxBzdnyu7sygtoZa1za/0ZfpOs1M= +cloud.google.com/go/orgpolicy v1.11.1/go.mod h1:8+E3jQcpZJQliP+zaFfayC2Pg5bmhuLK755wKhIIUCE= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/osconfig v1.12.0/go.mod h1:8f/PaYzoS3JMVfdfTubkowZYGmAhUCjjwnjqWI7NVBc= +cloud.google.com/go/osconfig v1.12.1/go.mod h1:4CjBxND0gswz2gfYRCUoUzCm9zCABp91EeTtWXyz0tE= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/oslogin v1.10.1/go.mod h1:x692z7yAue5nE7CsSnoG0aaMbNoRJRXO4sn73R+ZqAs= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/phishingprotection v0.8.1/go.mod h1:AxonW7GovcA8qdEk13NfHq9hNx5KPtfxXNeUxTDxB6I= cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +cloud.google.com/go/policytroubleshooter v1.7.1/go.mod h1:0NaT5v3Ag1M7U5r0GfDCpUFkWd9YqpubBWsQlhanRv0= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= +cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= +cloud.google.com/go/privatecatalog v0.9.1/go.mod h1:0XlDXW2unJXdf9zFz968Hp35gl/bhF4twwpXZAW50JA= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -392,8 +534,12 @@ cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKh cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsub v1.32.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= +cloud.google.com/go/pubsublite v1.8.1/go.mod h1:fOLdU4f5xldK4RGJrBMm+J7zMWNj/k4PxwEZXy39QS0= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= @@ -401,78 +547,107 @@ cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7d cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.2/go.mod h1:kR0KjsJS7Jt1YSyWFkseQ756D45kaYNTlDPPaRAvDBU= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommendationengine v0.8.1/go.mod h1:MrZihWwtFYWDzE6Hz5nKcNz3gLizXVIDI/o3G1DLcrE= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/recommender v1.10.1/go.mod h1:XFvrE4Suqn5Cq0Lf+mCP6oBHD/yRMA8XxP5sb7Q7gpA= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/redis v1.13.1/go.mod h1:VP7DGLpE91M6bcsDdMuyCm2hIpB6Vp2hI090Mfd1tcg= cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcemanager v1.9.1/go.mod h1:dVCuosgrh1tINZ/RwBufr8lULmWGOkPS8gL5gqyjdT8= cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/resourcesettings v1.6.1/go.mod h1:M7mk9PIZrC5Fgsu1kZJci6mpgN8o0IUzVx3eJU3y4Jw= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/retail v1.14.1/go.mod h1:y3Wv3Vr2k54dLNIrCzenyKG8g8dhvhncT2NcNjb/6gE= cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= +cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= +cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= +cloud.google.com/go/scheduler v1.10.1/go.mod h1:R63Ldltd47Bs4gnhQkmNDse5w8gBRrhObZ54PxgR2Oo= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/secretmanager v1.11.1/go.mod h1:znq9JlXgTNdBeQk9TBW/FnR/W4uChEKGeqQWAJ8SXFw= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= +cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +cloud.google.com/go/security v1.15.1/go.mod h1:MvTnnbsWnehoizHi09zoiZob0iCHVcL4AUBj76h9fXA= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/securitycenter v1.23.0/go.mod h1:8pwQ4n+Y9WCWM278R8W3nF65QtY172h4S8aXyI9/hsQ= cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= +cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicedirectory v1.10.1/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/shell v1.7.1/go.mod h1:u1RaM+huXFaTojTbW4g9P5emOrrmLE69KrxqQahKn4g= cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= +cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/spanner v1.47.0/go.mod h1:IXsJwVW2j4UKs0eYDqodab6HgGuA1bViSqW4uH9lfUI= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= +cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= +cloud.google.com/go/speech v1.17.1/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -483,63 +658,89 @@ cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= +cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= +cloud.google.com/go/storagetransfer v1.10.0/go.mod h1:DM4sTlSmGiNczmV6iZyceIh2dbs+7z2Ayg6YAiQlYfA= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/talent v1.6.2/go.mod h1:CbGvmKCG61mkdjcqTcLOkb2ZN1SrQI8MDyma2l7VD24= cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/texttospeech v1.7.1/go.mod h1:m7QfG5IXxeneGqTapXNxv2ItxP/FS0hCZBwXYqucgSk= cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/tpu v1.6.1/go.mod h1:sOdcHVIgDEEOKuqUoi6Fq53MKHJAtOwtz0GuKsWSH3E= cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/trace v1.10.1/go.mod h1:gbtL94KE5AJLH3y+WVpfWILmqgc6dXcqgNXdOPAQTYk= cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.8.1/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= +cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.17.1/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/videointelligence v1.11.1/go.mod h1:76xn/8InyQHarjTWsBR058SmlPCwQjgcvoW0aZykOvo= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vision/v2 v2.7.2/go.mod h1:jKa8oSYBWhYiXarHPvP4USxYANYUEdEsQrloLjrSwJU= cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmmigration v1.7.1/go.mod h1:WD+5z7a/IpZ5bKK//YmT9E047AD+rjycCAvyMxGJbro= cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vmwareengine v0.4.1/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/vpcaccess v1.7.1/go.mod h1:FogoD46/ZU+JUBX9D606X21EnxiszYi2tArQwLY4SXs= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/webrisk v1.9.1/go.mod h1:4GCmXKcOa2BZcZPn6DCEvE7HypmEJcJkr4mtM+sqYPc= cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/websecurityscanner v1.6.1/go.mod h1:Njgaw3rttgRHXzwCB8kgCYqv5/rGpFCsBOvPbYgszpg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +cloud.google.com/go/workflows v1.11.1/go.mod h1:Z+t10G1wF7h8LgdY/EmRcQY8ptBD/nvofaL6FqlET6g= code.gitea.io/sdk/gitea v0.12.0/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= @@ -559,10 +760,11 @@ cosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s= cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= -cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= -cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= +cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= +cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= +cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca h1:msenprh2BLLRwNT7zN56TbBHOGk/7ARQckXHxXyvjoQ= +cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca/go.mod h1:PkIAKXZvaxrTRc++z53XMRvFk8AcGGWYHcMIPzVYX9c= cosmossdk.io/math v1.0.0-beta.3/go.mod h1:3LYasri3Zna4XpbrTNdKsWmD5fHHkaNAod/mNT9XdE4= cosmossdk.io/math v1.0.0-beta.4/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp9NnaM= cosmossdk.io/math v1.0.0-beta.6/go.mod h1:gUVtWwIzfSXqcOT+lBVz2jyjfua8DoBdzRsIyaUAT/8= @@ -659,7 +861,6 @@ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbt github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -685,7 +886,6 @@ github.com/Djarvur/go-err113 v0.0.0-20200410182137-af658d038157/go.mod h1:4UJr5H github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/Djarvur/go-err113 v0.1.0 h1:uCRZZOdMQ0TZPHYTdYpoC0bLYJKPEHPUJ8MeAa51lNU= github.com/Djarvur/go-err113 v0.1.0/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.2.0/go.mod h1:n/vLeA7V+QY84iYAGwMkkUUp9ooeuftMEvaDrSVch+Q= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= @@ -743,7 +943,6 @@ github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8 github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= -github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= @@ -789,7 +988,6 @@ github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:C github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= -github.com/alingse/asasalint v0.0.10/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= @@ -804,6 +1002,8 @@ github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kd github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= +github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= +github.com/apache/arrow/go/v12 v12.0.0/go.mod h1:d+tV/eHZZ7Dz7RPrFKtPK02tpr+c9/PEd/zm8mDS9Vg= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= @@ -946,7 +1146,6 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/bufbuild/buf v1.3.1/go.mod h1:CTRUb23N+zlm1U8ZIBKz0Sqluk++qQloB2i/MZNZHIs= github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0qLq0= github.com/bufbuild/buf v1.9.0/go.mod h1:1Q+rMHiMVcfgScEF/GOldxmu4o9TrQ2sQQh58K6MscE= github.com/bufbuild/connect-go v0.2.0/go.mod h1:4efZ2eXFENwd4p7tuLaL9m0qtTsCOzuBvrohvRGevDM= @@ -991,7 +1190,6 @@ github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= github.com/chavacava/garif v0.0.0-20221024190013-b3ef35877348 h1:cy5GCEZLUCshCGCRRUjxHrDUqkB4l5cuUt3ShEckQEo= github.com/chavacava/garif v0.0.0-20221024190013-b3ef35877348/go.mod h1:f/miWtG3SSuTxKsNK3o58H1xl+XV6ZIfbC6p7lPPB8U= @@ -1038,6 +1236,7 @@ github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= @@ -1065,7 +1264,6 @@ github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZ github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= github.com/cometbft/cometbft v0.34.27-alpha.1/go.mod h1:hct3hasQ2hIF3HoD7foVw4RaqTNSSeJ/lgcrVK6uDvs= -github.com/cometbft/cometbft v0.37.1/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= @@ -1263,12 +1461,9 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/atomicfile v0.2.6/go.mod h1:BRq8Une6ckFneYXZQ+kO7p1ZZP3I2fzVzf28JxrIkBc= -github.com/creachadair/command v0.0.0-20220426235536-a748effdf6a1/go.mod h1:bAM+qFQb/KwWyCc9MLC4U1jvn3XyakqP5QRkds5T6cY= github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= -github.com/creachadair/tomledit v0.0.22/go.mod h1:cIu/4x5L855oSRejIqr+WRFh+mv9g4fWLiUFaApYn/Y= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -1286,7 +1481,6 @@ github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1S github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= -github.com/daixiang0/gci v0.4.2/go.mod h1:d0f+IJhr9loBtIq+ebwhRoTt1LGbPH96ih8bKlsRT9E= github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= github.com/daixiang0/gci v0.9.1 h1:jBrwBmBZTDsGsXiaCTLIe9diotp1X4X64zodFrh7l+c= github.com/daixiang0/gci v0.9.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= @@ -1415,12 +1609,14 @@ github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPO github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= @@ -1467,7 +1663,6 @@ github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVB github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -1509,7 +1704,6 @@ github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJ github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-critic/go-critic v0.4.1/go.mod h1:7/14rZGnZbY6E38VEGk2kVhoq6itzc1E68facVDK23g= github.com/go-critic/go-critic v0.4.3/go.mod h1:j4O3D4RoIwRqlZw5jJpx0BNfXWWbpcJoKu5cYSe4YmQ= -github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= github.com/go-critic/go-critic v0.6.7 h1:1evPrElnLQ2LZtJfmNDzlieDhjnq36SLgNzisx06oPM= github.com/go-critic/go-critic v0.6.7/go.mod h1:fYZUijFdcnxgx6wPjQA2QEjIRaNCT0gO8bhexy6/QmE= @@ -1606,7 +1800,6 @@ github.com/go-toolsmith/astcopy v1.0.3 h1:r0bgSRlMOAgO+BdQnVAcpMSMkrQCnV6ZJmIkrJ github.com/go-toolsmith/astcopy v1.0.3/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= github.com/go-toolsmith/astequal v1.1.0 h1:kHKm1AWqClYn15R0K1KKE4RG614D46n+nqUQ06E1dTw= @@ -1749,7 +1942,6 @@ github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzr github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= github.com/golangci/golangci-lint v1.23.7/go.mod h1:g/38bxfhp4rI7zeWSxcdIeHTQGS58TCak8FYcyCmavQ= github.com/golangci/golangci-lint v1.27.0/go.mod h1:+eZALfxIuthdrHPtfM7w/R3POJLjHDfJJw8XZl9xOng= -github.com/golangci/golangci-lint v1.47.0/go.mod h1:3TZhfF5KolbIkXYjUFvER6G9CoxzLEaafr/u/QI1S5A= github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= github.com/golangci/golangci-lint v1.51.2 h1:yIcsT1X9ZYHdSpeWXRT1ORC/FPGSqDHbHsu9uk4FK7M= github.com/golangci/golangci-lint v1.51.2/go.mod h1:KH9Q7/3glwpYSknxUgUyLlAv46A8fsSKo1hH2wDvkr8= @@ -1766,7 +1958,6 @@ github.com/golangci/misspell v0.4.0/go.mod h1:W6O/bwV6lGDxUCChm2ykw9NQdd5bYd1Xkj github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= -github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= @@ -1846,6 +2037,10 @@ github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/rpmpack v0.0.0-20191226140753-aa36bfddb3a0/go.mod h1:RaTPr0KUf2K7fnZYLNDrr8rxAamWs3iNywJLtQ2AzBg= +github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM= +github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= @@ -1876,8 +2071,11 @@ github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/gax-go/v2 v2.7.1 h1:gF4c0zjUP2H/s/hEGyLA3I0fA2ZWjzYiONAD6cvPr8A= github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= @@ -2134,7 +2332,6 @@ github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7 github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= -github.com/jhump/protoreflect v1.11.1-0.20220213155251-0c2aedc66cf4/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= github.com/jhump/protoreflect v1.13.1-0.20220928232736-101791cb1b4c/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= @@ -2218,7 +2415,6 @@ github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwf github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.1/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8= github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= @@ -2391,8 +2587,9 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -2408,6 +2605,7 @@ github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOq github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= @@ -2423,7 +2621,6 @@ github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQ github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/mediocregopher/radix/v3 v3.8.0/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= github.com/mgechev/revive v1.2.5 h1:UF9AR8pOAuwNmhXj2odp4mxv9Nx2qUIwVz8ZsU+Mbec= github.com/mgechev/revive v1.2.5/go.mod h1:nFOXent79jMTISAfOAasKfy0Z2Ejq0WX7Qn/KAdYopI= @@ -2517,7 +2714,6 @@ github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinK github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= -github.com/mroth/weightedrand v0.4.1/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= @@ -2566,7 +2762,6 @@ github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/networkplumbing/go-nft v0.2.0/go.mod h1:HnnM+tYvlGAsMU7yoYwXEVLLiDW9gdMmb5HoGcwpuQs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.8.1/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= github.com/nishanths/exhaustive v0.9.5 h1:TzssWan6orBiLYVqewCG8faud9qlFntJE30ACpzmGME= github.com/nishanths/exhaustive v0.9.5/go.mod h1:IbwrGdVMizvDcIxPYGVdQn5BqWJaOwpCvg4RGb8r/TA= @@ -2578,11 +2773,9 @@ github.com/nunnatsa/ginkgolinter v0.8.1/go.mod h1:FYYLtszIdmzCH8XMaMPyxPVXZ7VCaI 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/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b/go.mod h1:TLJifjWF6eotcfzDjKZsDqWJ+73Uvj/N85MvVyrvynM= 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/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/oklog/ulid/v2 v2.1.0/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -2749,7 +2942,6 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3/go.mod h1:q5NXNGzqj5uPnVuhGkZfmgHqNUhf15VLi6L9kW0VEc0= github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4/go.mod h1:RdR1j20Aj5pB6+fw6Y9Ur7lMHpegTEjY1vc19hEZL40= github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= -github.com/polyfloyd/go-errorlint v1.0.0/go.mod h1:KZy4xxPJyy88/gldCe5OdW6OQRtNO3EZE7hXzmnebgA= github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= github.com/polyfloyd/go-errorlint v1.1.0 h1:VKoEFg5yxSgJ2yFPVhxW7oGz+f8/OVcuMeNvcPIi6Eg= github.com/polyfloyd/go-errorlint v1.1.0/go.mod h1:Uss7Bc/izYG0leCMRx3WVlrpqWedSZk7V/FUQW6VJ6U= @@ -2828,16 +3020,13 @@ github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3 github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= github.com/quasilyte/go-ruleguard v0.1.2-0.20200318202121-b00d7a75d3d8/go.mod h1:CGFX09Ci3pq9QZdj86B+VGIdNj4VyCo2iPOGS9esB/k= github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= github.com/quasilyte/go-ruleguard v0.3.19 h1:tfMnabXle/HzOb5Xe9CUZYWXKfkS1KwRmZyPmD9nVcc= github.com/quasilyte/go-ruleguard v0.3.19/go.mod h1:lHSn69Scl48I7Gt9cX3VrbsZYvYiBYszZOZW4A+oTEw= github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo= github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= @@ -2859,6 +3048,7 @@ github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5 github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= @@ -2896,7 +3086,6 @@ github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfF github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryancurrah/gomodguard v1.0.4/go.mod h1:9T/Cfuxs5StfsocWr4WzDL36HqnX0fVb9d5fSEaLhoE= github.com/ryancurrah/gomodguard v1.1.0/go.mod h1:4O8tr7hBODaGE6VIhfJDHcwzh5GUccKSJBU0UMXJFVM= -github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= github.com/ryancurrah/gomodguard v1.3.0 h1:q15RT/pd6UggBXVBuLps8BXRvl5GPBcwVA7BJHMLuTw= github.com/ryancurrah/gomodguard v1.3.0/go.mod h1:ggBxb3luypPEzqVtq33ee7YSN35V28XeGnid8dnni50= @@ -2935,7 +3124,6 @@ github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod github.com/securego/gosec v0.0.0-20200103095621-79fbf3af8d83/go.mod h1:vvbZ2Ae7AzSq3/kywjUDxSNq2SJ27RxCz2un0H3ePqE= github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A= github.com/securego/gosec/v2 v2.3.0/go.mod h1:UzeVyUXbxukhLeHKV3VVqo7HdoQR9MrRfFmZYotn8ME= -github.com/securego/gosec/v2 v2.12.0/go.mod h1:iTpT+eKTw59bSgklBHlSnH5O2tNygHMDxfvMubA4i7I= github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= github.com/securego/gosec/v2 v2.15.0 h1:v4Ym7FF58/jlykYmmhZ7mTm7FQvN/setNm++0fgIAtw= github.com/securego/gosec/v2 v2.15.0/go.mod h1:VOjTrZOkUtSDt2QLSJmQBMWnvwiQPEjg0l+5juIqGk8= @@ -2950,7 +3138,6 @@ github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqP github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil/v3 v3.22.6/go.mod h1:EdIubSnZhbAvBS1yJ7Xi+AShB/hxwLHOMz4MCYz7yMs= github.com/shirou/gopsutil/v3 v3.22.8/go.mod h1:s648gW4IywYzUfE/KjXxUsqrqx/T2xO5VqOXxONeRfI= github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= @@ -2972,10 +3159,8 @@ github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0 github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= -github.com/sivchari/nosnakecase v1.5.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= -github.com/sivchari/tenv v1.6.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/sivchari/tenv v1.7.1 h1:PSpuD4bu6fSmtWMxSGWcvqUUgIn7k3yOJhOIzVWn8Ak= github.com/sivchari/tenv v1.7.1/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= @@ -3104,7 +3289,6 @@ github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7 github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= @@ -3132,12 +3316,9 @@ github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxm github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg= github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ= github.com/tendermint/tendermint v0.34.11/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= -github.com/tendermint/tendermint v0.35.9/go.mod h1:FYvzUDkmVv1awfFl9V85yl5NKyjxz6XLZGX132+ftAY= github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI= github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= -github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= -github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag= @@ -3163,7 +3344,6 @@ github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiToc github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= -github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk= github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= @@ -3175,14 +3355,12 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.6.2/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= github.com/tomarrell/wrapcheck/v2 v2.8.0 h1:qDzbir0xmoE+aNxGCPrn+rUSxAX+nG6vREgbbXAR81I= github.com/tomarrell/wrapcheck/v2 v2.8.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= github.com/tommy-muehle/go-mnd v1.1.1/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= -github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tonistiigi/fsutil v0.0.0-20201103201449-0834f99b7b85/go.mod h1:a7cilN64dG941IOXfhJhlH0qB92hxJ9A1ewrdUmJ6xo= @@ -3300,7 +3478,6 @@ github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWp github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= -gitlab.com/bosi/decorder v0.2.2/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -3476,6 +3653,7 @@ golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -3491,8 +3669,9 @@ golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80 golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -3569,8 +3748,9 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -3681,8 +3861,9 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -3719,8 +3900,9 @@ golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= -golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -3888,7 +4070,6 @@ golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -3933,8 +4114,9 @@ golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -3950,8 +4132,9 @@ golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -3968,8 +4151,9 @@ golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -3984,6 +4168,7 @@ golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -4122,8 +4307,9 @@ golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +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= @@ -4217,8 +4403,14 @@ google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/api v0.114.0 h1:1xQPji6cO2E2vLiI+C/XiFAnsn1WV3mjaEwGLhi3grE= +google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= +google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E= +google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= +google.golang.org/api v0.125.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -4389,9 +4581,35 @@ google.golang.org/genproto v0.0.0-20230202175211-008b39050e57/go.mod h1:RGgjbofJ google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -4448,9 +4666,10 @@ google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsA google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= -google.golang.org/grpc v1.56.1 h1:z0dNfjIl0VpaZ9iSVjA6daGatAYwPGstTjt5vkRMFkQ= -google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= +google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -4471,8 +4690,10 @@ google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.2-0.20230208135220-49eaa78c6c9c/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.2-0.20230222093303-bc1253ad3743/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -4530,7 +4751,6 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -4543,8 +4763,9 @@ gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= gotest.tools/v3 v3.1.0/go.mod h1:fHy7eyTmJFO5bQbUsEGQ1v4m2J3Jz9eWL54TP2/ZuYQ= gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= gotest.tools/v3 v3.3.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= -gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= +gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -4557,7 +4778,6 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -honnef.co/go/tools v0.3.2/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= honnef.co/go/tools v0.4.2 h1:6qXr+R5w+ktL5UkwEbPp+fEvfyoMPche6GkOpGHZcLc= honnef.co/go/tools v0.4.2/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA= @@ -4643,12 +4863,17 @@ modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI= modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= @@ -4659,6 +4884,11 @@ modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= +modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA= +modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0= +modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= +modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= +modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= @@ -4666,18 +4896,24 @@ modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6 modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= +modernc.org/sqlite v1.18.2/go.mod h1:kvrTLEWgxUcHa2GfHBQtanR1H9ht3hTJNtKpzH9k1u0= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/tcl v1.13.2/go.mod h1:7CLiGIPo1M8Rv1Mitpv5akc2+8fxUd2y2UzC/MfMzy0= modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= moul.io/http2curl v1.0.0/go.mod h1:f6cULg+e4Md/oW1cYmwW4IWQOVl2lGbmCNGOHvzX2kE= -mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= @@ -4686,7 +4922,6 @@ mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphD mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7/go.mod h1:HGC5lll35J70Y5v7vCGb9oLhHoScFwkHDJm/05RdSTc= -mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d h1:3rvTIIM22r9pvXk+q3swxUQAQOxksVMGK7sml4nG57w= mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d/go.mod h1:IeHQjmn6TOD+e4Z3RFiZMMsLVL+A96Nvptar8Fj71is= @@ -4695,7 +4930,6 @@ nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= -pgregory.net/rapid v0.4.8/go.mod h1:Z5PbWqjvWR1I3UGjvboUuan4fe4ZYEYNLNQLExzCoUs= pgregory.net/rapid v0.5.2/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= pgregory.net/rapid v0.5.3/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= From 3bf5a606d74f16fe8330982f7a9f654ba7055559 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 2 Aug 2023 01:35:13 +0530 Subject: [PATCH 18/90] sdk replace removed --- go.mod | 15 +- go.sum | 2680 ++------------------------------------------------------ 2 files changed, 100 insertions(+), 2595 deletions(-) diff --git a/go.mod b/go.mod index d7fbf5099..822057b8e 100644 --- a/go.mod +++ b/go.mod @@ -319,13 +319,8 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) -replace ( - // github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 - github.com/cosmos/cosmos-sdk => /Users/chandragupta/go/src/github.com/cosmos/cosmos-sdk - //breaking changes - // github.com/cosmos/iavl v0.19.5 => github.com/cosmos/iavl v0.19.4 - github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 -// Informal Tendermint fork to be replaced with skip-mev tendermint -// github.com/tendermint/tendermint => github.com/skip-mev/mev-tendermint v0.34.24-mev.18 -// google.golang.org/grpc => google.golang.org/grpc v1.33.2 -) +// github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 +// github.com/cosmos/cosmos-sdk => /Users/chandragupta/go/src/github.com/cosmos/cosmos-sdk +//breaking changes +// github.com/cosmos/iavl v0.19.5 => github.com/cosmos/iavl v0.19.4 +replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 diff --git a/go.sum b/go.sum index b30fbbfa4..811516f00 100644 --- a/go.sum +++ b/go.sum @@ -1,19 +1,10 @@ 4d63.com/gocheckcompilerdirectives v1.2.1 h1:AHcMYuw56NPjq/2y615IGg2kYkBdTvOaojYCBcRE7MA= 4d63.com/gocheckcompilerdirectives v1.2.1/go.mod h1:yjDJSxmDTtIHHCqX0ufRYZDL6vQtMG7tJdKVeWwsqvs= -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= 4d63.com/gochecknoglobals v0.2.1 h1:1eiorGsgHOFOuoOiJDy2psSrQbRdIHrlge0IJIkUgDc= 4d63.com/gochecknoglobals v0.2.1/go.mod h1:KRE8wtJB3CXCsb1xy421JfTHIIbmT3U5ruxw2Qu8fSU= -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= -bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= -cloud.google.com/go v0.25.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.2/go.mod h1:H8IAquKe2L30IxoupDgqTaQvKSwF/c8prYHynGIWQbA= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= @@ -27,7 +18,6 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= @@ -43,110 +33,29 @@ cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aD cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= -cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= -cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= -cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= -cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= -cloud.google.com/go/accessapproval v1.7.1/go.mod h1:JYczztsHRMK7NTXb6Xw+dwbs/WnOJxbo/2mTI+Kgg68= -cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= -cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= -cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= -cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= -cloud.google.com/go/accesscontextmanager v1.8.0/go.mod h1:uI+AI/r1oyWK99NN8cQ3UK76AMelMzgZCvJfsi2c+ps= -cloud.google.com/go/accesscontextmanager v1.8.1/go.mod h1:JFJHfvuaTC+++1iL1coPiG1eu5D24db2wXCDWDjIrxo= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= -cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= -cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= -cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= -cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= -cloud.google.com/go/aiplatform v1.45.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= -cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= -cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= -cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= -cloud.google.com/go/analytics v0.21.2/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= -cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= -cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= -cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= -cloud.google.com/go/apigateway v1.6.1/go.mod h1:ufAS3wpbRjqfZrzpvLC2oh0MFlpRJm2E/ts25yyqmXA= -cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= -cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= -cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= -cloud.google.com/go/apigeeconnect v1.6.1/go.mod h1:C4awq7x0JpLtrlQCr8AzVIzAaYgngRqWf9S5Uhg+wWs= -cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= -cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= -cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= -cloud.google.com/go/apigeeregistry v0.7.1/go.mod h1:1XgyjZye4Mqtw7T9TsY4NW10U7BojBvG4RMD+vRDrIw= -cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= -cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= -cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= -cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= -cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= -cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= -cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= -cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= -cloud.google.com/go/appengine v1.8.1/go.mod h1:6NJXGLVhZCN9aQ/AEDvmfzKEfoYBlfB80/BHiKVputY= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= -cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= -cloud.google.com/go/area120 v0.8.1/go.mod h1:BVfZpGpB7KFVNxPiQBuHkX6Ed0rS51xIgmGyjrAfzsg= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= -cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= -cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= -cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= -cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= -cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= -cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= -cloud.google.com/go/artifactregistry v1.14.1/go.mod h1:nxVdG19jTaSTu7yA7+VbWL346r3rIdkZ142BSQqhn5E= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= -cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= -cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= -cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= -cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= -cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= -cloud.google.com/go/asset v1.14.1/go.mod h1:4bEJ3dnHCqWCDbWJ/6Vn7GVI9LerSi7Rfdi03hd+WTQ= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= -cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= -cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= -cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/assuredworkloads v1.11.1/go.mod h1:+F04I52Pgn5nmPG36CWFtxmav6+7Q+c5QyJoL18Lry0= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= -cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= -cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= -cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= -cloud.google.com/go/automl v1.13.1/go.mod h1:1aowgAHWYZU27MybSCFiukPO7xnyawv7pt3zK4bheQE= -cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= -cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= -cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= -cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= -cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= -cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= -cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= -cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= -cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= -cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= -cloud.google.com/go/beyondcorp v0.6.1/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -154,53 +63,13 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= -cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= -cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= -cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= -cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= -cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= -cloud.google.com/go/bigquery v1.52.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= -cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= -cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= -cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= -cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= -cloud.google.com/go/billing v1.16.0/go.mod h1:y8vx09JSSJG02k5QxbycNRrN7FGZB6F3CAcgum7jvGA= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= -cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= -cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= -cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= -cloud.google.com/go/binaryauthorization v1.6.1/go.mod h1:TKt4pa8xhowwffiBmbrbcxijJRZED4zrqnwZ1lKH51U= -cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= -cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= -cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= -cloud.google.com/go/certificatemanager v1.7.1/go.mod h1:iW8J3nG6SaRYImIa+wXQ0g8IgoofDFRp5UMzaNk1UqI= -cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= -cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= -cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= -cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= -cloud.google.com/go/channel v1.16.0/go.mod h1:eN/q1PFSl5gyu0dYdmxNXscY/4Fi7ABmeHCJNf/oHmc= -cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= -cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= -cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= -cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= -cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= -cloud.google.com/go/cloudbuild v1.10.1/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= -cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= -cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= -cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= -cloud.google.com/go/clouddms v1.6.1/go.mod h1:Ygo1vL52Ov4TBZQquhz5fiw2CQ58gvu+PlS6PVXCpZI= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= -cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= -cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= -cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= -cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= -cloud.google.com/go/cloudtasks v1.11.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= @@ -208,446 +77,102 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= -cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= -cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= -cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= -cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= -cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= -cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= -cloud.google.com/go/contactcenterinsights v1.9.1/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= -cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= -cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= -cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= -cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= -cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= -cloud.google.com/go/container v1.22.1/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= -cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= -cloud.google.com/go/containeranalysis v0.10.1/go.mod h1:Ya2jiILITMY68ZLPaogjmOMNkwsDrWBSTyBubGXO7j0= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= -cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= -cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= -cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= -cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= -cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= -cloud.google.com/go/datacatalog v1.14.0/go.mod h1:h0PrGtlihoutNMp/uvwhawLQ9+c63Kz65UFqh49Yo+E= -cloud.google.com/go/datacatalog v1.14.1/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= -cloud.google.com/go/dataflow v0.9.1/go.mod h1:Wp7s32QjYuQDWqJPFFlnBKhkAtiFpMTdg00qGbnIHVw= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= -cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= -cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= -cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= -cloud.google.com/go/dataform v0.8.1/go.mod h1:3BhPSiw8xmppbgzeBbmDvmSWlwouuJkXsXsb8UBih9M= -cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= -cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= -cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= -cloud.google.com/go/datafusion v1.7.1/go.mod h1:KpoTBbFmoToDExJUso/fcCiguGDk7MEzOWXUsJo0wsI= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= -cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= -cloud.google.com/go/datalabeling v0.8.1/go.mod h1:XS62LBSVPbYR54GfYQsPXZjTW8UxCK2fkDciSrpRFdY= -cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= -cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= -cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= -cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= -cloud.google.com/go/dataplex v1.8.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= -cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= -cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= -cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= -cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= -cloud.google.com/go/dataqna v0.8.1/go.mod h1:zxZM0Bl6liMePWsHA8RMGAfmTG34vJMapbHAxQ5+WA8= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= -cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= -cloud.google.com/go/datastore v1.12.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= -cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= -cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= -cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= -cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= -cloud.google.com/go/datastream v1.9.1/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= -cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= -cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= -cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= -cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= -cloud.google.com/go/deploy v1.11.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= -cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= -cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= -cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= -cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= -cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= -cloud.google.com/go/dialogflow v1.38.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= -cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= -cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= -cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= -cloud.google.com/go/dlp v1.10.1/go.mod h1:IM8BWz1iJd8njcNcG0+Kyd9OPnqnRNkDV8j42VT5KOI= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= -cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= -cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= -cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= -cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= -cloud.google.com/go/documentai v1.20.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= -cloud.google.com/go/domains v0.9.1/go.mod h1:aOp1c0MbejQQ2Pjf1iJvnVyT+z6R6s8pX66KaCSDYfE= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= -cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= -cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= -cloud.google.com/go/edgecontainer v1.1.1/go.mod h1:O5bYcS//7MELQZs3+7mabRqoWQhXCzenBu0R8bz2rwk= -cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= -cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= -cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= -cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= -cloud.google.com/go/essentialcontacts v1.6.2/go.mod h1:T2tB6tX+TRak7i88Fb2N9Ok3PvY3UNbUsMag9/BARh4= -cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= -cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= -cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= -cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= -cloud.google.com/go/eventarc v1.12.1/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= -cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= -cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= -cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= -cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= -cloud.google.com/go/filestore v1.7.1/go.mod h1:y10jsorq40JJnjR/lQ8AfFbbcGlw3g+Dp8oN7i7FjV4= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= -cloud.google.com/go/firestore v1.8.0/go.mod h1:r3KB8cAdRIe8znzoPWLw8S6gpDVd9treohhn8b09424= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= -cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= -cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= -cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= -cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= -cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= -cloud.google.com/go/functions v1.15.1/go.mod h1:P5yNWUTkyU+LvW/S9O6V+V423VZooALQlqoXdoPz5AE= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= -cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= -cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= -cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= -cloud.google.com/go/gaming v1.10.1/go.mod h1:XQQvtfP8Rb9Rxnxm5wFVpAp9zCQkJi2bLIb7iHGwB3s= -cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= -cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= -cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= -cloud.google.com/go/gkeconnect v0.8.1/go.mod h1:KWiK1g9sDLZqhxB2xEuPV8V9NYzrqTUmQR9shJHpOZw= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= -cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= -cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= -cloud.google.com/go/gkehub v0.14.1/go.mod h1:VEXKIJZ2avzrbd7u+zeMtW00Y8ddk/4V9511C9CQGTY= -cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= -cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= -cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= -cloud.google.com/go/gkemulticloud v0.6.1/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= -cloud.google.com/go/grafeas v0.3.0/go.mod h1:P7hgN24EyONOTMyeJH6DxG4zD7fwiYa5Q6GUgyFSOU8= -cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= -cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= -cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= -cloud.google.com/go/gsuiteaddons v1.6.1/go.mod h1:CodrdOqRZcLp5WOwejHWYBjZvfY0kOphkAKpF/3qdZY= -cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= -cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= -cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= -cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= -cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= -cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= -cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= -cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= -cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= -cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= -cloud.google.com/go/iap v1.8.1/go.mod h1:sJCbeqg3mvWLqjZNsI6dfAtbbV1DL2Rl7e1mTyXYREQ= -cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= -cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= -cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= -cloud.google.com/go/ids v1.4.1/go.mod h1:np41ed8YMU8zOgv53MMMoCntLTn2lF+SUzlM+O3u/jw= -cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= -cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= -cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= -cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= -cloud.google.com/go/iot v1.7.1/go.mod h1:46Mgw7ev1k9KqK1ao0ayW9h0lI+3hxeanz+L1zmbbbk= -cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= -cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= -cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= -cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= -cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= -cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= -cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= -cloud.google.com/go/kms v1.11.0/go.mod h1:hwdiYC0xjnWsKQQCQQmIQnS9asjYVSK6jtXm+zFqXLM= -cloud.google.com/go/kms v1.12.1/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= -cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= -cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= -cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= -cloud.google.com/go/language v1.10.1/go.mod h1:CPp94nsdVNiQEt1CNjF5WkTcisLiHPyIbMhvR8H2AW0= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= -cloud.google.com/go/lifesciences v0.9.1/go.mod h1:hACAOd1fFbCGLr/+weUKRAJas82Y4vrL3O5326N//Wc= -cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= -cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= -cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= -cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= -cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= -cloud.google.com/go/longrunning v0.4.2/go.mod h1:OHrnaYyLUV6oqwh0xiS7e5sLQhP1m0QU9R+WhGDMgIQ= -cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc= -cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= -cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= -cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= -cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= -cloud.google.com/go/managedidentities v1.6.1/go.mod h1:h/irGhTN2SkZ64F43tfGPMbHnypMbu4RB3yl8YcuEak= -cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= -cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= -cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= -cloud.google.com/go/mediatranslation v0.8.1/go.mod h1:L/7hBdEYbYHQJhX2sldtTO5SZZ1C1vkapubj0T2aGig= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= -cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= -cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= -cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= -cloud.google.com/go/memcache v1.10.1/go.mod h1:47YRQIarv4I3QS5+hoETgKO40InqzLP6kpNLvyXuyaA= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= -cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= -cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= -cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= -cloud.google.com/go/metastore v1.11.1/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= -cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= -cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= -cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= -cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= -cloud.google.com/go/monitoring v1.15.1/go.mod h1:lADlSAlFdbqQuwwpaImhsJXu1QSdd3ojypXrFSMr2rM= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= -cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= -cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= -cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= -cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= -cloud.google.com/go/networkconnectivity v1.12.1/go.mod h1:PelxSWYM7Sh9/guf8CFhi6vIqf19Ir/sbfZRUwXh92E= -cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= -cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= -cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= -cloud.google.com/go/networkmanagement v1.8.0/go.mod h1:Ho/BUGmtyEqrttTgWEe7m+8vDdK74ibQc+Be0q7Fof0= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= -cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= -cloud.google.com/go/networksecurity v0.9.1/go.mod h1:MCMdxOKQ30wsBI1eI659f9kEp4wuuAueoC9AJKSPWZQ= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= -cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= -cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= -cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= -cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= -cloud.google.com/go/notebooks v1.9.1/go.mod h1:zqG9/gk05JrzgBt4ghLzEepPHNwE5jgPcHZRKhlC1A8= -cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= -cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= -cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= -cloud.google.com/go/optimization v1.4.1/go.mod h1:j64vZQP7h9bO49m2rVaTVoNM0vEBEN5eKPUPbZyXOrk= -cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= -cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= -cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= -cloud.google.com/go/orchestration v1.8.1/go.mod h1:4sluRF3wgbYVRqz7zJ1/EUNc90TTprliq9477fGobD8= -cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= -cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= -cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= -cloud.google.com/go/orgpolicy v1.11.0/go.mod h1:2RK748+FtVvnfuynxBzdnyu7sygtoZa1za/0ZfpOs1M= -cloud.google.com/go/orgpolicy v1.11.1/go.mod h1:8+E3jQcpZJQliP+zaFfayC2Pg5bmhuLK755wKhIIUCE= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= -cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= -cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= -cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= -cloud.google.com/go/osconfig v1.12.0/go.mod h1:8f/PaYzoS3JMVfdfTubkowZYGmAhUCjjwnjqWI7NVBc= -cloud.google.com/go/osconfig v1.12.1/go.mod h1:4CjBxND0gswz2gfYRCUoUzCm9zCABp91EeTtWXyz0tE= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= -cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= -cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= -cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= -cloud.google.com/go/oslogin v1.10.1/go.mod h1:x692z7yAue5nE7CsSnoG0aaMbNoRJRXO4sn73R+ZqAs= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= -cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= -cloud.google.com/go/phishingprotection v0.8.1/go.mod h1:AxonW7GovcA8qdEk13NfHq9hNx5KPtfxXNeUxTDxB6I= -cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= -cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= -cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= -cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= -cloud.google.com/go/policytroubleshooter v1.7.1/go.mod h1:0NaT5v3Ag1M7U5r0GfDCpUFkWd9YqpubBWsQlhanRv0= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= -cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= -cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= -cloud.google.com/go/privatecatalog v0.9.1/go.mod h1:0XlDXW2unJXdf9zFz968Hp35gl/bhF4twwpXZAW50JA= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= -cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= -cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= -cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= -cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= -cloud.google.com/go/pubsub v1.32.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= -cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= -cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= -cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= -cloud.google.com/go/pubsublite v1.8.1/go.mod h1:fOLdU4f5xldK4RGJrBMm+J7zMWNj/k4PxwEZXy39QS0= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= -cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= -cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= -cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= -cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= -cloud.google.com/go/recaptchaenterprise/v2 v2.7.2/go.mod h1:kR0KjsJS7Jt1YSyWFkseQ756D45kaYNTlDPPaRAvDBU= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= -cloud.google.com/go/recommendationengine v0.8.1/go.mod h1:MrZihWwtFYWDzE6Hz5nKcNz3gLizXVIDI/o3G1DLcrE= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= -cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= -cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= -cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= -cloud.google.com/go/recommender v1.10.1/go.mod h1:XFvrE4Suqn5Cq0Lf+mCP6oBHD/yRMA8XxP5sb7Q7gpA= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= -cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= -cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= -cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= -cloud.google.com/go/redis v1.13.1/go.mod h1:VP7DGLpE91M6bcsDdMuyCm2hIpB6Vp2hI090Mfd1tcg= -cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= -cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= -cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= -cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= -cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= -cloud.google.com/go/resourcemanager v1.9.1/go.mod h1:dVCuosgrh1tINZ/RwBufr8lULmWGOkPS8gL5gqyjdT8= -cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= -cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= -cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= -cloud.google.com/go/resourcesettings v1.6.1/go.mod h1:M7mk9PIZrC5Fgsu1kZJci6mpgN8o0IUzVx3eJU3y4Jw= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= -cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= -cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= -cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= -cloud.google.com/go/retail v1.14.1/go.mod h1:y3Wv3Vr2k54dLNIrCzenyKG8g8dhvhncT2NcNjb/6gE= -cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= -cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= -cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= -cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= -cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= -cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= -cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= -cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= -cloud.google.com/go/scheduler v1.10.1/go.mod h1:R63Ldltd47Bs4gnhQkmNDse5w8gBRrhObZ54PxgR2Oo= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= -cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= -cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= -cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= -cloud.google.com/go/secretmanager v1.11.1/go.mod h1:znq9JlXgTNdBeQk9TBW/FnR/W4uChEKGeqQWAJ8SXFw= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= -cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= -cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= -cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= -cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= -cloud.google.com/go/security v1.15.1/go.mod h1:MvTnnbsWnehoizHi09zoiZob0iCHVcL4AUBj76h9fXA= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= -cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= -cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= -cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= -cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= -cloud.google.com/go/securitycenter v1.23.0/go.mod h1:8pwQ4n+Y9WCWM278R8W3nF65QtY172h4S8aXyI9/hsQ= -cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= -cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= -cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= -cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= -cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= -cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= -cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= -cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= -cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= -cloud.google.com/go/servicedirectory v1.10.1/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= -cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= -cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= -cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= -cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= -cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= -cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= -cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= -cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= -cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= -cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= -cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= -cloud.google.com/go/shell v1.7.1/go.mod h1:u1RaM+huXFaTojTbW4g9P5emOrrmLE69KrxqQahKn4g= -cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= -cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= -cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= -cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= -cloud.google.com/go/spanner v1.47.0/go.mod h1:IXsJwVW2j4UKs0eYDqodab6HgGuA1bViSqW4uH9lfUI= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= -cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= -cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= -cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= -cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= -cloud.google.com/go/speech v1.17.1/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -657,117 +182,30 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= -cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= -cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= -cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= -cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= -cloud.google.com/go/storagetransfer v1.10.0/go.mod h1:DM4sTlSmGiNczmV6iZyceIh2dbs+7z2Ayg6YAiQlYfA= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= -cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= -cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= -cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= -cloud.google.com/go/talent v1.6.2/go.mod h1:CbGvmKCG61mkdjcqTcLOkb2ZN1SrQI8MDyma2l7VD24= -cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= -cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= -cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= -cloud.google.com/go/texttospeech v1.7.1/go.mod h1:m7QfG5IXxeneGqTapXNxv2ItxP/FS0hCZBwXYqucgSk= -cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= -cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= -cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= -cloud.google.com/go/tpu v1.6.1/go.mod h1:sOdcHVIgDEEOKuqUoi6Fq53MKHJAtOwtz0GuKsWSH3E= -cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= -cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= -cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= -cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= -cloud.google.com/go/trace v1.10.1/go.mod h1:gbtL94KE5AJLH3y+WVpfWILmqgc6dXcqgNXdOPAQTYk= -cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= -cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= -cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= -cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= -cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= -cloud.google.com/go/translate v1.8.1/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= -cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= -cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= -cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= -cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= -cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= -cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= -cloud.google.com/go/video v1.17.1/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= -cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= -cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= -cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= -cloud.google.com/go/videointelligence v1.11.1/go.mod h1:76xn/8InyQHarjTWsBR058SmlPCwQjgcvoW0aZykOvo= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= -cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= -cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= -cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= -cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= -cloud.google.com/go/vision/v2 v2.7.2/go.mod h1:jKa8oSYBWhYiXarHPvP4USxYANYUEdEsQrloLjrSwJU= -cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= -cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= -cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= -cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= -cloud.google.com/go/vmmigration v1.7.1/go.mod h1:WD+5z7a/IpZ5bKK//YmT9E047AD+rjycCAvyMxGJbro= -cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= -cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= -cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= -cloud.google.com/go/vmwareengine v0.4.1/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= -cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= -cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= -cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= -cloud.google.com/go/vpcaccess v1.7.1/go.mod h1:FogoD46/ZU+JUBX9D606X21EnxiszYi2tArQwLY4SXs= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= -cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= -cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= -cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= -cloud.google.com/go/webrisk v1.9.1/go.mod h1:4GCmXKcOa2BZcZPn6DCEvE7HypmEJcJkr4mtM+sqYPc= -cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= -cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= -cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= -cloud.google.com/go/websecurityscanner v1.6.1/go.mod h1:Njgaw3rttgRHXzwCB8kgCYqv5/rGpFCsBOvPbYgszpg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= -cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= -cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= -cloud.google.com/go/workflows v1.11.1/go.mod h1:Z+t10G1wF7h8LgdY/EmRcQY8ptBD/nvofaL6FqlET6g= -code.gitea.io/sdk/gitea v0.12.0/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= -contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= -contrib.go.opencensus.io/exporter/ocagent v0.5.0/go.mod h1:ImxhfLRpxoYiSq891pBrLVhN+qmP8BTVvdH2YLs7Gl0= -contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= -contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= -contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= -cosmossdk.io/api v0.2.1/go.mod h1:kNpfY0UY7Cz4ZuLJ4hm9auUGfmj23UFpOQ/Bo8IKCFw= -cosmossdk.io/api v0.2.6/go.mod h1:u/d+GAxil0nWpl1XnQL8nkziQDIWuBDhv8VnDm/s6dI= -cosmossdk.io/api v0.3.0/go.mod h1:2HDRQHwVIyklENrrXko0E/waZrRFZWHhPyhcBO4qHq4= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= -cosmossdk.io/core v0.3.2/go.mod h1:CO7vbe+evrBvHc0setFHL/u7nlY7HJGzdRSBkT/sirc= -cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= cosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s= cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= -cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca h1:msenprh2BLLRwNT7zN56TbBHOGk/7ARQckXHxXyvjoQ= cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca/go.mod h1:PkIAKXZvaxrTRc++z53XMRvFk8AcGGWYHcMIPzVYX9c= -cosmossdk.io/math v1.0.0-beta.3/go.mod h1:3LYasri3Zna4XpbrTNdKsWmD5fHHkaNAod/mNT9XdE4= -cosmossdk.io/math v1.0.0-beta.4/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp9NnaM= -cosmossdk.io/math v1.0.0-beta.6/go.mod h1:gUVtWwIzfSXqcOT+lBVz2jyjfua8DoBdzRsIyaUAT/8= cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff h1:P1ialzTepD1oxdNPYc5N8Eggq3RdejZq3cJs8YYMs9Y= @@ -775,304 +213,129 @@ cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff/go.mod h1:AKzx6Mb544LjJ9R cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw= git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= 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/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= -github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= github.com/Abirdcfly/dupword v0.0.9 h1:MxprGjKq3yDBICXDgEEsyGirIXfMYXkLNT/agPsE1tk= github.com/Abirdcfly/dupword v0.0.9/go.mod h1:PzmHVLLZ27MvHSzV7eFmMXSFArWXZPZmfuuziuUrf2g= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= -github.com/AkihiroSuda/containerd-fuse-overlayfs v1.0.0/go.mod h1:0mMDvQFeLbbn1Wy8P2j3hwFhqBq+FKn8OZPno8WLmp8= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= -github.com/Azure/azure-amqp-common-go/v2 v2.1.0/go.mod h1:R8rea+gJRuJR6QxTir/XuEd+YuKoUiazDC/N96FiDEU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v19.1.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v29.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v30.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v35.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v38.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v42.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= -github.com/Azure/azure-service-bus-go v0.9.1/go.mod h1:yzBx6/BUGfjfeqbRZny9AQIbIe3AcV9WZbAdpkoXOa0= -github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v10.15.5+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v12.0.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v14.1.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= -github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= -github.com/Azure/go-autorest/autorest v0.10.2/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= -github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= -github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= -github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= -github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= -github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= -github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= -github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= -github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= -github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= -github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= -github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= 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/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= -github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= -github.com/CloudyKit/jet/v6 v6.1.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= github.com/CosmWasm/wasmd v0.40.2 h1:GSDHIaeJI7fcDF5mkzSXQI5IZLtvpNq5t3TjJ9bDpPw= github.com/CosmWasm/wasmd v0.40.2/go.mod h1:vqI238yb4D6aNuigS8mCqTyyCV9HN5eBEZARKRoK3ts= github.com/CosmWasm/wasmvm v1.2.4 h1:6OfeZuEcEH/9iqwrg2pkeVtDCkMoj9U6PpKtcrCyVrQ= github.com/CosmWasm/wasmvm v1.2.4/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Djarvur/go-err113 v0.0.0-20200410182137-af658d038157/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/Djarvur/go-err113 v0.1.0 h1:uCRZZOdMQ0TZPHYTdYpoC0bLYJKPEHPUJ8MeAa51lNU= github.com/Djarvur/go-err113 v0.1.0/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= -github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= -github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= -github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= -github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.0.3/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.15-0.20200908182639-5b44b70ab3ab/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= 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/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= -github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= -github.com/Microsoft/hcsshim v0.8.10/go.mod h1:g5uw8EV2mAlzqe94tfNBNdr89fnbD/n3HV0OhsddkmM= -github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= -github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= -github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= -github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= -github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= -github.com/Microsoft/hcsshim v0.9.3/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= -github.com/Microsoft/hcsshim v0.9.4/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= -github.com/Microsoft/hcsshim/test v0.0.0-20200826032352-301c83a30e7c/go.mod h1:30A5igQ91GEmhYJF8TaRP79pMBOYynRsyOByfVV0dU4= -github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= -github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= 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/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= 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/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= -github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= -github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= -github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= -github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= 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= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= -github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= -github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= -github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= -github.com/apache/arrow/go/v12 v12.0.0/go.mod h1:d+tV/eHZZ7Dz7RPrFKtPK02tpr+c9/PEd/zm8mDS9Vg= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= -github.com/apex/log v1.1.4/go.mod h1:AlpoD9aScyQfJDVHmLMEcx4oU6LqzkWp4Mg9GdAcEvQ= -github.com/apex/log v1.3.0/go.mod h1:jd8Vpsr46WAe3EZSQ/IUMs2qQD/GOycT5rPWCO1yGcs= -github.com/apex/logs v0.0.4/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= -github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= -github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys= +github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= github.com/ashanbrown/forbidigo v1.4.0 h1:spdPbupaSqtWORq1Q4eHBoPBmHtwVyLKwaedbSLc5Sw= github.com/ashanbrown/forbidigo v1.4.0/go.mod h1:IvgwB5Y4fzqSAj/WVXKWigoTkB0dzI2FBbpKWuh7ph8= github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.15.90/go.mod h1:es1KtYUFs7le0xQ3rOihkuoVD90z7D0fR2Qm4S00/gU= -github.com/aws/aws-sdk-go v1.16.26/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.19.45/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.11/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.27.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.31.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= 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/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= -github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/bandprotocol/bandchain-packet v0.0.3 h1:Mo2xVmjOSfc//0z1lskNkxrkpcxeU2nIwfHb2rHFLLg= github.com/bandprotocol/bandchain-packet v0.0.3/go.mod h1:6mU33VjEShPvWYoTIQywRPxyS+HXcgnm0e7mlJwiTnQ= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -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-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= 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= @@ -1082,59 +345,38 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= -github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/bombsimon/wsl/v2 v2.0.0/go.mod h1:mf25kr/SqFEPhhcxW1+7pxzGlW+hIl/hYTKY95VwV8U= -github.com/bombsimon/wsl/v2 v2.2.0/go.mod h1:Azh8c3XGEJl9LyX0/sFC+CKMc7Ssgua0g+6abzXN4Pg= -github.com/bombsimon/wsl/v3 v3.0.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/bombsimon/wsl/v3 v3.1.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= github.com/bombsimon/wsl/v3 v3.4.0 h1:RkSxjT3tmlptwfgEgTgU+KYKLI35p/tviNXNXiL2aNU= github.com/bombsimon/wsl/v3 v3.4.0/go.mod h1:KkIB+TXkqy6MvK9BDZVbZxKNYsE1/oLRJbIFtf14qqo= -github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= +github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401/go.mod h1:Sv4JPQ3/M+teHz9Bo5jBpkNcP0x6r7rdihlNL/7tTAs= -github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= +github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= +github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= -github.com/btcsuite/btcd v0.23.0 h1:V2/ZgjfDFIygAX3ZapeigkVBoVUtOJKSwrhZdlpSvaA= -github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= -github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= -github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= -github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= 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.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= -github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= -github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= 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/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= @@ -1146,41 +388,19 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0qLq0= -github.com/bufbuild/buf v1.9.0/go.mod h1:1Q+rMHiMVcfgScEF/GOldxmu4o9TrQ2sQQh58K6MscE= -github.com/bufbuild/connect-go v0.2.0/go.mod h1:4efZ2eXFENwd4p7tuLaL9m0qtTsCOzuBvrohvRGevDM= -github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= -github.com/bufbuild/protocompile v0.1.0/go.mod h1:ix/MMMdsT3fzxfw91dvbfzKW3fRRnuPCP47kpAm5m/4= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= -github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= -github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/bwesterb/go-ristretto v1.2.2/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= -github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= -github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= -github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e/go.mod h1:oDpT4efm8tSYHXV5tHSdRvBet/b/QzxZ+XyyPehvm3A= 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.2/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/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -1190,13 +410,8 @@ github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= github.com/chavacava/garif v0.0.0-20221024190013-b3ef35877348 h1:cy5GCEZLUCshCGCRRUjxHrDUqkB4l5cuUt3ShEckQEo= github.com/chavacava/garif v0.0.0-20221024190013-b3ef35877348/go.mod h1:f/miWtG3SSuTxKsNK3o58H1xl+XV6ZIfbC6p7lPPB8U= -github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= -github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= -github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= @@ -1208,65 +423,32 @@ github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObk github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= -github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= -github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.3.1/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= +github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= -github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= -github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= -github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= -github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= -github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac= -github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677/go.mod h1:890yq1fUb9b6dGNwssgeUO5vQV9qfXnCPxAJhBQfXw0= -github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= -github.com/codahale/hdrhistogram v0.0.0-20160425231609-f8ad88b59a58/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= +github.com/coinbase/rosetta-sdk-go v0.6.10/go.mod h1:J/JFMsfcePrjJZkwQFLh+hJErkAmdm9Iyy3D5Y0LfXo= github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= -github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.34.27-alpha.1/go.mod h1:hct3hasQ2hIF3HoD7foVw4RaqTNSSeJ/lgcrVK6uDvs= github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= github.com/confio/ics23/go v0.0.0-20200817220745-f173e6211efb/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= @@ -1278,170 +460,38 @@ github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/ github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0= -github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= -github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= -github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= -github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= -github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= -github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= -github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= -github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1-0.20201117152358-0edc412565dc/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= -github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= -github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= -github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= -github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= -github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= -github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= -github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE= -github.com/containerd/containerd v1.6.3-0.20220401172941-5ff8fce1fcc6/go.mod h1:WSt2SnDLAGWlu+Vl+EWay37seZLKqgRt6XLjIMy8SYM= -github.com/containerd/containerd v1.6.6/go.mod h1:ZoP1geJldzCVY3Tonoz7b1IXk8rIX0Nltt5QE4OMNk0= -github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= -github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= -github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= -github.com/containerd/continuity v0.2.3-0.20220330195504-d132b287edc8/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= -github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fuse-overlayfs-snapshotter v1.0.2/go.mod h1:nRZceC8a7dRm3Ao6cJAwuJWPFiBPaibHiFntRUnzhwU= -github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= -github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= -github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= -github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= -github.com/containerd/go-cni v1.1.4/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= -github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= -github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= -github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= -github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= -github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= -github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4= -github.com/containerd/imgcrypt v1.1.4/go.mod h1:LorQnPtzL/T0IyCeftcsMEO7AqxUDbdO8j/tSUpgxvo= -github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= -github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/stargz-snapshotter v0.0.0-20201027054423-3a04e4c2c116/go.mod h1:o59b3PCKVAf9jjiKtCc/9hLAd+5p/rfhBfm6aBcTEr4= -github.com/containerd/stargz-snapshotter v0.11.3/go.mod h1:2j2EAUyvrLU4D9unYlTIwGhDKQIk74KJ9E71lJsQCVM= -github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= -github.com/containerd/stargz-snapshotter/estargz v0.11.3/go.mod h1:7vRJIcImfY8bpifnMjt+HTJoQxASq7T28MYbP15/Nf0= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= -github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= -github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= -github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= -github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y= -github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= -github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= -github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= -github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE= -github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8= -github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= -github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= -github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/containers/ocicrypt v1.1.3/go.mod h1:xpdkbVAuaH3WzbEabUd5yDsl9SwJA5pABH85425Es2g= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32/go.mod h1:kwMlEC4wWvB48zAShGKVqboJL6w4zCLesaNQ3YLU2BQ= -github.com/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= -github.com/cosmos/cosmos-proto v1.0.0-alpha8/go.mod h1:6/p+Bc4O8JKeZqe0VqUGTX31eoYqemTT4C1hLCWsO7I= -github.com/cosmos/cosmos-proto v1.0.0-beta.1/go.mod h1:8k2GNZghi5sDRFw/scPL8gMSowT1vDA+5ouxL8GjaUE= -github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= +github.com/cosmos/cosmos-sdk v0.43.0/go.mod h1:ctcrTEAhei9s8O3KSNvL0dxe+fVQGp07QyRb/7H9JYE= +github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= +github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= -github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q9p+LoCr4= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.3/go.mod h1:0hLIG5TR7IvV1fme1HCFKjfzW9X2x0Mo+RooWXCnOWU= -github.com/cosmos/gogoproto v1.4.4/go.mod h1:/yl6/nLwsZcZ2JY3OrqjRqvqCG9InUMcXRfRjQiF9DU= github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= -github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cosmos/iavl v0.15.0-rc3.0.20201009144442-230e9bdf52cd/go.mod h1:3xOIaNNX19p0QrX0VqWa6voPRoJRGGYtny+DH8NEPvE= github.com/cosmos/iavl v0.15.0-rc5/go.mod h1:WqoPL9yPTQ85QBMT45OOUzPxG/U/JcJoN7uMjgxke/I= github.com/cosmos/iavl v0.15.3/go.mod h1:OLjQiAQ4fGD2KDZooyJG9yz+p2ao2IAYSbke8mVvSA4= -github.com/cosmos/iavl v0.20.0-alpha4/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/iavl v0.16.0/go.mod h1:2A8O/Jz9YwtjqXMO0CjnnbTYEEaovE8jWcwrakH3PoE= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230629164013-34f5e666f806 h1:ygkYdRulR9lGLSYOAQUBOBTyeRKZc1svBw5Bnv9Boe4= @@ -1451,49 +501,36 @@ github.com/cosmos/ibc-go/v7 v7.1.0 h1:SCLgs7tqVnzdIDO5MRLgovAnc696vTTKl+8qsTu8IM github.com/cosmos/ibc-go/v7 v7.1.0/go.mod h1:7MptlWeIyqmDiuJeRAFqBvXKY8Hybd+rF8vMSmGd2zg= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= +github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= +github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= -github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= -github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= -github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= -github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= -github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= -github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= github.com/daixiang0/gci v0.9.1 h1:jBrwBmBZTDsGsXiaCTLIe9diotp1X4X64zodFrh7l+c= github.com/daixiang0/gci v0.9.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= -github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= +github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= -github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= 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= @@ -1505,97 +542,49 @@ github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= -github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= -github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger/v2 v2.2007.1/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/badger/v3 v3.2103.2/go.mod h1:RHo4/GmYcKKh5Lxu63wLEMHJ70Pac2JqZRYGhlyAo2M= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= -github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= -github.com/djherbis/atime v1.1.0/go.mod h1:28OF6Y8s3NQWwacXc5eZTsEsiMzp7LF8MbXE+XJPdBE= +github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/cli v0.0.0-20190925022749-754388324470/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.0-beta1.0.20201029214301-1d20b15adc38+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.13+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/distribution v2.6.0-rc.1.0.20180327202408-83389a148052+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.8.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= 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/docker v0.0.0-20200511152416-a93e9eb0e95c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v1.4.2-0.20180531152204-71cd53e4a197/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v17.12.0-ce-rc1.0.20200730172259-9f28837c1d93+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.0-beta1.0.20201110211921-af34b94a78a1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.3-0.20211208011758-87521affb077+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= -github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= 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-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= -github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= 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/docker/libnetwork v0.8.0-dev.2.0.20200917202933-d0951081b35f/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= 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= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= +github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= -github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25/go.mod h1:hTr8+TLQmkUkgcuh3mcr5fjrT9c64ZzsBCdCEC6UppY= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -1605,42 +594,23 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= -github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= -github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= -github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= -github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= -github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= -github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= +github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= +github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -1648,237 +618,113 @@ github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= +github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= -github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/fortytw2/leaktest v1.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= 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/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= 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.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= -github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= -github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= -github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/getsentry/sentry-go v0.17.0/go.mod h1:B82dxtBvxG0KaPD8/hfSV+VcHD+Lg/xUS4JuQn1P4cM= -github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8= github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-critic/go-critic v0.4.1/go.mod h1:7/14rZGnZbY6E38VEGk2kVhoq6itzc1E68facVDK23g= -github.com/go-critic/go-critic v0.4.3/go.mod h1:j4O3D4RoIwRqlZw5jJpx0BNfXWWbpcJoKu5cYSe4YmQ= -github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= github.com/go-critic/go-critic v0.6.7 h1:1evPrElnLQ2LZtJfmNDzlieDhjnq36SLgNzisx06oPM= github.com/go-critic/go-critic v0.6.7/go.mod h1:fYZUijFdcnxgx6wPjQA2QEjIRaNCT0gO8bhexy6/QmE= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= -github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= -github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= -github.com/go-git/go-git/v5 v5.5.1/go.mod h1:uz5PQ3d0gz7mSgzZhSJToM6ALPaKCdSnl58/Xb5hzr8= -github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= 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= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= -github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= -github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= -github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU= -github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= +github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= github.com/go-toolsmith/astcast v1.1.0 h1:+JN9xZV1A+Re+95pgnMgDboWNVnIMMQXwfBwLRPgSC8= github.com/go-toolsmith/astcast v1.1.0/go.mod h1:qdcuFWeGGS2xX5bLM/c3U9lewg7+Zu4mr+xPwZIB4ZU= -github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= -github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= github.com/go-toolsmith/astcopy v1.0.3 h1:r0bgSRlMOAgO+BdQnVAcpMSMkrQCnV6ZJmIkrJgcJj0= github.com/go-toolsmith/astcopy v1.0.3/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= -github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= github.com/go-toolsmith/astequal v1.1.0 h1:kHKm1AWqClYn15R0K1KKE4RG614D46n+nqUQ06E1dTw= github.com/go-toolsmith/astequal v1.1.0/go.mod h1:sedf7VIdCL22LD8qIvv7Nn9MuWJruQA/ysswh64lffQ= -github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= github.com/go-toolsmith/astfmt v1.1.0 h1:iJVPDPp6/7AaeLJEruMsBUlOYCmvg0MoCfJprsOmcco= github.com/go-toolsmith/astfmt v1.1.0/go.mod h1:OrcLlRwu0CuiIBp/8b5PYF9ktGVZUjlNMV634mhwuQ4= -github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= -github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= github.com/go-toolsmith/astp v1.1.0 h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA= github.com/go-toolsmith/astp v1.1.0/go.mod h1:0T1xFGz9hicKs8Z5MfAqSUitoUYS30pDMsRVIDHs8CA= -github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= -github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5 h1:eD9POs68PHkwrx7hAB78z1cb6PfGq/jyWn3wJywsH1o= -github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQiyP2Bvw= github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= -github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus= github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U= github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= -github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= 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 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= 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 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= 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/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= -github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= 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.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/flock v0.7.3/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= -github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= -github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= -github.com/gogo/googleapis v1.3.2/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= -github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.1.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -1888,7 +734,6 @@ github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= @@ -1899,8 +744,6 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -1923,6 +766,7 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -1930,52 +774,28 @@ github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5 github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= -github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= -github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= -github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= -github.com/golangci/golangci-lint v1.23.7/go.mod h1:g/38bxfhp4rI7zeWSxcdIeHTQGS58TCak8FYcyCmavQ= -github.com/golangci/golangci-lint v1.27.0/go.mod h1:+eZALfxIuthdrHPtfM7w/R3POJLjHDfJJw8XZl9xOng= -github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= github.com/golangci/golangci-lint v1.51.2 h1:yIcsT1X9ZYHdSpeWXRT1ORC/FPGSqDHbHsu9uk4FK7M= github.com/golangci/golangci-lint v1.51.2/go.mod h1:KH9Q7/3glwpYSknxUgUyLlAv46A8fsSKo1hH2wDvkr8= -github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= github.com/golangci/misspell v0.4.0 h1:KtVB/hTK4bbL/S6bs64rYyk8adjmh1BygbBiaAiX+a0= github.com/golangci/misspell v0.4.0/go.mod h1:W6O/bwV6lGDxUCChm2ykw9NQdd5bYd1Xkjo88UcWyJc= -github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= -github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= -github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= -github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= -github.com/google/crfs v0.0.0-20191108021818-71d77da419c9/go.mod h1:etGhoOqfwPkooV6aqoX3eBGQOJblqdoc9XvWOeuxpPw= github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/flatbuffers v2.0.0+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -1992,30 +812,17 @@ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8 github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.0.0-20191010200024-a3d713f9b7f8/go.mod h1:KyKXa9ciM8+lgMXwOVsXi7UxGrsf9mM61Mzs+xKUrKE= -github.com/google/go-containerregistry v0.1.2/go.mod h1:GPivBPgdAyd2SU+vf6EpsgOtWDuPqjW0hJZt4rNdTZ4= -github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= -github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= -github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= -github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= -github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= 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= @@ -2024,7 +831,6 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -2036,31 +842,19 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/rpmpack v0.0.0-20191226140753-aa36bfddb3a0/go.mod h1:RaTPr0KUf2K7fnZYLNDrr8rxAamWs3iNywJLtQ2AzBg= -github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM= -github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= -github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= -github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/wire v0.3.0/go.mod h1:i1DMg/Lu8Sz5yYl25iOdmc5CT5qusaa+zmRWs16741s= -github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -2070,53 +864,30 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= -github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= -github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= -github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gookit/color v1.2.4/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= -github.com/gookit/color v1.5.1/go.mod h1:wZFzea4X8qN6vHOSP2apMb4/+w/orMznEzYsIHPaqKM= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28 h1:9alfqbrhuD+9fLZ4iaAVwhlp5PEhmnBt7yvK2Oy5C1U= github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= -github.com/goreleaser/goreleaser v0.136.0/go.mod h1:wiKrPUeSNh6Wu8nUHxZydSOVQ/OZvOaO7DTtFqie904= -github.com/goreleaser/nfpm v1.2.1/go.mod h1:TtWrABZozuLOttX2uDlYyECfQX7x5XYkVxhjYcR6G9w= -github.com/goreleaser/nfpm v1.3.0/go.mod h1:w0p7Kc9TAUgWMyrub63ex3M2Mgw88M4GZXoTq5UCb40= -github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= @@ -2129,33 +900,21 @@ github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3 github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY= -github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= -github.com/gotestyourself/gotestyourself v1.4.0/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= +github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= github.com/grpc-ecosystem/go-grpc-middleware v1.2.1/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.2/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.14.7/go.mod h1:oYZKL012gGh6LMyg/xA7Q2yq6j8bu0wa+9w14EEthWU= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= -github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= @@ -2163,20 +922,10 @@ github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hanwen/go-fuse v1.0.0/go.mod h1:unqXarDXqzAk0rt98O2tVndEPIpUgLD9+rwFisZH3Ok= -github.com/hanwen/go-fuse/v2 v2.0.3/go.mod h1:0EQM6aH2ctVpvZ6a+onrQ/vaykxh2GH7hy3e13vzTUY= -github.com/hanwen/go-fuse/v2 v2.1.1-0.20220112183258-f57e95bda82d/go.mod h1:B1nGE/6RBFyBRC1RRnf23UpwCdyJ31eukw34oAKukAc= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= -github.com/hashicorp/consul/api v1.15.3/go.mod h1:/g/qgcoBcEXALCNZgRRisyTW0nY86++L0KbeAMXYCeY= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= -github.com/hashicorp/consul/sdk v0.11.0/go.mod h1:yPkX5Q6CsxTFMjQQDJwzeNmUUF5NUGGbrDsv9wTb8cw= -github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -2187,38 +936,22 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.6.4/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= 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.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= @@ -2226,7 +959,6 @@ github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= @@ -2234,63 +966,40 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/serf v0.9.8/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/uuid v0.0.0-20160311170451-ebb0a03e909c/go.mod h1:fHzc09UnyJyqyW+bFuq864eh+wC7dj65aXmXLRe5to0= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= +github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= -github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= +github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= -github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= +github.com/improbable-eng/grpc-web v0.14.0/go.mod h1:6hRR09jOEG81ADP5wCQju1z71g6OL4eEvELdran/3cs= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= +github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= @@ -2299,73 +1008,29 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= -github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/httpexpect/v2 v2.3.1/go.mod h1:ICTf89VBKSD3KB0fsyyHviKF8G8hyepP0dOXJPWz3T0= -github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= -github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= -github.com/iris-contrib/jade v1.1.4/go.mod h1:EDqR+ur9piDl6DUgs6qRrlfzmlx/D5UybogqrXvJTBE= -github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= -github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= -github.com/ishidawataru/sctp v0.0.0-20191218070446-00ab2ac2db07/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= -github.com/ishidawataru/sctp v0.0.0-20210226210310-f2269e66cdee/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= -github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= -github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= +github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jaguilar/vt100 v0.0.0-20150826170717-2703a27b14ea/go.mod h1:QMdK4dGB3YhEW2BmA1wgGpPYI3HZy/5gD705PXKUVSg= -github.com/jarcoal/httpmock v1.0.5/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= -github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= -github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jhump/protoreflect v1.13.1-0.20220928232736-101791cb1b4c/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/jhump/protoreflect v1.8.2/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= 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/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a/go.mod h1:xRskid8CManxVta/ALEhJha/pweKBaVG6fWgc0yH25s= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= 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= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/jmoiron/sqlx v1.2.1-0.20190826204134-d7d95172beb5/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= -github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -2378,44 +1043,19 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= -github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= -github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= -github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= +github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/junk1tm/musttag v0.4.5 h1:d+mpJ1vn6WFEVKHwkgJiIedis1u/EawKOuUTygAUtCo= github.com/junk1tm/musttag v0.4.5/go.mod h1:XkcL/9O6RmD88JBXb+I15nYRl9W4ExhgQeCBEhfMC8U= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= +github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kataras/blocks v0.0.6/go.mod h1:UK+Iwk0Oxpc0GdoJja7sEildotAUKK1LYeYcVF0COWc= -github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= -github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk= -github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= -github.com/kataras/golog v0.1.7/go.mod h1:jOSQ+C5fUqsNSwurB/oAHq1IFSb0KI3l6GMa7xB6dZA= -github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U= -github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= -github.com/kataras/iris/v12 v12.2.0-beta5/go.mod h1:q26aoWJ0Knx/00iPKg5iizDK7oQQSPjbD8np0XDh6dc= -github.com/kataras/jwt v0.1.8/go.mod h1:Q5j2IkcIHnfwy+oNY3TVWuEBJNw0ADgCcXK9CaZwV4o= -github.com/kataras/neffos v0.0.10/go.mod h1:ZYmJC07hQPW67eKuzlfY7SO3bC0mw83A3j6im82hfqw= -github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= -github.com/kataras/neffos v0.0.20/go.mod h1:srdvC/Uo8mgrApWW0AYtiiLgMbyNPf69qPsd2FhE6MQ= -github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0= -github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= -github.com/kataras/pio v0.0.10/go.mod h1:gS3ui9xSD+lAUpbYnjOGiQyY7sUMJO+EHpiRzhtZ5no= -github.com/kataras/pio v0.0.11/go.mod h1:38hH6SWH6m4DKSYmRhlrCJ5WItwWgCVrTNU62XZyUvI= -github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= -github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= -github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8= github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= @@ -2423,54 +1063,28 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/kkdai/bstream v1.0.0/go.mod h1:FDnDOHt5Yx4p3FaHcioFT0QjDOtgUpvjeZqAs+NVZZA= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.15.10/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.1 h1:vJi+O/nMdFt0vqm8NZBI6wzALWdA2X+egi0ogNyrC/w= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -2478,38 +1092,21 @@ github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoaGS+Ugg8g= github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= -github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= github.com/kyoh86/exportloopref v0.1.11 h1:1Z0bcmTypkL3Q4k+IDHMWTcnCliEZcaPiIe0/ymEyhQ= github.com/kyoh86/exportloopref v0.1.11/go.mod h1:qkV4UF1zGl6EkF1ox8L5t9SwyeBAZ3qLMd6up458uqA= -github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= -github.com/labstack/echo/v4 v4.9.0/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/ldez/tagliatelle v0.4.0 h1:sylp7d9kh6AdXN2DpVGHBRb5guTVAgOxqNGhbqc4b1c= github.com/ldez/tagliatelle v0.4.0/go.mod h1:mNtTfrHy2haaBAw+VT7IBV6VXBThS7TCreYWbBcJ87I= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= github.com/leonklingele/grouper v1.1.1 h1:suWXRU57D4/Enn6pXR0QVqqWWrnJ9Osrz+5rjt8ivzU= github.com/leonklingele/grouper v1.1.1/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= -github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= @@ -2517,255 +1114,127 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= -github.com/linxGnu/grocksdb v1.7.10/go.mod h1:0hTf+iA+GOr0jDX4CgIYyJZxqOH9XlBh6KVj8+zmF34= github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= -github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= -github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailgun/raymond/v2 v2.0.46/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= -github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= -github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= -github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg= github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= -github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/mattn/go-shellwords v1.0.10/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= -github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= -github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= -github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= -github.com/mediocregopher/radix/v3 v3.8.0/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= -github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= github.com/mgechev/revive v1.2.5 h1:UF9AR8pOAuwNmhXj2odp4mxv9Nx2qUIwVz8ZsU+Mbec= github.com/mgechev/revive v1.2.5/go.mod h1:nFOXent79jMTISAfOAasKfy0Z2Ejq0WX7Qn/KAdYopI= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= -github.com/microcosm-cc/bluemonday v1.0.20/go.mod h1:yfBmMi8mxvaZut3Yytv+jTXRY8mxyjJ0/kQBTElld50= -github.com/microcosm-cc/bluemonday v1.0.21/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= -github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= -github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/buildkit v0.8.1/go.mod h1:/kyU1hKy/aYCuP39GZA9MaKioovHku57N6cqlKZIaiQ= -github.com/moby/buildkit v0.10.3/go.mod h1:jxeOuly98l9gWHai0Ojrbnczrk/rf+o9/JqNhY+UCSo= -github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= -github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/sys/mount v0.1.0/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= -github.com/moby/sys/mount v0.1.1/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= -github.com/moby/sys/mount v0.3.0/go.mod h1:U2Z3ur2rXPFrFmy4q6WMwWrBOAQGYtYTRVM8BIvzbwk= -github.com/moby/sys/mountinfo v0.1.0/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= -github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= -github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/sys/mountinfo v0.6.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= -github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= -github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= -github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= -github.com/moby/term v0.0.0-20200915141129-7f0af18e79f2/go.mod h1:TjQg8pa4iejrUrjiz0MCtMV38jdMNW4doKSiBrEvCQQ= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= -github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= -github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= -github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= -github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= -github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= -github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/nakabonne/nestif v0.3.0/go.mod h1:dI314BppzXjJ4HsCnbo7XzrJHPszZsjnk5wEBSYHI2c= github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= -github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= -github.com/nats-io/jwt/v2 v2.2.1-0.20220330180145-442af02fd36a/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= -github.com/nats-io/jwt/v2 v2.3.0/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= -github.com/nats-io/nats-server/v2 v2.8.4/go.mod h1:8zZa+Al3WsESfmgSs98Fi06dRWLH5Bnq90m5bKD/eT4= -github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= -github.com/nats-io/nats.go v1.15.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= -github.com/nats-io/nats.go v1.16.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= -github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= -github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= -github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= -github.com/networkplumbing/go-nft v0.2.0/go.mod h1:HnnM+tYvlGAsMU7yoYwXEVLLiDW9gdMmb5HoGcwpuQs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= github.com/nishanths/exhaustive v0.9.5 h1:TzssWan6orBiLYVqewCG8faud9qlFntJE30ACpzmGME= github.com/nishanths/exhaustive v0.9.5/go.mod h1:IbwrGdVMizvDcIxPYGVdQn5BqWJaOwpCvg4RGb8r/TA= -github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= +github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nunnatsa/ginkgolinter v0.8.1 h1:/y4o/0hV+ruUHj4xXh89xlFjoaitnI4LnkpuYs02q1c= @@ -2776,198 +1245,96 @@ github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+ 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/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/oklog/ulid/v2 v2.1.0/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= +github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= github.com/onsi/ginkgo/v2 v2.8.0 h1:pAM+oBNPrpXRs+E/8spkeGx9QgekbRVyr74EUvRVOUI= -github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= 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.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= 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 v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc10/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc92/go.mod h1:X1zlU4p7wOlX4+WRCz+hvlRv8phdL7UqbYD+vQwNMmE= -github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= -github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= -github.com/opencontainers/runc v1.1.1/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= -github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= 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/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200728170252-4d89ac9fbff6/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= -github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= -github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= -github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing-contrib/go-stdlib v1.0.0/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= 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/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= 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/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= -github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= +github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= +github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= 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= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= -github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= +github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= -github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= -github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= -github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= 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/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= -github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= -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-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/profile v1.5.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3/go.mod h1:q5NXNGzqj5uPnVuhGkZfmgHqNUhf15VLi6L9kW0VEc0= -github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4/go.mod h1:RdR1j20Aj5pB6+fw6Y9Ur7lMHpegTEjY1vc19hEZL40= -github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= -github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= github.com/polyfloyd/go-errorlint v1.1.0 h1:VKoEFg5yxSgJ2yFPVhxW7oGz+f8/OVcuMeNvcPIi6Eg= github.com/polyfloyd/go-errorlint v1.1.0/go.mod h1:Uss7Bc/izYG0leCMRx3WVlrpqWedSZk7V/FUQW6VJ6U= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= -github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -2976,8 +1343,6 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -2989,45 +1354,26 @@ github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB8 github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= -github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= +github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= -github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= -github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= -github.com/quasilyte/go-ruleguard v0.1.2-0.20200318202121-b00d7a75d3d8/go.mod h1:CGFX09Ci3pq9QZdj86B+VGIdNj4VyCo2iPOGS9esB/k= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= github.com/quasilyte/go-ruleguard v0.3.19 h1:tfMnabXle/HzOb5Xe9CUZYWXKfkS1KwRmZyPmD9nVcc= github.com/quasilyte/go-ruleguard v0.3.19/go.mod h1:lHSn69Scl48I7Gt9cX3VrbsZYvYiBYszZOZW4A+oTEw= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo= github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= @@ -3043,64 +1389,36 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= -github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= -github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= -github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= +github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= -github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= -github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= -github.com/ryancurrah/gomodguard v1.0.4/go.mod h1:9T/Cfuxs5StfsocWr4WzDL36HqnX0fVb9d5fSEaLhoE= -github.com/ryancurrah/gomodguard v1.1.0/go.mod h1:4O8tr7hBODaGE6VIhfJDHcwzh5GUccKSJBU0UMXJFVM= -github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= github.com/ryancurrah/gomodguard v1.3.0 h1:q15RT/pd6UggBXVBuLps8BXRvl5GPBcwVA7BJHMLuTw= github.com/ryancurrah/gomodguard v1.3.0/go.mod h1:ggBxb3luypPEzqVtq33ee7YSN35V28XeGnid8dnni50= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanrolds/sqlclosecheck v0.4.0 h1:i8SX60Rppc1wRuyQjMciLqIzV3xnoHB7/tXbr6RGYNI= github.com/ryanrolds/sqlclosecheck v0.4.0/go.mod h1:TBRRjzL31JONc9i4XMinicuo+s+E8yKZ5FN8X3G6CKQ= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= -github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= -github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= -github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= -github.com/sagikazarmark/crypt v0.8.0/go.mod h1:TmKwZAo97S4Fy4sfMH/HX/cQP5D+ijra2NyLpNNmttY= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sanposhiho/wastedassign/v2 v2.0.7 h1:J+6nrY4VW+gC9xFzUc+XjPD3g3wF3je/NsJFwFK7Uxc= github.com/sanposhiho/wastedassign/v2 v2.0.7/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= @@ -3109,133 +1427,73 @@ github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71e github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= -github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= github.com/sashamelentyev/usestdlibvars v1.23.0 h1:01h+/2Kd+NblNItNeux0veSL5cBF1jbEOPrEhDzGYq0= github.com/sashamelentyev/usestdlibvars v1.23.0/go.mod h1:YPwr/Y1LATzHI93CqoPUN/2BzGQ/6N/cl/KwgR0B/aU= -github.com/sassoftware/go-rpmutils v0.0.0-20190420191620-a8f1baeba37b/go.mod h1:am+Fp8Bt506lA3Rk3QCmSqmYmLMnPDhdDUcosQCAx+I= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= -github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= -github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= -github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/securego/gosec v0.0.0-20200103095621-79fbf3af8d83/go.mod h1:vvbZ2Ae7AzSq3/kywjUDxSNq2SJ27RxCz2un0H3ePqE= -github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A= -github.com/securego/gosec/v2 v2.3.0/go.mod h1:UzeVyUXbxukhLeHKV3VVqo7HdoQR9MrRfFmZYotn8ME= -github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= github.com/securego/gosec/v2 v2.15.0 h1:v4Ym7FF58/jlykYmmhZ7mTm7FQvN/setNm++0fgIAtw= github.com/securego/gosec/v2 v2.15.0/go.mod h1:VOjTrZOkUtSDt2QLSJmQBMWnvwiQPEjg0l+5juIqGk8= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/serialx/hashring v0.0.0-20190422032157-8b2912629002/go.mod h1:/yeG0My1xr/u+HZrFQ1tOQQQQrOawfyMUH13ai5brBc= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= +github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil/v3 v3.22.8/go.mod h1:s648gW4IywYzUfE/KjXxUsqrqx/T2xO5VqOXxONeRfI= -github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= -github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= -github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= 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.8.1/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/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= -github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/sivchari/tenv v1.7.1 h1:PSpuD4bu6fSmtWMxSGWcvqUUgIn7k3yOJhOIzVWn8Ak= github.com/sivchari/tenv v1.7.1/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= -github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= -github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= -github.com/smartystreets/assertions v1.13.0/go.mod h1:wDmR7qL282YbGsPy6H/yAsesrxfxaaSlJazyFLYVFx8= -github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= -github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= -github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= -github.com/sourcegraph/go-diff v0.5.3/go.mod h1:v9JDtjCE4HHHCZGId75rg8gkKKa98RVjBcBGsVmMmak= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCpA8G0= github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= -github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= -github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.0/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= -github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= -github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= -github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= @@ -3243,31 +1501,23 @@ github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRk github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= -github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= +github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/strangelove-ventures/async-icq/v7 v7.0.0-20230413165143-a3b65ccdc897 h1:lCTD5L1v1K1KC6KXjyt4o1X+yzV14RbbrPZaF29n8uI= github.com/strangelove-ventures/async-icq/v7 v7.0.0-20230413165143-a3b65ccdc897/go.mod h1:ag05Q54Wkr0jVwfe+14sxnuWbw0gBOxtPQv9afBBnr0= github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0-20230523193151-73dea436e53f h1:NJdZ+YJ9Vf2t286L20IjFK0SxGpobF1xIp5ZQlxWetk= github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0-20230523193151-73dea436e53f/go.mod h1:DJNSVK8NCYHM+aZHCFkcAqPwjzwHYAjhjSMlhAGtJ3c= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -3276,45 +1526,31 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= -github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= -github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c h1:+aPplBwWcHBo6q9xrfWdMrT9o4kltkmmvpemgIjep/8= github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c/go.mod h1:SbErYREK7xXdsRiigaQiQkI9McGRzYMvlKYaP3Nimdk= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= -github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tdewolff/minify/v2 v2.12.1/go.mod h1:p5pwbvNs1ghbFED/ZW1towGsnnWwzvM8iz8l0eURi9g= -github.com/tdewolff/minify/v2 v2.12.4/go.mod h1:h+SRvSIX3kwgwTFOpSckvSxgax3uy8kZTSF1Ojrr3bk= -github.com/tdewolff/parse/v2 v2.6.3/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= -github.com/tdewolff/parse/v2 v2.6.4/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= -github.com/tdewolff/test v1.0.7/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= +github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= +github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4= github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg= github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ= +github.com/tendermint/tendermint v0.34.10/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= github.com/tendermint/tendermint v0.34.11/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI= github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8= @@ -3323,198 +1559,94 @@ github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v0.3.7/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= -github.com/tetafro/godot v0.4.2/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= 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.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= -github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e h1:MV6KaVu/hzByHP0UvJ4HcMGE/8a6A4Rggc/0wx2AvJo= github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ= github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= -github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= -github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= -github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= -github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= github.com/tomarrell/wrapcheck/v2 v2.8.0 h1:qDzbir0xmoE+aNxGCPrn+rUSxAX+nG6vREgbbXAR81I= github.com/tomarrell/wrapcheck/v2 v2.8.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= -github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/tommy-muehle/go-mnd v1.1.1/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= -github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/tonistiigi/fsutil v0.0.0-20201103201449-0834f99b7b85/go.mod h1:a7cilN64dG941IOXfhJhlH0qB92hxJ9A1ewrdUmJ6xo= -github.com/tonistiigi/fsutil v0.0.0-20220115021204-b19f7f9cb274/go.mod h1:oPAfvw32vlUJSjyDcQ3Bu0nb2ON2B+G0dtVN/SZNJiA= -github.com/tonistiigi/go-actions-cache v0.0.0-20220404170428-0bdeb6e1eac7/go.mod h1:qqvyZqkfwkoJuPU/bw61bItaoO0SJ8YSW0vSVRRvsRg= -github.com/tonistiigi/go-archvariant v1.0.0/go.mod h1:TxFmO5VS6vMq2kvs3ht04iPXtu2rUT/erOnGFYfk5Ho= -github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea/go.mod h1:WPnis/6cRcDZSUvVmezrxJPkiO87ThFYsoUiMwWNDJk= -github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f/go.mod h1:ulncasL3N9uLrVann0m+CDlJKWsIAP34MPcOJF6VRvc= -github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU= -github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= -github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= -github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= -github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= -github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= -github.com/vdemeester/k8s-pkg-credentialprovider v1.17.4/go.mod h1:inCTmtUdr5KJbreVojo06krnTgaeAz/Z7lynpPk/Q2c= -github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= -github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= -github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= -github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= -github.com/xanzy/go-gitlab v0.31.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= -github.com/xanzy/go-gitlab v0.32.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= -github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= -github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= -github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= -go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= -go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.5/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= -go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= -go.etcd.io/etcd/client/v2 v2.305.5/go.mod h1:zQjKllfqfBVyVStbt4FaosoX2iYd8fV/GRy/PbowgP4= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= -go.etcd.io/etcd/client/v3 v3.5.5/go.mod h1:aApjR4WGlSumpnJ2kloS75h6aHUmAyaPLjHMxpc7E7c= -go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= -go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= -go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= -go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= -go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= -go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= -go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A= -go.opencensus.io v0.19.2/go.mod h1:NO/8qkisMZLZ1FCsKNqtJPwc8/TaclWyY0B6wcYNg9M= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -3526,70 +1658,17 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.29.0/go.mod h1:LsankqVDx4W+RhZNA5uWarULII/MBhF5qwCYxTuyXjs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.33.0/go.mod h1:y/SlJpJQPd2UzfBCj0E9Flk9FDCtTyqUmaCB41qFrWI= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= -go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.29.0/go.mod h1:vHItvsnJtp7ES++nFLLFBzUWny7fJQSvTlxFcqQGUr4= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.29.0/go.mod h1:tLYsuf2v8fZreBVwp9gVMhefZlLFZaUiNVSq8QxXRII= -go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= -go.opentelemetry.io/otel v1.4.0/go.mod h1:jeAqMFKy2uLIxCtKxoFj0FAL5zAPKQagc3+GtBWakzk= -go.opentelemetry.io/otel v1.4.1/go.mod h1:StM6F/0fSwpd8dKWDCdRr7uRvEPYdW0hBSlbdTiUde4= -go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM= -go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= -go.opentelemetry.io/otel/exporters/jaeger v1.4.1/go.mod h1:ZW7vkOu9nC1CxsD8bHNHCia5JUbwP39vxgd1q4Z5rCI= -go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.4.1/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.4.1/go.mod h1:o5RW5o2pKpJLD5dNTCmjF1DorYwMeFJmb/rKr5sLaa8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.4.1/go.mod h1:c6E4V3/U+miqjs/8l950wggHGL1qzlp0Ypj9xoGrPqo= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.4.1/go.mod h1:VwYo0Hak6Efuy0TXsZs8o1hnV3dHDPNtDbycG0hI8+M= -go.opentelemetry.io/otel/internal/metric v0.27.0/go.mod h1:n1CVxRqKqYZtqyTh9U/onvKapPGv7y/rpyOTI+LFNzw= -go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/metric v0.27.0/go.mod h1:raXDJ7uP2/Jc0nVZWQjJtzoyssOYWu/+pjZqRzfvZ7g= -go.opentelemetry.io/otel/metric v0.32.3/go.mod h1:pgiGmKohxHyTPHGOff+vrtIH39/R9fiO/WoenUQ3kcc= -go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= -go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= -go.opentelemetry.io/otel/sdk v1.4.1/go.mod h1:NBwHDgDIBYjwK2WNu1OPgsIc2IJzmBXNnvIJxJc8BpE= -go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= -go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= -go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= -go.opentelemetry.io/otel/trace v1.4.0/go.mod h1:uc3eRsqDfWs9R7b92xbQbU42/eTNz4N+gLP8qJCi4aE= -go.opentelemetry.io/otel/trace v1.4.1/go.mod h1:iYEVbroFCNut9QkwEczV9vMRPHNKSSwYZjulEtsmhFc= -go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaTBoTCh2zIFI4= -go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= -go.opentelemetry.io/proto/otlp v0.12.0/go.mod h1:TsIjwGWIx5VFYv9KGVlOpxoBl5Dy+63SUguV7GGvlSQ= -go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= 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.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= 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.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= @@ -3597,79 +1676,38 @@ go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U= go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -gocloud.dev v0.19.0/go.mod h1:SmKwiR8YwIMMJvQBKLsC3fHNyMwXLw3PMDO+VVteJMI= golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= -golang.org/x/build v0.0.0-20190314133821-5284462c4bec/go.mod h1:atTaCNAy0f16Ah5aV1gMSwgiKVHwu/JncqDpuRr7lS4= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -3677,10 +1715,9 @@ golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= @@ -3688,37 +1725,15 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= -golang.org/x/exp v0.0.0-20221019170559-20944726eadf/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= -golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= -golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20220613132600-b0d781184e0d/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9 h1:6WHiuFL9FNjg8RljAaT7FNUuKDbvMqS1i5cr2OE2sLQ= golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -3732,37 +1747,30 @@ golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mobile v0.0.0-20200801112145-973feb4309de/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= -golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181108082009-03003ca0c849/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -3770,23 +1778,17 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -3804,12 +1806,11 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -3817,60 +1818,32 @@ golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220726230323-06994584191e/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= -golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221017152216-f25eb7ecb193/go.mod h1:RpDiru2p0u2F0lLpEoqnP2+7xs0ifAuOcJ442g6GU2s= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= -golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -3885,7 +1858,6 @@ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= @@ -3894,21 +1866,14 @@ golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7Lm golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -3916,28 +1881,22 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/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.1.0/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-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -3945,46 +1904,28 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190620070143-6f217b454f45/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -3996,40 +1937,24 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200917073148-efd3b9a0ff20/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201013081832-0aaa2718063a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210313202042-bd2e13477e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -4039,13 +1964,11 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -4053,89 +1976,50 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210909193231-528a39cd75f3/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211113001501-0c823b97ae02/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220727055044-e65921a090b8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220919170432-7a66f970e087/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -4149,92 +2033,56 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= -golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113232020-e2727e816f5a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200102140908-9497f49d5709/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204192400-7124308813f3/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -4244,44 +2092,28 @@ golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200331202046-9d5940d49312/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200502202811-ed308ab3e770/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -4293,21 +2125,14 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11-0.20220513221640-090b14e8501f/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= -golang.org/x/tools v0.1.12-0.20220628192153-7743d1d949f1/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= 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= @@ -4321,32 +2146,15 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3j golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= -gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= -gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= -google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.2.0/go.mod h1:IfRCZScioGtypHNTlz3gFk67J8uePVW7uDTBzXuIkhU= -google.golang.org/api v0.3.0/go.mod h1:IuvZyQh8jgscv8qWfQ4ABd8m7hEudgBFM/EdhA3BnXw= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.6.0/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= -google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -4356,7 +2164,6 @@ google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/ google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.25.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= @@ -4374,9 +2181,7 @@ google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6 google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= @@ -4386,7 +2191,6 @@ google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69 google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= @@ -4395,61 +2199,35 @@ google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaE google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= -google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= -google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= -google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E= -google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= -google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= -google.golang.org/api v0.125.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190620144150-6af8c5fc6601/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -4465,17 +2243,12 @@ google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201111145450-ac7456db90a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -4505,13 +2278,8 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= @@ -4523,7 +2291,6 @@ google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= @@ -4532,7 +2299,6 @@ google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= @@ -4540,7 +2306,6 @@ google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljW google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= @@ -4558,63 +2323,13 @@ google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53B google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230202175211-008b39050e57/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= -google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= -google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= -google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= -google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= -google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -4625,13 +2340,11 @@ google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ij google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= @@ -4650,9 +2363,6 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= @@ -4662,12 +2372,6 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= -google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -4681,23 +2385,16 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.2-0.20230208135220-49eaa78c6c9c/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.2-0.20230222093303-bc1253ad3743/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -4706,36 +2403,19 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= -gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -4743,32 +2423,18 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 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 v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= -gotest.tools/v3 v3.1.0/go.mod h1:fHy7eyTmJFO5bQbUsEGQ1v4m2J3Jz9eWL54TP2/ZuYQ= -gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= -gotest.tools/v3 v3.3.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= -gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= -gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/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= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -4776,162 +2442,20 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= honnef.co/go/tools v0.4.2 h1:6qXr+R5w+ktL5UkwEbPp+fEvfyoMPche6GkOpGHZcLc= honnef.co/go/tools v0.4.2/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA= -k8s.io/api v0.0.0-20180904230853-4e7be11eab3f/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= -k8s.io/api v0.17.4/go.mod h1:5qxx6vjmwUVG2nHQTKGlLts8Tbok8PzHl4vHtVFuZCA= -k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw= -k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= -k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= -k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/api v0.22.5/go.mod h1:mEhXyLaSD1qTOf40rRiKXkc+2iCem09rWLlFwhCEiAs= -k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= -k8s.io/apimachinery v0.0.0-20180904193909-def12e63c512/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= -k8s.io/apimachinery v0.17.4/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g= -k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= -k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= -k8s.io/apimachinery v0.22.5/go.mod h1:xziclGKwuuJ2RM5/rSFQSYAj0zdbci3DH8kj+WvyN0U= -k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= -k8s.io/apiserver v0.17.4/go.mod h1:5ZDQ6Xr5MNBxyi3iUZXS84QOhZl+W7Oq2us/29c0j9I= -k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= -k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= -k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= -k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ= -k8s.io/client-go v0.0.0-20180910083459-2cefa64ff137/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s= -k8s.io/client-go v0.17.4/go.mod h1:ouF6o5pz3is8qU0/qYL2RnoxOPqgfuidYLowytyLJmc= -k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU= -k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= -k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= -k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/client-go v0.22.5/go.mod h1:cs6yf/61q2T1SdQL5Rdcjg9J1ElXSwbjSrW2vFImM4Y= -k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= -k8s.io/cloud-provider v0.17.4/go.mod h1:XEjKDzfD+b9MTLXQFlDGkk6Ho8SGMpaU8Uugx/KNK9U= -k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= -k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= -k8s.io/component-base v0.17.4/go.mod h1:5BRqHMbbQPm2kKu35v3G+CpVq4K0RJKC7TRioF0I9lE= -k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= -k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= -k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/component-base v0.22.5/go.mod h1:VK3I+TjuF9eaa+Ln67dKxhGar5ynVbwnGrUiNF4MqCI= -k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= -k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= -k8s.io/cri-api v0.23.1/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4= -k8s.io/cri-api v0.24.0-alpha.3/go.mod h1:c/NLI5Zdyup5+oEYqFO2IE32ptofNiZpS1nL2y51gAg= -k8s.io/csi-translation-lib v0.17.4/go.mod h1:CsxmjwxEI0tTNMzffIAcgR9lX4wOh6AKHdxQrT7L0oo= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20180731170545-e3762e86a74c/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= -k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/kubernetes v1.11.10/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/legacy-cloud-providers v0.17.4/go.mod h1:FikRNoD64ECjkxO36gkDgJeiQWwyZTuBkhu+yxOc1Js= -k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= -modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= -modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= -modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= -modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= -modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI= -modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= -modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= -modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g= -modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= -modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= -modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= -modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= -modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= -modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= -modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= -modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= -modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= -modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= -modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA= -modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0= -modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= -modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= -modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= -modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= -modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= -modernc.org/sqlite v1.18.2/go.mod h1:kvrTLEWgxUcHa2GfHBQtanR1H9ht3hTJNtKpzH9k1u0= -modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= -modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= -modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= -modernc.org/tcl v1.13.2/go.mod h1:7CLiGIPo1M8Rv1Mitpv5akc2+8fxUd2y2UzC/MfMzy0= -modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= -modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= -moul.io/http2curl v1.0.0/go.mod h1:f6cULg+e4Md/oW1cYmwW4IWQOVl2lGbmCNGOHvzX2kE= mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= -mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7/go.mod h1:HGC5lll35J70Y5v7vCGb9oLhHoScFwkHDJm/05RdSTc= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d h1:3rvTIIM22r9pvXk+q3swxUQAQOxksVMGK7sml4nG57w= mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d/go.mod h1:IeHQjmn6TOD+e4Z3RFiZMMsLVL+A96Nvptar8Fj71is= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= -pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= -pgregory.net/rapid v0.5.2/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= -pgregory.net/rapid v0.5.3/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= @@ -4939,21 +2463,7 @@ rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= -sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= -sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= -sourcegraph.com/sqs/pbtypes v1.0.0/go.mod h1:3AciMUv4qUuRHRHhOG4TZOB+72GdPVz5k+c648qsFS4= From 31d8af86b7f0c28539786eef0a05a15184750280 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 2 Aug 2023 15:57:42 +0530 Subject: [PATCH 19/90] icq updated --- app/app.go | 6 +++--- app/upgrades/mainnet/v12/upgrades.go | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/app.go b/app/app.go index e45e64ffb..0e22a3781 100644 --- a/app/app.go +++ b/app/app.go @@ -184,9 +184,9 @@ import ( liquiditykeeper "github.com/comdex-official/comdex/x/liquidity/keeper" liquiditytypes "github.com/comdex-official/comdex/x/liquidity/types" - icq "github.com/strangelove-ventures/async-icq/v7" - icqkeeper "github.com/strangelove-ventures/async-icq/v7/keeper" - icqtypes "github.com/strangelove-ventures/async-icq/v7/types" + icq "github.com/cosmos/ibc-apps/modules/async-icq/v7" + icqkeeper "github.com/cosmos/ibc-apps/modules/async-icq/v7/keeper" + icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" cwasm "github.com/comdex-official/comdex/app/wasm" diff --git a/app/upgrades/mainnet/v12/upgrades.go b/app/upgrades/mainnet/v12/upgrades.go index a697c7d29..0aefc78f8 100644 --- a/app/upgrades/mainnet/v12/upgrades.go +++ b/app/upgrades/mainnet/v12/upgrades.go @@ -4,8 +4,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - icqkeeper "github.com/strangelove-ventures/async-icq/v7/keeper" - icqtypes "github.com/strangelove-ventures/async-icq/v7/types" + icqkeeper "github.com/cosmos/ibc-apps/modules/async-icq/v7/keeper" + icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" ) func CreateUpgradeHandlerV12( diff --git a/go.mod b/go.mod index 822057b8e..bf0c7f262 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,7 @@ require ( github.com/cometbft/cometbft-db v0.8.0 github.com/cosmos/cosmos-sdk v0.47.4 github.com/cosmos/gogoproto v1.4.10 + github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.0.0-20230629164013-34f5e666f806 github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.3 github.com/gorilla/mux v1.8.0 @@ -22,7 +23,6 @@ require ( github.com/regen-network/cosmos-proto v0.3.1 github.com/spf13/cast v1.5.1 github.com/spf13/cobra v1.7.0 - github.com/strangelove-ventures/async-icq/v7 v7.0.0-20230413165143-a3b65ccdc897 github.com/stretchr/testify v1.8.4 google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 google.golang.org/grpc v1.56.2 diff --git a/go.sum b/go.sum index 811516f00..32399ac31 100644 --- a/go.sum +++ b/go.sum @@ -494,6 +494,8 @@ github.com/cosmos/iavl v0.15.3/go.mod h1:OLjQiAQ4fGD2KDZooyJG9yz+p2ao2IAYSbke8mV github.com/cosmos/iavl v0.16.0/go.mod h1:2A8O/Jz9YwtjqXMO0CjnnbTYEEaovE8jWcwrakH3PoE= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.0.0-20230629164013-34f5e666f806 h1:QIRbYK2r9Ww8ua8j1S7c4i+cV6AiBLxghIdwZJW14C4= +github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.0.0-20230629164013-34f5e666f806/go.mod h1:/P6l2bWo2AR3rrsfs0DHuFZO3Imzb93sxFD3ihrIgw4= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230629164013-34f5e666f806 h1:ygkYdRulR9lGLSYOAQUBOBTyeRKZc1svBw5Bnv9Boe4= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230629164013-34f5e666f806/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= github.com/cosmos/ibc-go v1.0.0/go.mod h1:2wHKQUa+BLJMEyN635KrHfmTTwSNHBtXcqdY8JWGuXA= @@ -1503,8 +1505,6 @@ github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= -github.com/strangelove-ventures/async-icq/v7 v7.0.0-20230413165143-a3b65ccdc897 h1:lCTD5L1v1K1KC6KXjyt4o1X+yzV14RbbrPZaF29n8uI= -github.com/strangelove-ventures/async-icq/v7 v7.0.0-20230413165143-a3b65ccdc897/go.mod h1:ag05Q54Wkr0jVwfe+14sxnuWbw0gBOxtPQv9afBBnr0= github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0-20230523193151-73dea436e53f h1:NJdZ+YJ9Vf2t286L20IjFK0SxGpobF1xIp5ZQlxWetk= github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0-20230523193151-73dea436e53f/go.mod h1:DJNSVK8NCYHM+aZHCFkcAqPwjzwHYAjhjSMlhAGtJ3c= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= From 0fbad60b7145f0a041ceeaa35240a7b1392855d7 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 3 Aug 2023 01:43:42 +0530 Subject: [PATCH 20/90] icq keeper fix --- app/app.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index 08e9e21b2..9338d94d2 100644 --- a/app/app.go +++ b/app/app.go @@ -847,7 +847,8 @@ func New( app.IbcKeeper.ChannelKeeper, &app.IbcKeeper.PortKeeper, app.ScopedICQKeeper, - NewQuerierWrapper(baseApp), + app.GRPCQueryRouter(), + // NewQuerierWrapper(baseApp), // in-case of strangelove-ventures icq ) app.ICQKeeper = &icqKeeper From 5c301cc9f59d2281eb266e590676a993aefb2682 Mon Sep 17 00:00:00 2001 From: Dheeraj Dubey Date: Wed, 16 Aug 2023 15:33:29 +0530 Subject: [PATCH 21/90] added wasm bindings to fetch price per asset --- app/wasm/bindings/query.go | 9 +++++++++ app/wasm/queries.go | 19 +++++++++++++++++-- app/wasm/query_plugin.go | 11 +++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/app/wasm/bindings/query.go b/app/wasm/bindings/query.go index 0a89449dd..d1d7cfc63 100644 --- a/app/wasm/bindings/query.go +++ b/app/wasm/bindings/query.go @@ -30,6 +30,7 @@ type ComdexQuery struct { CheckBorrowed *CheckBorrowed `json:"check_borrowed,omitempty"` CheckLiquidityProvided *CheckLiquidityProvided `json:"check_liquidity_provided,omitempty"` GetPoolByApp *GetPoolByApp `json:"get_pool_by_app,omitempty"` + GetAssetPrice *GetAssetPrice `json:"Get_Asset_Price,omitempty"` } type AppData struct { @@ -291,3 +292,11 @@ type GetPoolByApp struct { type GetPoolByAppResponse struct { Pools []uint64 `json:"pools"` } + +type GetAssetPrice struct { + AssetID uint64 `json:"asset_id"` +} + +type GetAssetPriceResponse struct { + Price uint64 `json:"price"` +} diff --git a/app/wasm/queries.go b/app/wasm/queries.go index 88fb36a30..580674bde 100644 --- a/app/wasm/queries.go +++ b/app/wasm/queries.go @@ -1,8 +1,6 @@ package wasm import ( - sdk "github.com/cosmos/cosmos-sdk/types" - assetKeeper "github.com/comdex-official/comdex/x/asset/keeper" collectorkeeper "github.com/comdex-official/comdex/x/collector/keeper" esmKeeper "github.com/comdex-official/comdex/x/esm/keeper" @@ -10,9 +8,12 @@ import ( liquidationKeeper "github.com/comdex-official/comdex/x/liquidation/keeper" liquidityKeeper "github.com/comdex-official/comdex/x/liquidity/keeper" lockerkeeper "github.com/comdex-official/comdex/x/locker/keeper" + marketKeeper "github.com/comdex-official/comdex/x/market/keeper" rewardsKeeper "github.com/comdex-official/comdex/x/rewards/keeper" tokenMintKeeper "github.com/comdex-official/comdex/x/tokenmint/keeper" vaultKeeper "github.com/comdex-official/comdex/x/vault/keeper" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) type QueryPlugin struct { @@ -26,6 +27,7 @@ type QueryPlugin struct { vaultKeeper *vaultKeeper.Keeper lendKeeper *lendKeeper.Keeper liquidityKeeper *liquidityKeeper.Keeper + marketKeeper *marketKeeper.Keeper } func NewQueryPlugin( @@ -39,6 +41,7 @@ func NewQueryPlugin( vaultKeeper *vaultKeeper.Keeper, lendKeeper *lendKeeper.Keeper, liquidityKeeper *liquidityKeeper.Keeper, + marketKeeper *marketKeeper.Keeper, ) *QueryPlugin { return &QueryPlugin{ assetKeeper: assetKeeper, @@ -51,6 +54,7 @@ func NewQueryPlugin( vaultKeeper: vaultKeeper, lendKeeper: lendKeeper, liquidityKeeper: liquidityKeeper, + marketKeeper: marketKeeper, } } @@ -203,3 +207,14 @@ func (qp QueryPlugin) WasmGetPools(ctx sdk.Context, appID uint64) (pools []uint6 } return pools } + +func (qp QueryPlugin) WasmGetAssetPrice(ctx sdk.Context, assetID uint64) (assetPrice uint64, found bool) { + assetPrice, err := qp.marketKeeper.GetLatestPrice(ctx, assetID) + if !found { + if err != nil { + err = sdkerrors.Wrap(err, "WasmGetAssetPrice error") + return 0, false + } + } + return assetPrice, true +} diff --git a/app/wasm/query_plugin.go b/app/wasm/query_plugin.go index 09ba1a98d..015933e3f 100644 --- a/app/wasm/query_plugin.go +++ b/app/wasm/query_plugin.go @@ -355,6 +355,17 @@ func CustomQuerier(queryPlugin *QueryPlugin) func(ctx sdk.Context, request json. return nil, sdkerrors.Wrap(err, "GetPoolByApp query response") } return bz, nil + } else if comdexQuery.GetAssetPrice != nil { + assetID := comdexQuery.GetAssetPrice.AssetID + assetPrice, _ := queryPlugin.WasmGetAssetPrice(ctx, assetID) + res := bindings.GetAssetPriceResponse{ + Price: assetPrice, + } + bz, err := json.Marshal(res) + if err != nil { + return nil, sdkerrors.Wrap(err, "GetAssetPrice query response") + } + return bz, nil } return nil, wasmvmtypes.UnsupportedRequest{Kind: "unknown App Data query variant"} } From c18a23d7afc240b77d84abc9b4e7c80c18d28ad1 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 21 Aug 2023 21:31:04 +0530 Subject: [PATCH 22/90] wasm binding for price feed updated --- app/app.go | 2 +- app/wasm/queries.go | 14 +++++--------- app/wasm/test/messages_test.go | 27 ++++++++++++++++++--------- app/wasm/wasm.go | 4 +++- 4 files changed, 27 insertions(+), 20 deletions(-) diff --git a/app/app.go b/app/app.go index 482bef673..b1a75c8b7 100644 --- a/app/app.go +++ b/app/app.go @@ -842,7 +842,7 @@ func New( } supportedFeatures := "iterator,staking,stargate,comdex,cosmwasm_1_1" - wasmOpts = append(cwasm.RegisterCustomPlugins(&app.LockerKeeper, &app.TokenmintKeeper, &app.AssetKeeper, &app.Rewardskeeper, &app.CollectorKeeper, &app.LiquidationKeeper, &app.AuctionKeeper, &app.EsmKeeper, &app.VaultKeeper, &app.LendKeeper, &app.LiquidityKeeper), wasmOpts...) + wasmOpts = append(cwasm.RegisterCustomPlugins(&app.LockerKeeper, &app.TokenmintKeeper, &app.AssetKeeper, &app.Rewardskeeper, &app.CollectorKeeper, &app.LiquidationKeeper, &app.AuctionKeeper, &app.EsmKeeper, &app.VaultKeeper, &app.LendKeeper, &app.LiquidityKeeper, &app.MarketKeeper), wasmOpts...) app.WasmKeeper = wasmkeeper.NewKeeper( app.cdc, diff --git a/app/wasm/queries.go b/app/wasm/queries.go index 580674bde..cb9de874f 100644 --- a/app/wasm/queries.go +++ b/app/wasm/queries.go @@ -13,7 +13,6 @@ import ( tokenMintKeeper "github.com/comdex-official/comdex/x/tokenmint/keeper" vaultKeeper "github.com/comdex-official/comdex/x/vault/keeper" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) type QueryPlugin struct { @@ -208,13 +207,10 @@ func (qp QueryPlugin) WasmGetPools(ctx sdk.Context, appID uint64) (pools []uint6 return pools } -func (qp QueryPlugin) WasmGetAssetPrice(ctx sdk.Context, assetID uint64) (assetPrice uint64, found bool) { - assetPrice, err := qp.marketKeeper.GetLatestPrice(ctx, assetID) - if !found { - if err != nil { - err = sdkerrors.Wrap(err, "WasmGetAssetPrice error") - return 0, false - } +func (qp QueryPlugin) WasmGetAssetPrice(ctx sdk.Context, assetID uint64) (twa uint64, found bool) { + assetTwa, found := qp.marketKeeper.GetTwa(ctx, assetID) + if found && assetTwa.IsPriceActive{ + return assetTwa.Twa, true } - return assetPrice, true + return 0, false } diff --git a/app/wasm/test/messages_test.go b/app/wasm/test/messages_test.go index 74c91efab..bc6e1c5a7 100644 --- a/app/wasm/test/messages_test.go +++ b/app/wasm/test/messages_test.go @@ -22,7 +22,8 @@ func TestWhitelistAssetLocker(t *testing.T) { &comdex.EsmKeeper, &comdex.VaultKeeper, &comdex.LendKeeper, - &comdex.LiquidityKeeper) + &comdex.LiquidityKeeper, + &comdex.MarketKeeper) for _, tc := range []struct { name string msg *bindings.MsgWhiteListAssetLocker @@ -65,7 +66,8 @@ func TestAddMsgAddExtendedPairsVault(t *testing.T) { &comdex.EsmKeeper, &comdex.VaultKeeper, &comdex.LendKeeper, - &comdex.LiquidityKeeper) + &comdex.LiquidityKeeper, + &comdex.MarketKeeper) for _, tc := range []struct { name string msg *bindings.MsgAddExtendedPairsVault @@ -122,7 +124,8 @@ func TestMsgSetCollectorLookupTable(t *testing.T) { &comdex.EsmKeeper, &comdex.VaultKeeper, &comdex.LendKeeper, - &comdex.LiquidityKeeper) + &comdex.LiquidityKeeper, + &comdex.MarketKeeper) for _, tc := range []struct { name string msg *bindings.MsgSetCollectorLookupTable @@ -173,7 +176,8 @@ func TestMsgSetAuctionMappingForApp(t *testing.T) { &comdex.EsmKeeper, &comdex.VaultKeeper, &comdex.LendKeeper, - &comdex.LiquidityKeeper) + &comdex.LiquidityKeeper, + &comdex.MarketKeeper) for _, tc := range []struct { name string msg *bindings.MsgSetAuctionMappingForApp @@ -223,7 +227,8 @@ func TestMsgUpdateCollectorLookupTable(t *testing.T) { &comdex.EsmKeeper, &comdex.VaultKeeper, &comdex.LendKeeper, - &comdex.LiquidityKeeper) + &comdex.LiquidityKeeper, + &comdex.MarketKeeper) for _, tc := range []struct { name string msg *bindings.MsgUpdateCollectorLookupTable @@ -274,7 +279,8 @@ func TestMsgUpdatePairsVault(t *testing.T) { &comdex.EsmKeeper, &comdex.VaultKeeper, &comdex.LendKeeper, - &comdex.LiquidityKeeper) + &comdex.LiquidityKeeper, + &comdex.MarketKeeper) for _, tc := range []struct { name string msg *bindings.MsgUpdatePairsVault @@ -329,7 +335,8 @@ func TestMsgWhitelistAppIDLiquidation(t *testing.T) { &comdex.EsmKeeper, &comdex.VaultKeeper, &comdex.LendKeeper, - &comdex.LiquidityKeeper) + &comdex.LiquidityKeeper, + &comdex.MarketKeeper) for _, tc := range []struct { name string msg *bindings.MsgWhitelistAppIDLiquidation @@ -376,7 +383,8 @@ func TestMsgRemoveWhitelistAppIDLiquidation(t *testing.T) { &comdex.EsmKeeper, &comdex.VaultKeeper, &comdex.LendKeeper, - &comdex.LiquidityKeeper) + &comdex.LiquidityKeeper, + &comdex.MarketKeeper) for _, tc := range []struct { name string msg *bindings.MsgRemoveWhitelistAppIDLiquidation @@ -419,7 +427,8 @@ func TestMsgAddAuctionParams(t *testing.T) { &comdex.EsmKeeper, &comdex.VaultKeeper, &comdex.LendKeeper, - &comdex.LiquidityKeeper) + &comdex.LiquidityKeeper, + &comdex.MarketKeeper) for _, tc := range []struct { name string msg *bindings.MsgAddAuctionParams diff --git a/app/wasm/wasm.go b/app/wasm/wasm.go index 8c33c186b..3aab22cce 100644 --- a/app/wasm/wasm.go +++ b/app/wasm/wasm.go @@ -15,6 +15,7 @@ import ( rewardsKeeper "github.com/comdex-official/comdex/x/rewards/keeper" tokenMintkeeper "github.com/comdex-official/comdex/x/tokenmint/keeper" vaultKeeper "github.com/comdex-official/comdex/x/vault/keeper" + marketKeeper "github.com/comdex-official/comdex/x/market/keeper" ) func RegisterCustomPlugins( @@ -29,8 +30,9 @@ func RegisterCustomPlugins( vault *vaultKeeper.Keeper, lend *lendKeeper.Keeper, liquidity *liquidityKeeper.Keeper, + market *marketKeeper.Keeper, ) []wasmkeeper.Option { - comdexQueryPlugin := NewQueryPlugin(asset, locker, tokenMint, rewards, collector, liquidation, esm, vault, lend, liquidity) + comdexQueryPlugin := NewQueryPlugin(asset, locker, tokenMint, rewards, collector, liquidation, esm, vault, lend, liquidity, market) appDataQueryPluginOpt := wasmkeeper.WithQueryPlugins(&wasmkeeper.QueryPlugins{ Custom: CustomQuerier(comdexQueryPlugin), From f0b41c690b77612490eccbaabe4e789a1ee42e0e Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Tue, 22 Aug 2023 12:01:06 +0530 Subject: [PATCH 23/90] random no added for testing --- go-cosmwasm/api/bindings.h | 252 +++++++++ go-cosmwasm/api/callbacks.go | 421 ++++++++++++++ go-cosmwasm/api/callbacks_cgo.go | 60 ++ go-cosmwasm/api/callbacks_cgo_mock.go | 61 ++ go-cosmwasm/api/callbacks_mock.go | 411 ++++++++++++++ go-cosmwasm/api/iterator.go | 73 +++ go-cosmwasm/api/lib.go | 472 ++++++++++++++++ go-cosmwasm/api/lib_mock.go | 293 ++++++++++ go-cosmwasm/api/link_muslc.go | 7 + go-cosmwasm/api/link_std.go | 7 + go-cosmwasm/api/memory.go | 84 +++ go-cosmwasm/api/testdata/contract.wasm | Bin 0 -> 62845 bytes go-cosmwasm/api/testdata/download_releases.sh | 16 + go-cosmwasm/api/testdata/hackatom.wasm | Bin 0 -> 183230 bytes go-cosmwasm/api/testdata/queue.wasm | Bin 0 -> 99932 bytes go-cosmwasm/api/testdata/reflect.wasm | Bin 0 -> 169095 bytes go-cosmwasm/types/env.go | 61 ++ go-cosmwasm/types/env_test.go | 49 ++ go-cosmwasm/types/queries.go | 534 ++++++++++++++++++ go-cosmwasm/types/queries_test.go | 64 +++ go-cosmwasm/types/stderror.go | 202 +++++++ go-cosmwasm/types/systemerror.go | 138 +++++ go-cosmwasm/types/types.go | 92 +++ go-cosmwasm/types/v010/msg_v010.go | 197 +++++++ go-cosmwasm/types/v1/ibc.go | 289 ++++++++++ go-cosmwasm/types/v1/msg_v1.go | 224 ++++++++ go-cosmwasm/types/v1/subcall.go | 124 ++++ go-cosmwasm/types/v1/type.go | 8 + go.mod | 7 +- go.sum | 12 +- x/market/abci.go | 1 + x/market/keeper/seed.go | 24 + x/market/module.go | 41 ++ x/market/types/keys.go | 13 +- 34 files changed, 4231 insertions(+), 6 deletions(-) create mode 100644 go-cosmwasm/api/bindings.h create mode 100644 go-cosmwasm/api/callbacks.go create mode 100644 go-cosmwasm/api/callbacks_cgo.go create mode 100644 go-cosmwasm/api/callbacks_cgo_mock.go create mode 100644 go-cosmwasm/api/callbacks_mock.go create mode 100644 go-cosmwasm/api/iterator.go create mode 100644 go-cosmwasm/api/lib.go create mode 100644 go-cosmwasm/api/lib_mock.go create mode 100644 go-cosmwasm/api/link_muslc.go create mode 100644 go-cosmwasm/api/link_std.go create mode 100644 go-cosmwasm/api/memory.go create mode 100644 go-cosmwasm/api/testdata/contract.wasm create mode 100755 go-cosmwasm/api/testdata/download_releases.sh create mode 100644 go-cosmwasm/api/testdata/hackatom.wasm create mode 100644 go-cosmwasm/api/testdata/queue.wasm create mode 100644 go-cosmwasm/api/testdata/reflect.wasm create mode 100644 go-cosmwasm/types/env.go create mode 100644 go-cosmwasm/types/env_test.go create mode 100644 go-cosmwasm/types/queries.go create mode 100644 go-cosmwasm/types/queries_test.go create mode 100644 go-cosmwasm/types/stderror.go create mode 100644 go-cosmwasm/types/systemerror.go create mode 100644 go-cosmwasm/types/types.go create mode 100644 go-cosmwasm/types/v010/msg_v010.go create mode 100644 go-cosmwasm/types/v1/ibc.go create mode 100644 go-cosmwasm/types/v1/msg_v1.go create mode 100644 go-cosmwasm/types/v1/subcall.go create mode 100644 go-cosmwasm/types/v1/type.go create mode 100644 x/market/keeper/seed.go diff --git a/go-cosmwasm/api/bindings.h b/go-cosmwasm/api/bindings.h new file mode 100644 index 000000000..d93ca5874 --- /dev/null +++ b/go-cosmwasm/api/bindings.h @@ -0,0 +1,252 @@ +/* (c) 2019 Confio UO. Licensed under Apache-2.0 */ + +/* Generated with cbindgen:0.14.3 */ + +/* Warning, this file is autogenerated by cbindgen. Don't modify this manually. */ + +#include +#include +#include +#include + +enum ErrnoValue { + ErrnoValue_Success = 0, + ErrnoValue_Other = 1, + ErrnoValue_OutOfGas = 2, +}; +typedef int32_t ErrnoValue; + +/** + * This enum gives names to the status codes returned from Go callbacks to Rust. + * + * The go code will return one of these variants when returning. + * + */ +enum GoResult { + GoResult_Ok = 0, + /** + * Go panicked for an unexpected reason. + */ + GoResult_Panic = 1, + /** + * Go received a bad argument from Rust + */ + GoResult_BadArgument = 2, + /** + * Ran out of gas while using the SDK (e.g. storage) + */ + GoResult_OutOfGas = 3, + /** + * An error happened during normal operation of a Go callback, which should abort the contract + */ + GoResult_Other = 4, + /** + * An error happened during normal operation of a Go callback, which should be fed back to the contract + */ + GoResult_User = 5, +}; +typedef int32_t GoResult; + +typedef struct Buffer { + uint8_t *ptr; + uintptr_t len; + uintptr_t cap; +} Buffer; + +/** + * The result type of the FFI function analyze_code. + * + * Please note that the unmanaged vector in `required_features` + * has to be destroyed exactly once. When calling `analyze_code` + * from Go this is done via `C.destroy_unmanaged_vector`. + */ +typedef struct AnalysisReport { + bool has_ibc_entry_points; + /** + * An UTF-8 encoded comma separated list of required features. + * This is never None/nil. + */ + Buffer required_features; +} AnalysisReport; + +typedef struct cache_t { + +} cache_t; + +typedef struct EnclaveRuntimeConfig { + uint32_t module_cache_size; +} EnclaveRuntimeConfig; + +/** + * An opaque type. `*gas_meter_t` represents a pointer to Go memory holding the gas meter. + */ +typedef struct gas_meter_t { + uint8_t _private[0]; +} gas_meter_t; + +typedef struct db_t { + uint8_t _private[0]; +} db_t; + +typedef struct iterator_t { + uint64_t db_counter; + uint64_t iterator_index; +} iterator_t; + +typedef struct Iterator_vtable { + int32_t (*next_db)(iterator_t, gas_meter_t*, uint64_t*, Buffer*, Buffer*, Buffer*); +} Iterator_vtable; + +typedef struct GoIter { + gas_meter_t *gas_meter; + iterator_t state; + Iterator_vtable vtable; +} GoIter; + +typedef struct DB_vtable { + int32_t (*read_db)(db_t*, gas_meter_t*, uint64_t*, Buffer, Buffer*, Buffer*); + int32_t (*write_db)(db_t*, gas_meter_t*, uint64_t*, Buffer, Buffer, Buffer*); + int32_t (*remove_db)(db_t*, gas_meter_t*, uint64_t*, Buffer, Buffer*); + int32_t (*scan_db)(db_t*, gas_meter_t*, uint64_t*, Buffer, Buffer, int32_t, GoIter*, Buffer*); +} DB_vtable; + +typedef struct DB { + gas_meter_t *gas_meter; + db_t *state; + DB_vtable vtable; +} DB; + +typedef struct api_t { + uint8_t _private[0]; +} api_t; + +typedef struct GoApi_vtable { + int32_t (*humanize_address)(const api_t*, Buffer, Buffer*, Buffer*, uint64_t*); + int32_t (*canonicalize_address)(const api_t*, Buffer, Buffer*, Buffer*, uint64_t*); +} GoApi_vtable; + +typedef struct GoApi { + const api_t *state; + GoApi_vtable vtable; +} GoApi; + +typedef struct querier_t { + uint8_t _private[0]; +} querier_t; + +typedef struct Querier_vtable { + int32_t (*query_external)(const querier_t*, uint64_t, uint64_t*, Buffer, uint32_t, Buffer*, Buffer*); +} Querier_vtable; + +typedef struct GoQuerier { + const querier_t *state; + Querier_vtable vtable; +} GoQuerier; + +Buffer allocate_rust(const uint8_t *ptr, uintptr_t length); + +AnalysisReport analyze_code(cache_t *cache, Buffer checksum, Buffer *error_msg); + +void configure_enclave_runtime(EnclaveRuntimeConfig config, Buffer *err); + +Buffer create(cache_t *cache, Buffer wasm, Buffer *err); + +bool create_attestation_report(Buffer api_key, Buffer *err, bool dry_run); + +void free_rust(Buffer buf); + +Buffer get_code(cache_t *cache, Buffer id, Buffer *err); + +Buffer get_encrypted_genesis_seed(Buffer pk, Buffer *err); + +Buffer get_encrypted_seed(Buffer cert, Buffer *err); + +Buffer get_health_check(Buffer *err); + +Buffer handle(cache_t *cache, + Buffer code_id, + Buffer params, + Buffer msg, + DB db, + GoApi api, + GoQuerier querier, + uint64_t gas_limit, + uint64_t *gas_used, + Buffer *err, + Buffer sig_info, + uint8_t handle_type); + +Buffer init_bootstrap(Buffer spid, Buffer api_key, Buffer *err); + +cache_t *init_cache(Buffer data_dir, Buffer supported_features, uintptr_t _cache_size, Buffer *err); + +bool init_node(Buffer master_key, Buffer encrypted_seed, Buffer api_key, Buffer *err); + +Buffer instantiate(cache_t *cache, + Buffer contract_id, + Buffer params, + Buffer msg, + DB db, + GoApi api, + GoQuerier querier, + uint64_t gas_limit, + uint64_t *gas_used, + Buffer *err, + Buffer sig_info, + Buffer admin); + +Buffer key_gen(Buffer *err); + +Buffer migrate(cache_t *cache, + Buffer contract_id, + Buffer params, + Buffer msg, + DB db, + GoApi api, + GoQuerier querier, + uint64_t gas_limit, + uint64_t *gas_used, + Buffer *err, + Buffer sig_info, + Buffer admin, + Buffer admin_proof); + +Buffer query(cache_t *cache, + Buffer code_id, + Buffer params, + Buffer msg, + DB db, + GoApi api, + GoQuerier querier, + uint64_t gas_limit, + uint64_t *gas_used, + Buffer *err); + +/** + * frees a cache reference + * + * # Safety + * + * This must be called exactly once for any `*cache_t` returned by `init_cache` + * and cannot be called on any other pointer. + */ +void release_cache(cache_t *cache); + +Buffer submit_block_signatures(Buffer header, + Buffer commit, + Buffer txs, + Buffer random, + Buffer *err); + +Buffer update_admin(cache_t *cache, + Buffer contract_id, + Buffer params, + DB db, + GoApi api, + GoQuerier querier, + uint64_t gas_limit, + Buffer *err, + Buffer sig_info, + Buffer current_admin, + Buffer current_admin_proof, + Buffer new_admin); diff --git a/go-cosmwasm/api/callbacks.go b/go-cosmwasm/api/callbacks.go new file mode 100644 index 000000000..c7382a90f --- /dev/null +++ b/go-cosmwasm/api/callbacks.go @@ -0,0 +1,421 @@ +//go:build !secretcli +// +build !secretcli + +package api + +/* +#include "bindings.h" + +// typedefs for _cgo functions (db) +typedef GoResult (*read_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val, Buffer *errOut); +typedef GoResult (*write_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val, Buffer *errOut); +typedef GoResult (*remove_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *errOut); +typedef GoResult (*scan_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out, Buffer *errOut); +// iterator +typedef GoResult (*next_db_fn)(iterator_t idx, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val, Buffer *errOut); +// and api +typedef GoResult (*humanize_address_fn)(api_t *ptr, Buffer canon, Buffer *human, Buffer *errOut, uint64_t *used_gas); +typedef GoResult (*canonicalize_address_fn)(api_t *ptr, Buffer human, Buffer *canon, Buffer *errOut, uint64_t *used_gas); +typedef GoResult (*query_external_fn)(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut); + +// forward declarations (db) +GoResult cGet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val, Buffer *errOut); +GoResult cSet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val, Buffer *errOut); +GoResult cDelete_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *errOut); +GoResult cScan_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out, Buffer *errOut); +// iterator +GoResult cNext_cgo(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val, Buffer *errOut); +// api +GoResult cHumanAddress_cgo(api_t *ptr, Buffer canon, Buffer *human, Buffer *errOut, uint64_t *used_gas); +GoResult cCanonicalAddress_cgo(api_t *ptr, Buffer human, Buffer *canon, Buffer *errOut, uint64_t *used_gas); +// and querier +GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut); + + +*/ +import "C" + +import ( + "encoding/json" + "fmt" + "log" + "reflect" + "unsafe" + + dbm "github.com/tendermint/tm-db" + + "github.com/comdex-official/comdex/go-cosmwasm/types" +) + +// Note: we have to include all exports in the same file (at least since they both import bindings.h), +// or get odd cgo build errors about duplicate definitions + +func recoverPanic(ret *C.GoResult) { + rec := recover() + // we don't want to import cosmos-sdk + // we also cannot use interfaces to detect these error types (as they have no methods) + // so, let's just rely on the descriptive names + // this is used to detect "out of gas panics" + if rec != nil { + name := reflect.TypeOf(rec).Name() + switch name { + // These two cases are for types thrown in panics from this module: + // https://github.com/cosmos/cosmos-sdk/blob/4ffabb65a5c07dbb7010da397535d10927d298c1/store/types/gas.go + // ErrorOutOfGas needs to be propagated through the rust code and back into go code, where it should + // probably be thrown in a panic again. + // TODO figure out how to pass the text in its `Descriptor` field through all the FFI + // TODO handle these cases on the Rust side in the first place + case "ErrorOutOfGas": + *ret = C.GoResult_OutOfGas + // Looks like this error is not treated specially upstream: + // https://github.com/cosmos/cosmos-sdk/blob/4ffabb65a5c07dbb7010da397535d10927d298c1/baseapp/baseapp.go#L818-L853 + // but this needs to be periodically verified, in case they do start checking for this type + // case "ErrorGasOverflow": + default: + log.Printf("Panic in Go callback: %#v\n", rec) + *ret = C.GoResult_Panic + } + } +} + +type Gas = uint64 + +// GasMeter is a copy of an interface declaration from cosmos-sdk +// https://github.com/cosmos/cosmos-sdk/blob/18890a225b46260a9adc587be6fa1cc2aff101cd/store/types/gas.go#L34 +type GasMeter interface { + GasConsumed() Gas +} + +/****** DB ********/ + +// KVStore copies a subset of types from cosmos-sdk +// We may wish to make this more generic sometime in the future, but not now +// https://github.com/cosmos/cosmos-sdk/blob/bef3689245bab591d7d169abd6bea52db97a70c7/store/types/store.go#L170 +type KVStore interface { + Get(key []byte) []byte + Set(key, value []byte) + Delete(key []byte) + + // Iterator over a domain of keys in ascending order. End is exclusive. + // Start must be less than end, or the Iterator is invalid. + // Iterator must be closed by caller. + // To iterate over entire domain, use store.Iterator(nil, nil) + Iterator(start, end []byte) dbm.Iterator + + // Iterator over a domain of keys in descending order. End is exclusive. + // Start must be less than end, or the Iterator is invalid. + // Iterator must be closed by caller. + ReverseIterator(start, end []byte) dbm.Iterator +} + +var db_vtable = C.DB_vtable{ + read_db: (C.read_db_fn)(C.cGet_cgo), + write_db: (C.write_db_fn)(C.cSet_cgo), + remove_db: (C.remove_db_fn)(C.cDelete_cgo), + scan_db: (C.scan_db_fn)(C.cScan_cgo), +} + +type DBState struct { + Store KVStore + // IteratorStackID is used to lookup the proper stack frame for iterators associated with this DB (iterator.go) + IteratorStackID uint64 +} + +// use this to create C.DB in two steps, so the pointer lives as long as the calling stack +// +// state := buildDBState(kv, counter) +// db := buildDB(&state, &gasMeter) +// // then pass db into some FFI function +func buildDBState(kv KVStore, counter uint64) DBState { + return DBState{ + Store: kv, + IteratorStackID: counter, + } +} + +// contract: original pointer/struct referenced must live longer than C.DB struct +// since this is only used internally, we can verify the code that this is the case +func buildDB(state *DBState, gm *GasMeter) C.DB { + return C.DB{ + gas_meter: (*C.gas_meter_t)(unsafe.Pointer(gm)), + state: (*C.db_t)(unsafe.Pointer(state)), + vtable: db_vtable, + } +} + +var iterator_vtable = C.Iterator_vtable{ + next_db: (C.next_db_fn)(C.cNext_cgo), +} + +// contract: original pointer/struct referenced must live longer than C.DB struct +// since this is only used internally, we can verify the code that this is the case +func buildIterator(dbCounter uint64, it dbm.Iterator) C.iterator_t { + idx := storeIterator(dbCounter, it) + return C.iterator_t{ + db_counter: u64(dbCounter), + iterator_index: u64(idx), + } +} + +//export cGet +func cGet(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *u64, key C.Buffer, val *C.Buffer, _ *C.Buffer) (ret C.GoResult) { + defer recoverPanic(&ret) + if ptr == nil || gasMeter == nil || usedGas == nil || val == nil { + // we received an invalid pointer + return C.GoResult_BadArgument + } + + gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) + kv := *(*KVStore)(unsafe.Pointer(ptr)) + k := receiveSlice(key) + + gasBefore := gm.GasConsumed() + v := kv.Get(k) + gasAfter := gm.GasConsumed() + *usedGas = (u64)(gasAfter - gasBefore) + + // v will equal nil when the key is missing + // https://github.com/cosmos/cosmos-sdk/blob/1083fa948e347135861f88e07ec76b0314296832/store/types/store.go#L174 + if v != nil { + *val = allocateRust(v) + } + // else: the Buffer on the rust side is initialised as a "null" buffer, + // so if we don't write a non-null address to it, it will understand that + // the key it requested does not exist in the kv store + + return C.GoResult_Ok +} + +//export cSet +func cSet(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer, val C.Buffer, _ *C.Buffer) (ret C.GoResult) { + defer recoverPanic(&ret) + if ptr == nil || gasMeter == nil || usedGas == nil { + // we received an invalid pointer + return C.GoResult_BadArgument + } + + gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) + kv := *(*KVStore)(unsafe.Pointer(ptr)) + k := receiveSlice(key) + v := receiveSlice(val) + + gasBefore := gm.GasConsumed() + kv.Set(k, v) + gasAfter := gm.GasConsumed() + *usedGas = (C.uint64_t)(gasAfter - gasBefore) + + return C.GoResult_Ok +} + +//export cDelete +func cDelete(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer, _ *C.Buffer) (ret C.GoResult) { + defer recoverPanic(&ret) + if ptr == nil || gasMeter == nil || usedGas == nil { + // we received an invalid pointer + return C.GoResult_BadArgument + } + + gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) + kv := *(*KVStore)(unsafe.Pointer(ptr)) + k := receiveSlice(key) + + gasBefore := gm.GasConsumed() + kv.Delete(k) + gasAfter := gm.GasConsumed() + *usedGas = (C.uint64_t)(gasAfter - gasBefore) + + return C.GoResult_Ok +} + +//export cScan +func cScan(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, start C.Buffer, end C.Buffer, order i32, out *C.GoIter, _ *C.Buffer) (ret C.GoResult) { + defer recoverPanic(&ret) + if ptr == nil || gasMeter == nil || usedGas == nil || out == nil { + // we received an invalid pointer + return C.GoResult_BadArgument + } + + gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) + state := (*DBState)(unsafe.Pointer(ptr)) + kv := state.Store + // handle null as well as data + var s, e []byte + if start.ptr != nil { + s = receiveSlice(start) + } + if end.ptr != nil { + e = receiveSlice(end) + } + + var iter dbm.Iterator + gasBefore := gm.GasConsumed() + switch order { + case 1: // Ascending + iter = kv.Iterator(s, e) + case 2: // Descending + iter = kv.ReverseIterator(s, e) + default: + return C.GoResult_BadArgument + } + gasAfter := gm.GasConsumed() + *usedGas = (C.uint64_t)(gasAfter - gasBefore) + + out.state = buildIterator(state.IteratorStackID, iter) + out.vtable = iterator_vtable + return C.GoResult_Ok +} + +//export cNext +func cNext(ref C.iterator_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key *C.Buffer, val *C.Buffer, _ *C.Buffer) (ret C.GoResult) { + // typical usage of iterator + // for ; itr.Valid(); itr.Next() { + // k, v := itr.Key(); itr.Value() + // ... + // } + + defer recoverPanic(&ret) + if ref.db_counter == 0 || gasMeter == nil || usedGas == nil || key == nil || val == nil { + // we received an invalid pointer + return C.GoResult_BadArgument + } + + gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) + iter := retrieveIterator(uint64(ref.db_counter), uint64(ref.iterator_index)) + if !iter.Valid() { + // end of iterator, return as no-op, nil key is considered end + return C.GoResult_Ok + } + + gasBefore := gm.GasConsumed() + // call Next at the end, upon creation we have first data loaded + k := iter.Key() + v := iter.Value() + // check iter.Error() ???? + iter.Next() + gasAfter := gm.GasConsumed() + *usedGas = (C.uint64_t)(gasAfter - gasBefore) + + if k != nil { + *key = allocateRust(k) + *val = allocateRust(v) + } + return C.GoResult_Ok +} + +/***** GoAPI *******/ + +type ( + HumanizeAddress func([]byte) (string, uint64, error) + CanonicalizeAddress func(string) ([]byte, uint64, error) +) + +type GoAPI struct { + HumanAddress HumanizeAddress + CanonicalAddress CanonicalizeAddress +} + +var api_vtable = C.GoApi_vtable{ + humanize_address: (C.humanize_address_fn)(C.cHumanAddress_cgo), + canonicalize_address: (C.canonicalize_address_fn)(C.cCanonicalAddress_cgo), +} + +// contract: original pointer/struct referenced must live longer than C.GoApi struct +// since this is only used internally, we can verify the code that this is the case +func buildAPI(api *GoAPI) C.GoApi { + return C.GoApi{ + state: (*C.api_t)(unsafe.Pointer(api)), + vtable: api_vtable, + } +} + +//export cHumanAddress +func cHumanAddress(ptr *C.api_t, canon C.Buffer, human *C.Buffer, errOut *C.Buffer, used_gas *u64) (ret C.GoResult) { + defer recoverPanic(&ret) + if human == nil { + // we received an invalid pointer + return C.GoResult_BadArgument + } + api := (*GoAPI)(unsafe.Pointer(ptr)) + c := receiveSlice(canon) + h, cost, err := api.HumanAddress(c) + *used_gas = u64(cost) + if err != nil { + // store the actual error message in the return buffer + *errOut = allocateRust([]byte(err.Error())) + return C.GoResult_User + } + if len(h) == 0 { + panic(fmt.Sprintf("`api.HumanAddress()` returned an empty string for %q", c)) + } + *human = allocateRust([]byte(h)) + return C.GoResult_Ok +} + +//export cCanonicalAddress +func cCanonicalAddress(ptr *C.api_t, human C.Buffer, canon *C.Buffer, errOut *C.Buffer, used_gas *u64) (ret C.GoResult) { + defer recoverPanic(&ret) + + if canon == nil { + // we received an invalid pointer + return C.GoResult_BadArgument + } + + api := (*GoAPI)(unsafe.Pointer(ptr)) + h := string(receiveSlice(human)) + c, cost, err := api.CanonicalAddress(h) + *used_gas = u64(cost) + if err != nil { + // store the actual error message in the return buffer + *errOut = allocateRust([]byte(err.Error())) + return C.GoResult_User + } + if len(c) == 0 { + panic(fmt.Sprintf("`api.CanonicalAddress()` returned an empty string for %q", h)) + } + *canon = allocateRust(c) + + // If we do not set canon to a meaningful value, then the other side will interpret that as an empty result. + return C.GoResult_Ok +} + +/****** Go Querier ********/ + +var querier_vtable = C.Querier_vtable{ + query_external: (C.query_external_fn)(C.cQueryExternal_cgo), +} + +// contract: original pointer/struct referenced must live longer than C.GoQuerier struct +// since this is only used internally, we can verify the code that this is the case +func buildQuerier(q *Querier) C.GoQuerier { + return C.GoQuerier{ + state: (*C.querier_t)(unsafe.Pointer(q)), + vtable: querier_vtable, + } +} + +//export cQueryExternal +func cQueryExternal(ptr *C.querier_t, gasLimit C.uint64_t, usedGas *C.uint64_t, request C.Buffer, queryDepth C.uint32_t, result *C.Buffer, errOut *C.Buffer) (ret C.GoResult) { + defer recoverPanic(&ret) + if ptr == nil || usedGas == nil || result == nil { + // we received an invalid pointer + return C.GoResult_BadArgument + } + + // query the data + querier := *(*Querier)(unsafe.Pointer(ptr)) + req := receiveSlice(request) + + gasBefore := querier.GasConsumed() + res := types.RustQuery(querier, req, uint32(queryDepth), uint64(gasLimit)) + gasAfter := querier.GasConsumed() + *usedGas = (C.uint64_t)(gasAfter - gasBefore) + + // serialize the response + bz, err := json.Marshal(res) + if err != nil { + *errOut = allocateRust([]byte(err.Error())) + return C.GoResult_Other + } + *result = allocateRust(bz) + return C.GoResult_Ok +} diff --git a/go-cosmwasm/api/callbacks_cgo.go b/go-cosmwasm/api/callbacks_cgo.go new file mode 100644 index 000000000..b208d21d3 --- /dev/null +++ b/go-cosmwasm/api/callbacks_cgo.go @@ -0,0 +1,60 @@ +//go:build !secretcli +// +build !secretcli + +package api + +/* +#include "bindings.h" +#include + +// imports (db) +GoResult cSet(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val, Buffer *errOut); +GoResult cGet(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val, Buffer *errOut); +GoResult cDelete(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *errOut); +GoResult cScan(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out, Buffer *errOut); +// imports (iterator) +GoResult cNext(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val, Buffer *errOut); +// imports (api) +GoResult cHumanAddress(api_t *ptr, Buffer canon, Buffer *human, Buffer *errOut, uint64_t *used_gas); +GoResult cCanonicalAddress(api_t *ptr, Buffer human, Buffer *canon, Buffer *errOut, uint64_t *used_gas); +// imports (querier) +GoResult cQueryExternal(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut); + +// Gateway functions (db) +GoResult cGet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val, Buffer *errOut) { + return cGet(ptr, gas_meter, used_gas, key, val, errOut); +} +GoResult cSet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val, Buffer *errOut) { + return cSet(ptr, gas_meter, used_gas, key, val, errOut); +} +GoResult cDelete_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *errOut) { + return cDelete(ptr, gas_meter, used_gas, key, errOut); +} +GoResult cScan_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out, Buffer *errOut) { + return cScan(ptr, gas_meter, used_gas, start, end, order, out, errOut); +} + +// Gateway functions (iterator) +GoResult cNext_cgo(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val, Buffer *errOut) { + return cNext(ptr, gas_meter, used_gas, key, val, errOut); +} + +// Gateway functions (api) +GoResult cCanonicalAddress_cgo(api_t *ptr, Buffer human, Buffer *canon, Buffer *errOut, uint64_t *used_gas) { + return cCanonicalAddress(ptr, human, canon, errOut, used_gas); +} +GoResult cHumanAddress_cgo(api_t *ptr, Buffer canon, Buffer *human, Buffer *errOut, uint64_t *used_gas) { + return cHumanAddress(ptr, canon, human, errOut, used_gas); +} + +// Gateway functions (querier) +GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut) { + return cQueryExternal(ptr, gas_limit, used_gas, request, query_depth, result, errOut); +} +*/ +import "C" + +// We need these gateway functions to allow calling back to a go function from the c code. +// At least I didn't discover a cleaner way. +// Also, this needs to be in a different file than `callbacks.go`, as we cannot create functions +// in the same file that has //export directives. Only import header types diff --git a/go-cosmwasm/api/callbacks_cgo_mock.go b/go-cosmwasm/api/callbacks_cgo_mock.go new file mode 100644 index 000000000..cafb234be --- /dev/null +++ b/go-cosmwasm/api/callbacks_cgo_mock.go @@ -0,0 +1,61 @@ +//go:build secretcli +// +build secretcli + +package api + +// +///* +//#include "bindings.h" +//#include +// +//// imports (db) +//GoResult cSet(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val); +//GoResult cGet(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val); +//GoResult cDelete(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key); +//GoResult cScan(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out); +//// imports (iterator) +//GoResult cNext(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val); +//// imports (api) +//GoResult cHumanAddress(api_t *ptr, Buffer canon, Buffer *human); +//GoResult cCanonicalAddress(api_t *ptr, Buffer human, Buffer *canon); +//// imports (querier) +//GoResult cQueryExternal(querier_t *ptr, uint64_t *used_gas, Buffer request, Buffer *result); +// +//// Gateway functions (db) +//GoResult cGet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val) { +// return cGet(ptr, gas_meter, used_gas, key, val); +//} +//GoResult cSet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val) { +// return cSet(ptr, gas_meter, used_gas, key, val); +//} +//GoResult cDelete_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key) { +// return cDelete(ptr, gas_meter, used_gas, key); +//} +//GoResult cScan_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out) { +// return cScan(ptr, gas_meter, used_gas, start, end, order, out); +//} +// +//// Gateway functions (iterator) +//GoResult cNext_cgo(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val) { +// return cNext(ptr, gas_meter, used_gas, key, val); +//} +// +//// Gateway functions (api) +//GoResult cCanonicalAddress_cgo(api_t *ptr, Buffer human, Buffer *canon) { +// return cCanonicalAddress(ptr, human, canon); +//} +//GoResult cHumanAddress_cgo(api_t *ptr, Buffer canon, Buffer *human) { +// return cHumanAddress(ptr, canon, human); +//} +// +//// Gateway functions (querier) +//GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t *used_gas, Buffer request, Buffer *result) { +// return cQueryExternal(ptr, used_gas, request, result); +//} +//*/ +//import "C" +// +//// We need these gateway functions to allow calling back to a go function from the c code. +//// At least I didn't discover a cleaner way. +//// Also, this needs to be in a different file than `callbacks.go`, as we cannot create functions +//// in the same file that has //export directives. Only import header types diff --git a/go-cosmwasm/api/callbacks_mock.go b/go-cosmwasm/api/callbacks_mock.go new file mode 100644 index 000000000..7297ce0b2 --- /dev/null +++ b/go-cosmwasm/api/callbacks_mock.go @@ -0,0 +1,411 @@ +//go:build secretcli +// +build secretcli + +package api + +// /* +// #include "bindings.h" +// +// // typedefs for _cgo functions (db) +// typedef GoResult (*read_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val); +// typedef GoResult (*write_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val); +// typedef GoResult (*remove_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key); +// typedef GoResult (*scan_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out); +// // iterator +// typedef GoResult (*next_db_fn)(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val); +// // and api +// typedef GoResult (*humanize_address_fn)(api_t*, Buffer, Buffer*); +// typedef GoResult (*canonicalize_address_fn)(api_t*, Buffer, Buffer*); +// typedef GoResult (*query_external_fn)(querier_t *ptr, uint64_t *used_gas, Buffer request, Buffer *result); +// +// // forward declarations (db) +// GoResult cGet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val); +// GoResult cSet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val); +// GoResult cDelete_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key); +// GoResult cScan_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out); +// // iterator +// GoResult cNext_cgo(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val); +// // api +// GoResult cHumanAddress_cgo(api_t *ptr, Buffer canon, Buffer *human); +// GoResult cCanonicalAddress_cgo(api_t *ptr, Buffer human, Buffer *canon); +// // and querier +// GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t *used_gas, Buffer request, Buffer *result); +// */ +// import "C" +// +// import ( +// +// "encoding/json" +// "fmt" +// "log" +// "reflect" +// "unsafe" +// +// dbm "github.com/tendermint/tm-db" +// +// "github.com/comdex-official/comdex/go-cosmwasm/types" +// +// ) +// +// type i32 = uint32 +// +// // Note: we have to include all exports in the same file (at least since they both import bindings.h), +// // or get odd cgo build errors about duplicate definitions +// +// func recoverPanic(ret *C.GoResult) { +// rec := recover() +// // we don't want to import cosmos-sdk +// // we also cannot use interfaces to detect these error types (as they have no methods) +// // so, let's just rely on the descriptive names +// // this is used to detect "out of gas panics" +// if rec != nil { +// name := reflect.TypeOf(rec).Name() +// switch name { +// // These two cases are for types thrown in panics from this module: +// // https://github.com/cosmos/cosmos-sdk/blob/4ffabb65a5c07dbb7010da397535d10927d298c1/store/types/gas.go +// // ErrorOutOfGas needs to be propagated through the rust code and back into go code, where it should +// // probably be thrown in a panic again. +// // TODO figure out how to pass the text in its `Descriptor` field through all the FFI +// // TODO handle these cases on the Rust side in the first place +// case "ErrorOutOfGas": +// *ret = C.GoResult_OutOfGas +// // Looks like this error is not treated specially upstream: +// // https://github.com/cosmos/cosmos-sdk/blob/4ffabb65a5c07dbb7010da397535d10927d298c1/baseapp/baseapp.go#L818-L853 +// // but this needs to be periodically verified, in case they do start checking for this type +// // case "ErrorGasOverflow": +// default: +// log.Printf("Panic in Go callback: %#v\n", rec) +// *ret = C.GoResult_Panic +// } +// } +// } +// +// // GasMultiplier is how many cosmwasm gas points = 1 sdk gas point +// // SDK reference costs can be found here: https://github.com/cosmos/cosmos-sdk/blob/02c6c9fafd58da88550ab4d7d494724a477c8a68/store/types/gas.go#L153-L164 +// // A write at ~3000 gas and ~200us = 10 gas per us (microsecond) cpu/io +// // Rough timing have 88k gas at 90us, which is equal to 1k sdk gas... (one read) +const GasMultiplier = 100 + +type Gas = uint64 + +// // GasMeter is a copy of an interface declaration from cosmos-sdk +// // https://github.com/cosmos/cosmos-sdk/blob/18890a225b46260a9adc587be6fa1cc2aff101cd/store/types/gas.go#L34 +type GasMeter interface { + GasConsumed() Gas +} + +// /****** DB ********/ +// +// // KVStore copies a subset of types from cosmos-sdk +// // We may wish to make this more generic sometime in the future, but not now +// // https://github.com/cosmos/cosmos-sdk/blob/bef3689245bab591d7d169abd6bea52db97a70c7/store/types/store.go#L170 +type KVStore interface { + Get(key []byte) []byte + Set(key, value []byte) + Delete(key []byte) +} + +// // Iterator over a domain of keys in ascending order. End is exclusive. +// // Start must be less than end, or the Iterator is invalid. +// // Iterator must be closed by caller. +// // To iterate over entire domain, use store.Iterator(nil, nil) +// Iterator(start, end []byte) dbm.Iterator +// +// // Iterator over a domain of keys in descending order. End is exclusive. +// // Start must be less than end, or the Iterator is invalid. +// // Iterator must be closed by caller. +// ReverseIterator(start, end []byte) dbm.Iterator +// } +// +// var db_vtable = C.DB_vtable{ +// read_db: (C.read_db_fn)(C.cGet_cgo), +// write_db: (C.write_db_fn)(C.cSet_cgo), +// remove_db: (C.remove_db_fn)(C.cDelete_cgo), +// scan_db: (C.scan_db_fn)(C.cScan_cgo), +// } +// +// // contract: original pointer/struct referenced must live longer than C.DB struct +// // since this is only used internally, we can verify the code that this is the case +// +// func buildDB(kv *KVStore, gm *GasMeter) C.DB { +// return C.DB{ +// gas_meter: (*C.gas_meter_t)(unsafe.Pointer(gm)), +// state: (*C.db_t)(unsafe.Pointer(kv)), +// vtable: db_vtable, +// } +// } +// +// var iterator_vtable = C.Iterator_vtable{ +// next_db: (C.next_db_fn)(C.cNext_cgo), +// } +// +// // contract: original pointer/struct referenced must live longer than C.DB struct +// // since this is only used internally, we can verify the code that this is the case +// +// func buildIterator(it dbm.Iterator, gasMeter *C.gas_meter_t) C.GoIter { +// return C.GoIter{ +// gas_meter: gasMeter, +// state: (*C.iterator_t)(unsafe.Pointer(&it)), +// vtable: iterator_vtable, +// } +// } +// +// //export cGet +// +// func cGet(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer, val *C.Buffer) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if ptr == nil || gasMeter == nil || usedGas == nil || val == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } +// +// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) +// kv := *(*KVStore)(unsafe.Pointer(ptr)) +// k := receiveSlice(key) +// +// gasBefore := gm.GasConsumed() +// v := kv.Get(k) +// gasAfter := gm.GasConsumed() +// *usedGas = (C.uint64_t)((gasAfter - gasBefore) * GasMultiplier) +// +// // v will equal nil when the key is missing +// // https://github.com/cosmos/cosmos-sdk/blob/1083fa948e347135861f88e07ec76b0314296832/store/types/store.go#L174 +// if v != nil { +// *val = allocateRust(v) +// } +// // else: the Buffer on the rust side is initialised as a "null" buffer, +// // so if we don't write a non-null address to it, it will understand that +// // the key it requested does not exist in the kv store +// +// return C.GoResult_Ok +// } +// +// //export cSet +// +// func cSet(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer, val C.Buffer) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if ptr == nil || gasMeter == nil || usedGas == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } +// +// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) +// kv := *(*KVStore)(unsafe.Pointer(ptr)) +// k := receiveSlice(key) +// v := receiveSlice(val) +// +// gasBefore := gm.GasConsumed() +// kv.Set(k, v) +// gasAfter := gm.GasConsumed() +// *usedGas = (C.uint64_t)((gasAfter - gasBefore) * GasMultiplier) +// +// return C.GoResult_Ok +// } +// +// //export cDelete +// +// func cDelete(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if ptr == nil || gasMeter == nil || usedGas == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } +// +// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) +// kv := *(*KVStore)(unsafe.Pointer(ptr)) +// k := receiveSlice(key) +// +// gasBefore := gm.GasConsumed() +// kv.Delete(k) +// gasAfter := gm.GasConsumed() +// *usedGas = (C.uint64_t)((gasAfter - gasBefore) * GasMultiplier) +// +// return C.GoResult_Ok +// } +// +// //export cScan +// +// func cScan(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, start C.Buffer, end C.Buffer, order i32, out *C.GoIter) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if ptr == nil || gasMeter == nil || usedGas == nil || out == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } +// +// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) +// kv := *(*KVStore)(unsafe.Pointer(ptr)) +// // handle null as well as data +// var s, e []byte +// if start.ptr != nil { +// s = receiveSlice(start) +// } +// if end.ptr != nil { +// e = receiveSlice(end) +// } +// +// var iter dbm.Iterator +// gasBefore := gm.GasConsumed() +// switch order { +// case 1: // Ascending +// iter = kv.Iterator(s, e) +// case 2: // Descending +// iter = kv.ReverseIterator(s, e) +// default: +// return C.GoResult_BadArgument +// } +// gasAfter := gm.GasConsumed() +// *usedGas = (C.uint64_t)((gasAfter - gasBefore) * GasMultiplier) +// +// // Let's hope this works! +// *out = buildIterator(iter, gasMeter) +// return C.GoResult_Ok +// } +// +// //export cNext +// +// func cNext(ptr *C.iterator_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key *C.Buffer, val *C.Buffer) (ret C.GoResult) { +// // typical usage of iterator +// // for ; itr.Valid(); itr.Next() { +// // k, v := itr.Key(); itr.Value() +// // ... +// // } +// +// defer recoverPanic(&ret) +// if ptr == nil || gasMeter == nil || usedGas == nil || key == nil || val == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } +// +// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) +// iter := *(*dbm.Iterator)(unsafe.Pointer(ptr)) +// if !iter.Valid() { +// // end of iterator, return as no-op, nil key is considered end +// return C.GoResult_Ok +// } +// +// gasBefore := gm.GasConsumed() +// // call Next at the end, upon creation we have first data loaded +// k := iter.Key() +// v := iter.Value() +// // check iter.Error() ???? +// iter.Next() +// gasAfter := gm.GasConsumed() +// *usedGas = (C.uint64_t)((gasAfter - gasBefore) * GasMultiplier) +// +// if k != nil { +// *key = allocateRust(k) +// *val = allocateRust(v) +// } +// return C.GoResult_Ok +// } +// +// /***** GoAPI *******/ +type ( + HumanAddress func([]byte) (string, uint64, error) + CanonicalAddress func(string) ([]byte, uint64, error) +) + +type GoAPI struct { + HumanAddress HumanAddress + CanonicalAddress CanonicalAddress +} + +// +//var api_vtable = C.GoApi_vtable{ +// humanize_address: (C.humanize_address_fn)(C.cHumanAddress_cgo), +// canonicalize_address: (C.canonicalize_address_fn)(C.cCanonicalAddress_cgo), +//} +// +//// contract: original pointer/struct referenced must live longer than C.GoApi struct +//// since this is only used internally, we can verify the code that this is the case +//func buildAPI(api *GoAPI) C.GoApi { +// return C.GoApi{ +// state: (*C.api_t)(unsafe.Pointer(api)), +// vtable: api_vtable, +// } +//} +// +////export cHumanAddress +//func cHumanAddress(ptr *C.api_t, canon C.Buffer, human *C.Buffer) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if human == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } +// +// api := (*GoAPI)(unsafe.Pointer(ptr)) +// c := receiveSlice(canon) +// h, err := api.HumanAddress(c) +// if err != nil { +// return C.GoResult_Other +// } +// if len(h) == 0 { +// panic(fmt.Sprintf("`api.HumanAddress()` returned an empty string for %q", c)) +// } +// *human = allocateRust([]byte(h)) +// return C.GoResult_Ok +//} +// +////export cCanonicalAddress +//func cCanonicalAddress(ptr *C.api_t, human C.Buffer, canon *C.Buffer) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if canon == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } +// +// api := (*GoAPI)(unsafe.Pointer(ptr)) +// h := string(receiveSlice(human)) +// c, err := api.CanonicalAddress(h) +// if err != nil { +// return C.GoResult_Other +// } +// if len(c) == 0 { +// panic(fmt.Sprintf("`api.CanonicalAddress()` returned an empty string for %q", h)) +// } +// *canon = allocateRust(c) +// +// // If we do not set canon to a meaningful value, then the other side will interpret that as an empty result. +// return C.GoResult_Ok +//} +// +///****** Go Querier ********/ +// +//var querier_vtable = C.Querier_vtable{ +// query_external: (C.query_external_fn)(C.cQueryExternal_cgo), +//} +// +//// contract: original pointer/struct referenced must live longer than C.GoQuerier struct +//// since this is only used internally, we can verify the code that this is the case +//func buildQuerier(q *Querier) C.GoQuerier { +// return C.GoQuerier{ +// state: (*C.querier_t)(unsafe.Pointer(q)), +// vtable: querier_vtable, +// } +//} +// +////export cQueryExternal +//func cQueryExternal(ptr *C.querier_t, usedGas *C.uint64_t, request C.Buffer, result *C.Buffer) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if ptr == nil || usedGas == nil || result == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } +// +// // query the data +// querier := *(*Querier)(unsafe.Pointer(ptr)) +// req := receiveSlice(request) +// +// gasBefore := querier.GasConsumed() +// res := types.RustQuery(querier, req) +// gasAfter := querier.GasConsumed() +// *usedGas = (C.uint64_t)((gasAfter - gasBefore) * GasMultiplier) +// +// // serialize the response +// bz, err := json.Marshal(res) +// if err != nil { +// return C.GoResult_Other +// } +// *result = allocateRust(bz) +// return C.GoResult_Ok +//} diff --git a/go-cosmwasm/api/iterator.go b/go-cosmwasm/api/iterator.go new file mode 100644 index 000000000..c82ae3607 --- /dev/null +++ b/go-cosmwasm/api/iterator.go @@ -0,0 +1,73 @@ +package api + +import ( + "sync" + + dbm "github.com/tendermint/tm-db" +) + +// frame stores all Iterators for one contract +type frame []dbm.Iterator + +// iteratorStack contains one frame for each contract, indexed by a counter +// 10 is a rather arbitrary guess on how many frames might be needed simultaneously +var ( + iteratorStack = make(map[uint64]frame, 10) + iteratorStackMutex sync.Mutex +) + +// this is a global counter when we create DBs +var ( + dbCounter uint64 + dbCounterMutex sync.Mutex +) + +// startContract is called at the beginning of a contract runtime to create a new frame on the iteratorStack +// updates dbCounter for an index +func startContract() uint64 { + dbCounterMutex.Lock() + defer dbCounterMutex.Unlock() + dbCounter++ + return dbCounter +} + +func popFrame(counter uint64) frame { + iteratorStackMutex.Lock() + defer iteratorStackMutex.Unlock() + // get the item from the stack + + remove := iteratorStack[counter] + delete(iteratorStack, counter) + return remove +} + +// endContract is called at the end of a contract runtime to remove one item from the IteratorStack +func endContract(counter uint64) { + // we pull popFrame in another function so we don't hold the mutex while cleaning up the popped frame + remove := popFrame(counter) + // free all iterators in the frame when we release it + for _, iter := range remove { + iter.Close() + } +} + +// storeIterator will add this to the end of the latest stack and return a reference to it. +// We start counting with 1, so the 0 value is flagged as an error. This means we must +// remember to do idx-1 when retrieving +func storeIterator(dbCounter uint64, it dbm.Iterator) uint64 { + iteratorStackMutex.Lock() + defer iteratorStackMutex.Unlock() + + frame := append(iteratorStack[dbCounter], it) //nolint:gocritic + iteratorStack[dbCounter] = frame + return uint64(len(frame)) +} + +// retrieveIterator will recover an iterator based on index. This ensures it will not be garbage collected. +// We start counting with 1, in storeIterator so the 0 value is flagged as an error. This means we must +// remember to do idx-1 when retrieving +func retrieveIterator(dbCounter uint64, index uint64) dbm.Iterator { + iteratorStackMutex.Lock() + defer iteratorStackMutex.Unlock() + return iteratorStack[dbCounter][index-1] +} diff --git a/go-cosmwasm/api/lib.go b/go-cosmwasm/api/lib.go new file mode 100644 index 000000000..8940f81e8 --- /dev/null +++ b/go-cosmwasm/api/lib.go @@ -0,0 +1,472 @@ +//go:build !secretcli +// +build !secretcli + +package api + +// #include +// #include "bindings.h" +import "C" + +import ( + "fmt" + "runtime" + "syscall" + + v1types "github.com/comdex-official/comdex/go-cosmwasm/types/v1" + + "github.com/comdex-official/comdex/go-cosmwasm/types" +) + +// nice aliases to the rust names +type i32 = C.int32_t + +type ( + i64 = C.int64_t + u64 = C.uint64_t + u32 = C.uint32_t + u8 = C.uint8_t + u8_ptr = *C.uint8_t + usize = C.uintptr_t + cint = C.int + cbool = C.bool +) + +type Cache struct { + ptr *C.cache_t +} + +func HealthCheck() ([]byte, error) { + errmsg := C.Buffer{} + + res, err := C.get_health_check(&errmsg) + if err != nil { + return nil, errorWithMessage(err, errmsg) + } + return receiveVector(res), nil +} + +func SubmitBlockSignatures(header []byte, commit []byte, txs []byte, encRandom []byte /* valSet []byte, nextValSet []byte */) ([]byte, error) { + errmsg := C.Buffer{} + spidSlice := sendSlice(header) + defer freeAfterSend(spidSlice) + apiKeySlice := sendSlice(commit) + defer freeAfterSend(apiKeySlice) + encRandomSlice := sendSlice(encRandom) + defer freeAfterSend(encRandomSlice) + txsSlice := sendSlice(txs) + defer freeAfterSend(txsSlice) + + res, err := C.submit_block_signatures(spidSlice, apiKeySlice, txsSlice, encRandomSlice /* valSetSlice, nextValSetSlice,*/, &errmsg) + if err != nil { + return nil, errorWithMessage(err, errmsg) + } + return receiveVector(res), nil +} + +func InitBootstrap(spid []byte, apiKey []byte) ([]byte, error) { + errmsg := C.Buffer{} + spidSlice := sendSlice(spid) + defer freeAfterSend(spidSlice) + apiKeySlice := sendSlice(apiKey) + defer freeAfterSend(apiKeySlice) + + res, err := C.init_bootstrap(spidSlice, apiKeySlice, &errmsg) + if err != nil { + return nil, errorWithMessage(err, errmsg) + } + return receiveVector(res), nil +} + +func LoadSeedToEnclave(masterKey []byte, seed []byte, apiKey []byte) (bool, error) { + pkSlice := sendSlice(masterKey) + defer freeAfterSend(pkSlice) + seedSlice := sendSlice(seed) + defer freeAfterSend(seedSlice) + apiKeySlice := sendSlice(apiKey) + defer freeAfterSend(apiKeySlice) + errmsg := C.Buffer{} + + _, err := C.init_node(pkSlice, seedSlice, apiKeySlice, &errmsg) + if err != nil { + return false, errorWithMessage(err, errmsg) + } + return true, nil +} + +type Querier = types.Querier + +func InitCache(dataDir string, supportedFeatures string, cacheSize uint64) (Cache, error) { + dir := sendSlice([]byte(dataDir)) + defer freeAfterSend(dir) + features := sendSlice([]byte(supportedFeatures)) + defer freeAfterSend(features) + errmsg := C.Buffer{} + + ptr, err := C.init_cache(dir, features, usize(cacheSize), &errmsg) + if err != nil { + return Cache{}, errorWithMessage(err, errmsg) + } + return Cache{ptr: ptr}, nil +} + +func ReleaseCache(cache Cache) { + C.release_cache(cache.ptr) +} + +func InitEnclaveRuntime(moduleCacheSize uint16) error { + errmsg := C.Buffer{} + + config := C.EnclaveRuntimeConfig{ + module_cache_size: u32(moduleCacheSize), + } + _, err := C.configure_enclave_runtime(config, &errmsg) + if err != nil { + err = errorWithMessage(err, errmsg) + return err + } + return nil +} + +func Create(cache Cache, wasm []byte) ([]byte, error) { + code := sendSlice(wasm) + defer freeAfterSend(code) + errmsg := C.Buffer{} + id, err := C.create(cache.ptr, code, &errmsg) + if err != nil { + return nil, errorWithMessage(err, errmsg) + } + return receiveVector(id), nil +} + +func GetCode(cache Cache, code_id []byte) ([]byte, error) { + id := sendSlice(code_id) + defer freeAfterSend(id) + errmsg := C.Buffer{} + code, err := C.get_code(cache.ptr, id, &errmsg) + if err != nil { + return nil, errorWithMessage(err, errmsg) + } + return receiveVector(code), nil +} + +func Migrate( + cache Cache, + code_id []byte, + params []byte, + msg []byte, + gasMeter *GasMeter, + store KVStore, + api *GoAPI, + querier *Querier, + gasLimit uint64, + sigInfo []byte, + admin []byte, + adminProof []byte, +) ([]byte, uint64, error) { + id := sendSlice(code_id) + defer freeAfterSend(id) + p := sendSlice(params) + defer freeAfterSend(p) + m := sendSlice(msg) + defer freeAfterSend(m) + + // set up a new stack frame to handle iterators + counter := startContract() + defer endContract(counter) + + dbState := buildDBState(store, counter) + db := buildDB(&dbState, gasMeter) + + s := sendSlice(sigInfo) + defer freeAfterSend(s) + a := buildAPI(api) + q := buildQuerier(querier) + var gasUsed u64 + errmsg := C.Buffer{} + + adminBuffer := sendSlice(admin) + defer freeAfterSend(adminBuffer) + + adminProofBuffer := sendSlice(adminProof) + defer freeAfterSend(adminProofBuffer) + + //// This is done in order to ensure that goroutines don't + //// swap threads between recursive calls to the enclave. + //runtime.LockOSThread() + //defer runtime.UnlockOSThread() + + res, err := C.migrate(cache.ptr, id, p, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg, s, adminBuffer, adminProofBuffer) + if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { + // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. + return nil, uint64(gasUsed), errorWithMessage(err, errmsg) + } + return receiveVector(res), uint64(gasUsed), nil +} + +func UpdateAdmin( + cache Cache, + code_id []byte, + params []byte, + gasMeter *GasMeter, + store KVStore, + api *GoAPI, + querier *Querier, + gasLimit uint64, + sigInfo []byte, + currentAdmin []byte, + currentAdminProof []byte, + newAdmin []byte, +) ([]byte, error) { + id := sendSlice(code_id) + defer freeAfterSend(id) + p := sendSlice(params) + defer freeAfterSend(p) + + // set up a new stack frame to handle iterators + counter := startContract() + defer endContract(counter) + + dbState := buildDBState(store, counter) + db := buildDB(&dbState, gasMeter) + + s := sendSlice(sigInfo) + defer freeAfterSend(s) + a := buildAPI(api) + q := buildQuerier(querier) + errmsg := C.Buffer{} + + currentAdminBuffer := sendSlice(currentAdmin) + defer freeAfterSend(currentAdminBuffer) + + currentAdminProofBuffer := sendSlice(currentAdminProof) + defer freeAfterSend(currentAdminProofBuffer) + + newAdminBuffer := sendSlice(newAdmin) + defer freeAfterSend(newAdminBuffer) + + //// This is done in order to ensure that goroutines don't + //// swap threads between recursive calls to the enclave. + //runtime.LockOSThread() + //defer runtime.UnlockOSThread() + + res, err := C.update_admin(cache.ptr, id, p, db, a, q, u64(gasLimit), &errmsg, s, currentAdminBuffer, currentAdminProofBuffer, newAdminBuffer) + if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { + return nil, errorWithMessage(err, errmsg) + } + return receiveVector(res), nil +} + +func Instantiate( + cache Cache, + code_id []byte, + params []byte, + msg []byte, + gasMeter *GasMeter, + store KVStore, + api *GoAPI, + querier *Querier, + gasLimit uint64, + sigInfo []byte, + admin []byte, +) ([]byte, uint64, error) { + id := sendSlice(code_id) + defer freeAfterSend(id) + p := sendSlice(params) + defer freeAfterSend(p) + m := sendSlice(msg) + defer freeAfterSend(m) + + // set up a new stack frame to handle iterators + counter := startContract() + defer endContract(counter) + + dbState := buildDBState(store, counter) + db := buildDB(&dbState, gasMeter) + + s := sendSlice(sigInfo) + defer freeAfterSend(s) + a := buildAPI(api) + q := buildQuerier(querier) + var gasUsed u64 + errmsg := C.Buffer{} + + adminBuffer := sendSlice(admin) + defer freeAfterSend(adminBuffer) + + //// This is done in order to ensure that goroutines don't + //// swap threads between recursive calls to the enclave. + //runtime.LockOSThread() + //defer runtime.UnlockOSThread() + + res, err := C.instantiate(cache.ptr, id, p, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg, s, adminBuffer) + if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { + // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. + return nil, uint64(gasUsed), errorWithMessage(err, errmsg) + } + return receiveVector(res), uint64(gasUsed), nil +} + +func Handle( + cache Cache, + code_id []byte, + params []byte, + msg []byte, + gasMeter *GasMeter, + store KVStore, + api *GoAPI, + querier *Querier, + gasLimit uint64, + sigInfo []byte, + handleType types.HandleType, +) ([]byte, uint64, error) { + id := sendSlice(code_id) + defer freeAfterSend(id) + p := sendSlice(params) + defer freeAfterSend(p) + m := sendSlice(msg) + defer freeAfterSend(m) + + // set up a new stack frame to handle iterators + counter := startContract() + defer endContract(counter) + + dbState := buildDBState(store, counter) + db := buildDB(&dbState, gasMeter) + s := sendSlice(sigInfo) + defer freeAfterSend(s) + a := buildAPI(api) + q := buildQuerier(querier) + var gasUsed u64 + errmsg := C.Buffer{} + + //// This is done in order to ensure that goroutines don't + //// swap threads between recursive calls to the enclave. + //runtime.LockOSThread() + //defer runtime.UnlockOSThread() + + res, err := C.handle(cache.ptr, id, p, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg, s, u8(handleType)) + if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { + // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. + return nil, uint64(gasUsed), errorWithMessage(err, errmsg) + } + return receiveVector(res), uint64(gasUsed), nil +} + +func Query( + cache Cache, + code_id []byte, + params []byte, + msg []byte, + gasMeter *GasMeter, + store KVStore, + api *GoAPI, + querier *Querier, + gasLimit uint64, +) ([]byte, uint64, error) { + id := sendSlice(code_id) + defer freeAfterSend(id) + p := sendSlice(params) + defer freeAfterSend(p) + m := sendSlice(msg) + defer freeAfterSend(m) + + // set up a new stack frame to handle iterators + counter := startContract() + defer endContract(counter) + + dbState := buildDBState(store, counter) + db := buildDB(&dbState, gasMeter) + a := buildAPI(api) + q := buildQuerier(querier) + var gasUsed u64 + errmsg := C.Buffer{} + + //// This is done in order to ensure that goroutines don't + //// swap threads between recursive calls to the enclave. + //runtime.LockOSThread() + //defer runtime.UnlockOSThread() + + res, err := C.query(cache.ptr, id, p, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg) + if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { + // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. + return nil, uint64(gasUsed), errorWithMessage(err, errmsg) + } + return receiveVector(res), uint64(gasUsed), nil +} + +func AnalyzeCode( + cache Cache, + codeHash []byte, +) (*v1types.AnalysisReport, error) { + cs := sendSlice(codeHash) + defer runtime.KeepAlive(codeHash) + errMsg := C.Buffer{} + report, err := C.analyze_code(cache.ptr, cs, &errMsg) + if err != nil { + return nil, errorWithMessage(err, errMsg) + } + res := v1types.AnalysisReport{ + HasIBCEntryPoints: bool(report.has_ibc_entry_points), + RequiredFeatures: string(receiveVector(report.required_features)), + } + return &res, nil +} + +// KeyGen Send KeyGen request to enclave +func KeyGen() ([]byte, error) { + errmsg := C.Buffer{} + res, err := C.key_gen(&errmsg) + if err != nil { + return nil, errorWithMessage(err, errmsg) + } + return receiveVector(res), nil +} + +// CreateAttestationReport Send CreateAttestationReport request to enclave +func CreateAttestationReport(apiKey []byte, dryRun bool) (bool, error) { + errmsg := C.Buffer{} + apiKeySlice := sendSlice(apiKey) + defer freeAfterSend(apiKeySlice) + + _, err := C.create_attestation_report(apiKeySlice, &errmsg, cbool(dryRun)) + if err != nil { + return false, errorWithMessage(err, errmsg) + } + return true, nil +} + +func GetEncryptedSeed(cert []byte) ([]byte, error) { + errmsg := C.Buffer{} + certSlice := sendSlice(cert) + defer freeAfterSend(certSlice) + res, err := C.get_encrypted_seed(certSlice, &errmsg) + if err != nil { + return nil, errorWithMessage(err, errmsg) + } + return receiveVector(res), nil +} + +func GetEncryptedGenesisSeed(pk []byte) ([]byte, error) { + errmsg := C.Buffer{} + pkSlice := sendSlice(pk) + defer freeAfterSend(pkSlice) + res, err := C.get_encrypted_genesis_seed(pkSlice, &errmsg) + if err != nil { + return nil, errorWithMessage(err, errmsg) + } + return receiveVector(res), nil +} + +/**** To error module ***/ + +func errorWithMessage(err error, b C.Buffer) error { + // this checks for out of gas as a special case + if errno, ok := err.(syscall.Errno); ok && int(errno) == 2 { + return types.OutOfGasError{} + } + msg := receiveVector(b) + if msg == nil { + return err + } + return fmt.Errorf("%s", string(msg)) +} diff --git a/go-cosmwasm/api/lib_mock.go b/go-cosmwasm/api/lib_mock.go new file mode 100644 index 000000000..4c94dcc47 --- /dev/null +++ b/go-cosmwasm/api/lib_mock.go @@ -0,0 +1,293 @@ +//go:build secretcli +// +build secretcli + +package api + +// +//// #include +//// #include "bindings.h" +//import "C" + +// import "C" +import ( + //"fmt" + "github.com/comdex-official/comdex/go-cosmwasm/types" + v1types "github.com/comdex-official/comdex/go-cosmwasm/types/v1" +) + +// nice aliases to the rust names +//type i32 = C.int32_t +//type i64 = C.int64_t +//type u64 = C.uint64_t +//type u32 = C.uint32_t +//type u8 = C.uint8_t +//type u8_ptr = *C.uint8_t +//type usize = C.uintptr_t +//type cint = C.int +// +//type Cache struct { +// ptr *C.cache_t +//} + +type Cache struct{} + +func HealthCheck() ([]byte, error) { + return nil, nil +} + +func InitBootstrap(spid []byte, apiKey []byte) ([]byte, error) { + return nil, nil +} + +func SubmitBlockSignatures(header []byte, commit []byte, txs []byte, random []byte /* valSet []byte, nextValSet []byte*/) ([]byte, error) { + return nil, nil +} + +func LoadSeedToEnclave(masterKey []byte, seed []byte, apiKey []byte) (bool, error) { + return true, nil +} + +type Querier = types.Querier + +func InitCache(dataDir string, supportedFeatures string, cacheSize uint64) (Cache, error) { + //dir := sendSlice([]byte(dataDir)) + //defer freeAfterSend(dir) + //features := sendSlice([]byte(supportedFeatures)) + //defer freeAfterSend(features) + //errmsg := C.Buffer{} + // + //ptr, err := C.init_cache(dir, features, usize(cacheSize), &errmsg) + //if err != nil { + // return Cache{}, errorWithMessage(err, errmsg) + //} + return Cache{}, nil +} + +func ReleaseCache(cache Cache) { + // C.release_cache(cache.ptr) +} + +func InitEnclaveRuntime(ModuleCacheSize uint16) error { + return nil +} + +func Create(cache Cache, wasm []byte) ([]byte, error) { + //code := sendSlice(wasm) + //defer freeAfterSend(code) + //errmsg := C.Buffer{} + //id, err := C.create(cache.ptr, code, &errmsg) + //if err != nil { + // return nil, errorWithMessage(err, errmsg) + //} + //return receiveVector(id), nil + return nil, nil +} + +func GetCode(cache Cache, code_id []byte) ([]byte, error) { + //id := sendSlice(code_id) + //defer freeAfterSend(id) + //errmsg := C.Buffer{} + //code, err := C.get_code(cache.ptr, id, &errmsg) + //if err != nil { + // return nil, errorWithMessage(err, errmsg) + //} + //return receiveVector(code), nil + return nil, nil +} + +func Migrate( + cache Cache, + code_id []byte, + params []byte, + msg []byte, + gasMeter *GasMeter, + store KVStore, + api *GoAPI, + querier *Querier, + gasLimit uint64, + sigInfo []byte, + admin []byte, + adminProof []byte, +) ([]byte, uint64, error) { + return nil, 0, nil +} + +func UpdateAdmin( + cache Cache, + code_id []byte, + params []byte, + gasMeter *GasMeter, + store KVStore, + api *GoAPI, + querier *Querier, + gasLimit uint64, + sigInfo []byte, + currentAdmin []byte, + currentAdminProof []byte, + newAdmin []byte, +) ([]byte, error) { + return nil, nil +} + +func Instantiate( + cache Cache, + code_id []byte, + params []byte, + msg []byte, + gasMeter *GasMeter, + store KVStore, + api *GoAPI, + querier *Querier, + gasLimit uint64, + sigInfo []byte, + admin []byte, +) ([]byte, uint64, error) { + //id := sendSlice(code_id) + //defer freeAfterSend(id) + //p := sendSlice(params) + //defer freeAfterSend(p) + //m := sendSlice(msg) + //defer freeAfterSend(m) + //db := buildDB(store, gasMeter) + //a := buildAPI(api) + //q := buildQuerier(querier) + //var gasUsed u64 + //errmsg := C.Buffer{} + //res, err := C.instantiate(cache.ptr, id, p, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg) + //if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { + // // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. + // return nil, uint64(gasUsed), errorWithMessage(err, errmsg) + //} + //return receiveVector(res), uint64(gasUsed), nil + return nil, 0, nil +} + +func Handle( + cache Cache, + code_id []byte, + params []byte, + msg []byte, + gasMeter *GasMeter, + store KVStore, + api *GoAPI, + querier *Querier, + gasLimit uint64, + sigInfo []byte, + handleType types.HandleType, +) ([]byte, uint64, error) { + //id := sendSlice(code_id) + //defer freeAfterSend(id) + //p := sendSlice(params) + //defer freeAfterSend(p) + //m := sendSlice(msg) + //defer freeAfterSend(m) + //db := buildDB(store, gasMeter) + //a := buildAPI(api) + //q := buildQuerier(querier) + //var gasUsed u64 + //errmsg := C.Buffer{} + //res, err := C.handle(cache.ptr, id, p, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg) + //if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { + // // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. + // return nil, uint64(gasUsed), errorWithMessage(err, errmsg) + //} + //return receiveVector(res), uint64(gasUsed), nil + return nil, 0, nil +} + +func Query( + cache Cache, + code_id []byte, + params []byte, + msg []byte, + gasMeter *GasMeter, + store KVStore, + api *GoAPI, + querier *Querier, + gasLimit uint64, +) ([]byte, uint64, error) { + //id := sendSlice(code_id) + //defer freeAfterSend(id) + //m := sendSlice(msg) + //defer freeAfterSend(m) + //db := buildDB(store, gasMeter) + //a := buildAPI(api) + //q := buildQuerier(querier) + //var gasUsed u64 + //errmsg := C.Buffer{} + //res, err := C.query(cache.ptr, id, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg) + //if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { + // // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. + // return nil, uint64(gasUsed), errorWithMessage(err, errmsg) + //} + //return receiveVector(res), uint64(gasUsed), nil + return nil, 0, nil +} + +func AnalyzeCode( + cache Cache, + codeHash []byte, +) (*v1types.AnalysisReport, error) { + //cs := sendSlice(codeHash) + //defer runtime.KeepAlive(codeHash) + //errMsg := C.Buffer{} + //report, err := C.analyze_code(cache.ptr, cs, &errMsg) + // + //if err != nil { + // return nil, errorWithMessage(err, errMsg) + //} + //res := v1types.AnalysisReport{ + // HasIBCEntryPoints: bool(report.has_ibc_entry_points), + // RequiredFeatures: string(receiveVector(report.required_features)), + //} + //return &res, nil + return nil, nil +} + +// KeyGen Send KeyGen request to enclave +func KeyGen() ([]byte, error) { + //errmsg := C.Buffer{} + //res, err := C.key_gen(&errmsg) + //if err != nil { + // return nil, errorWithMessage(err, errmsg) + //} + //return receiveVector(res), nil + return nil, nil +} + +// KeyGen Seng KeyGen request to enclave +func CreateAttestationReport(apiKey []byte) (bool, error) { + //errmsg := C.Buffer{} + //_, err := C.create_attestation_report(&errmsg) + //if err != nil { + // return false, errorWithMessage(err, errmsg) + //} + return true, nil +} + +func GetEncryptedSeed(cert []byte) ([]byte, error) { + //errmsg := C.Buffer{} + //certSlice := sendSlice(cert) + //defer freeAfterSend(certSlice) + //res, err := C.get_encrypted_seed(certSlice, &errmsg) + //if err != nil { + // return nil, errorWithMessage(err, errmsg) + //} + //return receiveVector(res), nil + return nil, nil +} + +func GetEncryptedGenesisSeed(cert []byte) ([]byte, error) { + return nil, nil +} + +/**** To error module ***/ + +//func errorWithMessage(err error, b C.Buffer) error { +// //msg := receiveVector(b) +// //if msg == nil { +// // return err +// //} +// //return fmt.Errorf("%s", string(msg)) +// return fmt.Errorf("heelo") +//} diff --git a/go-cosmwasm/api/link_muslc.go b/go-cosmwasm/api/link_muslc.go new file mode 100644 index 000000000..b829c62d1 --- /dev/null +++ b/go-cosmwasm/api/link_muslc.go @@ -0,0 +1,7 @@ +//go:build linux && muslc +// +build linux,muslc + +package api + +// #cgo LDFLAGS: -Wl,-rpath,${SRCDIR} -L${SRCDIR} -lgo_cosmwasm_muslc +import "C" diff --git a/go-cosmwasm/api/link_std.go b/go-cosmwasm/api/link_std.go new file mode 100644 index 000000000..703122fb1 --- /dev/null +++ b/go-cosmwasm/api/link_std.go @@ -0,0 +1,7 @@ +//go:build !secretcli && linux && !muslc && !darwin +// +build !secretcli,linux,!muslc,!darwin + +package api + +// #cgo LDFLAGS: -Wl,-rpath,${SRCDIR} -L${SRCDIR} -lgo_cosmwasm +import "C" diff --git a/go-cosmwasm/api/memory.go b/go-cosmwasm/api/memory.go new file mode 100644 index 000000000..bffd0d37b --- /dev/null +++ b/go-cosmwasm/api/memory.go @@ -0,0 +1,84 @@ +//go:build !secretcli +// +build !secretcli + +package api + +/* +#include "bindings.h" +*/ +import "C" + +import "unsafe" + +func allocateRust(data []byte) C.Buffer { + var ret C.Buffer + if data == nil { //nolint:gocritic + // Just return a null buffer + ret = C.Buffer{ + ptr: u8_ptr(nil), + len: usize(0), + cap: usize(0), + } + // in Go, accessing the 0-th element of an empty array triggers a panic. That is why in the case + // of an empty `[]byte` we can't get the internal heap pointer to the underlying array as we do + // below with `&data[0]`. + // https://play.golang.org/p/xvDY3g9OqUk + // Additionally, the pointer field in a Rust vector is a NonNull pointer. This means that when + // the vector is empty and no heap allocation is made, it needs to put _some_ value there instead. + // At the time of writing, it uses the alignment of the generic type T, which in this case equals 1. + // But because that is an internal detail that we can't rely on in future versions, we still call out + // to Rust and ask it to build an empty vector for us. + // https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=01ced0731171c8226e2c28634a7e41d7 + } else if len(data) == 0 { + // This will create an empty vector + ret = C.allocate_rust(u8_ptr(nil), usize(0)) + } else { + // This will allocate a proper vector with content and return a description of it + ret = C.allocate_rust(u8_ptr(unsafe.Pointer(&data[0])), usize(len(data))) + } + return ret +} + +func sendSlice(s []byte) C.Buffer { + if s == nil { + return C.Buffer{ptr: u8_ptr(nil), len: usize(0), cap: usize(0)} + } + return C.Buffer{ + ptr: u8_ptr(C.CBytes(s)), + len: usize(len(s)), + cap: usize(len(s)), + } +} + +// Take an owned vector that was passed to us, copy it, and then free it on the Rust side. +// This should only be used for vectors that will never be observed again on the Rust side +func receiveVector(b C.Buffer) []byte { + if bufIsNil(b) { + return nil + } + res := C.GoBytes(unsafe.Pointer(b.ptr), cint(b.len)) + C.free_rust(b) + return res +} + +// Copy the contents of a vector that was allocated on the Rust side. +// Unlike receiveVector, we do not free it, because it will be manually +// freed on the Rust side after control returns to it. +// This should be used in places like callbacks from Rust to Go. +func receiveSlice(b C.Buffer) []byte { + if bufIsNil(b) { + return nil + } + res := C.GoBytes(unsafe.Pointer(b.ptr), cint(b.len)) + return res +} + +func freeAfterSend(b C.Buffer) { + if !bufIsNil(b) { + C.free(unsafe.Pointer(b.ptr)) + } +} + +func bufIsNil(b C.Buffer) bool { + return b.ptr == u8_ptr(nil) +} diff --git a/go-cosmwasm/api/testdata/contract.wasm b/go-cosmwasm/api/testdata/contract.wasm new file mode 100644 index 0000000000000000000000000000000000000000..b616aac4c3812738ad8e84ca7364d32160bbb99f GIT binary patch literal 62845 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 literal 0 HcmV?d00001 diff --git a/go-cosmwasm/api/testdata/download_releases.sh b/go-cosmwasm/api/testdata/download_releases.sh new file mode 100755 index 000000000..1ae7bf471 --- /dev/null +++ b/go-cosmwasm/api/testdata/download_releases.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -o errexit -o nounset -o pipefail +command -v shellcheck > /dev/null && shellcheck "$0" + +if [ $# -ne 1 ]; then + echo "Usage: ./download_releases.sh RELEASE_TAG" + exit 1 +fi + +tag="$1" + +for contract in hackatom queue reflect ; do + url="https://github.com/CosmWasm/cosmwasm/releases/download/$tag/$contract.wasm" + echo "Downloading $url ..." + wget -O "$contract.wasm" "$url" +done diff --git a/go-cosmwasm/api/testdata/hackatom.wasm b/go-cosmwasm/api/testdata/hackatom.wasm new file mode 100644 index 0000000000000000000000000000000000000000..132922c4a9ed177db2dab7123dafe2e7acdd6a47 GIT binary patch literal 183230 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 Sw6k;SX#!{tf6B?b?*9XUO4_Xe literal 0 HcmV?d00001 diff --git a/go-cosmwasm/api/testdata/queue.wasm b/go-cosmwasm/api/testdata/queue.wasm new file mode 100644 index 0000000000000000000000000000000000000000..630477fa28104f970e131761ecda319f4af08f55 GIT binary patch literal 99932 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 C>wpOW literal 0 HcmV?d00001 diff --git a/go-cosmwasm/api/testdata/reflect.wasm b/go-cosmwasm/api/testdata/reflect.wasm new file mode 100644 index 0000000000000000000000000000000000000000..69026fa1a397e5520247bb57243c9f59aea428d8 GIT binary patch literal 169095 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 PQhWvP>U)Wmhm literal 0 HcmV?d00001 diff --git a/go-cosmwasm/types/env.go b/go-cosmwasm/types/env.go new file mode 100644 index 000000000..987229dd8 --- /dev/null +++ b/go-cosmwasm/types/env.go @@ -0,0 +1,61 @@ +package types + +//---------- Env --------- + +// Env defines the state of the blockchain environment this contract is +// running in. This must contain only trusted data - nothing from the Tx itself +// that has not been verfied (like Signer). +// +// Env are json encoded to a byte slice before passing to the wasm contract. +type Env struct { + Block BlockInfo `json:"block"` + Message MessageInfo `json:"message"` + Contract ContractInfo `json:"contract"` + Key ContractKey `json:"contract_key"` + QueryDepth uint32 `json:"query_depth"` + Transaction *TransactionInfo `json:"transaction,omitempty"` +} + +type ContractKey struct { + OgContractKey []byte `protobuf:"bytes,1,opt,name=og_contract_key,json=ogContractKey,proto3" json:"og_contract_key,omitempty"` + CurrentContractKey []byte `protobuf:"bytes,2,opt,name=current_contract_key,json=currentContractKey,proto3" json:"current_contract_key,omitempty"` + CurrentContractKeyProof []byte `protobuf:"bytes,3,opt,name=current_contract_key_proof,json=currentContractKeyProof,proto3" json:"current_contract_key_proof,omitempty"` +} + +type TransactionInfo struct { + // Position of this transaction in the block. + // The first transaction has index 0 + // + // Along with BlockInfo.Height, this allows you to get a unique + // transaction identifier for the chain for future queries + Index uint32 `json:"index"` + /// The hash of the current transaction bytes. + /// aka txhash or transaction_id + /// hash = sha256(tx_bytes) + Hash string `json:"hash"` +} + +type BaseEnv[T Env] struct { + First T +} + +type BlockInfo struct { + // block height this transaction is executed + Height uint64 `json:"height"` + // time in seconds since unix epoch - since cosmwasm 0.3 + Time uint64 `json:"time"` + ChainID string `json:"chain_id"` + Random []byte `json:"random"` +} + +type MessageInfo struct { + // binary encoding of sdk.AccAddress executing the contract + Sender HumanAddress `json:"sender"` + // amount of funds send to the contract along with this message + SentFunds Coins `json:"sent_funds"` +} + +type ContractInfo struct { + // binary encoding of sdk.AccAddress of the contract, to be used when sending messages + Address HumanAddress `json:"address"` +} diff --git a/go-cosmwasm/types/env_test.go b/go-cosmwasm/types/env_test.go new file mode 100644 index 000000000..650d4d13b --- /dev/null +++ b/go-cosmwasm/types/env_test.go @@ -0,0 +1,49 @@ +package types + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestMessageInfoHandlesMultipleCoins(t *testing.T) { + info := MessageInfo{ + Sender: "foobar", + SentFunds: []Coin{ + {Denom: "peth", Amount: "12345"}, + {Denom: "uatom", Amount: "789876"}, + }, + } + bz, err := json.Marshal(info) + require.NoError(t, err) + + // we can unmarshal it properly into struct + var recover MessageInfo + err = json.Unmarshal(bz, &recover) + require.NoError(t, err) + assert.Equal(t, info, recover) +} + +func TestMessageInfoHandlesMissingCoins(t *testing.T) { + info := MessageInfo{ + Sender: "baz", + } + bz, err := json.Marshal(info) + require.NoError(t, err) + + // we can unmarshal it properly into struct + var recover MessageInfo + err = json.Unmarshal(bz, &recover) + require.NoError(t, err) + assert.Equal(t, info, recover) + + // make sure "sent_funds":[] is in JSON + var raw map[string]json.RawMessage + err = json.Unmarshal(bz, &raw) + require.NoError(t, err) + sent, ok := raw["sent_funds"] + require.True(t, ok) + assert.Equal(t, string(sent), "[]") +} diff --git a/go-cosmwasm/types/queries.go b/go-cosmwasm/types/queries.go new file mode 100644 index 000000000..29d2c4c56 --- /dev/null +++ b/go-cosmwasm/types/queries.go @@ -0,0 +1,534 @@ +package types + +import ( + "encoding/json" +) + +//-------- Queries -------- + +type QueryResponse struct { + Ok []byte `json:"Ok,omitempty"` + Err *StdError `json:"Err,omitempty"` +} + +type ContractQueryResponse struct { + Query *QueryResponse `json:"query,omitempty"` +} + +//-------- Querier ----------- + +type Querier interface { + Query(request QueryRequest, queryDepth uint32, gasLimit uint64) ([]byte, error) + GasConsumed() uint64 +} + +// this is a thin wrapper around the desired Go API to give us types closer to Rust FFI +func RustQuery(querier Querier, binRequest []byte, queryDepth uint32, gasLimit uint64) QuerierResult { + var request QueryRequest + err := json.Unmarshal(binRequest, &request) + if err != nil { + return ToQuerierResult(nil, UnsupportedRequest{err.Error()}) + } + bz, err := querier.Query(request, queryDepth, gasLimit) + return ToQuerierResult(bz, err) +} + +// This is a 2-level result +type QuerierResult struct { + Ok *QueryResponse `json:"Ok,omitempty"` + Err *SystemError `json:"Err,omitempty"` +} + +func ToQuerierResult(response []byte, err error) QuerierResult { + if err == nil { + return QuerierResult{ + Ok: &QueryResponse{ + Ok: response, + }, + } + } + syserr := ToSystemError(err) + if syserr != nil { + return QuerierResult{ + Err: syserr, + } + } + stderr := ToStdError(err) + return QuerierResult{ + Ok: &QueryResponse{ + Err: stderr, + }, + } +} + +// QueryRequest is an rust enum and only (exactly) one of the fields should be set +// Should we do a cleaner approach in Go? (type/data?) +type QueryRequest struct { + Bank *BankQuery `json:"bank,omitempty"` + Custom json.RawMessage `json:"custom,omitempty"` + Staking *StakingQuery `json:"staking,omitempty"` + Wasm *WasmQuery `json:"wasm,omitempty"` + Dist *DistQuery `json:"dist,omitempty"` + Mint *MintQuery `json:"mint,omitempty"` + Gov *GovQuery `json:"gov,omitempty"` + IBC *IBCQuery `json:"ibc,omitempty"` + Stargate *StargateQuery `json:"stargate,omitempty"` +} + +type BankQuery struct { + Balance *BalanceQuery `json:"balance,omitempty"` + AllBalances *AllBalancesQuery `json:"all_balances,omitempty"` +} + +type BalanceQuery struct { + Address string `json:"address"` + Denom string `json:"denom"` +} + +// BalanceResponse is the expected response to BalanceQuery +type BalanceResponse struct { + Amount Coin `json:"amount"` +} + +type AllBalancesQuery struct { + Address string `json:"address"` +} + +// AllBalancesResponse is the expected response to AllBalancesQuery +type AllBalancesResponse struct { + Amount Coins `json:"amount"` +} + +type StakingQuery struct { + Validators *ValidatorsQuery `json:"validators,omitempty"` + AllDelegations *AllDelegationsQuery `json:"all_delegations,omitempty"` + Delegation *DelegationQuery `json:"delegation,omitempty"` + UnBondingDelegations *UnbondingDeletionsQuery `json:"unbonding_delegations,omitempty"` + BondedDenom *struct{} `json:"bonded_denom,omitempty"` + AllValidators *AllValidatorsQuery `json:"all_validators,omitempty"` + Validator *ValidatorQuery `json:"validator,omitempty"` +} + +type AllValidatorsQuery struct{} + +// AllValidatorsResponse is the expected response to AllValidatorsQuery +type AllValidatorsResponse struct { + Validators Validators `json:"validators"` +} + +type ValidatorQuery struct { + /// Address is the validator's address (e.g. cosmosvaloper1...) + Address string `json:"address"` +} + +// ValidatorResponse is the expected response to ValidatorQuery +type ValidatorResponse struct { + Validator *Validator `json:"validator"` // serializes to `null` when unset which matches Rust's Option::None serialization +} + +type UnbondingDeletionsQuery struct { + Delegator string `json:"delegator"` +} + +type ValidatorsQuery struct{} + +// ValidatorsResponse is the expected response to ValidatorsQuery +type ValidatorsResponse struct { + Validators Validators `json:"validators"` +} + +// TODO: Validators must JSON encode empty array as [] +type Validators []Validator + +// MarshalJSON ensures that we get [] for empty arrays +func (v Validators) MarshalJSON() ([]byte, error) { + if len(v) == 0 { + return []byte("[]"), nil + } + var raw []Validator = v + return json.Marshal(raw) +} + +// UnmarshalJSON ensures that we get [] for empty arrays +func (v *Validators) UnmarshalJSON(data []byte) error { + // make sure we deserialize [] back to null + if string(data) == "[]" || string(data) == "null" { //nolint:goconst + return nil + } + var raw []Validator + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + *v = raw + return nil +} + +type Validator struct { + Address string `json:"address"` + // decimal string, eg "0.02" + Commission string `json:"commission"` + // decimal string, eg "0.02" + MaxCommission string `json:"max_commission"` + // decimal string, eg "0.02" + MaxChangeRate string `json:"max_change_rate"` +} + +type AllDelegationsQuery struct { + Delegator string `json:"delegator"` +} + +type DelegationQuery struct { + Delegator string `json:"delegator"` + Validator string `json:"validator"` +} + +// AllDelegationsResponse is the expected response to AllDelegationsQuery +type AllDelegationsResponse struct { + Delegations Delegations `json:"delegations"` +} + +type Delegations []Delegation + +// MarshalJSON ensures that we get [] for empty arrays +func (d Delegations) MarshalJSON() ([]byte, error) { + if len(d) == 0 { + return []byte("[]"), nil + } + var raw []Delegation = d + return json.Marshal(raw) +} + +// UnmarshalJSON ensures that we get [] for empty arrays +func (d *Delegations) UnmarshalJSON(data []byte) error { + // make sure we deserialize [] back to null + if string(data) == "[]" || string(data) == "null" { + return nil + } + var raw []Delegation + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + *d = raw + return nil +} + +type Delegation struct { + Delegator string `json:"delegator"` + Validator string `json:"validator"` + Amount Coin `json:"amount"` +} + +// DelegationResponse is the expected response to DelegationsQuery +type DelegationResponse struct { + Delegation *FullDelegation `json:"delegation,omitempty"` +} + +type FullDelegation struct { + Delegator string `json:"delegator"` + Validator string `json:"validator"` + Amount Coin `json:"amount"` + AccumulatedRewards Coins `json:"accumulated_rewards"` + CanRedelegate Coin `json:"can_redelegate"` +} + +type UnbondingDelegationsResponse struct { + Delegations Delegations `json:"delegations"` +} + +type BondedDenomResponse struct { + Denom string `json:"denom"` +} + +type WasmQuery struct { + Smart *SmartQuery `json:"smart,omitempty"` + Raw *RawQuery `json:"raw,omitempty"` + ContractInfo *ContractInfoQuery `json:"contract_info,omitempty"` +} + +// SmartQuery response is raw bytes ([]byte) +type SmartQuery struct { + // Bech32 encoded sdk.AccAddress of the contract + ContractAddr string `json:"contract_addr"` + Msg []byte `json:"msg"` +} + +// RawQuery response is raw bytes ([]byte) +type RawQuery struct { + // Bech32 encoded sdk.AccAddress of the contract + ContractAddr string `json:"contract_addr"` + Key []byte `json:"key"` +} + +type ContractInfoQuery struct { + // Bech32 encoded sdk.AccAddress of the contract + ContractAddr string `json:"contract_addr"` +} + +type DistQuery struct { + Rewards *RewardsQuery `json:"rewards,omitempty"` +} + +type GovQuery struct { + Proposals *ProposalsQuery `json:"proposals,omitempty"` +} + +// StargateQuery is encoded the same way as abci_query, with path and protobuf encoded request data. +// The format is defined in [ADR-21](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-021-protobuf-query-encoding.md). +// The response is protobuf encoded data directly without a JSON response wrapper. +// The caller is responsible for compiling the proper protobuf definitions for both requests and responses. +type StargateQuery struct { + // this is the fully qualified service path used for routing, + // eg. custom/cosmos_sdk.x.bank.v1.Query/QueryBalance + Path string `json:"path"` + // this is the expected protobuf message type (not any), binary encoded + Data []byte `json:"data"` +} + +// IBCQuery defines a query request from the contract into the chain. +// This is the counterpart of [IbcQuery](https://github.com/CosmWasm/cosmwasm/blob/v0.14.0-beta1/packages/std/src/ibc.rs#L61-L83). +type IBCQuery struct { + PortID *PortIDQuery `json:"port_id,omitempty"` + ListChannels *ListChannelsQuery `json:"list_channels,omitempty"` + Channel *ChannelQuery `json:"channel,omitempty"` +} + +type PortIDQuery struct{} + +type PortIDResponse struct { + PortID string `json:"port_id"` +} + +// ListChannelsQuery is an IBCQuery that lists all channels that are bound to a given port. +// If `PortID` is unset, this list all channels bound to the contract's port. +// Returns a `ListChannelsResponse`. +// This is the counterpart of [IbcQuery::ListChannels](https://github.com/CosmWasm/cosmwasm/blob/v0.14.0-beta1/packages/std/src/ibc.rs#L70-L73). +type ListChannelsQuery struct { + // optional argument + PortID string `json:"port_id,omitempty"` +} + +type ListChannelsResponse struct { + Channels IBCChannels `json:"channels"` +} + +type IBCEndpoint struct { + PortID string `json:"port_id"` + ChannelID string `json:"channel_id"` +} + +// TODO: test what the sdk Order.String() represents and how to parse back +// Proto files: https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/proto/ibc/core/channel/v1/channel.proto#L69-L80 +// Auto-gen code: https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/x/ibc/core/04-channel/types/channel.pb.go#L70-L101 +type IBCOrder = string + +// These are the only two valid values for IbcOrder +const ( + Unordered = "ORDER_UNORDERED" + Ordered = "ORDER_ORDERED" +) + +type IBCChannel struct { + Endpoint IBCEndpoint `json:"endpoint"` + CounterpartyEndpoint IBCEndpoint `json:"counterparty_endpoint"` + Order IBCOrder `json:"order"` + Version string `json:"version"` + ConnectionID string `json:"connection_id"` +} + +type IBCOpenInit struct { + Channel IBCChannel `json:"channel"` +} + +func (m *IBCOpenInit) ToMsg() IBCChannelOpenMsg { + return IBCChannelOpenMsg{ + OpenInit: m, + } +} + +type IBCOpenTry struct { + Channel IBCChannel `json:"channel"` + CounterpartyVersion string `json:"counterparty_version"` +} + +func (m *IBCOpenTry) ToMsg() IBCChannelOpenMsg { + return IBCChannelOpenMsg{ + OpenTry: m, + } +} + +type IBCChannelOpenMsg struct { + OpenInit *IBCOpenInit `json:"open_init,omitempty"` + OpenTry *IBCOpenTry `json:"open_try,omitempty"` +} + +// IBCChannels must JSON encode empty array as [] (not null) for consistency with Rust parser +type IBCChannels []IBCChannel + +// MarshalJSON ensures that we get [] for empty arrays +func (e IBCChannels) MarshalJSON() ([]byte, error) { + if len(e) == 0 { + return []byte("[]"), nil + } + var raw []IBCChannel = e + return json.Marshal(raw) +} + +// UnmarshalJSON ensures that we get [] for empty arrays +func (e *IBCChannels) UnmarshalJSON(data []byte) error { + // make sure we deserialize [] back to null + if string(data) == "[]" || string(data) == "null" { + return nil + } + var raw []IBCChannel + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + *e = raw + return nil +} + +// IBCEndpoints must JSON encode empty array as [] (not null) for consistency with Rust parser +type IBCEndpoints []IBCEndpoint + +// MarshalJSON ensures that we get [] for empty arrays +func (e IBCEndpoints) MarshalJSON() ([]byte, error) { + if len(e) == 0 { + return []byte("[]"), nil + } + var raw []IBCEndpoint = e + return json.Marshal(raw) +} + +// UnmarshalJSON ensures that we get [] for empty arrays +func (e *IBCEndpoints) UnmarshalJSON(data []byte) error { + // make sure we deserialize [] back to null + if string(data) == "[]" || string(data) == "null" { + return nil + } + var raw []IBCEndpoint + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + *e = raw + return nil +} + +type ChannelQuery struct { + // optional argument + PortID string `json:"port_id,omitempty"` + ChannelID string `json:"channel_id"` +} + +type ChannelResponse struct { + // may be empty if there is no matching channel + Channel *IBCChannel `json:"channel,omitempty"` +} + +type MintQuery struct { + Inflation *MintingInflationQuery `json:"inflation,omitempty"` + BondedRatio *MintingBondedRatioQuery `json:"bonded_ratio,omitempty"` +} + +type ( + MintingBondedRatioQuery struct{} + MintingInflationQuery struct{} +) + +type MintingInflationResponse struct { + InflationRate string `json:"inflation_rate"` +} + +type MintingBondedRatioResponse struct { + BondedRatio string `json:"bonded_ratio"` +} + +type ProposalsQuery struct{} + +// DelegationResponse is the expected response to DelegationsQuery +type ProposalsResponse struct { + Proposals []Proposal `json:"proposals,omitempty"` +} + +type Proposal struct { + ProposalID uint64 `json:"id" yaml:"id"` // ID of the proposal + VotingStartTime uint64 `json:"voting_start_time" yaml:"voting_start_time"` // Time of the block where MinDeposit was reached. -1 if MinDeposit is not reached + VotingEndTime uint64 `json:"voting_end_time" yaml:"voting_end_time"` // Time that the VotingPeriod for this proposal will end and votes will be tallied +} + +type RewardsQuery struct { + Delegator string `json:"delegator"` +} + +// DelegationResponse is the expected response to DelegationsQuery +type RewardsResponse struct { + Rewards []Rewards `json:"rewards,omitempty"` + Total RewardCoins `json:"total,omitempty"` +} + +type Rewards struct { + Validator string `json:"validator_address"` + Reward RewardCoins `json:"reward"` +} + +type RewardCoins []Coin + +// MarshalJSON ensures that we get [] for empty arrays +func (d RewardCoins) MarshalJSON() ([]byte, error) { + if len(d) == 0 { + return []byte("[]"), nil + } + var raw []Coin = d + return json.Marshal(raw) +} + +// UnmarshalJSON ensures that we get [] for empty arrays +func (d *RewardCoins) UnmarshalJSON(data []byte) error { + // make sure we deserialize [] back to null + if string(data) == "[]" || string(data) == "null" { + return nil + } + var raw []Coin + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + *d = raw + return nil +} + +// MarshalJSON ensures that we get [] for empty arrays +func (d ProposalsResponse) MarshalJSON() ([]byte, error) { + if len(d.Proposals) == 0 { + return []byte("{\"proposals\": []}"), nil + } + raw := d.Proposals + asBytes, err := json.Marshal(raw) + if err != nil { + return nil, err + } + + return append(append([]byte("{\"proposals\": "), asBytes...), []byte("}")...), nil +} + +// UnmarshalJSON ensures that we get [] for empty arrays +func (d *ProposalsResponse) UnmarshalJSON(data []byte) error { + // make sure we deserialize [] back to null + if string(data) == "{\"proposals\": []}" || string(data) == "null" || string(data) == "{\"proposals\":[]}" { + return nil + } + var raw []Proposal + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + d.Proposals = raw + return nil +} + +type ContractInfoResponse struct { + CodeID uint64 `json:"code_id"` + Creator string `json:"creator"` + // Set to the admin who can migrate contract, if any + Admin string `json:"admin,omitempty"` + Pinned bool `json:"pinned"` + // Set if the contract is IBC enabled + IBCPort string `json:"ibc_port,omitempty"` +} diff --git a/go-cosmwasm/types/queries_test.go b/go-cosmwasm/types/queries_test.go new file mode 100644 index 000000000..ebaca168f --- /dev/null +++ b/go-cosmwasm/types/queries_test.go @@ -0,0 +1,64 @@ +package types + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestDelegationWithEmptyArray(t *testing.T) { + var del Delegations + bz, err := json.Marshal(&del) + require.NoError(t, err) + assert.Equal(t, string(bz), `[]`) + + var redel Delegations + err = json.Unmarshal(bz, &redel) + require.NoError(t, err) + assert.Nil(t, redel) +} + +func TestDelegationWithData(t *testing.T) { + del := Delegations{{ + Validator: "foo", + Delegator: "bar", + Amount: NewCoin(123, "stake"), + }} + bz, err := json.Marshal(&del) + require.NoError(t, err) + + var redel Delegations + err = json.Unmarshal(bz, &redel) + require.NoError(t, err) + assert.Equal(t, redel, del) +} + +func TestValidatorWithEmptyArray(t *testing.T) { + var val Validators + bz, err := json.Marshal(&val) + require.NoError(t, err) + assert.Equal(t, string(bz), `[]`) + + var reval Validators + err = json.Unmarshal(bz, &reval) + require.NoError(t, err) + assert.Nil(t, reval) +} + +func TestValidatorWithData(t *testing.T) { + val := Validators{{ + Address: "1234567890", + Commission: "0.05", + MaxCommission: "0.1", + MaxChangeRate: "0.02", + }} + bz, err := json.Marshal(&val) + require.NoError(t, err) + + var reval Validators + err = json.Unmarshal(bz, &reval) + require.NoError(t, err) + assert.Equal(t, reval, val) +} diff --git a/go-cosmwasm/types/stderror.go b/go-cosmwasm/types/stderror.go new file mode 100644 index 000000000..dc8bf8763 --- /dev/null +++ b/go-cosmwasm/types/stderror.go @@ -0,0 +1,202 @@ +package types + +import ( + "fmt" + "reflect" +) + +// StdError captures all errors returned from the Rust code as StdError. +// Exactly one of the fields should be set. +type StdError struct { + GenericErr *GenericErr `json:"generic_err,omitempty"` + InvalidBase64 *InvalidBase64 `json:"invalid_base64,omitempty"` + InvalidUtf8 *InvalidUtf8 `json:"invalid_utf8,omitempty"` + NotFound *NotFound `json:"not_found,omitempty"` + ParseErr *ParseErr `json:"parse_err,omitempty"` + SerializeErr *SerializeErr `json:"serialize_err,omitempty"` + Unauthorized *Unauthorized `json:"unauthorized,omitempty"` + Underflow *Underflow `json:"underflow,omitempty"` +} + +var ( + _ error = StdError{} + _ error = GenericErr{} + _ error = InvalidBase64{} + _ error = InvalidUtf8{} + _ error = NotFound{} + _ error = ParseErr{} + _ error = SerializeErr{} + _ error = Unauthorized{} + _ error = Underflow{} +) + +func (a StdError) Error() string { + switch { + case a.GenericErr != nil: + return a.GenericErr.Error() + case a.InvalidBase64 != nil: + return a.InvalidBase64.Error() + case a.InvalidUtf8 != nil: + return a.InvalidUtf8.Error() + case a.NotFound != nil: + return a.NotFound.Error() + case a.ParseErr != nil: + return a.ParseErr.Error() + case a.SerializeErr != nil: + return a.SerializeErr.Error() + case a.Unauthorized != nil: + return a.Unauthorized.Error() + case a.Underflow != nil: + return a.Underflow.Error() + default: + panic("unknown error variant") + } +} + +func (a StdError) IsEmpty() bool { + switch { + case a.GenericErr != nil: + case a.InvalidBase64 != nil: + case a.InvalidUtf8 != nil: + case a.NotFound != nil: + case a.ParseErr != nil: + case a.SerializeErr != nil: + case a.Unauthorized != nil: + case a.Underflow != nil: + return false + default: + return true + } + return true +} + +type GenericErr struct { + Msg string `json:"msg,omitempty"` +} + +func (e GenericErr) Error() string { + return fmt.Sprintf("encrypted: %s", e.Msg) +} + +type InvalidBase64 struct { + Msg string `json:"msg,omitempty"` +} + +func (e InvalidBase64) Error() string { + return fmt.Sprintf("invalid base64: %s", e.Msg) +} + +type InvalidUtf8 struct { + Msg string `json:"msg,omitempty"` +} + +func (e InvalidUtf8) Error() string { + return fmt.Sprintf("invalid_utf8: %s", e.Msg) +} + +type NotFound struct { + Kind string `json:"kind,omitempty"` +} + +func (e NotFound) Error() string { + return fmt.Sprintf("not found: %s", e.Kind) +} + +type ParseErr struct { + Target string `json:"target,omitempty"` + Msg string `json:"msg,omitempty"` +} + +func (e ParseErr) Error() string { + return fmt.Sprintf("parsing %s: %s", e.Target, e.Msg) +} + +type SerializeErr struct { + Source string `json:"source,omitempty"` + Msg string `json:"msg,omitempty"` +} + +func (e SerializeErr) Error() string { + return fmt.Sprintf("serializing %s: %s", e.Source, e.Msg) +} + +type Unauthorized struct{} + +func (e Unauthorized) Error() string { + return "unauthorized" +} + +type Underflow struct { + Minuend string `json:"minuend,omitempty"` + Subtrahend string `json:"subtrahend,omitempty"` +} + +func (e Underflow) Error() string { + return fmt.Sprintf("underflow: %s - %s", e.Minuend, e.Subtrahend) +} + +// ToStdError will convert the given error to an StdError. +// This is important to returning any Go error back to Rust. +// +// If it is already StdError, return self. +// If it is an error, which could be a sub-field of StdError, embed it. +// If it is anything else, convert it to a GenericErr. +func ToStdError(err error) *StdError { + if isNil(err) { + return nil + } + switch t := err.(type) { + case StdError: + return &t + case *StdError: + return t + case GenericErr: + return &StdError{GenericErr: &t} + case *GenericErr: + return &StdError{GenericErr: t} + case InvalidBase64: + return &StdError{InvalidBase64: &t} + case *InvalidBase64: + return &StdError{InvalidBase64: t} + case InvalidUtf8: + return &StdError{InvalidUtf8: &t} + case *InvalidUtf8: + return &StdError{InvalidUtf8: t} + case NotFound: + return &StdError{NotFound: &t} + case *NotFound: + return &StdError{NotFound: t} + case ParseErr: + return &StdError{ParseErr: &t} + case *ParseErr: + return &StdError{ParseErr: t} + case SerializeErr: + return &StdError{SerializeErr: &t} + case *SerializeErr: + return &StdError{SerializeErr: t} + case Unauthorized: + return &StdError{Unauthorized: &t} + case *Unauthorized: + return &StdError{Unauthorized: t} + case Underflow: + return &StdError{Underflow: &t} + case *Underflow: + return &StdError{Underflow: t} + default: + g := GenericErr{Msg: err.Error()} + return &StdError{GenericErr: &g} + } +} + +// check if an interface is nil (even if it has type info) +func isNil(i interface{}) bool { + if i == nil { + return true + } + if reflect.TypeOf(i).Kind() == reflect.Ptr { + // IsNil panics if you try it on a struct (not a pointer) + return reflect.ValueOf(i).IsNil() + } + // if we aren't a pointer, can't be nil, can we? + return false +} diff --git a/go-cosmwasm/types/systemerror.go b/go-cosmwasm/types/systemerror.go new file mode 100644 index 000000000..064c9ae18 --- /dev/null +++ b/go-cosmwasm/types/systemerror.go @@ -0,0 +1,138 @@ +package types + +import ( + "fmt" +) + +// SystemError captures all errors returned from the Rust code as SystemError. +// Exactly one of the fields should be set. +type SystemError struct { + InvalidRequest *InvalidRequest `json:"invalid_request,omitempty"` + InvalidResponse *InvalidResponse `json:"invalid_response,omitempty"` + NoSuchContract *NoSuchContract `json:"no_such_contract,omitempty"` + Unknown *Unknown `json:"unknown,omitempty"` + UnsupportedRequest *UnsupportedRequest `json:"unsupported_request,omitempty"` + ExceededRecursionLimit *ExceededRecursionLimit `json:"exceeded_recursion_limit,omitempty"` +} + +var ( + _ error = SystemError{} + _ error = InvalidRequest{} + _ error = InvalidResponse{} + _ error = NoSuchContract{} + _ error = Unknown{} + _ error = UnsupportedRequest{} + _ error = ExceededRecursionLimit{} +) + +func (a SystemError) Error() string { + switch { + case a.InvalidRequest != nil: + return a.InvalidRequest.Error() + case a.InvalidResponse != nil: + return a.InvalidResponse.Error() + case a.NoSuchContract != nil: + return a.NoSuchContract.Error() + case a.Unknown != nil: + return a.Unknown.Error() + case a.UnsupportedRequest != nil: + return a.UnsupportedRequest.Error() + case a.ExceededRecursionLimit != nil: + return a.ExceededRecursionLimit.Error() + default: + panic("unknown error variant") + } +} + +type InvalidRequest struct { + Err string `json:"error"` + Request []byte `json:"request"` +} + +func (e InvalidRequest) Error() string { + return fmt.Sprintf("invalid request: %s - original request: %s", e.Err, string(e.Request)) +} + +type InvalidResponse struct { + Err string `json:"error"` + Response []byte `json:"response"` +} + +func (e InvalidResponse) Error() string { + return fmt.Sprintf("invalid response: %s - original response: %s", e.Err, string(e.Response)) +} + +type NoSuchContract struct { + Addr string `json:"addr,omitempty"` +} + +func (e NoSuchContract) Error() string { + return fmt.Sprintf("no such contract: %s", e.Addr) +} + +type Unknown struct{} + +func (e Unknown) Error() string { + return "unknown system error" +} + +type UnsupportedRequest struct { + Kind string `json:"kind,omitempty"` +} + +func (e UnsupportedRequest) Error() string { + return fmt.Sprintf("unsupported request: %s", e.Kind) +} + +type ExceededRecursionLimit struct{} + +func (e ExceededRecursionLimit) Error() string { + return "unknown system error" +} + +// ToSystemError will try to convert the given error to an SystemError. +// This is important to returning any Go error back to Rust. +// +// If it is already StdError, return self. +// If it is an error, which could be a sub-field of StdError, embed it. +// If it is anything else, **return nil** +// +// This may return nil on an unknown error, whereas ToStdError will always create +// a valid error type. +func ToSystemError(err error) *SystemError { + if isNil(err) { + return nil + } + switch t := err.(type) { + case SystemError: + return &t + case *SystemError: + return t + case InvalidRequest: + return &SystemError{InvalidRequest: &t} + case *InvalidRequest: + return &SystemError{InvalidRequest: t} + case InvalidResponse: + return &SystemError{InvalidResponse: &t} + case *InvalidResponse: + return &SystemError{InvalidResponse: t} + case NoSuchContract: + return &SystemError{NoSuchContract: &t} + case *NoSuchContract: + return &SystemError{NoSuchContract: t} + case Unknown: + return &SystemError{Unknown: &t} + case *Unknown: + return &SystemError{Unknown: t} + case UnsupportedRequest: + return &SystemError{UnsupportedRequest: &t} + case *UnsupportedRequest: + return &SystemError{UnsupportedRequest: t} + case ExceededRecursionLimit: + return &SystemError{ExceededRecursionLimit: &t} + case *ExceededRecursionLimit: + return &SystemError{ExceededRecursionLimit: t} + default: + return nil + } +} diff --git a/go-cosmwasm/types/types.go b/go-cosmwasm/types/types.go new file mode 100644 index 000000000..194ad9048 --- /dev/null +++ b/go-cosmwasm/types/types.go @@ -0,0 +1,92 @@ +package types + +import ( + "encoding/json" + "strconv" +) + +// HumanAddress is a printable (typically bech32 encoded) address string. Just use it as a label for developers. +type HumanAddress = string + +// CanonicalAddress uses standard base64 encoding, just use it as a label for developers +type CanonicalAddress = []byte + +// Coin is a string representation of the sdk.Coin type (more portable than sdk.Int) +type Coin struct { + Denom string `json:"denom"` // type, eg. "ATOM" + Amount string `json:"amount"` // string encoing of decimal value, eg. "12.3456" +} + +func NewCoin(amount uint64, denom string) Coin { + return Coin{ + Denom: denom, + Amount: strconv.FormatUint(amount, 10), + } +} + +// Coins handles properly serializing empty amounts +type Coins []Coin + +// MarshalJSON ensures that we get [] for empty arrays +func (c Coins) MarshalJSON() ([]byte, error) { + if len(c) == 0 { + return []byte("[]"), nil + } + var d []Coin = c + return json.Marshal(d) +} + +// UnmarshalJSON ensures that we get [] for empty arrays +func (c *Coins) UnmarshalJSON(data []byte) error { + // make sure we deserialize [] back to null + if string(data) == "[]" || string(data) == "null" { + return nil + } + var d []Coin + if err := json.Unmarshal(data, &d); err != nil { + return err + } + *c = d + return nil +} + +type OutOfGasError struct{} + +var _ error = OutOfGasError{} + +func (o OutOfGasError) Error() string { + return "Out of gas" +} + +type SigInfo struct { + TxBytes []byte `json:"tx_bytes"` + SignBytes []byte `json:"sign_bytes"` + SignMode string `json:"sign_mode"` + ModeInfo []byte `json:"mode_info"` + PublicKey []byte `json:"public_key"` + Signature []byte `json:"signature"` + CallbackSignature []byte `json:"callback_sig"` // Optional +} + +type HandleType int + +const ( + HandleTypeExecute HandleType = iota + HandleTypeReply + HandleTypeIbcChannelOpen + HandleTypeIbcChannelConnect + HandleTypeIbcChannelClose + HandleTypeIbcPacketReceive + HandleTypeIbcPacketAck + HandleTypeIbcPacketTimeout + HandleTypeIbcWasmHooksIncomingTransfer + HandleTypeIbcWasmHooksOutgoingTransferAck + HandleTypeIbcWasmHooksOutgoingTransferTimeout +) + +type CosmosMsgVersion int + +const ( + CosmosMsgVersionV010 CosmosMsgVersion = iota + CosmosMsgVersionV1 +) diff --git a/go-cosmwasm/types/v010/msg_v010.go b/go-cosmwasm/types/v010/msg_v010.go new file mode 100644 index 000000000..7e1c890a5 --- /dev/null +++ b/go-cosmwasm/types/v010/msg_v010.go @@ -0,0 +1,197 @@ +package v010types + +import ( + "encoding/json" + + types "github.com/comdex-official/comdex/go-cosmwasm/types" +) + +//------- Results / Msgs ------------- + +// HandleResult is the raw response from the handle call +type HandleResult struct { + Ok *HandleResponse `json:"Ok,omitempty"` + Err *types.StdError `json:"Err,omitempty"` +} + +// HandleResponse defines the return value on a successful handle +type HandleResponse struct { + // Messages comes directly from the contract and is it's request for action + Messages []CosmosMsg `json:"messages"` + // base64-encoded bytes to return as ABCI.Data field + Data []byte `json:"data"` + // log message to return over abci interface + Log []LogAttribute `json:"log"` +} + +// InitResult is the raw response from the handle call +type InitResult struct { + Ok *InitResponse `json:"Ok,omitempty"` + Err *types.StdError `json:"Err,omitempty"` +} + +// InitResponse defines the return value on a successful handle +type InitResponse struct { + // Messages comes directly from the contract and is it's request for action + Messages []CosmosMsg `json:"messages"` + // log message to return over abci interface + Log []LogAttribute `json:"log"` + Data []byte `json:"data,omitempty"` +} + +// LogAttribute +type LogAttribute struct { + Key string `json:"key"` + Value string `json:"value"` +} + +// CosmosMsg is an rust enum and only (exactly) one of the fields should be set +// Should we do a cleaner approach in Go? (type/data?) +type CosmosMsg struct { + Bank *BankMsg `json:"bank,omitempty"` + Custom json.RawMessage `json:"custom,omitempty"` + Staking *StakingMsg `json:"staking,omitempty"` + Wasm *WasmMsg `json:"wasm,omitempty"` + Gov *GovMsg `json:"gov,omitempty"` +} + +type BankMsg struct { + Send *SendMsg `json:"send,omitempty"` +} + +type GovMsg struct { + Vote *VoteMsg `json:"vote,omitempty"` +} + +// VoteMsg contains instructions for a Cosmos-SDK/GovVote +// It has a fixed interface here and should be converted into the proper SDK format before dispatching +type VoteMsg struct { + Proposal uint64 `json:"proposal"` + VoteOption string `json:"vote_option"` +} + +var ( + Yes = "Yes" + Abstain = "Abstain" + No = "No" + NoWithVeto = "NoWithVeto" +) + +// SendMsg contains instructions for a Cosmos-SDK/SendMsg +// It has a fixed interface here and should be converted into the proper SDK format before dispatching +type SendMsg struct { + FromAddress string `json:"from_address"` + ToAddress string `json:"to_address"` + Amount types.Coins `json:"amount"` +} + +type StakingMsg struct { + Delegate *DelegateMsg `json:"delegate,omitempty"` + Undelegate *UndelegateMsg `json:"undelegate,omitempty"` + Redelegate *RedelegateMsg `json:"redelegate,omitempty"` + Withdraw *WithdrawMsg `json:"withdraw,omitempty"` +} + +type DelegateMsg struct { + Validator string `json:"validator"` + Amount types.Coin `json:"amount"` +} + +type UndelegateMsg struct { + Validator string `json:"validator"` + Amount types.Coin `json:"amount"` +} + +type RedelegateMsg struct { + SrcValidator string `json:"src_validator"` + DstValidator string `json:"dst_validator"` + Amount types.Coin `json:"amount"` +} + +type WithdrawMsg struct { + Validator string `json:"validator"` + // this is optional + Recipient string `json:"recipient,omitempty"` +} + +type WasmMsg struct { + Execute *ExecuteMsg `json:"execute,omitempty"` + Instantiate *InstantiateMsg `json:"instantiate,omitempty"` + Migrate *MigrateMsg `json:"migrate,omitempty"` + UpdateAdmin *UpdateAdminMsg `json:"update_admin,omitempty"` + ClearAdmin *ClearAdminMsg `json:"clear_admin,omitempty"` +} + +// ExecuteMsg is used to call another defined contract on this chain. +// The calling contract requires the callee to be defined beforehand, +// and the address should have been defined in initialization. +// And we assume the developer tested the ABIs and coded them together. +// +// Since a contract is immutable once it is deployed, we don't need to transform this. +// If it was properly coded and worked once, it will continue to work throughout upgrades. +type ExecuteMsg struct { + // ContractAddr is the sdk.AccAddress of the contract, which uniquely defines + // the contract ID and instance ID. The sdk module should maintain a reverse lookup table. + ContractAddr string `json:"contract_addr"` + // Custom addition to support binding a message to specific code to harden against offline & replay attacks + // This is only needed when creating a callback message + CallbackCodeHash string `json:"callback_code_hash"` + // Msg is assumed to be a json-encoded message, which will be passed directly + // as `userMsg` when calling `Handle` on the above-defined contract + Msg []byte `json:"msg"` + // Send is an optional amount of coins this contract sends to the called contract + Send types.Coins `json:"send"` + CallbackSignature []byte `json:"callback_sig"` // Optional +} + +type InstantiateMsg struct { + // CodeID is the reference to the wasm byte code as used by the Cosmos-SDK + CodeID uint64 `json:"code_id"` + // Custom addition to support binding a message to specific code to harden against offline & replay attacks + // This is only needed when creating a callback message + CallbackCodeHash string `json:"callback_code_hash"` + // Msg is assumed to be a json-encoded message, which will be passed directly + // as `userMsg` when calling `Handle` on the above-defined contract + Msg []byte `json:"msg"` + /// Label is a mandatory human-readbale label for the contract + Label string `json:"label"` + // Send is an optional amount of coins this contract sends to the called contract + Send types.Coins `json:"send"` + CallbackSignature []byte `json:"callback_sig"` // Optional +} + +type MigrateMsg struct { + // Sender is the that actor that signed the messages + Sender string `json:"sender"` + // Contract is the address of the smart contract + Contract string `json:"contract_addr"` + // CodeID references the new WASM code + CodeID uint64 `json:"code_id"` + // msg is an encrypted input to pass to the contract on migration + Msg []byte `json:"msg"` + // used internally for encryption, should always be empty in a signed transaction + CallbackSignature []byte `json:"callback_sig"` + // Custom addition to support binding a message to specific code to harden against offline & replay attacks + // This is only needed when creating a callback message + CallbackCodeHash string `json:"callback_code_hash"` +} + +type UpdateAdminMsg struct { + // Sender is the that actor that signed the messages + Sender string `json:"sender,omitempty"` + // NewAdmin address to be set + NewAdmin string `json:"admin,omitempty"` + // Contract is the address of the smart contract + Contract string `json:"contract_addr,omitempty"` + // used internally for encryption, should always be empty in a signed transaction + CallbackSignature []byte `json:"callback_sig"` +} + +type ClearAdminMsg struct { + // Sender is the that actor that signed the messages + Sender string `json:"sender,omitempty"` + // Contract is the address of the smart contract + Contract string `json:"contract_addr,omitempty"` + // used internally for encryption, should always be empty in a signed transaction + CallbackSignature []byte `json:"callback_sig"` +} diff --git a/go-cosmwasm/types/v1/ibc.go b/go-cosmwasm/types/v1/ibc.go new file mode 100644 index 000000000..48aa3630d --- /dev/null +++ b/go-cosmwasm/types/v1/ibc.go @@ -0,0 +1,289 @@ +package v1types + +import ( + ibcchanneltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" + types "github.com/comdex-official/comdex/go-cosmwasm/types" + v010msgtypes "github.com/comdex-official/comdex/go-cosmwasm/types/v010" +) + +type IBCEndpoint struct { + PortID string `json:"port_id"` + ChannelID string `json:"channel_id"` +} + +type IBCChannel struct { + Endpoint IBCEndpoint `json:"endpoint"` + CounterpartyEndpoint IBCEndpoint `json:"counterparty_endpoint"` + Order IBCOrder `json:"order"` + Version string `json:"version"` + ConnectionID string `json:"connection_id"` +} + +type IBCChannelOpenMsg struct { + OpenInit *IBCOpenInit `json:"open_init,omitempty"` + OpenTry *IBCOpenTry `json:"open_try,omitempty"` +} + +// GetChannel returns the IBCChannel in this message. +func (msg IBCChannelOpenMsg) GetChannel() IBCChannel { + if msg.OpenInit != nil { + return msg.OpenInit.Channel + } + return msg.OpenTry.Channel +} + +// GetCounterVersion checks if the message has a counterparty version and +// returns it if so. +func (msg IBCChannelOpenMsg) GetCounterVersion() (ver string, ok bool) { + if msg.OpenTry != nil { + return msg.OpenTry.CounterpartyVersion, true + } + return "", false +} + +type IBCOpenInit struct { + Channel IBCChannel `json:"channel"` +} + +func (m *IBCOpenInit) ToMsg() IBCChannelOpenMsg { + return IBCChannelOpenMsg{ + OpenInit: m, + } +} + +type IBCOpenTry struct { + Channel IBCChannel `json:"channel"` + CounterpartyVersion string `json:"counterparty_version"` +} + +func (m *IBCOpenTry) ToMsg() IBCChannelOpenMsg { + return IBCChannelOpenMsg{ + OpenTry: m, + } +} + +type IBCChannelConnectMsg struct { + OpenAck *IBCOpenAck `json:"open_ack,omitempty"` + OpenConfirm *IBCOpenConfirm `json:"open_confirm,omitempty"` +} + +// GetChannel returns the IBCChannel in this message. +func (msg IBCChannelConnectMsg) GetChannel() IBCChannel { + if msg.OpenAck != nil { + return msg.OpenAck.Channel + } + return msg.OpenConfirm.Channel +} + +// GetCounterVersion checks if the message has a counterparty version and +// returns it if so. +func (msg IBCChannelConnectMsg) GetCounterVersion() (ver string, ok bool) { + if msg.OpenAck != nil { + return msg.OpenAck.CounterpartyVersion, true + } + return "", false +} + +type IBCOpenAck struct { + Channel IBCChannel `json:"channel"` + CounterpartyVersion string `json:"counterparty_version"` +} + +func (m *IBCOpenAck) ToMsg() IBCChannelConnectMsg { + return IBCChannelConnectMsg{ + OpenAck: m, + } +} + +type IBCOpenConfirm struct { + Channel IBCChannel `json:"channel"` +} + +func (m *IBCOpenConfirm) ToMsg() IBCChannelConnectMsg { + return IBCChannelConnectMsg{ + OpenConfirm: m, + } +} + +type IBCChannelCloseMsg struct { + CloseInit *IBCCloseInit `json:"close_init,omitempty"` + CloseConfirm *IBCCloseConfirm `json:"close_confirm,omitempty"` +} + +// GetChannel returns the IBCChannel in this message. +func (msg IBCChannelCloseMsg) GetChannel() IBCChannel { + if msg.CloseInit != nil { + return msg.CloseInit.Channel + } + return msg.CloseConfirm.Channel +} + +type IBCCloseInit struct { + Channel IBCChannel `json:"channel"` +} + +func (m *IBCCloseInit) ToMsg() IBCChannelCloseMsg { + return IBCChannelCloseMsg{ + CloseInit: m, + } +} + +type IBCCloseConfirm struct { + Channel IBCChannel `json:"channel"` +} + +func (m *IBCCloseConfirm) ToMsg() IBCChannelCloseMsg { + return IBCChannelCloseMsg{ + CloseConfirm: m, + } +} + +type IBCPacketReceiveMsg struct { + Packet IBCPacket `json:"packet"` + Relayer string `json:"relayer"` +} + +type IBCPacketAckMsg struct { + Acknowledgement IBCAcknowledgement `json:"acknowledgement"` + OriginalPacket IBCPacket `json:"original_packet"` + Relayer string `json:"relayer"` +} + +type IBCPacketTimeoutMsg struct { + Packet IBCPacket `json:"packet"` + Relayer string `json:"relayer"` +} + +// TODO: test what the sdk Order.String() represents and how to parse back +// Proto files: https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/proto/ibc/core/channel/v1/channel.proto#L69-L80 +// Auto-gen code: https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/x/ibc/core/04-channel/types/channel.pb.go#L70-L101 +type IBCOrder = string + +// These are the only two valid values for IbcOrder +const ( + Unordered = "ORDER_UNORDERED" + Ordered = "ORDER_ORDERED" +) + +func IBCOrderToEnum(o IBCOrder) ibcchanneltypes.Order { + if o == Unordered { + return ibcchanneltypes.UNORDERED + } + + return ibcchanneltypes.ORDERED +} + +// IBCTimeoutBlock Height is a monotonically increasing data type +// that can be compared against another Height for the purposes of updating and +// freezing clients. +// Ordering is (revision_number, timeout_height) +type IBCTimeoutBlock struct { + // the version that the client is currently on + // (eg. after reseting the chain this could increment 1 as height drops to 0) + Revision uint64 `json:"revision"` + // block height after which the packet times out. + // the height within the given revision + Height uint64 `json:"height"` +} + +func (t IBCTimeoutBlock) IsZero() bool { + return t.Revision == 0 && t.Height == 0 +} + +// IBCTimeout is the timeout for an IBC packet. At least one of block and timestamp is required. +type IBCTimeout struct { + Block *IBCTimeoutBlock `json:"block"` + // Nanoseconds since UNIX epoch + Timestamp uint64 `json:"timestamp,string,omitempty"` +} + +type IBCAcknowledgement struct { + Data []byte `json:"data"` +} + +type IBCPacket struct { + Data []byte `json:"data"` + Src IBCEndpoint `json:"src"` + Dest IBCEndpoint `json:"dest"` + Sequence uint64 `json:"sequence"` + Timeout IBCTimeout `json:"timeout"` +} + +// IBCChannelOpenResult is the raw response from the ibc_channel_open call. +// This is mirrors Rust's ContractResult<()>. +// Check if Err == "" to see if this is success +// On Success, IBCV3ChannelOpenResponse *may* be set if the contract is ibcv3 compatible and wishes to +// define a custom version in the handshake. +type IBCChannelOpenResult struct { + Ok *IBC3ChannelOpenResponse `json:"ok,omitempty"` + Err string `json:"error,omitempty"` +} + +// IBC3ChannelOpenResponse is version negotiation data for the handshake +type IBC3ChannelOpenResponse struct { + Version string `json:"version"` +} + +// This is the return value for the majority of the ibc handlers. +// That are able to dispatch messages / events on their own, +// but have no meaningful return value to the calling code. +// +// Callbacks that have return values (like ibc_receive_packet) +// or that cannot redispatch messages (like ibc_channel_open) +// will use other Response types +type IBCBasicResult struct { + Ok *IBCBasicResponse `json:"ok,omitempty"` + Err *types.StdError `json:"Err,omitempty"` +} + +// IBCBasicResponse defines the return value on a successful processing. +// This is the counterpart of [IbcBasicResponse](https://github.com/CosmWasm/cosmwasm/blob/v0.14.0-beta1/packages/std/src/ibc.rs#L194-L216). +type IBCBasicResponse struct { + // Messages comes directly from the contract and is its request for action. + // If the ReplyOn value matches the result, the runtime will invoke this + // contract's `reply` entry point after execution. Otherwise, this is all + // "fire and forget". + Messages []SubMsg `json:"messages"` + // attributes for a log event to return over abci interface + Attributes []v010msgtypes.LogAttribute `json:"attributes"` + // custom events (separate from the main one that contains the attributes + // above) + Events []Event `json:"events"` +} + +// This is the return value for the majority of the ibc handlers. +// That are able to dispatch messages / events on their own, +// but have no meaningful return value to the calling code. +// +// Callbacks that have return values (like receive_packet) +// or that cannot redispatch messages (like the handshake callbacks) +// will use other Response types +type IBCReceiveResult struct { + Ok *IBCReceiveResponse `json:"ok,omitempty"` + Err *types.StdError `json:"Err,omitempty"` +} + +type IBCOpenChannelResult struct { + Ok *string `json:"ok,omitempty"` + Err *types.StdError `json:"Err,omitempty"` +} + +// IBCReceiveResponse defines the return value on packet response processing. +// This "success" case should be returned even in application-level errors, +// Where the Acknowledgement bytes contain an encoded error message to be returned to +// the calling chain. (Returning IBCReceiveResult::Err will abort processing of this packet +// and not inform the calling chain). +// This is the counterpart of (IbcReceiveResponse)(https://github.com/CosmWasm/cosmwasm/blob/v0.15.0/packages/std/src/ibc.rs#L247-L267). +type IBCReceiveResponse struct { + // binary encoded data to be returned to calling chain as the acknowledgement + Acknowledgement []byte `json:"acknowledgement"` + // Messages comes directly from the contract and is it's request for action. + // If the ReplyOn value matches the result, the runtime will invoke this + // contract's `reply` entry point after execution. Otherwise, this is all + // "fire and forget". + Messages []SubMsg `json:"messages"` + Attributes []v010msgtypes.LogAttribute `json:"attributes"` + // custom events (separate from the main one that contains the attributes + // above) + Events []Event `json:"events"` +} diff --git a/go-cosmwasm/types/v1/msg_v1.go b/go-cosmwasm/types/v1/msg_v1.go new file mode 100644 index 000000000..309fde7b0 --- /dev/null +++ b/go-cosmwasm/types/v1/msg_v1.go @@ -0,0 +1,224 @@ +package v1types + +import ( + "encoding/json" + "fmt" + + types "github.com/comdex-official/comdex/go-cosmwasm/types" + v010msgtypes "github.com/comdex-official/comdex/go-cosmwasm/types/v010" +) + +//------- Results / Msgs ------------- + +// ContractResult is the raw response from the instantiate/execute/migrate calls. +// This is mirrors Rust's ContractResult. +type ContractResult struct { + Ok *Response `json:"ok,omitempty"` + Err string `json:"error,omitempty"` +} + +// Response defines the return value on a successful instantiate/execute/migrate. +// This is the counterpart of [Response](https://github.com/CosmWasm/cosmwasm/blob/v0.14.0-beta1/packages/std/src/results/response.rs#L73-L88) +type Response struct { + // Messages comes directly from the contract and is its request for action. + // If the ReplyOn value matches the result, the runtime will invoke this + // contract's `reply` entry point after execution. Otherwise, this is all + // "fire and forget". + Messages []SubMsg `json:"messages"` + // base64-encoded bytes to return as ABCI.Data field + Data []byte `json:"data"` + // attributes for a log event to return over abci interface + Attributes []v010msgtypes.LogAttribute `json:"attributes"` + // custom events (separate from the main one that contains the attributes + // above) + Events []Event `json:"events"` +} + +// Used to serialize both the data and the internal reply information in order to keep the api without changes +type DataWithInternalReplyInfo struct { + InternaReplyEnclaveSig []byte `json:"internal_reply_enclave_sig"` + InternalMsgId []byte `json:"internal_msg_id"` + Data []byte `json:"data,omitempty"` +} + +// LogAttributes must encode empty array as [] +type LogAttributes []v010msgtypes.LogAttribute + +// MarshalJSON ensures that we get [] for empty arrays +func (a LogAttributes) MarshalJSON() ([]byte, error) { + if len(a) == 0 { + return []byte("[]"), nil + } + var raw []v010msgtypes.LogAttribute = a + return json.Marshal(raw) +} + +// UnmarshalJSON ensures that we get [] for empty arrays +func (a *LogAttributes) UnmarshalJSON(data []byte) error { + // make sure we deserialize [] back to null + if string(data) == "[]" || string(data) == "null" { + return nil + } + var raw []v010msgtypes.LogAttribute + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + *a = raw + return nil +} + +type Empty struct{} + +// CosmosMsg is an rust enum and only (exactly) one of the fields should be set +// Should we do a cleaner approach in Go? (type/data?) +type CosmosMsg struct { + Bank *BankMsg `json:"bank,omitempty"` + Custom json.RawMessage `json:"custom,omitempty"` + Distribution *DistributionMsg `json:"distribution,omitempty"` + Gov *GovMsg `json:"gov,omitempty"` + IBC *IBCMsg `json:"ibc,omitempty"` + Staking *StakingMsg `json:"staking,omitempty"` + Stargate *StargateMsg `json:"stargate,omitempty"` + Wasm *WasmMsg `json:"wasm,omitempty"` + FinalizeTx *Empty `json:"finalize_tx,omitempty"` +} + +type BankMsg struct { + Send *SendMsg `json:"send,omitempty"` + Burn *BurnMsg `json:"burn,omitempty"` +} + +// SendMsg contains instructions for a Cosmos-SDK/SendMsg +// It has a fixed interface here and should be converted into the proper SDK format before dispatching +type SendMsg struct { + ToAddress string `json:"to_address"` + Amount types.Coins `json:"amount"` +} + +// BurnMsg will burn the given coins from the contract's account. +// There is no Cosmos SDK message that performs this, but it can be done by calling the bank keeper. +// Important if a contract controls significant token supply that must be retired. +type BurnMsg struct { + Amount types.Coins `json:"amount"` +} + +type IBCMsg struct { + Transfer *TransferMsg `json:"transfer,omitempty"` + SendPacket *SendPacketMsg `json:"send_packet,omitempty"` + CloseChannel *CloseChannelMsg `json:"close_channel,omitempty"` +} + +type GovMsg struct { + // This maps directly to [MsgVote](https://github.com/cosmos/cosmos-sdk/blob/v0.42.5/proto/cosmos/gov/v1beta1/tx.proto#L46-L56) in the Cosmos SDK with voter set to the contract address. + Vote *VoteMsg `json:"vote,omitempty"` +} + +type VoteOption int + +type VoteMsg struct { + ProposalId uint64 `json:"proposal_id"` + Vote VoteOption `json:"vote"` +} + +const ( + Yes VoteOption = iota + No + Abstain + NoWithVeto +) + +var fromVoteOption = map[VoteOption]string{ + Yes: "yes", + No: "no", + Abstain: "abstain", + NoWithVeto: "no_with_veto", +} + +var ToVoteOption = map[string]VoteOption{ + "yes": Yes, + "no": No, + "abstain": Abstain, + "no_with_veto": NoWithVeto, +} + +func (v VoteOption) String() string { + return fromVoteOption[v] +} + +func (v VoteOption) MarshalJSON() ([]byte, error) { + return json.Marshal(v.String()) +} + +func (v *VoteOption) UnmarshalJSON(b []byte) error { + var j string + err := json.Unmarshal(b, &j) + if err != nil { + return err + } + + voteOption, ok := ToVoteOption[j] + if !ok { + return fmt.Errorf("invalid vote option '%s'", j) + } + *v = voteOption + return nil +} + +type TransferMsg struct { + ChannelID string `json:"channel_id"` + ToAddress string `json:"to_address"` + Amount types.Coin `json:"amount"` + Timeout IBCTimeout `json:"timeout"` + Memo string `json:"memo"` +} + +type SendPacketMsg struct { + ChannelID string `json:"channel_id"` + Data []byte `json:"data"` + Timeout IBCTimeout `json:"timeout"` +} + +type CloseChannelMsg struct { + ChannelID string `json:"channel_id"` +} + +type StakingMsg struct { + Delegate *v010msgtypes.DelegateMsg `json:"delegate,omitempty"` + Undelegate *v010msgtypes.UndelegateMsg `json:"undelegate,omitempty"` + Redelegate *v010msgtypes.RedelegateMsg `json:"redelegate,omitempty"` + Withdraw *v010msgtypes.WithdrawMsg `json:"withdraw,omitempty"` +} + +type DistributionMsg struct { + SetWithdrawAddress *SetWithdrawAddressMsg `json:"set_withdraw_address,omitempty"` + WithdrawDelegatorReward *WithdrawDelegatorRewardMsg `json:"withdraw_delegator_reward,omitempty"` +} + +// SetWithdrawAddressMsg is translated to a [MsgSetWithdrawAddress](https://github.com/cosmos/cosmos-sdk/blob/v0.42.4/proto/cosmos/distribution/v1beta1/tx.proto#L29-L37). +// `delegator_address` is automatically filled with the current contract's address. +type SetWithdrawAddressMsg struct { + // Address contains the `delegator_address` of a MsgSetWithdrawAddress + Address string `json:"address"` +} + +// WithdrawDelegatorRewardMsg is translated to a [MsgWithdrawDelegatorReward](https://github.com/cosmos/cosmos-sdk/blob/v0.42.4/proto/cosmos/distribution/v1beta1/tx.proto#L42-L50). +// `delegator_address` is automatically filled with the current contract's address. +type WithdrawDelegatorRewardMsg struct { + // Validator contains `validator_address` of a MsgWithdrawDelegatorReward + Validator string `json:"validator"` +} + +// StargateMsg is encoded the same way as a protobof [Any](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). +// This is the same structure as messages in `TxBody` from [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-020-protobuf-transaction-encoding.md) +type StargateMsg struct { + TypeURL string `json:"type_url"` + Value []byte `json:"value"` +} + +type WasmMsg struct { + Execute *v010msgtypes.ExecuteMsg `json:"execute,omitempty"` + Instantiate *v010msgtypes.InstantiateMsg `json:"instantiate,omitempty"` + Migrate *v010msgtypes.MigrateMsg `json:"migrate,omitempty"` + UpdateAdmin *v010msgtypes.UpdateAdminMsg `json:"update_admin,omitempty"` + ClearAdmin *v010msgtypes.ClearAdminMsg `json:"clear_admin,omitempty"` +} diff --git a/go-cosmwasm/types/v1/subcall.go b/go-cosmwasm/types/v1/subcall.go new file mode 100644 index 000000000..3502e854d --- /dev/null +++ b/go-cosmwasm/types/v1/subcall.go @@ -0,0 +1,124 @@ +package v1types + +import ( + "encoding/json" + "fmt" +) + +type replyOn int + +const ( + ReplyAlways replyOn = iota + ReplySuccess + ReplyError + ReplyNever +) + +var fromReplyOn = map[replyOn]string{ + ReplyAlways: "always", + ReplySuccess: "success", + ReplyError: "error", + ReplyNever: "never", +} + +var toReplyOn = map[string]replyOn{ + "always": ReplyAlways, + "success": ReplySuccess, + "error": ReplyError, + "never": ReplyNever, +} + +func (r replyOn) String() string { + return fromReplyOn[r] +} + +func (r replyOn) MarshalJSON() ([]byte, error) { + return json.Marshal(r.String()) +} + +func (r *replyOn) UnmarshalJSON(b []byte) error { + var j string + err := json.Unmarshal(b, &j) + if err != nil { + return err + } + + voteOption, ok := toReplyOn[j] + if !ok { + return fmt.Errorf("invalid reply_on value '%s'", j) + } + *r = voteOption + return nil +} + +type SubMsgResponse struct { + Events Events `json:"events"` + Data []byte `json:"data,omitempty"` +} + +// SubMsgResult is the raw response we return from wasmd after executing a SubMsg. +// This mirrors Rust's SubMsgResult. +type SubMsgResult struct { + Ok *SubMsgResponse `json:"ok,omitempty"` + Err string `json:"error,omitempty"` +} + +// SubMsg wraps a CosmosMsg with some metadata for handling replies (ID) and optionally +// limiting the gas usage (GasLimit) +type SubMsg struct { + ID uint64 `json:"id"` + Msg CosmosMsg `json:"msg"` + GasLimit *uint64 `json:"gas_limit,omitempty"` + ReplyOn replyOn `json:"reply_on"` + WasMsgEncrypted bool `json:"was_msg_encrypted"` +} + +type Reply struct { + ID []byte `json:"id"` + Result SubMsgResult `json:"result"` + WasOrigMsgEncrypted bool `json:"was_orig_msg_encrypted"` + IsEncrypted bool `json:"is_encrypted"` +} + +// SubcallResult is the raw response we return from the sdk -> reply after executing a SubMsg. +// This is mirrors Rust's ContractResult. +type SubcallResult struct { + Ok *SubcallResponse `json:"ok,omitempty"` + Err string `json:"error,omitempty"` +} + +type SubcallResponse struct { + Events Events `json:"events"` + Data []byte `json:"data,omitempty"` +} + +// Events must encode empty array as [] +type Events []Event + +// MarshalJSON ensures that we get [] for empty arrays +func (e Events) MarshalJSON() ([]byte, error) { + if len(e) == 0 { + return []byte("[]"), nil + } + var raw []Event = e + return json.Marshal(raw) +} + +// UnmarshalJSON ensures that we get [] for empty arrays +func (e *Events) UnmarshalJSON(data []byte) error { + // make sure we deserialize [] back to null + if string(data) == "[]" || string(data) == "null" { + return nil + } + var raw []Event + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + *e = raw + return nil +} + +type Event struct { + Type string `json:"type"` + Attributes LogAttributes `json:"attributes"` +} diff --git a/go-cosmwasm/types/v1/type.go b/go-cosmwasm/types/v1/type.go new file mode 100644 index 000000000..e4ffa3128 --- /dev/null +++ b/go-cosmwasm/types/v1/type.go @@ -0,0 +1,8 @@ +package v1types + +// Contains static analysis info of the contract (the Wasm code to be precise). +// This type is returned by VM.AnalyzeCode(). +type AnalysisReport struct { + HasIBCEntryPoints bool + RequiredFeatures string +} diff --git a/go.mod b/go.mod index 5b42f3815..ad6df1975 100644 --- a/go.mod +++ b/go.mod @@ -217,13 +217,14 @@ require ( github.com/regen-network/cosmos-proto v0.3.1 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/rs/cors v1.8.2 // indirect - github.com/rs/zerolog v1.27.0 // indirect + github.com/rs/zerolog v1.29.1 // indirect github.com/ryancurrah/gomodguard v1.3.0 // indirect github.com/ryanrolds/sqlclosecheck v0.4.0 // indirect github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/sashamelentyev/interfacebloat v1.1.0 // indirect github.com/sashamelentyev/usestdlibvars v1.23.0 // indirect + github.com/scrtlabs/tm-secret-enclave v1.10.0 // indirect github.com/securego/gosec/v2 v2.16.0 // indirect github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c // indirect github.com/sirupsen/logrus v1.9.3 // indirect @@ -292,6 +293,8 @@ replace ( github.com/cosmos/iavl v0.19.5 => github.com/cosmos/iavl v0.19.4 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // Informal Tendermint fork to be replaced with skip-mev tendermint - github.com/tendermint/tendermint => github.com/skip-mev/mev-tendermint v0.34.24-mev.18 + // github.com/tendermint/tendermint => github.com/skip-mev/mev-tendermint v0.34.24-mev.18 + // github.com/tendermint/tendermint => /Users/chandragupta/go/src/github.com/skip-mev/mev-tendermint + github.com/tendermint/tendermint => github.com/scrtlabs/tendermint v1.9.0-scrt google.golang.org/grpc => google.golang.org/grpc v1.33.2 ) diff --git a/go.sum b/go.sum index 79a0866ac..e843ab4cc 100644 --- a/go.sum +++ b/go.sum @@ -764,6 +764,7 @@ github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+ github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= @@ -2206,8 +2207,10 @@ github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= +github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= +github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= +github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= @@ -2244,6 +2247,11 @@ github.com/sassoftware/go-rpmutils v0.0.0-20190420191620-a8f1baeba37b/go.mod h1: github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= +github.com/scrtlabs/tendermint v1.9.0-scrt h1:WohrW4d2lYVBWkYkv9QtPDG6CKOOaxSX5gtDQZ5oRVE= +github.com/scrtlabs/tendermint v1.9.0-scrt/go.mod h1:wBQs1xza37rbFHU1vFOWqc3dmcciGDHYLfzpoN5uqhw= +github.com/scrtlabs/tm-secret-enclave v1.7.2-0.20230313154812-b08e3ee2ac31/go.mod h1:qdFKkARpxJArJ6QiJiJFDu2LWl88hcSPuz6oOgq+cKQ= +github.com/scrtlabs/tm-secret-enclave v1.10.0 h1:H7HSNhjvNKtfqf1NH+o/LDFGz6r04bxnv6JEQUHijWs= +github.com/scrtlabs/tm-secret-enclave v1.10.0/go.mod h1:qdFKkARpxJArJ6QiJiJFDu2LWl88hcSPuz6oOgq+cKQ= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= @@ -2289,8 +2297,6 @@ github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvR github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/sivchari/tenv v1.7.1 h1:PSpuD4bu6fSmtWMxSGWcvqUUgIn7k3yOJhOIzVWn8Ak= github.com/sivchari/tenv v1.7.1/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= -github.com/skip-mev/mev-tendermint v0.34.24-mev.18 h1:Xqq3vtJxE2cSBUAIXproDiUwW9qXkHNgNSFLS07/QQA= -github.com/skip-mev/mev-tendermint v0.34.24-mev.18/go.mod h1:m3iKcdA/hSGrBwhwgg1fre71te6Ln6SZEstGroM5CJs= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= diff --git a/x/market/abci.go b/x/market/abci.go index 67ef3a206..3c9581f73 100644 --- a/x/market/abci.go +++ b/x/market/abci.go @@ -60,4 +60,5 @@ func BeginBlocker(ctx sdk.Context, _ abci.RequestBeginBlock, k keeper.Keeper, ba k.SetTwa(ctx, twa) } } + } diff --git a/x/market/keeper/seed.go b/x/market/keeper/seed.go new file mode 100644 index 000000000..e1b90c9c4 --- /dev/null +++ b/x/market/keeper/seed.go @@ -0,0 +1,24 @@ +package keeper + +import ( + "fmt" + "encoding/hex" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/comdex-official/comdex/x/market/types" +) + +func (k Keeper) GetRandomSeed(ctx sdk.Context, height int64) []byte { + store := ctx.KVStore(k.key) + + random := store.Get(types.GetRandomKey(height)) + + return random +} + +func (k Keeper) SetRandomSeed(ctx sdk.Context, random []byte) { + store := ctx.KVStore(k.key) + + ctx.Logger().Info(fmt.Sprintf("Setting random: %s", hex.EncodeToString(random))) + + store.Set(types.GetRandomKey(ctx.BlockHeight()), random) +} diff --git a/x/market/module.go b/x/market/module.go index 790075616..81fdb4423 100644 --- a/x/market/module.go +++ b/x/market/module.go @@ -1,12 +1,14 @@ package market import ( + "fmt" "context" "encoding/json" "math/rand" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" + "github.com/comdex-official/comdex/go-cosmwasm/api" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" @@ -125,6 +127,45 @@ func (a AppModule) RegisterServices(configurator module.Configurator) { func (a AppModule) BeginBlock(ctx sdk.Context, req abcitypes.RequestBeginBlock) { BeginBlocker(ctx, req, a.keeper, a.bandKeeper, a.assetKeeper) + + header, err := req.Header.Marshal() + if err != nil { + ctx.Logger().Error("Failed to marshal header") + panic(err) + } + + // There is a possibility, specifically was found on upgrade block, when there are no pre-commits at all (beginBlock.Commit == nil) + // In this case Marshal will fail with a Seg Fault. + // The fix below it a temporary fix until we will investigate the issue in tendermint. + if req.Commit == nil { + ctx.Logger().Info(fmt.Sprintf("Skipping commit submission to the enclave for block %d\n", req.Header.Height)) + return + } + + commit, err := req.Commit.Marshal() + if err != nil { + ctx.Logger().Error("Failed to marshal commit") + panic(err) + } + + data, err := req.Data.Marshal() + if err != nil { + ctx.Logger().Error("Failed to marshal data") + panic(err) + } + + if req.Header.EncryptedRandom != nil { + randomAndProof := append(req.Header.EncryptedRandom.Random, req.Header.EncryptedRandom.Proof...) //nolint:all + random, err := api.SubmitBlockSignatures(header, commit, data, randomAndProof) + if err != nil { + ctx.Logger().Error("Failed to submit block signatures") + panic(err) + } + + a.keeper.SetRandomSeed(ctx, random) + } else { + println("No random got from TM header") + } } func (a AppModule) EndBlock(_ sdk.Context, _ abcitypes.RequestEndBlock) []abcitypes.ValidatorUpdate { diff --git a/x/market/types/keys.go b/x/market/types/keys.go index b2690ee55..013ba5007 100644 --- a/x/market/types/keys.go +++ b/x/market/types/keys.go @@ -1,6 +1,7 @@ package types import ( + "encoding/binary" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -12,8 +13,18 @@ const ( StoreKey = ModuleName ) -var TwaKeyPrefix = []byte{0x24} +var ( + TwaKeyPrefix = []byte{0x24} + RandomPrefix = []byte{0x0A} +) func TwaKey(id uint64) []byte { return append(TwaKeyPrefix, sdk.Uint64ToBigEndian(id)...) } + +// GetRandomKey returns the key for the random seed for each block +func GetRandomKey(height int64) []byte { + b := make([]byte, 8) + binary.LittleEndian.PutUint64(b, uint64(height)) + return append(RandomPrefix, b...) +} \ No newline at end of file From 65af5b0fdd09987a46cbc843196c86f0ec001779 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 23 Aug 2023 04:14:40 +0530 Subject: [PATCH 24/90] test changes --- go.mod | 5 ++--- go.sum | 5 ----- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index ad6df1975..fcfce57b9 100644 --- a/go.mod +++ b/go.mod @@ -224,7 +224,6 @@ require ( github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/sashamelentyev/interfacebloat v1.1.0 // indirect github.com/sashamelentyev/usestdlibvars v1.23.0 // indirect - github.com/scrtlabs/tm-secret-enclave v1.10.0 // indirect github.com/securego/gosec/v2 v2.16.0 // indirect github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c // indirect github.com/sirupsen/logrus v1.9.3 // indirect @@ -294,7 +293,7 @@ replace ( github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // Informal Tendermint fork to be replaced with skip-mev tendermint // github.com/tendermint/tendermint => github.com/skip-mev/mev-tendermint v0.34.24-mev.18 - // github.com/tendermint/tendermint => /Users/chandragupta/go/src/github.com/skip-mev/mev-tendermint - github.com/tendermint/tendermint => github.com/scrtlabs/tendermint v1.9.0-scrt + github.com/tendermint/tendermint => /Users/chandragupta/go/src/github.com/skip-mev/mev-tendermint + // github.com/tendermint/tendermint => github.com/scrtlabs/tendermint v1.9.0-scrt google.golang.org/grpc => google.golang.org/grpc v1.33.2 ) diff --git a/go.sum b/go.sum index e843ab4cc..827248e5a 100644 --- a/go.sum +++ b/go.sum @@ -2247,11 +2247,6 @@ github.com/sassoftware/go-rpmutils v0.0.0-20190420191620-a8f1baeba37b/go.mod h1: github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= -github.com/scrtlabs/tendermint v1.9.0-scrt h1:WohrW4d2lYVBWkYkv9QtPDG6CKOOaxSX5gtDQZ5oRVE= -github.com/scrtlabs/tendermint v1.9.0-scrt/go.mod h1:wBQs1xza37rbFHU1vFOWqc3dmcciGDHYLfzpoN5uqhw= -github.com/scrtlabs/tm-secret-enclave v1.7.2-0.20230313154812-b08e3ee2ac31/go.mod h1:qdFKkARpxJArJ6QiJiJFDu2LWl88hcSPuz6oOgq+cKQ= -github.com/scrtlabs/tm-secret-enclave v1.10.0 h1:H7HSNhjvNKtfqf1NH+o/LDFGz6r04bxnv6JEQUHijWs= -github.com/scrtlabs/tm-secret-enclave v1.10.0/go.mod h1:qdFKkARpxJArJ6QiJiJFDu2LWl88hcSPuz6oOgq+cKQ= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= From 965c72a015bf8c40f2d58de2b3bce1d6ec4cc193 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 24 Aug 2023 01:01:56 +0530 Subject: [PATCH 25/90] random test --- go-cosmwasm/api/callbacks.go | 390 +++++++++++++++++------------------ 1 file changed, 195 insertions(+), 195 deletions(-) diff --git a/go-cosmwasm/api/callbacks.go b/go-cosmwasm/api/callbacks.go index c7382a90f..ae8fadf64 100644 --- a/go-cosmwasm/api/callbacks.go +++ b/go-cosmwasm/api/callbacks.go @@ -36,7 +36,7 @@ GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t gas_limit, uint64_t *used_g import "C" import ( - "encoding/json" + // "encoding/json" "fmt" "log" "reflect" @@ -44,7 +44,7 @@ import ( dbm "github.com/tendermint/tm-db" - "github.com/comdex-official/comdex/go-cosmwasm/types" + // "github.com/comdex-official/comdex/go-cosmwasm/types" ) // Note: we have to include all exports in the same file (at least since they both import bindings.h), @@ -158,149 +158,149 @@ func buildIterator(dbCounter uint64, it dbm.Iterator) C.iterator_t { } //export cGet -func cGet(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *u64, key C.Buffer, val *C.Buffer, _ *C.Buffer) (ret C.GoResult) { - defer recoverPanic(&ret) - if ptr == nil || gasMeter == nil || usedGas == nil || val == nil { - // we received an invalid pointer - return C.GoResult_BadArgument - } - - gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) - kv := *(*KVStore)(unsafe.Pointer(ptr)) - k := receiveSlice(key) - - gasBefore := gm.GasConsumed() - v := kv.Get(k) - gasAfter := gm.GasConsumed() - *usedGas = (u64)(gasAfter - gasBefore) - - // v will equal nil when the key is missing - // https://github.com/cosmos/cosmos-sdk/blob/1083fa948e347135861f88e07ec76b0314296832/store/types/store.go#L174 - if v != nil { - *val = allocateRust(v) - } - // else: the Buffer on the rust side is initialised as a "null" buffer, - // so if we don't write a non-null address to it, it will understand that - // the key it requested does not exist in the kv store - - return C.GoResult_Ok -} - -//export cSet -func cSet(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer, val C.Buffer, _ *C.Buffer) (ret C.GoResult) { - defer recoverPanic(&ret) - if ptr == nil || gasMeter == nil || usedGas == nil { - // we received an invalid pointer - return C.GoResult_BadArgument - } - - gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) - kv := *(*KVStore)(unsafe.Pointer(ptr)) - k := receiveSlice(key) - v := receiveSlice(val) - - gasBefore := gm.GasConsumed() - kv.Set(k, v) - gasAfter := gm.GasConsumed() - *usedGas = (C.uint64_t)(gasAfter - gasBefore) - - return C.GoResult_Ok -} - -//export cDelete -func cDelete(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer, _ *C.Buffer) (ret C.GoResult) { - defer recoverPanic(&ret) - if ptr == nil || gasMeter == nil || usedGas == nil { - // we received an invalid pointer - return C.GoResult_BadArgument - } - - gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) - kv := *(*KVStore)(unsafe.Pointer(ptr)) - k := receiveSlice(key) - - gasBefore := gm.GasConsumed() - kv.Delete(k) - gasAfter := gm.GasConsumed() - *usedGas = (C.uint64_t)(gasAfter - gasBefore) - - return C.GoResult_Ok -} - -//export cScan -func cScan(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, start C.Buffer, end C.Buffer, order i32, out *C.GoIter, _ *C.Buffer) (ret C.GoResult) { - defer recoverPanic(&ret) - if ptr == nil || gasMeter == nil || usedGas == nil || out == nil { - // we received an invalid pointer - return C.GoResult_BadArgument - } - - gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) - state := (*DBState)(unsafe.Pointer(ptr)) - kv := state.Store - // handle null as well as data - var s, e []byte - if start.ptr != nil { - s = receiveSlice(start) - } - if end.ptr != nil { - e = receiveSlice(end) - } - - var iter dbm.Iterator - gasBefore := gm.GasConsumed() - switch order { - case 1: // Ascending - iter = kv.Iterator(s, e) - case 2: // Descending - iter = kv.ReverseIterator(s, e) - default: - return C.GoResult_BadArgument - } - gasAfter := gm.GasConsumed() - *usedGas = (C.uint64_t)(gasAfter - gasBefore) - - out.state = buildIterator(state.IteratorStackID, iter) - out.vtable = iterator_vtable - return C.GoResult_Ok -} - -//export cNext -func cNext(ref C.iterator_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key *C.Buffer, val *C.Buffer, _ *C.Buffer) (ret C.GoResult) { - // typical usage of iterator - // for ; itr.Valid(); itr.Next() { - // k, v := itr.Key(); itr.Value() - // ... - // } - - defer recoverPanic(&ret) - if ref.db_counter == 0 || gasMeter == nil || usedGas == nil || key == nil || val == nil { - // we received an invalid pointer - return C.GoResult_BadArgument - } - - gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) - iter := retrieveIterator(uint64(ref.db_counter), uint64(ref.iterator_index)) - if !iter.Valid() { - // end of iterator, return as no-op, nil key is considered end - return C.GoResult_Ok - } - - gasBefore := gm.GasConsumed() - // call Next at the end, upon creation we have first data loaded - k := iter.Key() - v := iter.Value() - // check iter.Error() ???? - iter.Next() - gasAfter := gm.GasConsumed() - *usedGas = (C.uint64_t)(gasAfter - gasBefore) - - if k != nil { - *key = allocateRust(k) - *val = allocateRust(v) - } - return C.GoResult_Ok -} +// func cGet(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *u64, key C.Buffer, val *C.Buffer, _ *C.Buffer) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if ptr == nil || gasMeter == nil || usedGas == nil || val == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } + +// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) +// kv := *(*KVStore)(unsafe.Pointer(ptr)) +// k := receiveSlice(key) + +// gasBefore := gm.GasConsumed() +// v := kv.Get(k) +// gasAfter := gm.GasConsumed() +// *usedGas = (u64)(gasAfter - gasBefore) + +// // v will equal nil when the key is missing +// // https://github.com/cosmos/cosmos-sdk/blob/1083fa948e347135861f88e07ec76b0314296832/store/types/store.go#L174 +// if v != nil { +// *val = allocateRust(v) +// } +// // else: the Buffer on the rust side is initialised as a "null" buffer, +// // so if we don't write a non-null address to it, it will understand that +// // the key it requested does not exist in the kv store + +// return C.GoResult_Ok +// } + +// //export cSet +// func cSet(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer, val C.Buffer, _ *C.Buffer) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if ptr == nil || gasMeter == nil || usedGas == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } + +// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) +// kv := *(*KVStore)(unsafe.Pointer(ptr)) +// k := receiveSlice(key) +// v := receiveSlice(val) + +// gasBefore := gm.GasConsumed() +// kv.Set(k, v) +// gasAfter := gm.GasConsumed() +// *usedGas = (C.uint64_t)(gasAfter - gasBefore) + +// return C.GoResult_Ok +// } + +// //export cDelete +// func cDelete(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer, _ *C.Buffer) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if ptr == nil || gasMeter == nil || usedGas == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } + +// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) +// kv := *(*KVStore)(unsafe.Pointer(ptr)) +// k := receiveSlice(key) + +// gasBefore := gm.GasConsumed() +// kv.Delete(k) +// gasAfter := gm.GasConsumed() +// *usedGas = (C.uint64_t)(gasAfter - gasBefore) + +// return C.GoResult_Ok +// } + +// //export cScan +// func cScan(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, start C.Buffer, end C.Buffer, order i32, out *C.GoIter, _ *C.Buffer) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if ptr == nil || gasMeter == nil || usedGas == nil || out == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } + +// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) +// state := (*DBState)(unsafe.Pointer(ptr)) +// kv := state.Store +// // handle null as well as data +// var s, e []byte +// if start.ptr != nil { +// s = receiveSlice(start) +// } +// if end.ptr != nil { +// e = receiveSlice(end) +// } + +// var iter dbm.Iterator +// gasBefore := gm.GasConsumed() +// switch order { +// case 1: // Ascending +// iter = kv.Iterator(s, e) +// case 2: // Descending +// iter = kv.ReverseIterator(s, e) +// default: +// return C.GoResult_BadArgument +// } +// gasAfter := gm.GasConsumed() +// *usedGas = (C.uint64_t)(gasAfter - gasBefore) + +// out.state = buildIterator(state.IteratorStackID, iter) +// out.vtable = iterator_vtable +// return C.GoResult_Ok +// } + +// //export cNext +// func cNext(ref C.iterator_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key *C.Buffer, val *C.Buffer, _ *C.Buffer) (ret C.GoResult) { +// // typical usage of iterator +// // for ; itr.Valid(); itr.Next() { +// // k, v := itr.Key(); itr.Value() +// // ... +// // } + +// defer recoverPanic(&ret) +// if ref.db_counter == 0 || gasMeter == nil || usedGas == nil || key == nil || val == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } + +// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) +// iter := retrieveIterator(uint64(ref.db_counter), uint64(ref.iterator_index)) +// if !iter.Valid() { +// // end of iterator, return as no-op, nil key is considered end +// return C.GoResult_Ok +// } + +// gasBefore := gm.GasConsumed() +// // call Next at the end, upon creation we have first data loaded +// k := iter.Key() +// v := iter.Value() +// // check iter.Error() ???? +// iter.Next() +// gasAfter := gm.GasConsumed() +// *usedGas = (C.uint64_t)(gasAfter - gasBefore) + +// if k != nil { +// *key = allocateRust(k) +// *val = allocateRust(v) +// } +// return C.GoResult_Ok +// } /***** GoAPI *******/ @@ -352,31 +352,31 @@ func cHumanAddress(ptr *C.api_t, canon C.Buffer, human *C.Buffer, errOut *C.Buff } //export cCanonicalAddress -func cCanonicalAddress(ptr *C.api_t, human C.Buffer, canon *C.Buffer, errOut *C.Buffer, used_gas *u64) (ret C.GoResult) { - defer recoverPanic(&ret) - - if canon == nil { - // we received an invalid pointer - return C.GoResult_BadArgument - } - - api := (*GoAPI)(unsafe.Pointer(ptr)) - h := string(receiveSlice(human)) - c, cost, err := api.CanonicalAddress(h) - *used_gas = u64(cost) - if err != nil { - // store the actual error message in the return buffer - *errOut = allocateRust([]byte(err.Error())) - return C.GoResult_User - } - if len(c) == 0 { - panic(fmt.Sprintf("`api.CanonicalAddress()` returned an empty string for %q", h)) - } - *canon = allocateRust(c) - - // If we do not set canon to a meaningful value, then the other side will interpret that as an empty result. - return C.GoResult_Ok -} +// func cCanonicalAddress(ptr *C.api_t, human C.Buffer, canon *C.Buffer, errOut *C.Buffer, used_gas *u64) (ret C.GoResult) { +// defer recoverPanic(&ret) + +// if canon == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } + +// api := (*GoAPI)(unsafe.Pointer(ptr)) +// h := string(receiveSlice(human)) +// c, cost, err := api.CanonicalAddress(h) +// *used_gas = u64(cost) +// if err != nil { +// // store the actual error message in the return buffer +// *errOut = allocateRust([]byte(err.Error())) +// return C.GoResult_User +// } +// if len(c) == 0 { +// panic(fmt.Sprintf("`api.CanonicalAddress()` returned an empty string for %q", h)) +// } +// *canon = allocateRust(c) + +// // If we do not set canon to a meaningful value, then the other side will interpret that as an empty result. +// return C.GoResult_Ok +// } /****** Go Querier ********/ @@ -394,28 +394,28 @@ func buildQuerier(q *Querier) C.GoQuerier { } //export cQueryExternal -func cQueryExternal(ptr *C.querier_t, gasLimit C.uint64_t, usedGas *C.uint64_t, request C.Buffer, queryDepth C.uint32_t, result *C.Buffer, errOut *C.Buffer) (ret C.GoResult) { - defer recoverPanic(&ret) - if ptr == nil || usedGas == nil || result == nil { - // we received an invalid pointer - return C.GoResult_BadArgument - } - - // query the data - querier := *(*Querier)(unsafe.Pointer(ptr)) - req := receiveSlice(request) - - gasBefore := querier.GasConsumed() - res := types.RustQuery(querier, req, uint32(queryDepth), uint64(gasLimit)) - gasAfter := querier.GasConsumed() - *usedGas = (C.uint64_t)(gasAfter - gasBefore) - - // serialize the response - bz, err := json.Marshal(res) - if err != nil { - *errOut = allocateRust([]byte(err.Error())) - return C.GoResult_Other - } - *result = allocateRust(bz) - return C.GoResult_Ok -} +// func cQueryExternal(ptr *C.querier_t, gasLimit C.uint64_t, usedGas *C.uint64_t, request C.Buffer, queryDepth C.uint32_t, result *C.Buffer, errOut *C.Buffer) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if ptr == nil || usedGas == nil || result == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } + +// // query the data +// querier := *(*Querier)(unsafe.Pointer(ptr)) +// req := receiveSlice(request) + +// gasBefore := querier.GasConsumed() +// res := types.RustQuery(querier, req, uint32(queryDepth), uint64(gasLimit)) +// gasAfter := querier.GasConsumed() +// *usedGas = (C.uint64_t)(gasAfter - gasBefore) + +// // serialize the response +// bz, err := json.Marshal(res) +// if err != nil { +// *errOut = allocateRust([]byte(err.Error())) +// return C.GoResult_Other +// } +// *result = allocateRust(bz) +// return C.GoResult_Ok +// } From 5f6b4f37ee7e717647d19f63c721c4b69a35b2d3 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 24 Aug 2023 01:13:57 +0530 Subject: [PATCH 26/90] random test --- go-cosmwasm/api/callbacks.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/go-cosmwasm/api/callbacks.go b/go-cosmwasm/api/callbacks.go index ae8fadf64..448b5eaa1 100644 --- a/go-cosmwasm/api/callbacks.go +++ b/go-cosmwasm/api/callbacks.go @@ -19,17 +19,17 @@ typedef GoResult (*canonicalize_address_fn)(api_t *ptr, Buffer human, Buffer *ca typedef GoResult (*query_external_fn)(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut); // forward declarations (db) -GoResult cGet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val, Buffer *errOut); -GoResult cSet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val, Buffer *errOut); -GoResult cDelete_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *errOut); -GoResult cScan_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out, Buffer *errOut); +// GoResult cGet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val, Buffer *errOut); +// GoResult cSet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val, Buffer *errOut); +// GoResult cDelete_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *errOut); +// GoResult cScan_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out, Buffer *errOut); // iterator -GoResult cNext_cgo(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val, Buffer *errOut); +// GoResult cNext_cgo(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val, Buffer *errOut); // api -GoResult cHumanAddress_cgo(api_t *ptr, Buffer canon, Buffer *human, Buffer *errOut, uint64_t *used_gas); -GoResult cCanonicalAddress_cgo(api_t *ptr, Buffer human, Buffer *canon, Buffer *errOut, uint64_t *used_gas); +// GoResult cHumanAddress_cgo(api_t *ptr, Buffer canon, Buffer *human, Buffer *errOut, uint64_t *used_gas); +// GoResult cCanonicalAddress_cgo(api_t *ptr, Buffer human, Buffer *canon, Buffer *errOut, uint64_t *used_gas); // and querier -GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut); +// GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut); */ From c9badf6bf349c34c606f3ce7405e918bee47859a Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 24 Aug 2023 01:23:35 +0530 Subject: [PATCH 27/90] random test --- go-cosmwasm/api/callbacks.go | 70 ++--- go-cosmwasm/api/lib.go | 488 +++++++++++++++++------------------ 2 files changed, 279 insertions(+), 279 deletions(-) diff --git a/go-cosmwasm/api/callbacks.go b/go-cosmwasm/api/callbacks.go index 448b5eaa1..4a9be63d7 100644 --- a/go-cosmwasm/api/callbacks.go +++ b/go-cosmwasm/api/callbacks.go @@ -108,12 +108,12 @@ type KVStore interface { ReverseIterator(start, end []byte) dbm.Iterator } -var db_vtable = C.DB_vtable{ - read_db: (C.read_db_fn)(C.cGet_cgo), - write_db: (C.write_db_fn)(C.cSet_cgo), - remove_db: (C.remove_db_fn)(C.cDelete_cgo), - scan_db: (C.scan_db_fn)(C.cScan_cgo), -} +// var db_vtable = C.DB_vtable{ +// read_db: (C.read_db_fn)(C.cGet_cgo), +// write_db: (C.write_db_fn)(C.cSet_cgo), +// remove_db: (C.remove_db_fn)(C.cDelete_cgo), +// scan_db: (C.scan_db_fn)(C.cScan_cgo), +// } type DBState struct { Store KVStore @@ -135,17 +135,17 @@ func buildDBState(kv KVStore, counter uint64) DBState { // contract: original pointer/struct referenced must live longer than C.DB struct // since this is only used internally, we can verify the code that this is the case -func buildDB(state *DBState, gm *GasMeter) C.DB { - return C.DB{ - gas_meter: (*C.gas_meter_t)(unsafe.Pointer(gm)), - state: (*C.db_t)(unsafe.Pointer(state)), - vtable: db_vtable, - } -} +// func buildDB(state *DBState, gm *GasMeter) C.DB { +// return C.DB{ +// gas_meter: (*C.gas_meter_t)(unsafe.Pointer(gm)), +// state: (*C.db_t)(unsafe.Pointer(state)), +// vtable: db_vtable, +// } +// } -var iterator_vtable = C.Iterator_vtable{ - next_db: (C.next_db_fn)(C.cNext_cgo), -} +// var iterator_vtable = C.Iterator_vtable{ +// next_db: (C.next_db_fn)(C.cNext_cgo), +// } // contract: original pointer/struct referenced must live longer than C.DB struct // since this is only used internally, we can verify the code that this is the case @@ -314,19 +314,19 @@ type GoAPI struct { CanonicalAddress CanonicalizeAddress } -var api_vtable = C.GoApi_vtable{ - humanize_address: (C.humanize_address_fn)(C.cHumanAddress_cgo), - canonicalize_address: (C.canonicalize_address_fn)(C.cCanonicalAddress_cgo), -} +// var api_vtable = C.GoApi_vtable{ +// humanize_address: (C.humanize_address_fn)(C.cHumanAddress_cgo), +// canonicalize_address: (C.canonicalize_address_fn)(C.cCanonicalAddress_cgo), +// } // contract: original pointer/struct referenced must live longer than C.GoApi struct // since this is only used internally, we can verify the code that this is the case -func buildAPI(api *GoAPI) C.GoApi { - return C.GoApi{ - state: (*C.api_t)(unsafe.Pointer(api)), - vtable: api_vtable, - } -} +// func buildAPI(api *GoAPI) C.GoApi { +// return C.GoApi{ +// state: (*C.api_t)(unsafe.Pointer(api)), +// vtable: api_vtable, +// } +// } //export cHumanAddress func cHumanAddress(ptr *C.api_t, canon C.Buffer, human *C.Buffer, errOut *C.Buffer, used_gas *u64) (ret C.GoResult) { @@ -380,18 +380,18 @@ func cHumanAddress(ptr *C.api_t, canon C.Buffer, human *C.Buffer, errOut *C.Buff /****** Go Querier ********/ -var querier_vtable = C.Querier_vtable{ - query_external: (C.query_external_fn)(C.cQueryExternal_cgo), -} +// var querier_vtable = C.Querier_vtable{ +// query_external: (C.query_external_fn)(C.cQueryExternal_cgo), +// } // contract: original pointer/struct referenced must live longer than C.GoQuerier struct // since this is only used internally, we can verify the code that this is the case -func buildQuerier(q *Querier) C.GoQuerier { - return C.GoQuerier{ - state: (*C.querier_t)(unsafe.Pointer(q)), - vtable: querier_vtable, - } -} +// func buildQuerier(q *Querier) C.GoQuerier { +// return C.GoQuerier{ +// state: (*C.querier_t)(unsafe.Pointer(q)), +// vtable: querier_vtable, +// } +// } //export cQueryExternal // func cQueryExternal(ptr *C.querier_t, gasLimit C.uint64_t, usedGas *C.uint64_t, request C.Buffer, queryDepth C.uint32_t, result *C.Buffer, errOut *C.Buffer) (ret C.GoResult) { diff --git a/go-cosmwasm/api/lib.go b/go-cosmwasm/api/lib.go index 8940f81e8..8f9922e04 100644 --- a/go-cosmwasm/api/lib.go +++ b/go-cosmwasm/api/lib.go @@ -149,250 +149,250 @@ func GetCode(cache Cache, code_id []byte) ([]byte, error) { return receiveVector(code), nil } -func Migrate( - cache Cache, - code_id []byte, - params []byte, - msg []byte, - gasMeter *GasMeter, - store KVStore, - api *GoAPI, - querier *Querier, - gasLimit uint64, - sigInfo []byte, - admin []byte, - adminProof []byte, -) ([]byte, uint64, error) { - id := sendSlice(code_id) - defer freeAfterSend(id) - p := sendSlice(params) - defer freeAfterSend(p) - m := sendSlice(msg) - defer freeAfterSend(m) - - // set up a new stack frame to handle iterators - counter := startContract() - defer endContract(counter) - - dbState := buildDBState(store, counter) - db := buildDB(&dbState, gasMeter) - - s := sendSlice(sigInfo) - defer freeAfterSend(s) - a := buildAPI(api) - q := buildQuerier(querier) - var gasUsed u64 - errmsg := C.Buffer{} - - adminBuffer := sendSlice(admin) - defer freeAfterSend(adminBuffer) - - adminProofBuffer := sendSlice(adminProof) - defer freeAfterSend(adminProofBuffer) - - //// This is done in order to ensure that goroutines don't - //// swap threads between recursive calls to the enclave. - //runtime.LockOSThread() - //defer runtime.UnlockOSThread() - - res, err := C.migrate(cache.ptr, id, p, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg, s, adminBuffer, adminProofBuffer) - if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { - // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. - return nil, uint64(gasUsed), errorWithMessage(err, errmsg) - } - return receiveVector(res), uint64(gasUsed), nil -} - -func UpdateAdmin( - cache Cache, - code_id []byte, - params []byte, - gasMeter *GasMeter, - store KVStore, - api *GoAPI, - querier *Querier, - gasLimit uint64, - sigInfo []byte, - currentAdmin []byte, - currentAdminProof []byte, - newAdmin []byte, -) ([]byte, error) { - id := sendSlice(code_id) - defer freeAfterSend(id) - p := sendSlice(params) - defer freeAfterSend(p) - - // set up a new stack frame to handle iterators - counter := startContract() - defer endContract(counter) - - dbState := buildDBState(store, counter) - db := buildDB(&dbState, gasMeter) - - s := sendSlice(sigInfo) - defer freeAfterSend(s) - a := buildAPI(api) - q := buildQuerier(querier) - errmsg := C.Buffer{} - - currentAdminBuffer := sendSlice(currentAdmin) - defer freeAfterSend(currentAdminBuffer) - - currentAdminProofBuffer := sendSlice(currentAdminProof) - defer freeAfterSend(currentAdminProofBuffer) - - newAdminBuffer := sendSlice(newAdmin) - defer freeAfterSend(newAdminBuffer) - - //// This is done in order to ensure that goroutines don't - //// swap threads between recursive calls to the enclave. - //runtime.LockOSThread() - //defer runtime.UnlockOSThread() - - res, err := C.update_admin(cache.ptr, id, p, db, a, q, u64(gasLimit), &errmsg, s, currentAdminBuffer, currentAdminProofBuffer, newAdminBuffer) - if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { - return nil, errorWithMessage(err, errmsg) - } - return receiveVector(res), nil -} - -func Instantiate( - cache Cache, - code_id []byte, - params []byte, - msg []byte, - gasMeter *GasMeter, - store KVStore, - api *GoAPI, - querier *Querier, - gasLimit uint64, - sigInfo []byte, - admin []byte, -) ([]byte, uint64, error) { - id := sendSlice(code_id) - defer freeAfterSend(id) - p := sendSlice(params) - defer freeAfterSend(p) - m := sendSlice(msg) - defer freeAfterSend(m) - - // set up a new stack frame to handle iterators - counter := startContract() - defer endContract(counter) - - dbState := buildDBState(store, counter) - db := buildDB(&dbState, gasMeter) - - s := sendSlice(sigInfo) - defer freeAfterSend(s) - a := buildAPI(api) - q := buildQuerier(querier) - var gasUsed u64 - errmsg := C.Buffer{} - - adminBuffer := sendSlice(admin) - defer freeAfterSend(adminBuffer) - - //// This is done in order to ensure that goroutines don't - //// swap threads between recursive calls to the enclave. - //runtime.LockOSThread() - //defer runtime.UnlockOSThread() - - res, err := C.instantiate(cache.ptr, id, p, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg, s, adminBuffer) - if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { - // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. - return nil, uint64(gasUsed), errorWithMessage(err, errmsg) - } - return receiveVector(res), uint64(gasUsed), nil -} - -func Handle( - cache Cache, - code_id []byte, - params []byte, - msg []byte, - gasMeter *GasMeter, - store KVStore, - api *GoAPI, - querier *Querier, - gasLimit uint64, - sigInfo []byte, - handleType types.HandleType, -) ([]byte, uint64, error) { - id := sendSlice(code_id) - defer freeAfterSend(id) - p := sendSlice(params) - defer freeAfterSend(p) - m := sendSlice(msg) - defer freeAfterSend(m) - - // set up a new stack frame to handle iterators - counter := startContract() - defer endContract(counter) - - dbState := buildDBState(store, counter) - db := buildDB(&dbState, gasMeter) - s := sendSlice(sigInfo) - defer freeAfterSend(s) - a := buildAPI(api) - q := buildQuerier(querier) - var gasUsed u64 - errmsg := C.Buffer{} - - //// This is done in order to ensure that goroutines don't - //// swap threads between recursive calls to the enclave. - //runtime.LockOSThread() - //defer runtime.UnlockOSThread() - - res, err := C.handle(cache.ptr, id, p, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg, s, u8(handleType)) - if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { - // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. - return nil, uint64(gasUsed), errorWithMessage(err, errmsg) - } - return receiveVector(res), uint64(gasUsed), nil -} - -func Query( - cache Cache, - code_id []byte, - params []byte, - msg []byte, - gasMeter *GasMeter, - store KVStore, - api *GoAPI, - querier *Querier, - gasLimit uint64, -) ([]byte, uint64, error) { - id := sendSlice(code_id) - defer freeAfterSend(id) - p := sendSlice(params) - defer freeAfterSend(p) - m := sendSlice(msg) - defer freeAfterSend(m) - - // set up a new stack frame to handle iterators - counter := startContract() - defer endContract(counter) - - dbState := buildDBState(store, counter) - db := buildDB(&dbState, gasMeter) - a := buildAPI(api) - q := buildQuerier(querier) - var gasUsed u64 - errmsg := C.Buffer{} - - //// This is done in order to ensure that goroutines don't - //// swap threads between recursive calls to the enclave. - //runtime.LockOSThread() - //defer runtime.UnlockOSThread() - - res, err := C.query(cache.ptr, id, p, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg) - if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { - // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. - return nil, uint64(gasUsed), errorWithMessage(err, errmsg) - } - return receiveVector(res), uint64(gasUsed), nil -} +// func Migrate( +// cache Cache, +// code_id []byte, +// params []byte, +// msg []byte, +// gasMeter *GasMeter, +// store KVStore, +// api *GoAPI, +// querier *Querier, +// gasLimit uint64, +// sigInfo []byte, +// admin []byte, +// adminProof []byte, +// ) ([]byte, uint64, error) { +// id := sendSlice(code_id) +// defer freeAfterSend(id) +// p := sendSlice(params) +// defer freeAfterSend(p) +// m := sendSlice(msg) +// defer freeAfterSend(m) + +// // set up a new stack frame to handle iterators +// counter := startContract() +// defer endContract(counter) + +// // dbState := buildDBState(store, counter) +// // db := buildDB(&dbState, gasMeter) + +// s := sendSlice(sigInfo) +// defer freeAfterSend(s) +// // a := buildAPI(api) +// // q := buildQuerier(querier) +// var gasUsed u64 +// errmsg := C.Buffer{} + +// adminBuffer := sendSlice(admin) +// defer freeAfterSend(adminBuffer) + +// adminProofBuffer := sendSlice(adminProof) +// defer freeAfterSend(adminProofBuffer) + +// //// This is done in order to ensure that goroutines don't +// //// swap threads between recursive calls to the enclave. +// //runtime.LockOSThread() +// //defer runtime.UnlockOSThread() + +// res, err := C.migrate(cache.ptr, id, p, m, u64(gasLimit), &gasUsed, &errmsg, s, adminBuffer, adminProofBuffer) +// if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { +// // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. +// return nil, uint64(gasUsed), errorWithMessage(err, errmsg) +// } +// return receiveVector(res), uint64(gasUsed), nil +// } + +// func UpdateAdmin( +// cache Cache, +// code_id []byte, +// params []byte, +// gasMeter *GasMeter, +// store KVStore, +// api *GoAPI, +// querier *Querier, +// gasLimit uint64, +// sigInfo []byte, +// currentAdmin []byte, +// currentAdminProof []byte, +// newAdmin []byte, +// ) ([]byte, error) { +// id := sendSlice(code_id) +// defer freeAfterSend(id) +// p := sendSlice(params) +// defer freeAfterSend(p) + +// // set up a new stack frame to handle iterators +// counter := startContract() +// defer endContract(counter) + +// // dbState := buildDBState(store, counter) +// // db := buildDB(&dbState, gasMeter) + +// s := sendSlice(sigInfo) +// defer freeAfterSend(s) +// // a := buildAPI(api) +// // q := buildQuerier(querier) +// errmsg := C.Buffer{} + +// currentAdminBuffer := sendSlice(currentAdmin) +// defer freeAfterSend(currentAdminBuffer) + +// currentAdminProofBuffer := sendSlice(currentAdminProof) +// defer freeAfterSend(currentAdminProofBuffer) + +// newAdminBuffer := sendSlice(newAdmin) +// defer freeAfterSend(newAdminBuffer) + +// //// This is done in order to ensure that goroutines don't +// //// swap threads between recursive calls to the enclave. +// //runtime.LockOSThread() +// //defer runtime.UnlockOSThread() + +// res, err := C.update_admin(cache.ptr, id, p, a, q, u64(gasLimit), &errmsg, s, currentAdminBuffer, currentAdminProofBuffer, newAdminBuffer) +// if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { +// return nil, errorWithMessage(err, errmsg) +// } +// return receiveVector(res), nil +// } + +// func Instantiate( +// cache Cache, +// code_id []byte, +// params []byte, +// msg []byte, +// gasMeter *GasMeter, +// store KVStore, +// api *GoAPI, +// querier *Querier, +// gasLimit uint64, +// sigInfo []byte, +// admin []byte, +// ) ([]byte, uint64, error) { +// id := sendSlice(code_id) +// defer freeAfterSend(id) +// p := sendSlice(params) +// defer freeAfterSend(p) +// m := sendSlice(msg) +// defer freeAfterSend(m) + +// // set up a new stack frame to handle iterators +// counter := startContract() +// defer endContract(counter) + +// // dbState := buildDBState(store, counter) +// // db := buildDB(&dbState, gasMeter) + +// s := sendSlice(sigInfo) +// defer freeAfterSend(s) +// a := buildAPI(api) +// q := buildQuerier(querier) +// var gasUsed u64 +// errmsg := C.Buffer{} + +// adminBuffer := sendSlice(admin) +// defer freeAfterSend(adminBuffer) + +// //// This is done in order to ensure that goroutines don't +// //// swap threads between recursive calls to the enclave. +// //runtime.LockOSThread() +// //defer runtime.UnlockOSThread() + +// res, err := C.instantiate(cache.ptr, id, p, m, a, q, u64(gasLimit), &gasUsed, &errmsg, s, adminBuffer) +// if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { +// // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. +// return nil, uint64(gasUsed), errorWithMessage(err, errmsg) +// } +// return receiveVector(res), uint64(gasUsed), nil +// } + +// func Handle( +// cache Cache, +// code_id []byte, +// params []byte, +// msg []byte, +// gasMeter *GasMeter, +// store KVStore, +// api *GoAPI, +// querier *Querier, +// gasLimit uint64, +// sigInfo []byte, +// handleType types.HandleType, +// ) ([]byte, uint64, error) { +// id := sendSlice(code_id) +// defer freeAfterSend(id) +// p := sendSlice(params) +// defer freeAfterSend(p) +// m := sendSlice(msg) +// defer freeAfterSend(m) + +// // set up a new stack frame to handle iterators +// counter := startContract() +// defer endContract(counter) + +// // dbState := buildDBState(store, counter) +// // db := buildDB(&dbState, gasMeter) +// s := sendSlice(sigInfo) +// defer freeAfterSend(s) +// a := buildAPI(api) +// q := buildQuerier(querier) +// var gasUsed u64 +// errmsg := C.Buffer{} + +// //// This is done in order to ensure that goroutines don't +// //// swap threads between recursive calls to the enclave. +// //runtime.LockOSThread() +// //defer runtime.UnlockOSThread() + +// res, err := C.handle(cache.ptr, id, p, m, a, q, u64(gasLimit), &gasUsed, &errmsg, s, u8(handleType)) +// if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { +// // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. +// return nil, uint64(gasUsed), errorWithMessage(err, errmsg) +// } +// return receiveVector(res), uint64(gasUsed), nil +// } + +// func Query( +// cache Cache, +// code_id []byte, +// params []byte, +// msg []byte, +// gasMeter *GasMeter, +// store KVStore, +// api *GoAPI, +// querier *Querier, +// gasLimit uint64, +// ) ([]byte, uint64, error) { +// id := sendSlice(code_id) +// defer freeAfterSend(id) +// p := sendSlice(params) +// defer freeAfterSend(p) +// m := sendSlice(msg) +// defer freeAfterSend(m) + +// // set up a new stack frame to handle iterators +// counter := startContract() +// defer endContract(counter) + +// // dbState := buildDBState(store, counter) +// // db := buildDB(&dbState, gasMeter) +// a := buildAPI(api) +// q := buildQuerier(querier) +// var gasUsed u64 +// errmsg := C.Buffer{} + +// //// This is done in order to ensure that goroutines don't +// //// swap threads between recursive calls to the enclave. +// //runtime.LockOSThread() +// //defer runtime.UnlockOSThread() + +// res, err := C.query(cache.ptr, id, p, m, a, q, u64(gasLimit), &gasUsed, &errmsg) +// if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { +// // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. +// return nil, uint64(gasUsed), errorWithMessage(err, errmsg) +// } +// return receiveVector(res), uint64(gasUsed), nil +// } func AnalyzeCode( cache Cache, From bdb6d72d1d2ce41fb397c89a17f75fc94ff77528 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 24 Aug 2023 01:27:12 +0530 Subject: [PATCH 28/90] random test --- go-cosmwasm/api/callbacks_cgo.go | 52 ++++++++++++++++---------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/go-cosmwasm/api/callbacks_cgo.go b/go-cosmwasm/api/callbacks_cgo.go index b208d21d3..f6b86b091 100644 --- a/go-cosmwasm/api/callbacks_cgo.go +++ b/go-cosmwasm/api/callbacks_cgo.go @@ -21,36 +21,36 @@ GoResult cCanonicalAddress(api_t *ptr, Buffer human, Buffer *canon, Buffer *errO GoResult cQueryExternal(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut); // Gateway functions (db) -GoResult cGet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val, Buffer *errOut) { - return cGet(ptr, gas_meter, used_gas, key, val, errOut); -} -GoResult cSet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val, Buffer *errOut) { - return cSet(ptr, gas_meter, used_gas, key, val, errOut); -} -GoResult cDelete_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *errOut) { - return cDelete(ptr, gas_meter, used_gas, key, errOut); -} -GoResult cScan_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out, Buffer *errOut) { - return cScan(ptr, gas_meter, used_gas, start, end, order, out, errOut); -} +// GoResult cGet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val, Buffer *errOut) { +// return cGet(ptr, gas_meter, used_gas, key, val, errOut); +// } +// GoResult cSet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val, Buffer *errOut) { +// return cSet(ptr, gas_meter, used_gas, key, val, errOut); +// } +// GoResult cDelete_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *errOut) { +// return cDelete(ptr, gas_meter, used_gas, key, errOut); +// } +// GoResult cScan_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out, Buffer *errOut) { +// return cScan(ptr, gas_meter, used_gas, start, end, order, out, errOut); +// } // Gateway functions (iterator) -GoResult cNext_cgo(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val, Buffer *errOut) { - return cNext(ptr, gas_meter, used_gas, key, val, errOut); -} +// GoResult cNext_cgo(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val, Buffer *errOut) { +// return cNext(ptr, gas_meter, used_gas, key, val, errOut); +// } // Gateway functions (api) -GoResult cCanonicalAddress_cgo(api_t *ptr, Buffer human, Buffer *canon, Buffer *errOut, uint64_t *used_gas) { - return cCanonicalAddress(ptr, human, canon, errOut, used_gas); -} -GoResult cHumanAddress_cgo(api_t *ptr, Buffer canon, Buffer *human, Buffer *errOut, uint64_t *used_gas) { - return cHumanAddress(ptr, canon, human, errOut, used_gas); -} - -// Gateway functions (querier) -GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut) { - return cQueryExternal(ptr, gas_limit, used_gas, request, query_depth, result, errOut); -} +// GoResult cCanonicalAddress_cgo(api_t *ptr, Buffer human, Buffer *canon, Buffer *errOut, uint64_t *used_gas) { +// return cCanonicalAddress(ptr, human, canon, errOut, used_gas); +// } +// GoResult cHumanAddress_cgo(api_t *ptr, Buffer canon, Buffer *human, Buffer *errOut, uint64_t *used_gas) { +// return cHumanAddress(ptr, canon, human, errOut, used_gas); +// } + +// // Gateway functions (querier) +// GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut) { +// return cQueryExternal(ptr, gas_limit, used_gas, request, query_depth, result, errOut); +// } */ import "C" From c34d77e1559e691007e60ee0d36d1691fc598da9 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 24 Aug 2023 01:30:50 +0530 Subject: [PATCH 29/90] random test --- go-cosmwasm/api/callbacks.go | 46 ++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/go-cosmwasm/api/callbacks.go b/go-cosmwasm/api/callbacks.go index 4a9be63d7..90585c014 100644 --- a/go-cosmwasm/api/callbacks.go +++ b/go-cosmwasm/api/callbacks.go @@ -37,10 +37,10 @@ import "C" import ( // "encoding/json" - "fmt" + // "fmt" "log" "reflect" - "unsafe" + // "unsafe" dbm "github.com/tendermint/tm-db" @@ -329,27 +329,27 @@ type GoAPI struct { // } //export cHumanAddress -func cHumanAddress(ptr *C.api_t, canon C.Buffer, human *C.Buffer, errOut *C.Buffer, used_gas *u64) (ret C.GoResult) { - defer recoverPanic(&ret) - if human == nil { - // we received an invalid pointer - return C.GoResult_BadArgument - } - api := (*GoAPI)(unsafe.Pointer(ptr)) - c := receiveSlice(canon) - h, cost, err := api.HumanAddress(c) - *used_gas = u64(cost) - if err != nil { - // store the actual error message in the return buffer - *errOut = allocateRust([]byte(err.Error())) - return C.GoResult_User - } - if len(h) == 0 { - panic(fmt.Sprintf("`api.HumanAddress()` returned an empty string for %q", c)) - } - *human = allocateRust([]byte(h)) - return C.GoResult_Ok -} +// func cHumanAddress(ptr *C.api_t, canon C.Buffer, human *C.Buffer, errOut *C.Buffer, used_gas *u64) (ret C.GoResult) { +// defer recoverPanic(&ret) +// if human == nil { +// // we received an invalid pointer +// return C.GoResult_BadArgument +// } +// api := (*GoAPI)(unsafe.Pointer(ptr)) +// c := receiveSlice(canon) +// h, cost, err := api.HumanAddress(c) +// *used_gas = u64(cost) +// if err != nil { +// // store the actual error message in the return buffer +// *errOut = allocateRust([]byte(err.Error())) +// return C.GoResult_User +// } +// if len(h) == 0 { +// panic(fmt.Sprintf("`api.HumanAddress()` returned an empty string for %q", c)) +// } +// *human = allocateRust([]byte(h)) +// return C.GoResult_Ok +// } //export cCanonicalAddress // func cCanonicalAddress(ptr *C.api_t, human C.Buffer, canon *C.Buffer, errOut *C.Buffer, used_gas *u64) (ret C.GoResult) { From 5aba3c0abd47c13dc7f756f753ee4a65d9582ecc Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 24 Aug 2023 01:35:50 +0530 Subject: [PATCH 30/90] random test --- go-cosmwasm/api/link_std.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go-cosmwasm/api/link_std.go b/go-cosmwasm/api/link_std.go index 703122fb1..04cabacfa 100644 --- a/go-cosmwasm/api/link_std.go +++ b/go-cosmwasm/api/link_std.go @@ -3,5 +3,5 @@ package api -// #cgo LDFLAGS: -Wl,-rpath,${SRCDIR} -L${SRCDIR} -lgo_cosmwasm +// #cgo LDFLAGS: -Wl,-rpath,${SRCDIR} -L${SRCDIR} import "C" From 629a105c2c537aaedae07e0740f5ecb046e22dab Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 24 Aug 2023 11:14:05 +0530 Subject: [PATCH 31/90] bindings json corrected --- app/wasm/bindings/query.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/wasm/bindings/query.go b/app/wasm/bindings/query.go index d1d7cfc63..8a6e1061b 100644 --- a/app/wasm/bindings/query.go +++ b/app/wasm/bindings/query.go @@ -30,7 +30,7 @@ type ComdexQuery struct { CheckBorrowed *CheckBorrowed `json:"check_borrowed,omitempty"` CheckLiquidityProvided *CheckLiquidityProvided `json:"check_liquidity_provided,omitempty"` GetPoolByApp *GetPoolByApp `json:"get_pool_by_app,omitempty"` - GetAssetPrice *GetAssetPrice `json:"Get_Asset_Price,omitempty"` + GetAssetPrice *GetAssetPrice `json:"get_asset_price,omitempty"` } type AppData struct { From 38edab9efef14832d2863b6dcb6ea5138cef076c Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 24 Aug 2023 11:14:44 +0530 Subject: [PATCH 32/90] go-cosmwasm removed for testing --- x/market/module.go | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/x/market/module.go b/x/market/module.go index 81fdb4423..840f6a864 100644 --- a/x/market/module.go +++ b/x/market/module.go @@ -8,7 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" - "github.com/comdex-official/comdex/go-cosmwasm/api" + // "github.com/comdex-official/comdex/go-cosmwasm/api" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" @@ -128,11 +128,11 @@ func (a AppModule) RegisterServices(configurator module.Configurator) { func (a AppModule) BeginBlock(ctx sdk.Context, req abcitypes.RequestBeginBlock) { BeginBlocker(ctx, req, a.keeper, a.bandKeeper, a.assetKeeper) - header, err := req.Header.Marshal() - if err != nil { - ctx.Logger().Error("Failed to marshal header") - panic(err) - } + // header, err := req.Header.Marshal() + // if err != nil { + // ctx.Logger().Error("Failed to marshal header") + // panic(err) + // } // There is a possibility, specifically was found on upgrade block, when there are no pre-commits at all (beginBlock.Commit == nil) // In this case Marshal will fail with a Seg Fault. @@ -155,14 +155,16 @@ func (a AppModule) BeginBlock(ctx sdk.Context, req abcitypes.RequestBeginBlock) } if req.Header.EncryptedRandom != nil { - randomAndProof := append(req.Header.EncryptedRandom.Random, req.Header.EncryptedRandom.Proof...) //nolint:all - random, err := api.SubmitBlockSignatures(header, commit, data, randomAndProof) - if err != nil { - ctx.Logger().Error("Failed to submit block signatures") - panic(err) - } - - a.keeper.SetRandomSeed(ctx, random) + randomAndProof := append(req.Header.EncryptedRandom.Random, req.Header.EncryptedRandom.Proof...,) //nolint:all + ProofAppend := append(commit, data...) + // random, err := api.SubmitBlockSignatures(header, commit, data, randomAndProof) + // if err != nil { + // ctx.Logger().Error("Failed to submit block signatures") + // panic(err) + // } + + // a.keeper.SetRandomSeed(ctx, random) + a.keeper.SetRandomSeed(ctx, append(randomAndProof, ProofAppend...)) } else { println("No random got from TM header") } From c552023115c2c0e360841cfda444d6cbe7cc927c Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 24 Aug 2023 11:20:45 +0530 Subject: [PATCH 33/90] abci fmts for testing --- x/market/abci.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/x/market/abci.go b/x/market/abci.go index 3c9581f73..17aee5333 100644 --- a/x/market/abci.go +++ b/x/market/abci.go @@ -1,6 +1,8 @@ package market import ( + "fmt" + assetkeeper "github.com/comdex-official/comdex/x/asset/keeper" bandkeeper "github.com/comdex-official/comdex/x/bandoracle/keeper" bandoraclemoduletypes "github.com/comdex-official/comdex/x/bandoracle/types" @@ -60,5 +62,10 @@ func BeginBlocker(ctx sdk.Context, _ abci.RequestBeginBlock, k keeper.Keeper, ba k.SetTwa(ctx, twa) } } + fmt.Println("----------+++++++++++--------------") + fmt.Println("---------") + fmt.Println(k.GetRandomSeed(ctx, ctx.BlockHeight())) + fmt.Println("---------") + fmt.Println("----------+++++++++++--------------") } From 9976833b92d39532de66e56f6ef214a63a08f02e Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 28 Aug 2023 14:39:23 +0530 Subject: [PATCH 34/90] removed unused files --- go-cosmwasm/api/bindings.h | 252 --------- go-cosmwasm/api/callbacks.go | 421 -------------- go-cosmwasm/api/callbacks_cgo.go | 60 -- go-cosmwasm/api/callbacks_cgo_mock.go | 61 -- go-cosmwasm/api/callbacks_mock.go | 411 -------------- go-cosmwasm/api/iterator.go | 73 --- go-cosmwasm/api/lib.go | 472 ---------------- go-cosmwasm/api/lib_mock.go | 293 ---------- go-cosmwasm/api/link_muslc.go | 7 - go-cosmwasm/api/link_std.go | 7 - go-cosmwasm/api/memory.go | 84 --- go-cosmwasm/api/testdata/contract.wasm | Bin 62845 -> 0 bytes go-cosmwasm/api/testdata/download_releases.sh | 16 - go-cosmwasm/api/testdata/hackatom.wasm | Bin 183230 -> 0 bytes go-cosmwasm/api/testdata/queue.wasm | Bin 99932 -> 0 bytes go-cosmwasm/api/testdata/reflect.wasm | Bin 169095 -> 0 bytes go-cosmwasm/types/env.go | 61 -- go-cosmwasm/types/env_test.go | 49 -- go-cosmwasm/types/queries.go | 534 ------------------ go-cosmwasm/types/queries_test.go | 64 --- go-cosmwasm/types/stderror.go | 202 ------- go-cosmwasm/types/systemerror.go | 138 ----- go-cosmwasm/types/types.go | 92 --- go-cosmwasm/types/v010/msg_v010.go | 197 ------- go-cosmwasm/types/v1/ibc.go | 289 ---------- go-cosmwasm/types/v1/msg_v1.go | 224 -------- go-cosmwasm/types/v1/subcall.go | 124 ---- go-cosmwasm/types/v1/type.go | 8 - go.mod | 6 +- go.sum | 7 +- x/market/abci.go | 10 +- x/market/keeper/seed.go | 24 - x/market/module.go | 45 +- x/market/types/keys.go | 13 +- 34 files changed, 8 insertions(+), 4236 deletions(-) delete mode 100644 go-cosmwasm/api/bindings.h delete mode 100644 go-cosmwasm/api/callbacks.go delete mode 100644 go-cosmwasm/api/callbacks_cgo.go delete mode 100644 go-cosmwasm/api/callbacks_cgo_mock.go delete mode 100644 go-cosmwasm/api/callbacks_mock.go delete mode 100644 go-cosmwasm/api/iterator.go delete mode 100644 go-cosmwasm/api/lib.go delete mode 100644 go-cosmwasm/api/lib_mock.go delete mode 100644 go-cosmwasm/api/link_muslc.go delete mode 100644 go-cosmwasm/api/link_std.go delete mode 100644 go-cosmwasm/api/memory.go delete mode 100644 go-cosmwasm/api/testdata/contract.wasm delete mode 100755 go-cosmwasm/api/testdata/download_releases.sh delete mode 100644 go-cosmwasm/api/testdata/hackatom.wasm delete mode 100644 go-cosmwasm/api/testdata/queue.wasm delete mode 100644 go-cosmwasm/api/testdata/reflect.wasm delete mode 100644 go-cosmwasm/types/env.go delete mode 100644 go-cosmwasm/types/env_test.go delete mode 100644 go-cosmwasm/types/queries.go delete mode 100644 go-cosmwasm/types/queries_test.go delete mode 100644 go-cosmwasm/types/stderror.go delete mode 100644 go-cosmwasm/types/systemerror.go delete mode 100644 go-cosmwasm/types/types.go delete mode 100644 go-cosmwasm/types/v010/msg_v010.go delete mode 100644 go-cosmwasm/types/v1/ibc.go delete mode 100644 go-cosmwasm/types/v1/msg_v1.go delete mode 100644 go-cosmwasm/types/v1/subcall.go delete mode 100644 go-cosmwasm/types/v1/type.go delete mode 100644 x/market/keeper/seed.go diff --git a/go-cosmwasm/api/bindings.h b/go-cosmwasm/api/bindings.h deleted file mode 100644 index d93ca5874..000000000 --- a/go-cosmwasm/api/bindings.h +++ /dev/null @@ -1,252 +0,0 @@ -/* (c) 2019 Confio UO. Licensed under Apache-2.0 */ - -/* Generated with cbindgen:0.14.3 */ - -/* Warning, this file is autogenerated by cbindgen. Don't modify this manually. */ - -#include -#include -#include -#include - -enum ErrnoValue { - ErrnoValue_Success = 0, - ErrnoValue_Other = 1, - ErrnoValue_OutOfGas = 2, -}; -typedef int32_t ErrnoValue; - -/** - * This enum gives names to the status codes returned from Go callbacks to Rust. - * - * The go code will return one of these variants when returning. - * - */ -enum GoResult { - GoResult_Ok = 0, - /** - * Go panicked for an unexpected reason. - */ - GoResult_Panic = 1, - /** - * Go received a bad argument from Rust - */ - GoResult_BadArgument = 2, - /** - * Ran out of gas while using the SDK (e.g. storage) - */ - GoResult_OutOfGas = 3, - /** - * An error happened during normal operation of a Go callback, which should abort the contract - */ - GoResult_Other = 4, - /** - * An error happened during normal operation of a Go callback, which should be fed back to the contract - */ - GoResult_User = 5, -}; -typedef int32_t GoResult; - -typedef struct Buffer { - uint8_t *ptr; - uintptr_t len; - uintptr_t cap; -} Buffer; - -/** - * The result type of the FFI function analyze_code. - * - * Please note that the unmanaged vector in `required_features` - * has to be destroyed exactly once. When calling `analyze_code` - * from Go this is done via `C.destroy_unmanaged_vector`. - */ -typedef struct AnalysisReport { - bool has_ibc_entry_points; - /** - * An UTF-8 encoded comma separated list of required features. - * This is never None/nil. - */ - Buffer required_features; -} AnalysisReport; - -typedef struct cache_t { - -} cache_t; - -typedef struct EnclaveRuntimeConfig { - uint32_t module_cache_size; -} EnclaveRuntimeConfig; - -/** - * An opaque type. `*gas_meter_t` represents a pointer to Go memory holding the gas meter. - */ -typedef struct gas_meter_t { - uint8_t _private[0]; -} gas_meter_t; - -typedef struct db_t { - uint8_t _private[0]; -} db_t; - -typedef struct iterator_t { - uint64_t db_counter; - uint64_t iterator_index; -} iterator_t; - -typedef struct Iterator_vtable { - int32_t (*next_db)(iterator_t, gas_meter_t*, uint64_t*, Buffer*, Buffer*, Buffer*); -} Iterator_vtable; - -typedef struct GoIter { - gas_meter_t *gas_meter; - iterator_t state; - Iterator_vtable vtable; -} GoIter; - -typedef struct DB_vtable { - int32_t (*read_db)(db_t*, gas_meter_t*, uint64_t*, Buffer, Buffer*, Buffer*); - int32_t (*write_db)(db_t*, gas_meter_t*, uint64_t*, Buffer, Buffer, Buffer*); - int32_t (*remove_db)(db_t*, gas_meter_t*, uint64_t*, Buffer, Buffer*); - int32_t (*scan_db)(db_t*, gas_meter_t*, uint64_t*, Buffer, Buffer, int32_t, GoIter*, Buffer*); -} DB_vtable; - -typedef struct DB { - gas_meter_t *gas_meter; - db_t *state; - DB_vtable vtable; -} DB; - -typedef struct api_t { - uint8_t _private[0]; -} api_t; - -typedef struct GoApi_vtable { - int32_t (*humanize_address)(const api_t*, Buffer, Buffer*, Buffer*, uint64_t*); - int32_t (*canonicalize_address)(const api_t*, Buffer, Buffer*, Buffer*, uint64_t*); -} GoApi_vtable; - -typedef struct GoApi { - const api_t *state; - GoApi_vtable vtable; -} GoApi; - -typedef struct querier_t { - uint8_t _private[0]; -} querier_t; - -typedef struct Querier_vtable { - int32_t (*query_external)(const querier_t*, uint64_t, uint64_t*, Buffer, uint32_t, Buffer*, Buffer*); -} Querier_vtable; - -typedef struct GoQuerier { - const querier_t *state; - Querier_vtable vtable; -} GoQuerier; - -Buffer allocate_rust(const uint8_t *ptr, uintptr_t length); - -AnalysisReport analyze_code(cache_t *cache, Buffer checksum, Buffer *error_msg); - -void configure_enclave_runtime(EnclaveRuntimeConfig config, Buffer *err); - -Buffer create(cache_t *cache, Buffer wasm, Buffer *err); - -bool create_attestation_report(Buffer api_key, Buffer *err, bool dry_run); - -void free_rust(Buffer buf); - -Buffer get_code(cache_t *cache, Buffer id, Buffer *err); - -Buffer get_encrypted_genesis_seed(Buffer pk, Buffer *err); - -Buffer get_encrypted_seed(Buffer cert, Buffer *err); - -Buffer get_health_check(Buffer *err); - -Buffer handle(cache_t *cache, - Buffer code_id, - Buffer params, - Buffer msg, - DB db, - GoApi api, - GoQuerier querier, - uint64_t gas_limit, - uint64_t *gas_used, - Buffer *err, - Buffer sig_info, - uint8_t handle_type); - -Buffer init_bootstrap(Buffer spid, Buffer api_key, Buffer *err); - -cache_t *init_cache(Buffer data_dir, Buffer supported_features, uintptr_t _cache_size, Buffer *err); - -bool init_node(Buffer master_key, Buffer encrypted_seed, Buffer api_key, Buffer *err); - -Buffer instantiate(cache_t *cache, - Buffer contract_id, - Buffer params, - Buffer msg, - DB db, - GoApi api, - GoQuerier querier, - uint64_t gas_limit, - uint64_t *gas_used, - Buffer *err, - Buffer sig_info, - Buffer admin); - -Buffer key_gen(Buffer *err); - -Buffer migrate(cache_t *cache, - Buffer contract_id, - Buffer params, - Buffer msg, - DB db, - GoApi api, - GoQuerier querier, - uint64_t gas_limit, - uint64_t *gas_used, - Buffer *err, - Buffer sig_info, - Buffer admin, - Buffer admin_proof); - -Buffer query(cache_t *cache, - Buffer code_id, - Buffer params, - Buffer msg, - DB db, - GoApi api, - GoQuerier querier, - uint64_t gas_limit, - uint64_t *gas_used, - Buffer *err); - -/** - * frees a cache reference - * - * # Safety - * - * This must be called exactly once for any `*cache_t` returned by `init_cache` - * and cannot be called on any other pointer. - */ -void release_cache(cache_t *cache); - -Buffer submit_block_signatures(Buffer header, - Buffer commit, - Buffer txs, - Buffer random, - Buffer *err); - -Buffer update_admin(cache_t *cache, - Buffer contract_id, - Buffer params, - DB db, - GoApi api, - GoQuerier querier, - uint64_t gas_limit, - Buffer *err, - Buffer sig_info, - Buffer current_admin, - Buffer current_admin_proof, - Buffer new_admin); diff --git a/go-cosmwasm/api/callbacks.go b/go-cosmwasm/api/callbacks.go deleted file mode 100644 index 90585c014..000000000 --- a/go-cosmwasm/api/callbacks.go +++ /dev/null @@ -1,421 +0,0 @@ -//go:build !secretcli -// +build !secretcli - -package api - -/* -#include "bindings.h" - -// typedefs for _cgo functions (db) -typedef GoResult (*read_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val, Buffer *errOut); -typedef GoResult (*write_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val, Buffer *errOut); -typedef GoResult (*remove_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *errOut); -typedef GoResult (*scan_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out, Buffer *errOut); -// iterator -typedef GoResult (*next_db_fn)(iterator_t idx, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val, Buffer *errOut); -// and api -typedef GoResult (*humanize_address_fn)(api_t *ptr, Buffer canon, Buffer *human, Buffer *errOut, uint64_t *used_gas); -typedef GoResult (*canonicalize_address_fn)(api_t *ptr, Buffer human, Buffer *canon, Buffer *errOut, uint64_t *used_gas); -typedef GoResult (*query_external_fn)(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut); - -// forward declarations (db) -// GoResult cGet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val, Buffer *errOut); -// GoResult cSet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val, Buffer *errOut); -// GoResult cDelete_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *errOut); -// GoResult cScan_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out, Buffer *errOut); -// iterator -// GoResult cNext_cgo(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val, Buffer *errOut); -// api -// GoResult cHumanAddress_cgo(api_t *ptr, Buffer canon, Buffer *human, Buffer *errOut, uint64_t *used_gas); -// GoResult cCanonicalAddress_cgo(api_t *ptr, Buffer human, Buffer *canon, Buffer *errOut, uint64_t *used_gas); -// and querier -// GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut); - - -*/ -import "C" - -import ( - // "encoding/json" - // "fmt" - "log" - "reflect" - // "unsafe" - - dbm "github.com/tendermint/tm-db" - - // "github.com/comdex-official/comdex/go-cosmwasm/types" -) - -// Note: we have to include all exports in the same file (at least since they both import bindings.h), -// or get odd cgo build errors about duplicate definitions - -func recoverPanic(ret *C.GoResult) { - rec := recover() - // we don't want to import cosmos-sdk - // we also cannot use interfaces to detect these error types (as they have no methods) - // so, let's just rely on the descriptive names - // this is used to detect "out of gas panics" - if rec != nil { - name := reflect.TypeOf(rec).Name() - switch name { - // These two cases are for types thrown in panics from this module: - // https://github.com/cosmos/cosmos-sdk/blob/4ffabb65a5c07dbb7010da397535d10927d298c1/store/types/gas.go - // ErrorOutOfGas needs to be propagated through the rust code and back into go code, where it should - // probably be thrown in a panic again. - // TODO figure out how to pass the text in its `Descriptor` field through all the FFI - // TODO handle these cases on the Rust side in the first place - case "ErrorOutOfGas": - *ret = C.GoResult_OutOfGas - // Looks like this error is not treated specially upstream: - // https://github.com/cosmos/cosmos-sdk/blob/4ffabb65a5c07dbb7010da397535d10927d298c1/baseapp/baseapp.go#L818-L853 - // but this needs to be periodically verified, in case they do start checking for this type - // case "ErrorGasOverflow": - default: - log.Printf("Panic in Go callback: %#v\n", rec) - *ret = C.GoResult_Panic - } - } -} - -type Gas = uint64 - -// GasMeter is a copy of an interface declaration from cosmos-sdk -// https://github.com/cosmos/cosmos-sdk/blob/18890a225b46260a9adc587be6fa1cc2aff101cd/store/types/gas.go#L34 -type GasMeter interface { - GasConsumed() Gas -} - -/****** DB ********/ - -// KVStore copies a subset of types from cosmos-sdk -// We may wish to make this more generic sometime in the future, but not now -// https://github.com/cosmos/cosmos-sdk/blob/bef3689245bab591d7d169abd6bea52db97a70c7/store/types/store.go#L170 -type KVStore interface { - Get(key []byte) []byte - Set(key, value []byte) - Delete(key []byte) - - // Iterator over a domain of keys in ascending order. End is exclusive. - // Start must be less than end, or the Iterator is invalid. - // Iterator must be closed by caller. - // To iterate over entire domain, use store.Iterator(nil, nil) - Iterator(start, end []byte) dbm.Iterator - - // Iterator over a domain of keys in descending order. End is exclusive. - // Start must be less than end, or the Iterator is invalid. - // Iterator must be closed by caller. - ReverseIterator(start, end []byte) dbm.Iterator -} - -// var db_vtable = C.DB_vtable{ -// read_db: (C.read_db_fn)(C.cGet_cgo), -// write_db: (C.write_db_fn)(C.cSet_cgo), -// remove_db: (C.remove_db_fn)(C.cDelete_cgo), -// scan_db: (C.scan_db_fn)(C.cScan_cgo), -// } - -type DBState struct { - Store KVStore - // IteratorStackID is used to lookup the proper stack frame for iterators associated with this DB (iterator.go) - IteratorStackID uint64 -} - -// use this to create C.DB in two steps, so the pointer lives as long as the calling stack -// -// state := buildDBState(kv, counter) -// db := buildDB(&state, &gasMeter) -// // then pass db into some FFI function -func buildDBState(kv KVStore, counter uint64) DBState { - return DBState{ - Store: kv, - IteratorStackID: counter, - } -} - -// contract: original pointer/struct referenced must live longer than C.DB struct -// since this is only used internally, we can verify the code that this is the case -// func buildDB(state *DBState, gm *GasMeter) C.DB { -// return C.DB{ -// gas_meter: (*C.gas_meter_t)(unsafe.Pointer(gm)), -// state: (*C.db_t)(unsafe.Pointer(state)), -// vtable: db_vtable, -// } -// } - -// var iterator_vtable = C.Iterator_vtable{ -// next_db: (C.next_db_fn)(C.cNext_cgo), -// } - -// contract: original pointer/struct referenced must live longer than C.DB struct -// since this is only used internally, we can verify the code that this is the case -func buildIterator(dbCounter uint64, it dbm.Iterator) C.iterator_t { - idx := storeIterator(dbCounter, it) - return C.iterator_t{ - db_counter: u64(dbCounter), - iterator_index: u64(idx), - } -} - -//export cGet -// func cGet(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *u64, key C.Buffer, val *C.Buffer, _ *C.Buffer) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if ptr == nil || gasMeter == nil || usedGas == nil || val == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } - -// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) -// kv := *(*KVStore)(unsafe.Pointer(ptr)) -// k := receiveSlice(key) - -// gasBefore := gm.GasConsumed() -// v := kv.Get(k) -// gasAfter := gm.GasConsumed() -// *usedGas = (u64)(gasAfter - gasBefore) - -// // v will equal nil when the key is missing -// // https://github.com/cosmos/cosmos-sdk/blob/1083fa948e347135861f88e07ec76b0314296832/store/types/store.go#L174 -// if v != nil { -// *val = allocateRust(v) -// } -// // else: the Buffer on the rust side is initialised as a "null" buffer, -// // so if we don't write a non-null address to it, it will understand that -// // the key it requested does not exist in the kv store - -// return C.GoResult_Ok -// } - -// //export cSet -// func cSet(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer, val C.Buffer, _ *C.Buffer) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if ptr == nil || gasMeter == nil || usedGas == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } - -// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) -// kv := *(*KVStore)(unsafe.Pointer(ptr)) -// k := receiveSlice(key) -// v := receiveSlice(val) - -// gasBefore := gm.GasConsumed() -// kv.Set(k, v) -// gasAfter := gm.GasConsumed() -// *usedGas = (C.uint64_t)(gasAfter - gasBefore) - -// return C.GoResult_Ok -// } - -// //export cDelete -// func cDelete(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer, _ *C.Buffer) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if ptr == nil || gasMeter == nil || usedGas == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } - -// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) -// kv := *(*KVStore)(unsafe.Pointer(ptr)) -// k := receiveSlice(key) - -// gasBefore := gm.GasConsumed() -// kv.Delete(k) -// gasAfter := gm.GasConsumed() -// *usedGas = (C.uint64_t)(gasAfter - gasBefore) - -// return C.GoResult_Ok -// } - -// //export cScan -// func cScan(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, start C.Buffer, end C.Buffer, order i32, out *C.GoIter, _ *C.Buffer) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if ptr == nil || gasMeter == nil || usedGas == nil || out == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } - -// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) -// state := (*DBState)(unsafe.Pointer(ptr)) -// kv := state.Store -// // handle null as well as data -// var s, e []byte -// if start.ptr != nil { -// s = receiveSlice(start) -// } -// if end.ptr != nil { -// e = receiveSlice(end) -// } - -// var iter dbm.Iterator -// gasBefore := gm.GasConsumed() -// switch order { -// case 1: // Ascending -// iter = kv.Iterator(s, e) -// case 2: // Descending -// iter = kv.ReverseIterator(s, e) -// default: -// return C.GoResult_BadArgument -// } -// gasAfter := gm.GasConsumed() -// *usedGas = (C.uint64_t)(gasAfter - gasBefore) - -// out.state = buildIterator(state.IteratorStackID, iter) -// out.vtable = iterator_vtable -// return C.GoResult_Ok -// } - -// //export cNext -// func cNext(ref C.iterator_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key *C.Buffer, val *C.Buffer, _ *C.Buffer) (ret C.GoResult) { -// // typical usage of iterator -// // for ; itr.Valid(); itr.Next() { -// // k, v := itr.Key(); itr.Value() -// // ... -// // } - -// defer recoverPanic(&ret) -// if ref.db_counter == 0 || gasMeter == nil || usedGas == nil || key == nil || val == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } - -// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) -// iter := retrieveIterator(uint64(ref.db_counter), uint64(ref.iterator_index)) -// if !iter.Valid() { -// // end of iterator, return as no-op, nil key is considered end -// return C.GoResult_Ok -// } - -// gasBefore := gm.GasConsumed() -// // call Next at the end, upon creation we have first data loaded -// k := iter.Key() -// v := iter.Value() -// // check iter.Error() ???? -// iter.Next() -// gasAfter := gm.GasConsumed() -// *usedGas = (C.uint64_t)(gasAfter - gasBefore) - -// if k != nil { -// *key = allocateRust(k) -// *val = allocateRust(v) -// } -// return C.GoResult_Ok -// } - -/***** GoAPI *******/ - -type ( - HumanizeAddress func([]byte) (string, uint64, error) - CanonicalizeAddress func(string) ([]byte, uint64, error) -) - -type GoAPI struct { - HumanAddress HumanizeAddress - CanonicalAddress CanonicalizeAddress -} - -// var api_vtable = C.GoApi_vtable{ -// humanize_address: (C.humanize_address_fn)(C.cHumanAddress_cgo), -// canonicalize_address: (C.canonicalize_address_fn)(C.cCanonicalAddress_cgo), -// } - -// contract: original pointer/struct referenced must live longer than C.GoApi struct -// since this is only used internally, we can verify the code that this is the case -// func buildAPI(api *GoAPI) C.GoApi { -// return C.GoApi{ -// state: (*C.api_t)(unsafe.Pointer(api)), -// vtable: api_vtable, -// } -// } - -//export cHumanAddress -// func cHumanAddress(ptr *C.api_t, canon C.Buffer, human *C.Buffer, errOut *C.Buffer, used_gas *u64) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if human == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } -// api := (*GoAPI)(unsafe.Pointer(ptr)) -// c := receiveSlice(canon) -// h, cost, err := api.HumanAddress(c) -// *used_gas = u64(cost) -// if err != nil { -// // store the actual error message in the return buffer -// *errOut = allocateRust([]byte(err.Error())) -// return C.GoResult_User -// } -// if len(h) == 0 { -// panic(fmt.Sprintf("`api.HumanAddress()` returned an empty string for %q", c)) -// } -// *human = allocateRust([]byte(h)) -// return C.GoResult_Ok -// } - -//export cCanonicalAddress -// func cCanonicalAddress(ptr *C.api_t, human C.Buffer, canon *C.Buffer, errOut *C.Buffer, used_gas *u64) (ret C.GoResult) { -// defer recoverPanic(&ret) - -// if canon == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } - -// api := (*GoAPI)(unsafe.Pointer(ptr)) -// h := string(receiveSlice(human)) -// c, cost, err := api.CanonicalAddress(h) -// *used_gas = u64(cost) -// if err != nil { -// // store the actual error message in the return buffer -// *errOut = allocateRust([]byte(err.Error())) -// return C.GoResult_User -// } -// if len(c) == 0 { -// panic(fmt.Sprintf("`api.CanonicalAddress()` returned an empty string for %q", h)) -// } -// *canon = allocateRust(c) - -// // If we do not set canon to a meaningful value, then the other side will interpret that as an empty result. -// return C.GoResult_Ok -// } - -/****** Go Querier ********/ - -// var querier_vtable = C.Querier_vtable{ -// query_external: (C.query_external_fn)(C.cQueryExternal_cgo), -// } - -// contract: original pointer/struct referenced must live longer than C.GoQuerier struct -// since this is only used internally, we can verify the code that this is the case -// func buildQuerier(q *Querier) C.GoQuerier { -// return C.GoQuerier{ -// state: (*C.querier_t)(unsafe.Pointer(q)), -// vtable: querier_vtable, -// } -// } - -//export cQueryExternal -// func cQueryExternal(ptr *C.querier_t, gasLimit C.uint64_t, usedGas *C.uint64_t, request C.Buffer, queryDepth C.uint32_t, result *C.Buffer, errOut *C.Buffer) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if ptr == nil || usedGas == nil || result == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } - -// // query the data -// querier := *(*Querier)(unsafe.Pointer(ptr)) -// req := receiveSlice(request) - -// gasBefore := querier.GasConsumed() -// res := types.RustQuery(querier, req, uint32(queryDepth), uint64(gasLimit)) -// gasAfter := querier.GasConsumed() -// *usedGas = (C.uint64_t)(gasAfter - gasBefore) - -// // serialize the response -// bz, err := json.Marshal(res) -// if err != nil { -// *errOut = allocateRust([]byte(err.Error())) -// return C.GoResult_Other -// } -// *result = allocateRust(bz) -// return C.GoResult_Ok -// } diff --git a/go-cosmwasm/api/callbacks_cgo.go b/go-cosmwasm/api/callbacks_cgo.go deleted file mode 100644 index f6b86b091..000000000 --- a/go-cosmwasm/api/callbacks_cgo.go +++ /dev/null @@ -1,60 +0,0 @@ -//go:build !secretcli -// +build !secretcli - -package api - -/* -#include "bindings.h" -#include - -// imports (db) -GoResult cSet(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val, Buffer *errOut); -GoResult cGet(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val, Buffer *errOut); -GoResult cDelete(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *errOut); -GoResult cScan(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out, Buffer *errOut); -// imports (iterator) -GoResult cNext(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val, Buffer *errOut); -// imports (api) -GoResult cHumanAddress(api_t *ptr, Buffer canon, Buffer *human, Buffer *errOut, uint64_t *used_gas); -GoResult cCanonicalAddress(api_t *ptr, Buffer human, Buffer *canon, Buffer *errOut, uint64_t *used_gas); -// imports (querier) -GoResult cQueryExternal(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut); - -// Gateway functions (db) -// GoResult cGet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val, Buffer *errOut) { -// return cGet(ptr, gas_meter, used_gas, key, val, errOut); -// } -// GoResult cSet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val, Buffer *errOut) { -// return cSet(ptr, gas_meter, used_gas, key, val, errOut); -// } -// GoResult cDelete_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *errOut) { -// return cDelete(ptr, gas_meter, used_gas, key, errOut); -// } -// GoResult cScan_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out, Buffer *errOut) { -// return cScan(ptr, gas_meter, used_gas, start, end, order, out, errOut); -// } - -// Gateway functions (iterator) -// GoResult cNext_cgo(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val, Buffer *errOut) { -// return cNext(ptr, gas_meter, used_gas, key, val, errOut); -// } - -// Gateway functions (api) -// GoResult cCanonicalAddress_cgo(api_t *ptr, Buffer human, Buffer *canon, Buffer *errOut, uint64_t *used_gas) { -// return cCanonicalAddress(ptr, human, canon, errOut, used_gas); -// } -// GoResult cHumanAddress_cgo(api_t *ptr, Buffer canon, Buffer *human, Buffer *errOut, uint64_t *used_gas) { -// return cHumanAddress(ptr, canon, human, errOut, used_gas); -// } - -// // Gateway functions (querier) -// GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t gas_limit, uint64_t *used_gas, Buffer request, uint32_t query_depth, Buffer *result, Buffer *errOut) { -// return cQueryExternal(ptr, gas_limit, used_gas, request, query_depth, result, errOut); -// } -*/ -import "C" - -// We need these gateway functions to allow calling back to a go function from the c code. -// At least I didn't discover a cleaner way. -// Also, this needs to be in a different file than `callbacks.go`, as we cannot create functions -// in the same file that has //export directives. Only import header types diff --git a/go-cosmwasm/api/callbacks_cgo_mock.go b/go-cosmwasm/api/callbacks_cgo_mock.go deleted file mode 100644 index cafb234be..000000000 --- a/go-cosmwasm/api/callbacks_cgo_mock.go +++ /dev/null @@ -1,61 +0,0 @@ -//go:build secretcli -// +build secretcli - -package api - -// -///* -//#include "bindings.h" -//#include -// -//// imports (db) -//GoResult cSet(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val); -//GoResult cGet(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val); -//GoResult cDelete(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key); -//GoResult cScan(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out); -//// imports (iterator) -//GoResult cNext(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val); -//// imports (api) -//GoResult cHumanAddress(api_t *ptr, Buffer canon, Buffer *human); -//GoResult cCanonicalAddress(api_t *ptr, Buffer human, Buffer *canon); -//// imports (querier) -//GoResult cQueryExternal(querier_t *ptr, uint64_t *used_gas, Buffer request, Buffer *result); -// -//// Gateway functions (db) -//GoResult cGet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val) { -// return cGet(ptr, gas_meter, used_gas, key, val); -//} -//GoResult cSet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val) { -// return cSet(ptr, gas_meter, used_gas, key, val); -//} -//GoResult cDelete_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key) { -// return cDelete(ptr, gas_meter, used_gas, key); -//} -//GoResult cScan_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out) { -// return cScan(ptr, gas_meter, used_gas, start, end, order, out); -//} -// -//// Gateway functions (iterator) -//GoResult cNext_cgo(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val) { -// return cNext(ptr, gas_meter, used_gas, key, val); -//} -// -//// Gateway functions (api) -//GoResult cCanonicalAddress_cgo(api_t *ptr, Buffer human, Buffer *canon) { -// return cCanonicalAddress(ptr, human, canon); -//} -//GoResult cHumanAddress_cgo(api_t *ptr, Buffer canon, Buffer *human) { -// return cHumanAddress(ptr, canon, human); -//} -// -//// Gateway functions (querier) -//GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t *used_gas, Buffer request, Buffer *result) { -// return cQueryExternal(ptr, used_gas, request, result); -//} -//*/ -//import "C" -// -//// We need these gateway functions to allow calling back to a go function from the c code. -//// At least I didn't discover a cleaner way. -//// Also, this needs to be in a different file than `callbacks.go`, as we cannot create functions -//// in the same file that has //export directives. Only import header types diff --git a/go-cosmwasm/api/callbacks_mock.go b/go-cosmwasm/api/callbacks_mock.go deleted file mode 100644 index 7297ce0b2..000000000 --- a/go-cosmwasm/api/callbacks_mock.go +++ /dev/null @@ -1,411 +0,0 @@ -//go:build secretcli -// +build secretcli - -package api - -// /* -// #include "bindings.h" -// -// // typedefs for _cgo functions (db) -// typedef GoResult (*read_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val); -// typedef GoResult (*write_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val); -// typedef GoResult (*remove_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key); -// typedef GoResult (*scan_db_fn)(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out); -// // iterator -// typedef GoResult (*next_db_fn)(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val); -// // and api -// typedef GoResult (*humanize_address_fn)(api_t*, Buffer, Buffer*); -// typedef GoResult (*canonicalize_address_fn)(api_t*, Buffer, Buffer*); -// typedef GoResult (*query_external_fn)(querier_t *ptr, uint64_t *used_gas, Buffer request, Buffer *result); -// -// // forward declarations (db) -// GoResult cGet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer *val); -// GoResult cSet_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key, Buffer val); -// GoResult cDelete_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer key); -// GoResult cScan_cgo(db_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer start, Buffer end, int32_t order, GoIter *out); -// // iterator -// GoResult cNext_cgo(iterator_t *ptr, gas_meter_t *gas_meter, uint64_t *used_gas, Buffer *key, Buffer *val); -// // api -// GoResult cHumanAddress_cgo(api_t *ptr, Buffer canon, Buffer *human); -// GoResult cCanonicalAddress_cgo(api_t *ptr, Buffer human, Buffer *canon); -// // and querier -// GoResult cQueryExternal_cgo(querier_t *ptr, uint64_t *used_gas, Buffer request, Buffer *result); -// */ -// import "C" -// -// import ( -// -// "encoding/json" -// "fmt" -// "log" -// "reflect" -// "unsafe" -// -// dbm "github.com/tendermint/tm-db" -// -// "github.com/comdex-official/comdex/go-cosmwasm/types" -// -// ) -// -// type i32 = uint32 -// -// // Note: we have to include all exports in the same file (at least since they both import bindings.h), -// // or get odd cgo build errors about duplicate definitions -// -// func recoverPanic(ret *C.GoResult) { -// rec := recover() -// // we don't want to import cosmos-sdk -// // we also cannot use interfaces to detect these error types (as they have no methods) -// // so, let's just rely on the descriptive names -// // this is used to detect "out of gas panics" -// if rec != nil { -// name := reflect.TypeOf(rec).Name() -// switch name { -// // These two cases are for types thrown in panics from this module: -// // https://github.com/cosmos/cosmos-sdk/blob/4ffabb65a5c07dbb7010da397535d10927d298c1/store/types/gas.go -// // ErrorOutOfGas needs to be propagated through the rust code and back into go code, where it should -// // probably be thrown in a panic again. -// // TODO figure out how to pass the text in its `Descriptor` field through all the FFI -// // TODO handle these cases on the Rust side in the first place -// case "ErrorOutOfGas": -// *ret = C.GoResult_OutOfGas -// // Looks like this error is not treated specially upstream: -// // https://github.com/cosmos/cosmos-sdk/blob/4ffabb65a5c07dbb7010da397535d10927d298c1/baseapp/baseapp.go#L818-L853 -// // but this needs to be periodically verified, in case they do start checking for this type -// // case "ErrorGasOverflow": -// default: -// log.Printf("Panic in Go callback: %#v\n", rec) -// *ret = C.GoResult_Panic -// } -// } -// } -// -// // GasMultiplier is how many cosmwasm gas points = 1 sdk gas point -// // SDK reference costs can be found here: https://github.com/cosmos/cosmos-sdk/blob/02c6c9fafd58da88550ab4d7d494724a477c8a68/store/types/gas.go#L153-L164 -// // A write at ~3000 gas and ~200us = 10 gas per us (microsecond) cpu/io -// // Rough timing have 88k gas at 90us, which is equal to 1k sdk gas... (one read) -const GasMultiplier = 100 - -type Gas = uint64 - -// // GasMeter is a copy of an interface declaration from cosmos-sdk -// // https://github.com/cosmos/cosmos-sdk/blob/18890a225b46260a9adc587be6fa1cc2aff101cd/store/types/gas.go#L34 -type GasMeter interface { - GasConsumed() Gas -} - -// /****** DB ********/ -// -// // KVStore copies a subset of types from cosmos-sdk -// // We may wish to make this more generic sometime in the future, but not now -// // https://github.com/cosmos/cosmos-sdk/blob/bef3689245bab591d7d169abd6bea52db97a70c7/store/types/store.go#L170 -type KVStore interface { - Get(key []byte) []byte - Set(key, value []byte) - Delete(key []byte) -} - -// // Iterator over a domain of keys in ascending order. End is exclusive. -// // Start must be less than end, or the Iterator is invalid. -// // Iterator must be closed by caller. -// // To iterate over entire domain, use store.Iterator(nil, nil) -// Iterator(start, end []byte) dbm.Iterator -// -// // Iterator over a domain of keys in descending order. End is exclusive. -// // Start must be less than end, or the Iterator is invalid. -// // Iterator must be closed by caller. -// ReverseIterator(start, end []byte) dbm.Iterator -// } -// -// var db_vtable = C.DB_vtable{ -// read_db: (C.read_db_fn)(C.cGet_cgo), -// write_db: (C.write_db_fn)(C.cSet_cgo), -// remove_db: (C.remove_db_fn)(C.cDelete_cgo), -// scan_db: (C.scan_db_fn)(C.cScan_cgo), -// } -// -// // contract: original pointer/struct referenced must live longer than C.DB struct -// // since this is only used internally, we can verify the code that this is the case -// -// func buildDB(kv *KVStore, gm *GasMeter) C.DB { -// return C.DB{ -// gas_meter: (*C.gas_meter_t)(unsafe.Pointer(gm)), -// state: (*C.db_t)(unsafe.Pointer(kv)), -// vtable: db_vtable, -// } -// } -// -// var iterator_vtable = C.Iterator_vtable{ -// next_db: (C.next_db_fn)(C.cNext_cgo), -// } -// -// // contract: original pointer/struct referenced must live longer than C.DB struct -// // since this is only used internally, we can verify the code that this is the case -// -// func buildIterator(it dbm.Iterator, gasMeter *C.gas_meter_t) C.GoIter { -// return C.GoIter{ -// gas_meter: gasMeter, -// state: (*C.iterator_t)(unsafe.Pointer(&it)), -// vtable: iterator_vtable, -// } -// } -// -// //export cGet -// -// func cGet(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer, val *C.Buffer) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if ptr == nil || gasMeter == nil || usedGas == nil || val == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } -// -// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) -// kv := *(*KVStore)(unsafe.Pointer(ptr)) -// k := receiveSlice(key) -// -// gasBefore := gm.GasConsumed() -// v := kv.Get(k) -// gasAfter := gm.GasConsumed() -// *usedGas = (C.uint64_t)((gasAfter - gasBefore) * GasMultiplier) -// -// // v will equal nil when the key is missing -// // https://github.com/cosmos/cosmos-sdk/blob/1083fa948e347135861f88e07ec76b0314296832/store/types/store.go#L174 -// if v != nil { -// *val = allocateRust(v) -// } -// // else: the Buffer on the rust side is initialised as a "null" buffer, -// // so if we don't write a non-null address to it, it will understand that -// // the key it requested does not exist in the kv store -// -// return C.GoResult_Ok -// } -// -// //export cSet -// -// func cSet(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer, val C.Buffer) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if ptr == nil || gasMeter == nil || usedGas == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } -// -// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) -// kv := *(*KVStore)(unsafe.Pointer(ptr)) -// k := receiveSlice(key) -// v := receiveSlice(val) -// -// gasBefore := gm.GasConsumed() -// kv.Set(k, v) -// gasAfter := gm.GasConsumed() -// *usedGas = (C.uint64_t)((gasAfter - gasBefore) * GasMultiplier) -// -// return C.GoResult_Ok -// } -// -// //export cDelete -// -// func cDelete(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key C.Buffer) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if ptr == nil || gasMeter == nil || usedGas == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } -// -// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) -// kv := *(*KVStore)(unsafe.Pointer(ptr)) -// k := receiveSlice(key) -// -// gasBefore := gm.GasConsumed() -// kv.Delete(k) -// gasAfter := gm.GasConsumed() -// *usedGas = (C.uint64_t)((gasAfter - gasBefore) * GasMultiplier) -// -// return C.GoResult_Ok -// } -// -// //export cScan -// -// func cScan(ptr *C.db_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, start C.Buffer, end C.Buffer, order i32, out *C.GoIter) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if ptr == nil || gasMeter == nil || usedGas == nil || out == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } -// -// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) -// kv := *(*KVStore)(unsafe.Pointer(ptr)) -// // handle null as well as data -// var s, e []byte -// if start.ptr != nil { -// s = receiveSlice(start) -// } -// if end.ptr != nil { -// e = receiveSlice(end) -// } -// -// var iter dbm.Iterator -// gasBefore := gm.GasConsumed() -// switch order { -// case 1: // Ascending -// iter = kv.Iterator(s, e) -// case 2: // Descending -// iter = kv.ReverseIterator(s, e) -// default: -// return C.GoResult_BadArgument -// } -// gasAfter := gm.GasConsumed() -// *usedGas = (C.uint64_t)((gasAfter - gasBefore) * GasMultiplier) -// -// // Let's hope this works! -// *out = buildIterator(iter, gasMeter) -// return C.GoResult_Ok -// } -// -// //export cNext -// -// func cNext(ptr *C.iterator_t, gasMeter *C.gas_meter_t, usedGas *C.uint64_t, key *C.Buffer, val *C.Buffer) (ret C.GoResult) { -// // typical usage of iterator -// // for ; itr.Valid(); itr.Next() { -// // k, v := itr.Key(); itr.Value() -// // ... -// // } -// -// defer recoverPanic(&ret) -// if ptr == nil || gasMeter == nil || usedGas == nil || key == nil || val == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } -// -// gm := *(*GasMeter)(unsafe.Pointer(gasMeter)) -// iter := *(*dbm.Iterator)(unsafe.Pointer(ptr)) -// if !iter.Valid() { -// // end of iterator, return as no-op, nil key is considered end -// return C.GoResult_Ok -// } -// -// gasBefore := gm.GasConsumed() -// // call Next at the end, upon creation we have first data loaded -// k := iter.Key() -// v := iter.Value() -// // check iter.Error() ???? -// iter.Next() -// gasAfter := gm.GasConsumed() -// *usedGas = (C.uint64_t)((gasAfter - gasBefore) * GasMultiplier) -// -// if k != nil { -// *key = allocateRust(k) -// *val = allocateRust(v) -// } -// return C.GoResult_Ok -// } -// -// /***** GoAPI *******/ -type ( - HumanAddress func([]byte) (string, uint64, error) - CanonicalAddress func(string) ([]byte, uint64, error) -) - -type GoAPI struct { - HumanAddress HumanAddress - CanonicalAddress CanonicalAddress -} - -// -//var api_vtable = C.GoApi_vtable{ -// humanize_address: (C.humanize_address_fn)(C.cHumanAddress_cgo), -// canonicalize_address: (C.canonicalize_address_fn)(C.cCanonicalAddress_cgo), -//} -// -//// contract: original pointer/struct referenced must live longer than C.GoApi struct -//// since this is only used internally, we can verify the code that this is the case -//func buildAPI(api *GoAPI) C.GoApi { -// return C.GoApi{ -// state: (*C.api_t)(unsafe.Pointer(api)), -// vtable: api_vtable, -// } -//} -// -////export cHumanAddress -//func cHumanAddress(ptr *C.api_t, canon C.Buffer, human *C.Buffer) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if human == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } -// -// api := (*GoAPI)(unsafe.Pointer(ptr)) -// c := receiveSlice(canon) -// h, err := api.HumanAddress(c) -// if err != nil { -// return C.GoResult_Other -// } -// if len(h) == 0 { -// panic(fmt.Sprintf("`api.HumanAddress()` returned an empty string for %q", c)) -// } -// *human = allocateRust([]byte(h)) -// return C.GoResult_Ok -//} -// -////export cCanonicalAddress -//func cCanonicalAddress(ptr *C.api_t, human C.Buffer, canon *C.Buffer) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if canon == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } -// -// api := (*GoAPI)(unsafe.Pointer(ptr)) -// h := string(receiveSlice(human)) -// c, err := api.CanonicalAddress(h) -// if err != nil { -// return C.GoResult_Other -// } -// if len(c) == 0 { -// panic(fmt.Sprintf("`api.CanonicalAddress()` returned an empty string for %q", h)) -// } -// *canon = allocateRust(c) -// -// // If we do not set canon to a meaningful value, then the other side will interpret that as an empty result. -// return C.GoResult_Ok -//} -// -///****** Go Querier ********/ -// -//var querier_vtable = C.Querier_vtable{ -// query_external: (C.query_external_fn)(C.cQueryExternal_cgo), -//} -// -//// contract: original pointer/struct referenced must live longer than C.GoQuerier struct -//// since this is only used internally, we can verify the code that this is the case -//func buildQuerier(q *Querier) C.GoQuerier { -// return C.GoQuerier{ -// state: (*C.querier_t)(unsafe.Pointer(q)), -// vtable: querier_vtable, -// } -//} -// -////export cQueryExternal -//func cQueryExternal(ptr *C.querier_t, usedGas *C.uint64_t, request C.Buffer, result *C.Buffer) (ret C.GoResult) { -// defer recoverPanic(&ret) -// if ptr == nil || usedGas == nil || result == nil { -// // we received an invalid pointer -// return C.GoResult_BadArgument -// } -// -// // query the data -// querier := *(*Querier)(unsafe.Pointer(ptr)) -// req := receiveSlice(request) -// -// gasBefore := querier.GasConsumed() -// res := types.RustQuery(querier, req) -// gasAfter := querier.GasConsumed() -// *usedGas = (C.uint64_t)((gasAfter - gasBefore) * GasMultiplier) -// -// // serialize the response -// bz, err := json.Marshal(res) -// if err != nil { -// return C.GoResult_Other -// } -// *result = allocateRust(bz) -// return C.GoResult_Ok -//} diff --git a/go-cosmwasm/api/iterator.go b/go-cosmwasm/api/iterator.go deleted file mode 100644 index c82ae3607..000000000 --- a/go-cosmwasm/api/iterator.go +++ /dev/null @@ -1,73 +0,0 @@ -package api - -import ( - "sync" - - dbm "github.com/tendermint/tm-db" -) - -// frame stores all Iterators for one contract -type frame []dbm.Iterator - -// iteratorStack contains one frame for each contract, indexed by a counter -// 10 is a rather arbitrary guess on how many frames might be needed simultaneously -var ( - iteratorStack = make(map[uint64]frame, 10) - iteratorStackMutex sync.Mutex -) - -// this is a global counter when we create DBs -var ( - dbCounter uint64 - dbCounterMutex sync.Mutex -) - -// startContract is called at the beginning of a contract runtime to create a new frame on the iteratorStack -// updates dbCounter for an index -func startContract() uint64 { - dbCounterMutex.Lock() - defer dbCounterMutex.Unlock() - dbCounter++ - return dbCounter -} - -func popFrame(counter uint64) frame { - iteratorStackMutex.Lock() - defer iteratorStackMutex.Unlock() - // get the item from the stack - - remove := iteratorStack[counter] - delete(iteratorStack, counter) - return remove -} - -// endContract is called at the end of a contract runtime to remove one item from the IteratorStack -func endContract(counter uint64) { - // we pull popFrame in another function so we don't hold the mutex while cleaning up the popped frame - remove := popFrame(counter) - // free all iterators in the frame when we release it - for _, iter := range remove { - iter.Close() - } -} - -// storeIterator will add this to the end of the latest stack and return a reference to it. -// We start counting with 1, so the 0 value is flagged as an error. This means we must -// remember to do idx-1 when retrieving -func storeIterator(dbCounter uint64, it dbm.Iterator) uint64 { - iteratorStackMutex.Lock() - defer iteratorStackMutex.Unlock() - - frame := append(iteratorStack[dbCounter], it) //nolint:gocritic - iteratorStack[dbCounter] = frame - return uint64(len(frame)) -} - -// retrieveIterator will recover an iterator based on index. This ensures it will not be garbage collected. -// We start counting with 1, in storeIterator so the 0 value is flagged as an error. This means we must -// remember to do idx-1 when retrieving -func retrieveIterator(dbCounter uint64, index uint64) dbm.Iterator { - iteratorStackMutex.Lock() - defer iteratorStackMutex.Unlock() - return iteratorStack[dbCounter][index-1] -} diff --git a/go-cosmwasm/api/lib.go b/go-cosmwasm/api/lib.go deleted file mode 100644 index 8f9922e04..000000000 --- a/go-cosmwasm/api/lib.go +++ /dev/null @@ -1,472 +0,0 @@ -//go:build !secretcli -// +build !secretcli - -package api - -// #include -// #include "bindings.h" -import "C" - -import ( - "fmt" - "runtime" - "syscall" - - v1types "github.com/comdex-official/comdex/go-cosmwasm/types/v1" - - "github.com/comdex-official/comdex/go-cosmwasm/types" -) - -// nice aliases to the rust names -type i32 = C.int32_t - -type ( - i64 = C.int64_t - u64 = C.uint64_t - u32 = C.uint32_t - u8 = C.uint8_t - u8_ptr = *C.uint8_t - usize = C.uintptr_t - cint = C.int - cbool = C.bool -) - -type Cache struct { - ptr *C.cache_t -} - -func HealthCheck() ([]byte, error) { - errmsg := C.Buffer{} - - res, err := C.get_health_check(&errmsg) - if err != nil { - return nil, errorWithMessage(err, errmsg) - } - return receiveVector(res), nil -} - -func SubmitBlockSignatures(header []byte, commit []byte, txs []byte, encRandom []byte /* valSet []byte, nextValSet []byte */) ([]byte, error) { - errmsg := C.Buffer{} - spidSlice := sendSlice(header) - defer freeAfterSend(spidSlice) - apiKeySlice := sendSlice(commit) - defer freeAfterSend(apiKeySlice) - encRandomSlice := sendSlice(encRandom) - defer freeAfterSend(encRandomSlice) - txsSlice := sendSlice(txs) - defer freeAfterSend(txsSlice) - - res, err := C.submit_block_signatures(spidSlice, apiKeySlice, txsSlice, encRandomSlice /* valSetSlice, nextValSetSlice,*/, &errmsg) - if err != nil { - return nil, errorWithMessage(err, errmsg) - } - return receiveVector(res), nil -} - -func InitBootstrap(spid []byte, apiKey []byte) ([]byte, error) { - errmsg := C.Buffer{} - spidSlice := sendSlice(spid) - defer freeAfterSend(spidSlice) - apiKeySlice := sendSlice(apiKey) - defer freeAfterSend(apiKeySlice) - - res, err := C.init_bootstrap(spidSlice, apiKeySlice, &errmsg) - if err != nil { - return nil, errorWithMessage(err, errmsg) - } - return receiveVector(res), nil -} - -func LoadSeedToEnclave(masterKey []byte, seed []byte, apiKey []byte) (bool, error) { - pkSlice := sendSlice(masterKey) - defer freeAfterSend(pkSlice) - seedSlice := sendSlice(seed) - defer freeAfterSend(seedSlice) - apiKeySlice := sendSlice(apiKey) - defer freeAfterSend(apiKeySlice) - errmsg := C.Buffer{} - - _, err := C.init_node(pkSlice, seedSlice, apiKeySlice, &errmsg) - if err != nil { - return false, errorWithMessage(err, errmsg) - } - return true, nil -} - -type Querier = types.Querier - -func InitCache(dataDir string, supportedFeatures string, cacheSize uint64) (Cache, error) { - dir := sendSlice([]byte(dataDir)) - defer freeAfterSend(dir) - features := sendSlice([]byte(supportedFeatures)) - defer freeAfterSend(features) - errmsg := C.Buffer{} - - ptr, err := C.init_cache(dir, features, usize(cacheSize), &errmsg) - if err != nil { - return Cache{}, errorWithMessage(err, errmsg) - } - return Cache{ptr: ptr}, nil -} - -func ReleaseCache(cache Cache) { - C.release_cache(cache.ptr) -} - -func InitEnclaveRuntime(moduleCacheSize uint16) error { - errmsg := C.Buffer{} - - config := C.EnclaveRuntimeConfig{ - module_cache_size: u32(moduleCacheSize), - } - _, err := C.configure_enclave_runtime(config, &errmsg) - if err != nil { - err = errorWithMessage(err, errmsg) - return err - } - return nil -} - -func Create(cache Cache, wasm []byte) ([]byte, error) { - code := sendSlice(wasm) - defer freeAfterSend(code) - errmsg := C.Buffer{} - id, err := C.create(cache.ptr, code, &errmsg) - if err != nil { - return nil, errorWithMessage(err, errmsg) - } - return receiveVector(id), nil -} - -func GetCode(cache Cache, code_id []byte) ([]byte, error) { - id := sendSlice(code_id) - defer freeAfterSend(id) - errmsg := C.Buffer{} - code, err := C.get_code(cache.ptr, id, &errmsg) - if err != nil { - return nil, errorWithMessage(err, errmsg) - } - return receiveVector(code), nil -} - -// func Migrate( -// cache Cache, -// code_id []byte, -// params []byte, -// msg []byte, -// gasMeter *GasMeter, -// store KVStore, -// api *GoAPI, -// querier *Querier, -// gasLimit uint64, -// sigInfo []byte, -// admin []byte, -// adminProof []byte, -// ) ([]byte, uint64, error) { -// id := sendSlice(code_id) -// defer freeAfterSend(id) -// p := sendSlice(params) -// defer freeAfterSend(p) -// m := sendSlice(msg) -// defer freeAfterSend(m) - -// // set up a new stack frame to handle iterators -// counter := startContract() -// defer endContract(counter) - -// // dbState := buildDBState(store, counter) -// // db := buildDB(&dbState, gasMeter) - -// s := sendSlice(sigInfo) -// defer freeAfterSend(s) -// // a := buildAPI(api) -// // q := buildQuerier(querier) -// var gasUsed u64 -// errmsg := C.Buffer{} - -// adminBuffer := sendSlice(admin) -// defer freeAfterSend(adminBuffer) - -// adminProofBuffer := sendSlice(adminProof) -// defer freeAfterSend(adminProofBuffer) - -// //// This is done in order to ensure that goroutines don't -// //// swap threads between recursive calls to the enclave. -// //runtime.LockOSThread() -// //defer runtime.UnlockOSThread() - -// res, err := C.migrate(cache.ptr, id, p, m, u64(gasLimit), &gasUsed, &errmsg, s, adminBuffer, adminProofBuffer) -// if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { -// // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. -// return nil, uint64(gasUsed), errorWithMessage(err, errmsg) -// } -// return receiveVector(res), uint64(gasUsed), nil -// } - -// func UpdateAdmin( -// cache Cache, -// code_id []byte, -// params []byte, -// gasMeter *GasMeter, -// store KVStore, -// api *GoAPI, -// querier *Querier, -// gasLimit uint64, -// sigInfo []byte, -// currentAdmin []byte, -// currentAdminProof []byte, -// newAdmin []byte, -// ) ([]byte, error) { -// id := sendSlice(code_id) -// defer freeAfterSend(id) -// p := sendSlice(params) -// defer freeAfterSend(p) - -// // set up a new stack frame to handle iterators -// counter := startContract() -// defer endContract(counter) - -// // dbState := buildDBState(store, counter) -// // db := buildDB(&dbState, gasMeter) - -// s := sendSlice(sigInfo) -// defer freeAfterSend(s) -// // a := buildAPI(api) -// // q := buildQuerier(querier) -// errmsg := C.Buffer{} - -// currentAdminBuffer := sendSlice(currentAdmin) -// defer freeAfterSend(currentAdminBuffer) - -// currentAdminProofBuffer := sendSlice(currentAdminProof) -// defer freeAfterSend(currentAdminProofBuffer) - -// newAdminBuffer := sendSlice(newAdmin) -// defer freeAfterSend(newAdminBuffer) - -// //// This is done in order to ensure that goroutines don't -// //// swap threads between recursive calls to the enclave. -// //runtime.LockOSThread() -// //defer runtime.UnlockOSThread() - -// res, err := C.update_admin(cache.ptr, id, p, a, q, u64(gasLimit), &errmsg, s, currentAdminBuffer, currentAdminProofBuffer, newAdminBuffer) -// if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { -// return nil, errorWithMessage(err, errmsg) -// } -// return receiveVector(res), nil -// } - -// func Instantiate( -// cache Cache, -// code_id []byte, -// params []byte, -// msg []byte, -// gasMeter *GasMeter, -// store KVStore, -// api *GoAPI, -// querier *Querier, -// gasLimit uint64, -// sigInfo []byte, -// admin []byte, -// ) ([]byte, uint64, error) { -// id := sendSlice(code_id) -// defer freeAfterSend(id) -// p := sendSlice(params) -// defer freeAfterSend(p) -// m := sendSlice(msg) -// defer freeAfterSend(m) - -// // set up a new stack frame to handle iterators -// counter := startContract() -// defer endContract(counter) - -// // dbState := buildDBState(store, counter) -// // db := buildDB(&dbState, gasMeter) - -// s := sendSlice(sigInfo) -// defer freeAfterSend(s) -// a := buildAPI(api) -// q := buildQuerier(querier) -// var gasUsed u64 -// errmsg := C.Buffer{} - -// adminBuffer := sendSlice(admin) -// defer freeAfterSend(adminBuffer) - -// //// This is done in order to ensure that goroutines don't -// //// swap threads between recursive calls to the enclave. -// //runtime.LockOSThread() -// //defer runtime.UnlockOSThread() - -// res, err := C.instantiate(cache.ptr, id, p, m, a, q, u64(gasLimit), &gasUsed, &errmsg, s, adminBuffer) -// if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { -// // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. -// return nil, uint64(gasUsed), errorWithMessage(err, errmsg) -// } -// return receiveVector(res), uint64(gasUsed), nil -// } - -// func Handle( -// cache Cache, -// code_id []byte, -// params []byte, -// msg []byte, -// gasMeter *GasMeter, -// store KVStore, -// api *GoAPI, -// querier *Querier, -// gasLimit uint64, -// sigInfo []byte, -// handleType types.HandleType, -// ) ([]byte, uint64, error) { -// id := sendSlice(code_id) -// defer freeAfterSend(id) -// p := sendSlice(params) -// defer freeAfterSend(p) -// m := sendSlice(msg) -// defer freeAfterSend(m) - -// // set up a new stack frame to handle iterators -// counter := startContract() -// defer endContract(counter) - -// // dbState := buildDBState(store, counter) -// // db := buildDB(&dbState, gasMeter) -// s := sendSlice(sigInfo) -// defer freeAfterSend(s) -// a := buildAPI(api) -// q := buildQuerier(querier) -// var gasUsed u64 -// errmsg := C.Buffer{} - -// //// This is done in order to ensure that goroutines don't -// //// swap threads between recursive calls to the enclave. -// //runtime.LockOSThread() -// //defer runtime.UnlockOSThread() - -// res, err := C.handle(cache.ptr, id, p, m, a, q, u64(gasLimit), &gasUsed, &errmsg, s, u8(handleType)) -// if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { -// // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. -// return nil, uint64(gasUsed), errorWithMessage(err, errmsg) -// } -// return receiveVector(res), uint64(gasUsed), nil -// } - -// func Query( -// cache Cache, -// code_id []byte, -// params []byte, -// msg []byte, -// gasMeter *GasMeter, -// store KVStore, -// api *GoAPI, -// querier *Querier, -// gasLimit uint64, -// ) ([]byte, uint64, error) { -// id := sendSlice(code_id) -// defer freeAfterSend(id) -// p := sendSlice(params) -// defer freeAfterSend(p) -// m := sendSlice(msg) -// defer freeAfterSend(m) - -// // set up a new stack frame to handle iterators -// counter := startContract() -// defer endContract(counter) - -// // dbState := buildDBState(store, counter) -// // db := buildDB(&dbState, gasMeter) -// a := buildAPI(api) -// q := buildQuerier(querier) -// var gasUsed u64 -// errmsg := C.Buffer{} - -// //// This is done in order to ensure that goroutines don't -// //// swap threads between recursive calls to the enclave. -// //runtime.LockOSThread() -// //defer runtime.UnlockOSThread() - -// res, err := C.query(cache.ptr, id, p, m, a, q, u64(gasLimit), &gasUsed, &errmsg) -// if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { -// // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. -// return nil, uint64(gasUsed), errorWithMessage(err, errmsg) -// } -// return receiveVector(res), uint64(gasUsed), nil -// } - -func AnalyzeCode( - cache Cache, - codeHash []byte, -) (*v1types.AnalysisReport, error) { - cs := sendSlice(codeHash) - defer runtime.KeepAlive(codeHash) - errMsg := C.Buffer{} - report, err := C.analyze_code(cache.ptr, cs, &errMsg) - if err != nil { - return nil, errorWithMessage(err, errMsg) - } - res := v1types.AnalysisReport{ - HasIBCEntryPoints: bool(report.has_ibc_entry_points), - RequiredFeatures: string(receiveVector(report.required_features)), - } - return &res, nil -} - -// KeyGen Send KeyGen request to enclave -func KeyGen() ([]byte, error) { - errmsg := C.Buffer{} - res, err := C.key_gen(&errmsg) - if err != nil { - return nil, errorWithMessage(err, errmsg) - } - return receiveVector(res), nil -} - -// CreateAttestationReport Send CreateAttestationReport request to enclave -func CreateAttestationReport(apiKey []byte, dryRun bool) (bool, error) { - errmsg := C.Buffer{} - apiKeySlice := sendSlice(apiKey) - defer freeAfterSend(apiKeySlice) - - _, err := C.create_attestation_report(apiKeySlice, &errmsg, cbool(dryRun)) - if err != nil { - return false, errorWithMessage(err, errmsg) - } - return true, nil -} - -func GetEncryptedSeed(cert []byte) ([]byte, error) { - errmsg := C.Buffer{} - certSlice := sendSlice(cert) - defer freeAfterSend(certSlice) - res, err := C.get_encrypted_seed(certSlice, &errmsg) - if err != nil { - return nil, errorWithMessage(err, errmsg) - } - return receiveVector(res), nil -} - -func GetEncryptedGenesisSeed(pk []byte) ([]byte, error) { - errmsg := C.Buffer{} - pkSlice := sendSlice(pk) - defer freeAfterSend(pkSlice) - res, err := C.get_encrypted_genesis_seed(pkSlice, &errmsg) - if err != nil { - return nil, errorWithMessage(err, errmsg) - } - return receiveVector(res), nil -} - -/**** To error module ***/ - -func errorWithMessage(err error, b C.Buffer) error { - // this checks for out of gas as a special case - if errno, ok := err.(syscall.Errno); ok && int(errno) == 2 { - return types.OutOfGasError{} - } - msg := receiveVector(b) - if msg == nil { - return err - } - return fmt.Errorf("%s", string(msg)) -} diff --git a/go-cosmwasm/api/lib_mock.go b/go-cosmwasm/api/lib_mock.go deleted file mode 100644 index 4c94dcc47..000000000 --- a/go-cosmwasm/api/lib_mock.go +++ /dev/null @@ -1,293 +0,0 @@ -//go:build secretcli -// +build secretcli - -package api - -// -//// #include -//// #include "bindings.h" -//import "C" - -// import "C" -import ( - //"fmt" - "github.com/comdex-official/comdex/go-cosmwasm/types" - v1types "github.com/comdex-official/comdex/go-cosmwasm/types/v1" -) - -// nice aliases to the rust names -//type i32 = C.int32_t -//type i64 = C.int64_t -//type u64 = C.uint64_t -//type u32 = C.uint32_t -//type u8 = C.uint8_t -//type u8_ptr = *C.uint8_t -//type usize = C.uintptr_t -//type cint = C.int -// -//type Cache struct { -// ptr *C.cache_t -//} - -type Cache struct{} - -func HealthCheck() ([]byte, error) { - return nil, nil -} - -func InitBootstrap(spid []byte, apiKey []byte) ([]byte, error) { - return nil, nil -} - -func SubmitBlockSignatures(header []byte, commit []byte, txs []byte, random []byte /* valSet []byte, nextValSet []byte*/) ([]byte, error) { - return nil, nil -} - -func LoadSeedToEnclave(masterKey []byte, seed []byte, apiKey []byte) (bool, error) { - return true, nil -} - -type Querier = types.Querier - -func InitCache(dataDir string, supportedFeatures string, cacheSize uint64) (Cache, error) { - //dir := sendSlice([]byte(dataDir)) - //defer freeAfterSend(dir) - //features := sendSlice([]byte(supportedFeatures)) - //defer freeAfterSend(features) - //errmsg := C.Buffer{} - // - //ptr, err := C.init_cache(dir, features, usize(cacheSize), &errmsg) - //if err != nil { - // return Cache{}, errorWithMessage(err, errmsg) - //} - return Cache{}, nil -} - -func ReleaseCache(cache Cache) { - // C.release_cache(cache.ptr) -} - -func InitEnclaveRuntime(ModuleCacheSize uint16) error { - return nil -} - -func Create(cache Cache, wasm []byte) ([]byte, error) { - //code := sendSlice(wasm) - //defer freeAfterSend(code) - //errmsg := C.Buffer{} - //id, err := C.create(cache.ptr, code, &errmsg) - //if err != nil { - // return nil, errorWithMessage(err, errmsg) - //} - //return receiveVector(id), nil - return nil, nil -} - -func GetCode(cache Cache, code_id []byte) ([]byte, error) { - //id := sendSlice(code_id) - //defer freeAfterSend(id) - //errmsg := C.Buffer{} - //code, err := C.get_code(cache.ptr, id, &errmsg) - //if err != nil { - // return nil, errorWithMessage(err, errmsg) - //} - //return receiveVector(code), nil - return nil, nil -} - -func Migrate( - cache Cache, - code_id []byte, - params []byte, - msg []byte, - gasMeter *GasMeter, - store KVStore, - api *GoAPI, - querier *Querier, - gasLimit uint64, - sigInfo []byte, - admin []byte, - adminProof []byte, -) ([]byte, uint64, error) { - return nil, 0, nil -} - -func UpdateAdmin( - cache Cache, - code_id []byte, - params []byte, - gasMeter *GasMeter, - store KVStore, - api *GoAPI, - querier *Querier, - gasLimit uint64, - sigInfo []byte, - currentAdmin []byte, - currentAdminProof []byte, - newAdmin []byte, -) ([]byte, error) { - return nil, nil -} - -func Instantiate( - cache Cache, - code_id []byte, - params []byte, - msg []byte, - gasMeter *GasMeter, - store KVStore, - api *GoAPI, - querier *Querier, - gasLimit uint64, - sigInfo []byte, - admin []byte, -) ([]byte, uint64, error) { - //id := sendSlice(code_id) - //defer freeAfterSend(id) - //p := sendSlice(params) - //defer freeAfterSend(p) - //m := sendSlice(msg) - //defer freeAfterSend(m) - //db := buildDB(store, gasMeter) - //a := buildAPI(api) - //q := buildQuerier(querier) - //var gasUsed u64 - //errmsg := C.Buffer{} - //res, err := C.instantiate(cache.ptr, id, p, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg) - //if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { - // // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. - // return nil, uint64(gasUsed), errorWithMessage(err, errmsg) - //} - //return receiveVector(res), uint64(gasUsed), nil - return nil, 0, nil -} - -func Handle( - cache Cache, - code_id []byte, - params []byte, - msg []byte, - gasMeter *GasMeter, - store KVStore, - api *GoAPI, - querier *Querier, - gasLimit uint64, - sigInfo []byte, - handleType types.HandleType, -) ([]byte, uint64, error) { - //id := sendSlice(code_id) - //defer freeAfterSend(id) - //p := sendSlice(params) - //defer freeAfterSend(p) - //m := sendSlice(msg) - //defer freeAfterSend(m) - //db := buildDB(store, gasMeter) - //a := buildAPI(api) - //q := buildQuerier(querier) - //var gasUsed u64 - //errmsg := C.Buffer{} - //res, err := C.handle(cache.ptr, id, p, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg) - //if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { - // // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. - // return nil, uint64(gasUsed), errorWithMessage(err, errmsg) - //} - //return receiveVector(res), uint64(gasUsed), nil - return nil, 0, nil -} - -func Query( - cache Cache, - code_id []byte, - params []byte, - msg []byte, - gasMeter *GasMeter, - store KVStore, - api *GoAPI, - querier *Querier, - gasLimit uint64, -) ([]byte, uint64, error) { - //id := sendSlice(code_id) - //defer freeAfterSend(id) - //m := sendSlice(msg) - //defer freeAfterSend(m) - //db := buildDB(store, gasMeter) - //a := buildAPI(api) - //q := buildQuerier(querier) - //var gasUsed u64 - //errmsg := C.Buffer{} - //res, err := C.query(cache.ptr, id, m, db, a, q, u64(gasLimit), &gasUsed, &errmsg) - //if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success { - // // Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0. - // return nil, uint64(gasUsed), errorWithMessage(err, errmsg) - //} - //return receiveVector(res), uint64(gasUsed), nil - return nil, 0, nil -} - -func AnalyzeCode( - cache Cache, - codeHash []byte, -) (*v1types.AnalysisReport, error) { - //cs := sendSlice(codeHash) - //defer runtime.KeepAlive(codeHash) - //errMsg := C.Buffer{} - //report, err := C.analyze_code(cache.ptr, cs, &errMsg) - // - //if err != nil { - // return nil, errorWithMessage(err, errMsg) - //} - //res := v1types.AnalysisReport{ - // HasIBCEntryPoints: bool(report.has_ibc_entry_points), - // RequiredFeatures: string(receiveVector(report.required_features)), - //} - //return &res, nil - return nil, nil -} - -// KeyGen Send KeyGen request to enclave -func KeyGen() ([]byte, error) { - //errmsg := C.Buffer{} - //res, err := C.key_gen(&errmsg) - //if err != nil { - // return nil, errorWithMessage(err, errmsg) - //} - //return receiveVector(res), nil - return nil, nil -} - -// KeyGen Seng KeyGen request to enclave -func CreateAttestationReport(apiKey []byte) (bool, error) { - //errmsg := C.Buffer{} - //_, err := C.create_attestation_report(&errmsg) - //if err != nil { - // return false, errorWithMessage(err, errmsg) - //} - return true, nil -} - -func GetEncryptedSeed(cert []byte) ([]byte, error) { - //errmsg := C.Buffer{} - //certSlice := sendSlice(cert) - //defer freeAfterSend(certSlice) - //res, err := C.get_encrypted_seed(certSlice, &errmsg) - //if err != nil { - // return nil, errorWithMessage(err, errmsg) - //} - //return receiveVector(res), nil - return nil, nil -} - -func GetEncryptedGenesisSeed(cert []byte) ([]byte, error) { - return nil, nil -} - -/**** To error module ***/ - -//func errorWithMessage(err error, b C.Buffer) error { -// //msg := receiveVector(b) -// //if msg == nil { -// // return err -// //} -// //return fmt.Errorf("%s", string(msg)) -// return fmt.Errorf("heelo") -//} diff --git a/go-cosmwasm/api/link_muslc.go b/go-cosmwasm/api/link_muslc.go deleted file mode 100644 index b829c62d1..000000000 --- a/go-cosmwasm/api/link_muslc.go +++ /dev/null @@ -1,7 +0,0 @@ -//go:build linux && muslc -// +build linux,muslc - -package api - -// #cgo LDFLAGS: -Wl,-rpath,${SRCDIR} -L${SRCDIR} -lgo_cosmwasm_muslc -import "C" diff --git a/go-cosmwasm/api/link_std.go b/go-cosmwasm/api/link_std.go deleted file mode 100644 index 04cabacfa..000000000 --- a/go-cosmwasm/api/link_std.go +++ /dev/null @@ -1,7 +0,0 @@ -//go:build !secretcli && linux && !muslc && !darwin -// +build !secretcli,linux,!muslc,!darwin - -package api - -// #cgo LDFLAGS: -Wl,-rpath,${SRCDIR} -L${SRCDIR} -import "C" diff --git a/go-cosmwasm/api/memory.go b/go-cosmwasm/api/memory.go deleted file mode 100644 index bffd0d37b..000000000 --- a/go-cosmwasm/api/memory.go +++ /dev/null @@ -1,84 +0,0 @@ -//go:build !secretcli -// +build !secretcli - -package api - -/* -#include "bindings.h" -*/ -import "C" - -import "unsafe" - -func allocateRust(data []byte) C.Buffer { - var ret C.Buffer - if data == nil { //nolint:gocritic - // Just return a null buffer - ret = C.Buffer{ - ptr: u8_ptr(nil), - len: usize(0), - cap: usize(0), - } - // in Go, accessing the 0-th element of an empty array triggers a panic. That is why in the case - // of an empty `[]byte` we can't get the internal heap pointer to the underlying array as we do - // below with `&data[0]`. - // https://play.golang.org/p/xvDY3g9OqUk - // Additionally, the pointer field in a Rust vector is a NonNull pointer. This means that when - // the vector is empty and no heap allocation is made, it needs to put _some_ value there instead. - // At the time of writing, it uses the alignment of the generic type T, which in this case equals 1. - // But because that is an internal detail that we can't rely on in future versions, we still call out - // to Rust and ask it to build an empty vector for us. - // https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=01ced0731171c8226e2c28634a7e41d7 - } else if len(data) == 0 { - // This will create an empty vector - ret = C.allocate_rust(u8_ptr(nil), usize(0)) - } else { - // This will allocate a proper vector with content and return a description of it - ret = C.allocate_rust(u8_ptr(unsafe.Pointer(&data[0])), usize(len(data))) - } - return ret -} - -func sendSlice(s []byte) C.Buffer { - if s == nil { - return C.Buffer{ptr: u8_ptr(nil), len: usize(0), cap: usize(0)} - } - return C.Buffer{ - ptr: u8_ptr(C.CBytes(s)), - len: usize(len(s)), - cap: usize(len(s)), - } -} - -// Take an owned vector that was passed to us, copy it, and then free it on the Rust side. -// This should only be used for vectors that will never be observed again on the Rust side -func receiveVector(b C.Buffer) []byte { - if bufIsNil(b) { - return nil - } - res := C.GoBytes(unsafe.Pointer(b.ptr), cint(b.len)) - C.free_rust(b) - return res -} - -// Copy the contents of a vector that was allocated on the Rust side. -// Unlike receiveVector, we do not free it, because it will be manually -// freed on the Rust side after control returns to it. -// This should be used in places like callbacks from Rust to Go. -func receiveSlice(b C.Buffer) []byte { - if bufIsNil(b) { - return nil - } - res := C.GoBytes(unsafe.Pointer(b.ptr), cint(b.len)) - return res -} - -func freeAfterSend(b C.Buffer) { - if !bufIsNil(b) { - C.free(unsafe.Pointer(b.ptr)) - } -} - -func bufIsNil(b C.Buffer) bool { - return b.ptr == u8_ptr(nil) -} diff --git a/go-cosmwasm/api/testdata/contract.wasm b/go-cosmwasm/api/testdata/contract.wasm deleted file mode 100644 index b616aac4c3812738ad8e84ca7364d32160bbb99f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62845 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 diff --git a/go-cosmwasm/api/testdata/download_releases.sh b/go-cosmwasm/api/testdata/download_releases.sh deleted file mode 100755 index 1ae7bf471..000000000 --- a/go-cosmwasm/api/testdata/download_releases.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -set -o errexit -o nounset -o pipefail -command -v shellcheck > /dev/null && shellcheck "$0" - -if [ $# -ne 1 ]; then - echo "Usage: ./download_releases.sh RELEASE_TAG" - exit 1 -fi - -tag="$1" - -for contract in hackatom queue reflect ; do - url="https://github.com/CosmWasm/cosmwasm/releases/download/$tag/$contract.wasm" - echo "Downloading $url ..." - wget -O "$contract.wasm" "$url" -done diff --git a/go-cosmwasm/api/testdata/hackatom.wasm b/go-cosmwasm/api/testdata/hackatom.wasm deleted file mode 100644 index 132922c4a9ed177db2dab7123dafe2e7acdd6a47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183230 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 Sw6k;SX#!{tf6B?b?*9XUO4_Xe diff --git a/go-cosmwasm/api/testdata/queue.wasm b/go-cosmwasm/api/testdata/queue.wasm deleted file mode 100644 index 630477fa28104f970e131761ecda319f4af08f55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99932 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 C>wpOW diff --git a/go-cosmwasm/api/testdata/reflect.wasm b/go-cosmwasm/api/testdata/reflect.wasm deleted file mode 100644 index 69026fa1a397e5520247bb57243c9f59aea428d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169095 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 PQhWvP>U)Wmhm diff --git a/go-cosmwasm/types/env.go b/go-cosmwasm/types/env.go deleted file mode 100644 index 987229dd8..000000000 --- a/go-cosmwasm/types/env.go +++ /dev/null @@ -1,61 +0,0 @@ -package types - -//---------- Env --------- - -// Env defines the state of the blockchain environment this contract is -// running in. This must contain only trusted data - nothing from the Tx itself -// that has not been verfied (like Signer). -// -// Env are json encoded to a byte slice before passing to the wasm contract. -type Env struct { - Block BlockInfo `json:"block"` - Message MessageInfo `json:"message"` - Contract ContractInfo `json:"contract"` - Key ContractKey `json:"contract_key"` - QueryDepth uint32 `json:"query_depth"` - Transaction *TransactionInfo `json:"transaction,omitempty"` -} - -type ContractKey struct { - OgContractKey []byte `protobuf:"bytes,1,opt,name=og_contract_key,json=ogContractKey,proto3" json:"og_contract_key,omitempty"` - CurrentContractKey []byte `protobuf:"bytes,2,opt,name=current_contract_key,json=currentContractKey,proto3" json:"current_contract_key,omitempty"` - CurrentContractKeyProof []byte `protobuf:"bytes,3,opt,name=current_contract_key_proof,json=currentContractKeyProof,proto3" json:"current_contract_key_proof,omitempty"` -} - -type TransactionInfo struct { - // Position of this transaction in the block. - // The first transaction has index 0 - // - // Along with BlockInfo.Height, this allows you to get a unique - // transaction identifier for the chain for future queries - Index uint32 `json:"index"` - /// The hash of the current transaction bytes. - /// aka txhash or transaction_id - /// hash = sha256(tx_bytes) - Hash string `json:"hash"` -} - -type BaseEnv[T Env] struct { - First T -} - -type BlockInfo struct { - // block height this transaction is executed - Height uint64 `json:"height"` - // time in seconds since unix epoch - since cosmwasm 0.3 - Time uint64 `json:"time"` - ChainID string `json:"chain_id"` - Random []byte `json:"random"` -} - -type MessageInfo struct { - // binary encoding of sdk.AccAddress executing the contract - Sender HumanAddress `json:"sender"` - // amount of funds send to the contract along with this message - SentFunds Coins `json:"sent_funds"` -} - -type ContractInfo struct { - // binary encoding of sdk.AccAddress of the contract, to be used when sending messages - Address HumanAddress `json:"address"` -} diff --git a/go-cosmwasm/types/env_test.go b/go-cosmwasm/types/env_test.go deleted file mode 100644 index 650d4d13b..000000000 --- a/go-cosmwasm/types/env_test.go +++ /dev/null @@ -1,49 +0,0 @@ -package types - -import ( - "encoding/json" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestMessageInfoHandlesMultipleCoins(t *testing.T) { - info := MessageInfo{ - Sender: "foobar", - SentFunds: []Coin{ - {Denom: "peth", Amount: "12345"}, - {Denom: "uatom", Amount: "789876"}, - }, - } - bz, err := json.Marshal(info) - require.NoError(t, err) - - // we can unmarshal it properly into struct - var recover MessageInfo - err = json.Unmarshal(bz, &recover) - require.NoError(t, err) - assert.Equal(t, info, recover) -} - -func TestMessageInfoHandlesMissingCoins(t *testing.T) { - info := MessageInfo{ - Sender: "baz", - } - bz, err := json.Marshal(info) - require.NoError(t, err) - - // we can unmarshal it properly into struct - var recover MessageInfo - err = json.Unmarshal(bz, &recover) - require.NoError(t, err) - assert.Equal(t, info, recover) - - // make sure "sent_funds":[] is in JSON - var raw map[string]json.RawMessage - err = json.Unmarshal(bz, &raw) - require.NoError(t, err) - sent, ok := raw["sent_funds"] - require.True(t, ok) - assert.Equal(t, string(sent), "[]") -} diff --git a/go-cosmwasm/types/queries.go b/go-cosmwasm/types/queries.go deleted file mode 100644 index 29d2c4c56..000000000 --- a/go-cosmwasm/types/queries.go +++ /dev/null @@ -1,534 +0,0 @@ -package types - -import ( - "encoding/json" -) - -//-------- Queries -------- - -type QueryResponse struct { - Ok []byte `json:"Ok,omitempty"` - Err *StdError `json:"Err,omitempty"` -} - -type ContractQueryResponse struct { - Query *QueryResponse `json:"query,omitempty"` -} - -//-------- Querier ----------- - -type Querier interface { - Query(request QueryRequest, queryDepth uint32, gasLimit uint64) ([]byte, error) - GasConsumed() uint64 -} - -// this is a thin wrapper around the desired Go API to give us types closer to Rust FFI -func RustQuery(querier Querier, binRequest []byte, queryDepth uint32, gasLimit uint64) QuerierResult { - var request QueryRequest - err := json.Unmarshal(binRequest, &request) - if err != nil { - return ToQuerierResult(nil, UnsupportedRequest{err.Error()}) - } - bz, err := querier.Query(request, queryDepth, gasLimit) - return ToQuerierResult(bz, err) -} - -// This is a 2-level result -type QuerierResult struct { - Ok *QueryResponse `json:"Ok,omitempty"` - Err *SystemError `json:"Err,omitempty"` -} - -func ToQuerierResult(response []byte, err error) QuerierResult { - if err == nil { - return QuerierResult{ - Ok: &QueryResponse{ - Ok: response, - }, - } - } - syserr := ToSystemError(err) - if syserr != nil { - return QuerierResult{ - Err: syserr, - } - } - stderr := ToStdError(err) - return QuerierResult{ - Ok: &QueryResponse{ - Err: stderr, - }, - } -} - -// QueryRequest is an rust enum and only (exactly) one of the fields should be set -// Should we do a cleaner approach in Go? (type/data?) -type QueryRequest struct { - Bank *BankQuery `json:"bank,omitempty"` - Custom json.RawMessage `json:"custom,omitempty"` - Staking *StakingQuery `json:"staking,omitempty"` - Wasm *WasmQuery `json:"wasm,omitempty"` - Dist *DistQuery `json:"dist,omitempty"` - Mint *MintQuery `json:"mint,omitempty"` - Gov *GovQuery `json:"gov,omitempty"` - IBC *IBCQuery `json:"ibc,omitempty"` - Stargate *StargateQuery `json:"stargate,omitempty"` -} - -type BankQuery struct { - Balance *BalanceQuery `json:"balance,omitempty"` - AllBalances *AllBalancesQuery `json:"all_balances,omitempty"` -} - -type BalanceQuery struct { - Address string `json:"address"` - Denom string `json:"denom"` -} - -// BalanceResponse is the expected response to BalanceQuery -type BalanceResponse struct { - Amount Coin `json:"amount"` -} - -type AllBalancesQuery struct { - Address string `json:"address"` -} - -// AllBalancesResponse is the expected response to AllBalancesQuery -type AllBalancesResponse struct { - Amount Coins `json:"amount"` -} - -type StakingQuery struct { - Validators *ValidatorsQuery `json:"validators,omitempty"` - AllDelegations *AllDelegationsQuery `json:"all_delegations,omitempty"` - Delegation *DelegationQuery `json:"delegation,omitempty"` - UnBondingDelegations *UnbondingDeletionsQuery `json:"unbonding_delegations,omitempty"` - BondedDenom *struct{} `json:"bonded_denom,omitempty"` - AllValidators *AllValidatorsQuery `json:"all_validators,omitempty"` - Validator *ValidatorQuery `json:"validator,omitempty"` -} - -type AllValidatorsQuery struct{} - -// AllValidatorsResponse is the expected response to AllValidatorsQuery -type AllValidatorsResponse struct { - Validators Validators `json:"validators"` -} - -type ValidatorQuery struct { - /// Address is the validator's address (e.g. cosmosvaloper1...) - Address string `json:"address"` -} - -// ValidatorResponse is the expected response to ValidatorQuery -type ValidatorResponse struct { - Validator *Validator `json:"validator"` // serializes to `null` when unset which matches Rust's Option::None serialization -} - -type UnbondingDeletionsQuery struct { - Delegator string `json:"delegator"` -} - -type ValidatorsQuery struct{} - -// ValidatorsResponse is the expected response to ValidatorsQuery -type ValidatorsResponse struct { - Validators Validators `json:"validators"` -} - -// TODO: Validators must JSON encode empty array as [] -type Validators []Validator - -// MarshalJSON ensures that we get [] for empty arrays -func (v Validators) MarshalJSON() ([]byte, error) { - if len(v) == 0 { - return []byte("[]"), nil - } - var raw []Validator = v - return json.Marshal(raw) -} - -// UnmarshalJSON ensures that we get [] for empty arrays -func (v *Validators) UnmarshalJSON(data []byte) error { - // make sure we deserialize [] back to null - if string(data) == "[]" || string(data) == "null" { //nolint:goconst - return nil - } - var raw []Validator - if err := json.Unmarshal(data, &raw); err != nil { - return err - } - *v = raw - return nil -} - -type Validator struct { - Address string `json:"address"` - // decimal string, eg "0.02" - Commission string `json:"commission"` - // decimal string, eg "0.02" - MaxCommission string `json:"max_commission"` - // decimal string, eg "0.02" - MaxChangeRate string `json:"max_change_rate"` -} - -type AllDelegationsQuery struct { - Delegator string `json:"delegator"` -} - -type DelegationQuery struct { - Delegator string `json:"delegator"` - Validator string `json:"validator"` -} - -// AllDelegationsResponse is the expected response to AllDelegationsQuery -type AllDelegationsResponse struct { - Delegations Delegations `json:"delegations"` -} - -type Delegations []Delegation - -// MarshalJSON ensures that we get [] for empty arrays -func (d Delegations) MarshalJSON() ([]byte, error) { - if len(d) == 0 { - return []byte("[]"), nil - } - var raw []Delegation = d - return json.Marshal(raw) -} - -// UnmarshalJSON ensures that we get [] for empty arrays -func (d *Delegations) UnmarshalJSON(data []byte) error { - // make sure we deserialize [] back to null - if string(data) == "[]" || string(data) == "null" { - return nil - } - var raw []Delegation - if err := json.Unmarshal(data, &raw); err != nil { - return err - } - *d = raw - return nil -} - -type Delegation struct { - Delegator string `json:"delegator"` - Validator string `json:"validator"` - Amount Coin `json:"amount"` -} - -// DelegationResponse is the expected response to DelegationsQuery -type DelegationResponse struct { - Delegation *FullDelegation `json:"delegation,omitempty"` -} - -type FullDelegation struct { - Delegator string `json:"delegator"` - Validator string `json:"validator"` - Amount Coin `json:"amount"` - AccumulatedRewards Coins `json:"accumulated_rewards"` - CanRedelegate Coin `json:"can_redelegate"` -} - -type UnbondingDelegationsResponse struct { - Delegations Delegations `json:"delegations"` -} - -type BondedDenomResponse struct { - Denom string `json:"denom"` -} - -type WasmQuery struct { - Smart *SmartQuery `json:"smart,omitempty"` - Raw *RawQuery `json:"raw,omitempty"` - ContractInfo *ContractInfoQuery `json:"contract_info,omitempty"` -} - -// SmartQuery response is raw bytes ([]byte) -type SmartQuery struct { - // Bech32 encoded sdk.AccAddress of the contract - ContractAddr string `json:"contract_addr"` - Msg []byte `json:"msg"` -} - -// RawQuery response is raw bytes ([]byte) -type RawQuery struct { - // Bech32 encoded sdk.AccAddress of the contract - ContractAddr string `json:"contract_addr"` - Key []byte `json:"key"` -} - -type ContractInfoQuery struct { - // Bech32 encoded sdk.AccAddress of the contract - ContractAddr string `json:"contract_addr"` -} - -type DistQuery struct { - Rewards *RewardsQuery `json:"rewards,omitempty"` -} - -type GovQuery struct { - Proposals *ProposalsQuery `json:"proposals,omitempty"` -} - -// StargateQuery is encoded the same way as abci_query, with path and protobuf encoded request data. -// The format is defined in [ADR-21](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-021-protobuf-query-encoding.md). -// The response is protobuf encoded data directly without a JSON response wrapper. -// The caller is responsible for compiling the proper protobuf definitions for both requests and responses. -type StargateQuery struct { - // this is the fully qualified service path used for routing, - // eg. custom/cosmos_sdk.x.bank.v1.Query/QueryBalance - Path string `json:"path"` - // this is the expected protobuf message type (not any), binary encoded - Data []byte `json:"data"` -} - -// IBCQuery defines a query request from the contract into the chain. -// This is the counterpart of [IbcQuery](https://github.com/CosmWasm/cosmwasm/blob/v0.14.0-beta1/packages/std/src/ibc.rs#L61-L83). -type IBCQuery struct { - PortID *PortIDQuery `json:"port_id,omitempty"` - ListChannels *ListChannelsQuery `json:"list_channels,omitempty"` - Channel *ChannelQuery `json:"channel,omitempty"` -} - -type PortIDQuery struct{} - -type PortIDResponse struct { - PortID string `json:"port_id"` -} - -// ListChannelsQuery is an IBCQuery that lists all channels that are bound to a given port. -// If `PortID` is unset, this list all channels bound to the contract's port. -// Returns a `ListChannelsResponse`. -// This is the counterpart of [IbcQuery::ListChannels](https://github.com/CosmWasm/cosmwasm/blob/v0.14.0-beta1/packages/std/src/ibc.rs#L70-L73). -type ListChannelsQuery struct { - // optional argument - PortID string `json:"port_id,omitempty"` -} - -type ListChannelsResponse struct { - Channels IBCChannels `json:"channels"` -} - -type IBCEndpoint struct { - PortID string `json:"port_id"` - ChannelID string `json:"channel_id"` -} - -// TODO: test what the sdk Order.String() represents and how to parse back -// Proto files: https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/proto/ibc/core/channel/v1/channel.proto#L69-L80 -// Auto-gen code: https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/x/ibc/core/04-channel/types/channel.pb.go#L70-L101 -type IBCOrder = string - -// These are the only two valid values for IbcOrder -const ( - Unordered = "ORDER_UNORDERED" - Ordered = "ORDER_ORDERED" -) - -type IBCChannel struct { - Endpoint IBCEndpoint `json:"endpoint"` - CounterpartyEndpoint IBCEndpoint `json:"counterparty_endpoint"` - Order IBCOrder `json:"order"` - Version string `json:"version"` - ConnectionID string `json:"connection_id"` -} - -type IBCOpenInit struct { - Channel IBCChannel `json:"channel"` -} - -func (m *IBCOpenInit) ToMsg() IBCChannelOpenMsg { - return IBCChannelOpenMsg{ - OpenInit: m, - } -} - -type IBCOpenTry struct { - Channel IBCChannel `json:"channel"` - CounterpartyVersion string `json:"counterparty_version"` -} - -func (m *IBCOpenTry) ToMsg() IBCChannelOpenMsg { - return IBCChannelOpenMsg{ - OpenTry: m, - } -} - -type IBCChannelOpenMsg struct { - OpenInit *IBCOpenInit `json:"open_init,omitempty"` - OpenTry *IBCOpenTry `json:"open_try,omitempty"` -} - -// IBCChannels must JSON encode empty array as [] (not null) for consistency with Rust parser -type IBCChannels []IBCChannel - -// MarshalJSON ensures that we get [] for empty arrays -func (e IBCChannels) MarshalJSON() ([]byte, error) { - if len(e) == 0 { - return []byte("[]"), nil - } - var raw []IBCChannel = e - return json.Marshal(raw) -} - -// UnmarshalJSON ensures that we get [] for empty arrays -func (e *IBCChannels) UnmarshalJSON(data []byte) error { - // make sure we deserialize [] back to null - if string(data) == "[]" || string(data) == "null" { - return nil - } - var raw []IBCChannel - if err := json.Unmarshal(data, &raw); err != nil { - return err - } - *e = raw - return nil -} - -// IBCEndpoints must JSON encode empty array as [] (not null) for consistency with Rust parser -type IBCEndpoints []IBCEndpoint - -// MarshalJSON ensures that we get [] for empty arrays -func (e IBCEndpoints) MarshalJSON() ([]byte, error) { - if len(e) == 0 { - return []byte("[]"), nil - } - var raw []IBCEndpoint = e - return json.Marshal(raw) -} - -// UnmarshalJSON ensures that we get [] for empty arrays -func (e *IBCEndpoints) UnmarshalJSON(data []byte) error { - // make sure we deserialize [] back to null - if string(data) == "[]" || string(data) == "null" { - return nil - } - var raw []IBCEndpoint - if err := json.Unmarshal(data, &raw); err != nil { - return err - } - *e = raw - return nil -} - -type ChannelQuery struct { - // optional argument - PortID string `json:"port_id,omitempty"` - ChannelID string `json:"channel_id"` -} - -type ChannelResponse struct { - // may be empty if there is no matching channel - Channel *IBCChannel `json:"channel,omitempty"` -} - -type MintQuery struct { - Inflation *MintingInflationQuery `json:"inflation,omitempty"` - BondedRatio *MintingBondedRatioQuery `json:"bonded_ratio,omitempty"` -} - -type ( - MintingBondedRatioQuery struct{} - MintingInflationQuery struct{} -) - -type MintingInflationResponse struct { - InflationRate string `json:"inflation_rate"` -} - -type MintingBondedRatioResponse struct { - BondedRatio string `json:"bonded_ratio"` -} - -type ProposalsQuery struct{} - -// DelegationResponse is the expected response to DelegationsQuery -type ProposalsResponse struct { - Proposals []Proposal `json:"proposals,omitempty"` -} - -type Proposal struct { - ProposalID uint64 `json:"id" yaml:"id"` // ID of the proposal - VotingStartTime uint64 `json:"voting_start_time" yaml:"voting_start_time"` // Time of the block where MinDeposit was reached. -1 if MinDeposit is not reached - VotingEndTime uint64 `json:"voting_end_time" yaml:"voting_end_time"` // Time that the VotingPeriod for this proposal will end and votes will be tallied -} - -type RewardsQuery struct { - Delegator string `json:"delegator"` -} - -// DelegationResponse is the expected response to DelegationsQuery -type RewardsResponse struct { - Rewards []Rewards `json:"rewards,omitempty"` - Total RewardCoins `json:"total,omitempty"` -} - -type Rewards struct { - Validator string `json:"validator_address"` - Reward RewardCoins `json:"reward"` -} - -type RewardCoins []Coin - -// MarshalJSON ensures that we get [] for empty arrays -func (d RewardCoins) MarshalJSON() ([]byte, error) { - if len(d) == 0 { - return []byte("[]"), nil - } - var raw []Coin = d - return json.Marshal(raw) -} - -// UnmarshalJSON ensures that we get [] for empty arrays -func (d *RewardCoins) UnmarshalJSON(data []byte) error { - // make sure we deserialize [] back to null - if string(data) == "[]" || string(data) == "null" { - return nil - } - var raw []Coin - if err := json.Unmarshal(data, &raw); err != nil { - return err - } - *d = raw - return nil -} - -// MarshalJSON ensures that we get [] for empty arrays -func (d ProposalsResponse) MarshalJSON() ([]byte, error) { - if len(d.Proposals) == 0 { - return []byte("{\"proposals\": []}"), nil - } - raw := d.Proposals - asBytes, err := json.Marshal(raw) - if err != nil { - return nil, err - } - - return append(append([]byte("{\"proposals\": "), asBytes...), []byte("}")...), nil -} - -// UnmarshalJSON ensures that we get [] for empty arrays -func (d *ProposalsResponse) UnmarshalJSON(data []byte) error { - // make sure we deserialize [] back to null - if string(data) == "{\"proposals\": []}" || string(data) == "null" || string(data) == "{\"proposals\":[]}" { - return nil - } - var raw []Proposal - if err := json.Unmarshal(data, &raw); err != nil { - return err - } - d.Proposals = raw - return nil -} - -type ContractInfoResponse struct { - CodeID uint64 `json:"code_id"` - Creator string `json:"creator"` - // Set to the admin who can migrate contract, if any - Admin string `json:"admin,omitempty"` - Pinned bool `json:"pinned"` - // Set if the contract is IBC enabled - IBCPort string `json:"ibc_port,omitempty"` -} diff --git a/go-cosmwasm/types/queries_test.go b/go-cosmwasm/types/queries_test.go deleted file mode 100644 index ebaca168f..000000000 --- a/go-cosmwasm/types/queries_test.go +++ /dev/null @@ -1,64 +0,0 @@ -package types - -import ( - "encoding/json" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestDelegationWithEmptyArray(t *testing.T) { - var del Delegations - bz, err := json.Marshal(&del) - require.NoError(t, err) - assert.Equal(t, string(bz), `[]`) - - var redel Delegations - err = json.Unmarshal(bz, &redel) - require.NoError(t, err) - assert.Nil(t, redel) -} - -func TestDelegationWithData(t *testing.T) { - del := Delegations{{ - Validator: "foo", - Delegator: "bar", - Amount: NewCoin(123, "stake"), - }} - bz, err := json.Marshal(&del) - require.NoError(t, err) - - var redel Delegations - err = json.Unmarshal(bz, &redel) - require.NoError(t, err) - assert.Equal(t, redel, del) -} - -func TestValidatorWithEmptyArray(t *testing.T) { - var val Validators - bz, err := json.Marshal(&val) - require.NoError(t, err) - assert.Equal(t, string(bz), `[]`) - - var reval Validators - err = json.Unmarshal(bz, &reval) - require.NoError(t, err) - assert.Nil(t, reval) -} - -func TestValidatorWithData(t *testing.T) { - val := Validators{{ - Address: "1234567890", - Commission: "0.05", - MaxCommission: "0.1", - MaxChangeRate: "0.02", - }} - bz, err := json.Marshal(&val) - require.NoError(t, err) - - var reval Validators - err = json.Unmarshal(bz, &reval) - require.NoError(t, err) - assert.Equal(t, reval, val) -} diff --git a/go-cosmwasm/types/stderror.go b/go-cosmwasm/types/stderror.go deleted file mode 100644 index dc8bf8763..000000000 --- a/go-cosmwasm/types/stderror.go +++ /dev/null @@ -1,202 +0,0 @@ -package types - -import ( - "fmt" - "reflect" -) - -// StdError captures all errors returned from the Rust code as StdError. -// Exactly one of the fields should be set. -type StdError struct { - GenericErr *GenericErr `json:"generic_err,omitempty"` - InvalidBase64 *InvalidBase64 `json:"invalid_base64,omitempty"` - InvalidUtf8 *InvalidUtf8 `json:"invalid_utf8,omitempty"` - NotFound *NotFound `json:"not_found,omitempty"` - ParseErr *ParseErr `json:"parse_err,omitempty"` - SerializeErr *SerializeErr `json:"serialize_err,omitempty"` - Unauthorized *Unauthorized `json:"unauthorized,omitempty"` - Underflow *Underflow `json:"underflow,omitempty"` -} - -var ( - _ error = StdError{} - _ error = GenericErr{} - _ error = InvalidBase64{} - _ error = InvalidUtf8{} - _ error = NotFound{} - _ error = ParseErr{} - _ error = SerializeErr{} - _ error = Unauthorized{} - _ error = Underflow{} -) - -func (a StdError) Error() string { - switch { - case a.GenericErr != nil: - return a.GenericErr.Error() - case a.InvalidBase64 != nil: - return a.InvalidBase64.Error() - case a.InvalidUtf8 != nil: - return a.InvalidUtf8.Error() - case a.NotFound != nil: - return a.NotFound.Error() - case a.ParseErr != nil: - return a.ParseErr.Error() - case a.SerializeErr != nil: - return a.SerializeErr.Error() - case a.Unauthorized != nil: - return a.Unauthorized.Error() - case a.Underflow != nil: - return a.Underflow.Error() - default: - panic("unknown error variant") - } -} - -func (a StdError) IsEmpty() bool { - switch { - case a.GenericErr != nil: - case a.InvalidBase64 != nil: - case a.InvalidUtf8 != nil: - case a.NotFound != nil: - case a.ParseErr != nil: - case a.SerializeErr != nil: - case a.Unauthorized != nil: - case a.Underflow != nil: - return false - default: - return true - } - return true -} - -type GenericErr struct { - Msg string `json:"msg,omitempty"` -} - -func (e GenericErr) Error() string { - return fmt.Sprintf("encrypted: %s", e.Msg) -} - -type InvalidBase64 struct { - Msg string `json:"msg,omitempty"` -} - -func (e InvalidBase64) Error() string { - return fmt.Sprintf("invalid base64: %s", e.Msg) -} - -type InvalidUtf8 struct { - Msg string `json:"msg,omitempty"` -} - -func (e InvalidUtf8) Error() string { - return fmt.Sprintf("invalid_utf8: %s", e.Msg) -} - -type NotFound struct { - Kind string `json:"kind,omitempty"` -} - -func (e NotFound) Error() string { - return fmt.Sprintf("not found: %s", e.Kind) -} - -type ParseErr struct { - Target string `json:"target,omitempty"` - Msg string `json:"msg,omitempty"` -} - -func (e ParseErr) Error() string { - return fmt.Sprintf("parsing %s: %s", e.Target, e.Msg) -} - -type SerializeErr struct { - Source string `json:"source,omitempty"` - Msg string `json:"msg,omitempty"` -} - -func (e SerializeErr) Error() string { - return fmt.Sprintf("serializing %s: %s", e.Source, e.Msg) -} - -type Unauthorized struct{} - -func (e Unauthorized) Error() string { - return "unauthorized" -} - -type Underflow struct { - Minuend string `json:"minuend,omitempty"` - Subtrahend string `json:"subtrahend,omitempty"` -} - -func (e Underflow) Error() string { - return fmt.Sprintf("underflow: %s - %s", e.Minuend, e.Subtrahend) -} - -// ToStdError will convert the given error to an StdError. -// This is important to returning any Go error back to Rust. -// -// If it is already StdError, return self. -// If it is an error, which could be a sub-field of StdError, embed it. -// If it is anything else, convert it to a GenericErr. -func ToStdError(err error) *StdError { - if isNil(err) { - return nil - } - switch t := err.(type) { - case StdError: - return &t - case *StdError: - return t - case GenericErr: - return &StdError{GenericErr: &t} - case *GenericErr: - return &StdError{GenericErr: t} - case InvalidBase64: - return &StdError{InvalidBase64: &t} - case *InvalidBase64: - return &StdError{InvalidBase64: t} - case InvalidUtf8: - return &StdError{InvalidUtf8: &t} - case *InvalidUtf8: - return &StdError{InvalidUtf8: t} - case NotFound: - return &StdError{NotFound: &t} - case *NotFound: - return &StdError{NotFound: t} - case ParseErr: - return &StdError{ParseErr: &t} - case *ParseErr: - return &StdError{ParseErr: t} - case SerializeErr: - return &StdError{SerializeErr: &t} - case *SerializeErr: - return &StdError{SerializeErr: t} - case Unauthorized: - return &StdError{Unauthorized: &t} - case *Unauthorized: - return &StdError{Unauthorized: t} - case Underflow: - return &StdError{Underflow: &t} - case *Underflow: - return &StdError{Underflow: t} - default: - g := GenericErr{Msg: err.Error()} - return &StdError{GenericErr: &g} - } -} - -// check if an interface is nil (even if it has type info) -func isNil(i interface{}) bool { - if i == nil { - return true - } - if reflect.TypeOf(i).Kind() == reflect.Ptr { - // IsNil panics if you try it on a struct (not a pointer) - return reflect.ValueOf(i).IsNil() - } - // if we aren't a pointer, can't be nil, can we? - return false -} diff --git a/go-cosmwasm/types/systemerror.go b/go-cosmwasm/types/systemerror.go deleted file mode 100644 index 064c9ae18..000000000 --- a/go-cosmwasm/types/systemerror.go +++ /dev/null @@ -1,138 +0,0 @@ -package types - -import ( - "fmt" -) - -// SystemError captures all errors returned from the Rust code as SystemError. -// Exactly one of the fields should be set. -type SystemError struct { - InvalidRequest *InvalidRequest `json:"invalid_request,omitempty"` - InvalidResponse *InvalidResponse `json:"invalid_response,omitempty"` - NoSuchContract *NoSuchContract `json:"no_such_contract,omitempty"` - Unknown *Unknown `json:"unknown,omitempty"` - UnsupportedRequest *UnsupportedRequest `json:"unsupported_request,omitempty"` - ExceededRecursionLimit *ExceededRecursionLimit `json:"exceeded_recursion_limit,omitempty"` -} - -var ( - _ error = SystemError{} - _ error = InvalidRequest{} - _ error = InvalidResponse{} - _ error = NoSuchContract{} - _ error = Unknown{} - _ error = UnsupportedRequest{} - _ error = ExceededRecursionLimit{} -) - -func (a SystemError) Error() string { - switch { - case a.InvalidRequest != nil: - return a.InvalidRequest.Error() - case a.InvalidResponse != nil: - return a.InvalidResponse.Error() - case a.NoSuchContract != nil: - return a.NoSuchContract.Error() - case a.Unknown != nil: - return a.Unknown.Error() - case a.UnsupportedRequest != nil: - return a.UnsupportedRequest.Error() - case a.ExceededRecursionLimit != nil: - return a.ExceededRecursionLimit.Error() - default: - panic("unknown error variant") - } -} - -type InvalidRequest struct { - Err string `json:"error"` - Request []byte `json:"request"` -} - -func (e InvalidRequest) Error() string { - return fmt.Sprintf("invalid request: %s - original request: %s", e.Err, string(e.Request)) -} - -type InvalidResponse struct { - Err string `json:"error"` - Response []byte `json:"response"` -} - -func (e InvalidResponse) Error() string { - return fmt.Sprintf("invalid response: %s - original response: %s", e.Err, string(e.Response)) -} - -type NoSuchContract struct { - Addr string `json:"addr,omitempty"` -} - -func (e NoSuchContract) Error() string { - return fmt.Sprintf("no such contract: %s", e.Addr) -} - -type Unknown struct{} - -func (e Unknown) Error() string { - return "unknown system error" -} - -type UnsupportedRequest struct { - Kind string `json:"kind,omitempty"` -} - -func (e UnsupportedRequest) Error() string { - return fmt.Sprintf("unsupported request: %s", e.Kind) -} - -type ExceededRecursionLimit struct{} - -func (e ExceededRecursionLimit) Error() string { - return "unknown system error" -} - -// ToSystemError will try to convert the given error to an SystemError. -// This is important to returning any Go error back to Rust. -// -// If it is already StdError, return self. -// If it is an error, which could be a sub-field of StdError, embed it. -// If it is anything else, **return nil** -// -// This may return nil on an unknown error, whereas ToStdError will always create -// a valid error type. -func ToSystemError(err error) *SystemError { - if isNil(err) { - return nil - } - switch t := err.(type) { - case SystemError: - return &t - case *SystemError: - return t - case InvalidRequest: - return &SystemError{InvalidRequest: &t} - case *InvalidRequest: - return &SystemError{InvalidRequest: t} - case InvalidResponse: - return &SystemError{InvalidResponse: &t} - case *InvalidResponse: - return &SystemError{InvalidResponse: t} - case NoSuchContract: - return &SystemError{NoSuchContract: &t} - case *NoSuchContract: - return &SystemError{NoSuchContract: t} - case Unknown: - return &SystemError{Unknown: &t} - case *Unknown: - return &SystemError{Unknown: t} - case UnsupportedRequest: - return &SystemError{UnsupportedRequest: &t} - case *UnsupportedRequest: - return &SystemError{UnsupportedRequest: t} - case ExceededRecursionLimit: - return &SystemError{ExceededRecursionLimit: &t} - case *ExceededRecursionLimit: - return &SystemError{ExceededRecursionLimit: t} - default: - return nil - } -} diff --git a/go-cosmwasm/types/types.go b/go-cosmwasm/types/types.go deleted file mode 100644 index 194ad9048..000000000 --- a/go-cosmwasm/types/types.go +++ /dev/null @@ -1,92 +0,0 @@ -package types - -import ( - "encoding/json" - "strconv" -) - -// HumanAddress is a printable (typically bech32 encoded) address string. Just use it as a label for developers. -type HumanAddress = string - -// CanonicalAddress uses standard base64 encoding, just use it as a label for developers -type CanonicalAddress = []byte - -// Coin is a string representation of the sdk.Coin type (more portable than sdk.Int) -type Coin struct { - Denom string `json:"denom"` // type, eg. "ATOM" - Amount string `json:"amount"` // string encoing of decimal value, eg. "12.3456" -} - -func NewCoin(amount uint64, denom string) Coin { - return Coin{ - Denom: denom, - Amount: strconv.FormatUint(amount, 10), - } -} - -// Coins handles properly serializing empty amounts -type Coins []Coin - -// MarshalJSON ensures that we get [] for empty arrays -func (c Coins) MarshalJSON() ([]byte, error) { - if len(c) == 0 { - return []byte("[]"), nil - } - var d []Coin = c - return json.Marshal(d) -} - -// UnmarshalJSON ensures that we get [] for empty arrays -func (c *Coins) UnmarshalJSON(data []byte) error { - // make sure we deserialize [] back to null - if string(data) == "[]" || string(data) == "null" { - return nil - } - var d []Coin - if err := json.Unmarshal(data, &d); err != nil { - return err - } - *c = d - return nil -} - -type OutOfGasError struct{} - -var _ error = OutOfGasError{} - -func (o OutOfGasError) Error() string { - return "Out of gas" -} - -type SigInfo struct { - TxBytes []byte `json:"tx_bytes"` - SignBytes []byte `json:"sign_bytes"` - SignMode string `json:"sign_mode"` - ModeInfo []byte `json:"mode_info"` - PublicKey []byte `json:"public_key"` - Signature []byte `json:"signature"` - CallbackSignature []byte `json:"callback_sig"` // Optional -} - -type HandleType int - -const ( - HandleTypeExecute HandleType = iota - HandleTypeReply - HandleTypeIbcChannelOpen - HandleTypeIbcChannelConnect - HandleTypeIbcChannelClose - HandleTypeIbcPacketReceive - HandleTypeIbcPacketAck - HandleTypeIbcPacketTimeout - HandleTypeIbcWasmHooksIncomingTransfer - HandleTypeIbcWasmHooksOutgoingTransferAck - HandleTypeIbcWasmHooksOutgoingTransferTimeout -) - -type CosmosMsgVersion int - -const ( - CosmosMsgVersionV010 CosmosMsgVersion = iota - CosmosMsgVersionV1 -) diff --git a/go-cosmwasm/types/v010/msg_v010.go b/go-cosmwasm/types/v010/msg_v010.go deleted file mode 100644 index 7e1c890a5..000000000 --- a/go-cosmwasm/types/v010/msg_v010.go +++ /dev/null @@ -1,197 +0,0 @@ -package v010types - -import ( - "encoding/json" - - types "github.com/comdex-official/comdex/go-cosmwasm/types" -) - -//------- Results / Msgs ------------- - -// HandleResult is the raw response from the handle call -type HandleResult struct { - Ok *HandleResponse `json:"Ok,omitempty"` - Err *types.StdError `json:"Err,omitempty"` -} - -// HandleResponse defines the return value on a successful handle -type HandleResponse struct { - // Messages comes directly from the contract and is it's request for action - Messages []CosmosMsg `json:"messages"` - // base64-encoded bytes to return as ABCI.Data field - Data []byte `json:"data"` - // log message to return over abci interface - Log []LogAttribute `json:"log"` -} - -// InitResult is the raw response from the handle call -type InitResult struct { - Ok *InitResponse `json:"Ok,omitempty"` - Err *types.StdError `json:"Err,omitempty"` -} - -// InitResponse defines the return value on a successful handle -type InitResponse struct { - // Messages comes directly from the contract and is it's request for action - Messages []CosmosMsg `json:"messages"` - // log message to return over abci interface - Log []LogAttribute `json:"log"` - Data []byte `json:"data,omitempty"` -} - -// LogAttribute -type LogAttribute struct { - Key string `json:"key"` - Value string `json:"value"` -} - -// CosmosMsg is an rust enum and only (exactly) one of the fields should be set -// Should we do a cleaner approach in Go? (type/data?) -type CosmosMsg struct { - Bank *BankMsg `json:"bank,omitempty"` - Custom json.RawMessage `json:"custom,omitempty"` - Staking *StakingMsg `json:"staking,omitempty"` - Wasm *WasmMsg `json:"wasm,omitempty"` - Gov *GovMsg `json:"gov,omitempty"` -} - -type BankMsg struct { - Send *SendMsg `json:"send,omitempty"` -} - -type GovMsg struct { - Vote *VoteMsg `json:"vote,omitempty"` -} - -// VoteMsg contains instructions for a Cosmos-SDK/GovVote -// It has a fixed interface here and should be converted into the proper SDK format before dispatching -type VoteMsg struct { - Proposal uint64 `json:"proposal"` - VoteOption string `json:"vote_option"` -} - -var ( - Yes = "Yes" - Abstain = "Abstain" - No = "No" - NoWithVeto = "NoWithVeto" -) - -// SendMsg contains instructions for a Cosmos-SDK/SendMsg -// It has a fixed interface here and should be converted into the proper SDK format before dispatching -type SendMsg struct { - FromAddress string `json:"from_address"` - ToAddress string `json:"to_address"` - Amount types.Coins `json:"amount"` -} - -type StakingMsg struct { - Delegate *DelegateMsg `json:"delegate,omitempty"` - Undelegate *UndelegateMsg `json:"undelegate,omitempty"` - Redelegate *RedelegateMsg `json:"redelegate,omitempty"` - Withdraw *WithdrawMsg `json:"withdraw,omitempty"` -} - -type DelegateMsg struct { - Validator string `json:"validator"` - Amount types.Coin `json:"amount"` -} - -type UndelegateMsg struct { - Validator string `json:"validator"` - Amount types.Coin `json:"amount"` -} - -type RedelegateMsg struct { - SrcValidator string `json:"src_validator"` - DstValidator string `json:"dst_validator"` - Amount types.Coin `json:"amount"` -} - -type WithdrawMsg struct { - Validator string `json:"validator"` - // this is optional - Recipient string `json:"recipient,omitempty"` -} - -type WasmMsg struct { - Execute *ExecuteMsg `json:"execute,omitempty"` - Instantiate *InstantiateMsg `json:"instantiate,omitempty"` - Migrate *MigrateMsg `json:"migrate,omitempty"` - UpdateAdmin *UpdateAdminMsg `json:"update_admin,omitempty"` - ClearAdmin *ClearAdminMsg `json:"clear_admin,omitempty"` -} - -// ExecuteMsg is used to call another defined contract on this chain. -// The calling contract requires the callee to be defined beforehand, -// and the address should have been defined in initialization. -// And we assume the developer tested the ABIs and coded them together. -// -// Since a contract is immutable once it is deployed, we don't need to transform this. -// If it was properly coded and worked once, it will continue to work throughout upgrades. -type ExecuteMsg struct { - // ContractAddr is the sdk.AccAddress of the contract, which uniquely defines - // the contract ID and instance ID. The sdk module should maintain a reverse lookup table. - ContractAddr string `json:"contract_addr"` - // Custom addition to support binding a message to specific code to harden against offline & replay attacks - // This is only needed when creating a callback message - CallbackCodeHash string `json:"callback_code_hash"` - // Msg is assumed to be a json-encoded message, which will be passed directly - // as `userMsg` when calling `Handle` on the above-defined contract - Msg []byte `json:"msg"` - // Send is an optional amount of coins this contract sends to the called contract - Send types.Coins `json:"send"` - CallbackSignature []byte `json:"callback_sig"` // Optional -} - -type InstantiateMsg struct { - // CodeID is the reference to the wasm byte code as used by the Cosmos-SDK - CodeID uint64 `json:"code_id"` - // Custom addition to support binding a message to specific code to harden against offline & replay attacks - // This is only needed when creating a callback message - CallbackCodeHash string `json:"callback_code_hash"` - // Msg is assumed to be a json-encoded message, which will be passed directly - // as `userMsg` when calling `Handle` on the above-defined contract - Msg []byte `json:"msg"` - /// Label is a mandatory human-readbale label for the contract - Label string `json:"label"` - // Send is an optional amount of coins this contract sends to the called contract - Send types.Coins `json:"send"` - CallbackSignature []byte `json:"callback_sig"` // Optional -} - -type MigrateMsg struct { - // Sender is the that actor that signed the messages - Sender string `json:"sender"` - // Contract is the address of the smart contract - Contract string `json:"contract_addr"` - // CodeID references the new WASM code - CodeID uint64 `json:"code_id"` - // msg is an encrypted input to pass to the contract on migration - Msg []byte `json:"msg"` - // used internally for encryption, should always be empty in a signed transaction - CallbackSignature []byte `json:"callback_sig"` - // Custom addition to support binding a message to specific code to harden against offline & replay attacks - // This is only needed when creating a callback message - CallbackCodeHash string `json:"callback_code_hash"` -} - -type UpdateAdminMsg struct { - // Sender is the that actor that signed the messages - Sender string `json:"sender,omitempty"` - // NewAdmin address to be set - NewAdmin string `json:"admin,omitempty"` - // Contract is the address of the smart contract - Contract string `json:"contract_addr,omitempty"` - // used internally for encryption, should always be empty in a signed transaction - CallbackSignature []byte `json:"callback_sig"` -} - -type ClearAdminMsg struct { - // Sender is the that actor that signed the messages - Sender string `json:"sender,omitempty"` - // Contract is the address of the smart contract - Contract string `json:"contract_addr,omitempty"` - // used internally for encryption, should always be empty in a signed transaction - CallbackSignature []byte `json:"callback_sig"` -} diff --git a/go-cosmwasm/types/v1/ibc.go b/go-cosmwasm/types/v1/ibc.go deleted file mode 100644 index 48aa3630d..000000000 --- a/go-cosmwasm/types/v1/ibc.go +++ /dev/null @@ -1,289 +0,0 @@ -package v1types - -import ( - ibcchanneltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - types "github.com/comdex-official/comdex/go-cosmwasm/types" - v010msgtypes "github.com/comdex-official/comdex/go-cosmwasm/types/v010" -) - -type IBCEndpoint struct { - PortID string `json:"port_id"` - ChannelID string `json:"channel_id"` -} - -type IBCChannel struct { - Endpoint IBCEndpoint `json:"endpoint"` - CounterpartyEndpoint IBCEndpoint `json:"counterparty_endpoint"` - Order IBCOrder `json:"order"` - Version string `json:"version"` - ConnectionID string `json:"connection_id"` -} - -type IBCChannelOpenMsg struct { - OpenInit *IBCOpenInit `json:"open_init,omitempty"` - OpenTry *IBCOpenTry `json:"open_try,omitempty"` -} - -// GetChannel returns the IBCChannel in this message. -func (msg IBCChannelOpenMsg) GetChannel() IBCChannel { - if msg.OpenInit != nil { - return msg.OpenInit.Channel - } - return msg.OpenTry.Channel -} - -// GetCounterVersion checks if the message has a counterparty version and -// returns it if so. -func (msg IBCChannelOpenMsg) GetCounterVersion() (ver string, ok bool) { - if msg.OpenTry != nil { - return msg.OpenTry.CounterpartyVersion, true - } - return "", false -} - -type IBCOpenInit struct { - Channel IBCChannel `json:"channel"` -} - -func (m *IBCOpenInit) ToMsg() IBCChannelOpenMsg { - return IBCChannelOpenMsg{ - OpenInit: m, - } -} - -type IBCOpenTry struct { - Channel IBCChannel `json:"channel"` - CounterpartyVersion string `json:"counterparty_version"` -} - -func (m *IBCOpenTry) ToMsg() IBCChannelOpenMsg { - return IBCChannelOpenMsg{ - OpenTry: m, - } -} - -type IBCChannelConnectMsg struct { - OpenAck *IBCOpenAck `json:"open_ack,omitempty"` - OpenConfirm *IBCOpenConfirm `json:"open_confirm,omitempty"` -} - -// GetChannel returns the IBCChannel in this message. -func (msg IBCChannelConnectMsg) GetChannel() IBCChannel { - if msg.OpenAck != nil { - return msg.OpenAck.Channel - } - return msg.OpenConfirm.Channel -} - -// GetCounterVersion checks if the message has a counterparty version and -// returns it if so. -func (msg IBCChannelConnectMsg) GetCounterVersion() (ver string, ok bool) { - if msg.OpenAck != nil { - return msg.OpenAck.CounterpartyVersion, true - } - return "", false -} - -type IBCOpenAck struct { - Channel IBCChannel `json:"channel"` - CounterpartyVersion string `json:"counterparty_version"` -} - -func (m *IBCOpenAck) ToMsg() IBCChannelConnectMsg { - return IBCChannelConnectMsg{ - OpenAck: m, - } -} - -type IBCOpenConfirm struct { - Channel IBCChannel `json:"channel"` -} - -func (m *IBCOpenConfirm) ToMsg() IBCChannelConnectMsg { - return IBCChannelConnectMsg{ - OpenConfirm: m, - } -} - -type IBCChannelCloseMsg struct { - CloseInit *IBCCloseInit `json:"close_init,omitempty"` - CloseConfirm *IBCCloseConfirm `json:"close_confirm,omitempty"` -} - -// GetChannel returns the IBCChannel in this message. -func (msg IBCChannelCloseMsg) GetChannel() IBCChannel { - if msg.CloseInit != nil { - return msg.CloseInit.Channel - } - return msg.CloseConfirm.Channel -} - -type IBCCloseInit struct { - Channel IBCChannel `json:"channel"` -} - -func (m *IBCCloseInit) ToMsg() IBCChannelCloseMsg { - return IBCChannelCloseMsg{ - CloseInit: m, - } -} - -type IBCCloseConfirm struct { - Channel IBCChannel `json:"channel"` -} - -func (m *IBCCloseConfirm) ToMsg() IBCChannelCloseMsg { - return IBCChannelCloseMsg{ - CloseConfirm: m, - } -} - -type IBCPacketReceiveMsg struct { - Packet IBCPacket `json:"packet"` - Relayer string `json:"relayer"` -} - -type IBCPacketAckMsg struct { - Acknowledgement IBCAcknowledgement `json:"acknowledgement"` - OriginalPacket IBCPacket `json:"original_packet"` - Relayer string `json:"relayer"` -} - -type IBCPacketTimeoutMsg struct { - Packet IBCPacket `json:"packet"` - Relayer string `json:"relayer"` -} - -// TODO: test what the sdk Order.String() represents and how to parse back -// Proto files: https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/proto/ibc/core/channel/v1/channel.proto#L69-L80 -// Auto-gen code: https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/x/ibc/core/04-channel/types/channel.pb.go#L70-L101 -type IBCOrder = string - -// These are the only two valid values for IbcOrder -const ( - Unordered = "ORDER_UNORDERED" - Ordered = "ORDER_ORDERED" -) - -func IBCOrderToEnum(o IBCOrder) ibcchanneltypes.Order { - if o == Unordered { - return ibcchanneltypes.UNORDERED - } - - return ibcchanneltypes.ORDERED -} - -// IBCTimeoutBlock Height is a monotonically increasing data type -// that can be compared against another Height for the purposes of updating and -// freezing clients. -// Ordering is (revision_number, timeout_height) -type IBCTimeoutBlock struct { - // the version that the client is currently on - // (eg. after reseting the chain this could increment 1 as height drops to 0) - Revision uint64 `json:"revision"` - // block height after which the packet times out. - // the height within the given revision - Height uint64 `json:"height"` -} - -func (t IBCTimeoutBlock) IsZero() bool { - return t.Revision == 0 && t.Height == 0 -} - -// IBCTimeout is the timeout for an IBC packet. At least one of block and timestamp is required. -type IBCTimeout struct { - Block *IBCTimeoutBlock `json:"block"` - // Nanoseconds since UNIX epoch - Timestamp uint64 `json:"timestamp,string,omitempty"` -} - -type IBCAcknowledgement struct { - Data []byte `json:"data"` -} - -type IBCPacket struct { - Data []byte `json:"data"` - Src IBCEndpoint `json:"src"` - Dest IBCEndpoint `json:"dest"` - Sequence uint64 `json:"sequence"` - Timeout IBCTimeout `json:"timeout"` -} - -// IBCChannelOpenResult is the raw response from the ibc_channel_open call. -// This is mirrors Rust's ContractResult<()>. -// Check if Err == "" to see if this is success -// On Success, IBCV3ChannelOpenResponse *may* be set if the contract is ibcv3 compatible and wishes to -// define a custom version in the handshake. -type IBCChannelOpenResult struct { - Ok *IBC3ChannelOpenResponse `json:"ok,omitempty"` - Err string `json:"error,omitempty"` -} - -// IBC3ChannelOpenResponse is version negotiation data for the handshake -type IBC3ChannelOpenResponse struct { - Version string `json:"version"` -} - -// This is the return value for the majority of the ibc handlers. -// That are able to dispatch messages / events on their own, -// but have no meaningful return value to the calling code. -// -// Callbacks that have return values (like ibc_receive_packet) -// or that cannot redispatch messages (like ibc_channel_open) -// will use other Response types -type IBCBasicResult struct { - Ok *IBCBasicResponse `json:"ok,omitempty"` - Err *types.StdError `json:"Err,omitempty"` -} - -// IBCBasicResponse defines the return value on a successful processing. -// This is the counterpart of [IbcBasicResponse](https://github.com/CosmWasm/cosmwasm/blob/v0.14.0-beta1/packages/std/src/ibc.rs#L194-L216). -type IBCBasicResponse struct { - // Messages comes directly from the contract and is its request for action. - // If the ReplyOn value matches the result, the runtime will invoke this - // contract's `reply` entry point after execution. Otherwise, this is all - // "fire and forget". - Messages []SubMsg `json:"messages"` - // attributes for a log event to return over abci interface - Attributes []v010msgtypes.LogAttribute `json:"attributes"` - // custom events (separate from the main one that contains the attributes - // above) - Events []Event `json:"events"` -} - -// This is the return value for the majority of the ibc handlers. -// That are able to dispatch messages / events on their own, -// but have no meaningful return value to the calling code. -// -// Callbacks that have return values (like receive_packet) -// or that cannot redispatch messages (like the handshake callbacks) -// will use other Response types -type IBCReceiveResult struct { - Ok *IBCReceiveResponse `json:"ok,omitempty"` - Err *types.StdError `json:"Err,omitempty"` -} - -type IBCOpenChannelResult struct { - Ok *string `json:"ok,omitempty"` - Err *types.StdError `json:"Err,omitempty"` -} - -// IBCReceiveResponse defines the return value on packet response processing. -// This "success" case should be returned even in application-level errors, -// Where the Acknowledgement bytes contain an encoded error message to be returned to -// the calling chain. (Returning IBCReceiveResult::Err will abort processing of this packet -// and not inform the calling chain). -// This is the counterpart of (IbcReceiveResponse)(https://github.com/CosmWasm/cosmwasm/blob/v0.15.0/packages/std/src/ibc.rs#L247-L267). -type IBCReceiveResponse struct { - // binary encoded data to be returned to calling chain as the acknowledgement - Acknowledgement []byte `json:"acknowledgement"` - // Messages comes directly from the contract and is it's request for action. - // If the ReplyOn value matches the result, the runtime will invoke this - // contract's `reply` entry point after execution. Otherwise, this is all - // "fire and forget". - Messages []SubMsg `json:"messages"` - Attributes []v010msgtypes.LogAttribute `json:"attributes"` - // custom events (separate from the main one that contains the attributes - // above) - Events []Event `json:"events"` -} diff --git a/go-cosmwasm/types/v1/msg_v1.go b/go-cosmwasm/types/v1/msg_v1.go deleted file mode 100644 index 309fde7b0..000000000 --- a/go-cosmwasm/types/v1/msg_v1.go +++ /dev/null @@ -1,224 +0,0 @@ -package v1types - -import ( - "encoding/json" - "fmt" - - types "github.com/comdex-official/comdex/go-cosmwasm/types" - v010msgtypes "github.com/comdex-official/comdex/go-cosmwasm/types/v010" -) - -//------- Results / Msgs ------------- - -// ContractResult is the raw response from the instantiate/execute/migrate calls. -// This is mirrors Rust's ContractResult. -type ContractResult struct { - Ok *Response `json:"ok,omitempty"` - Err string `json:"error,omitempty"` -} - -// Response defines the return value on a successful instantiate/execute/migrate. -// This is the counterpart of [Response](https://github.com/CosmWasm/cosmwasm/blob/v0.14.0-beta1/packages/std/src/results/response.rs#L73-L88) -type Response struct { - // Messages comes directly from the contract and is its request for action. - // If the ReplyOn value matches the result, the runtime will invoke this - // contract's `reply` entry point after execution. Otherwise, this is all - // "fire and forget". - Messages []SubMsg `json:"messages"` - // base64-encoded bytes to return as ABCI.Data field - Data []byte `json:"data"` - // attributes for a log event to return over abci interface - Attributes []v010msgtypes.LogAttribute `json:"attributes"` - // custom events (separate from the main one that contains the attributes - // above) - Events []Event `json:"events"` -} - -// Used to serialize both the data and the internal reply information in order to keep the api without changes -type DataWithInternalReplyInfo struct { - InternaReplyEnclaveSig []byte `json:"internal_reply_enclave_sig"` - InternalMsgId []byte `json:"internal_msg_id"` - Data []byte `json:"data,omitempty"` -} - -// LogAttributes must encode empty array as [] -type LogAttributes []v010msgtypes.LogAttribute - -// MarshalJSON ensures that we get [] for empty arrays -func (a LogAttributes) MarshalJSON() ([]byte, error) { - if len(a) == 0 { - return []byte("[]"), nil - } - var raw []v010msgtypes.LogAttribute = a - return json.Marshal(raw) -} - -// UnmarshalJSON ensures that we get [] for empty arrays -func (a *LogAttributes) UnmarshalJSON(data []byte) error { - // make sure we deserialize [] back to null - if string(data) == "[]" || string(data) == "null" { - return nil - } - var raw []v010msgtypes.LogAttribute - if err := json.Unmarshal(data, &raw); err != nil { - return err - } - *a = raw - return nil -} - -type Empty struct{} - -// CosmosMsg is an rust enum and only (exactly) one of the fields should be set -// Should we do a cleaner approach in Go? (type/data?) -type CosmosMsg struct { - Bank *BankMsg `json:"bank,omitempty"` - Custom json.RawMessage `json:"custom,omitempty"` - Distribution *DistributionMsg `json:"distribution,omitempty"` - Gov *GovMsg `json:"gov,omitempty"` - IBC *IBCMsg `json:"ibc,omitempty"` - Staking *StakingMsg `json:"staking,omitempty"` - Stargate *StargateMsg `json:"stargate,omitempty"` - Wasm *WasmMsg `json:"wasm,omitempty"` - FinalizeTx *Empty `json:"finalize_tx,omitempty"` -} - -type BankMsg struct { - Send *SendMsg `json:"send,omitempty"` - Burn *BurnMsg `json:"burn,omitempty"` -} - -// SendMsg contains instructions for a Cosmos-SDK/SendMsg -// It has a fixed interface here and should be converted into the proper SDK format before dispatching -type SendMsg struct { - ToAddress string `json:"to_address"` - Amount types.Coins `json:"amount"` -} - -// BurnMsg will burn the given coins from the contract's account. -// There is no Cosmos SDK message that performs this, but it can be done by calling the bank keeper. -// Important if a contract controls significant token supply that must be retired. -type BurnMsg struct { - Amount types.Coins `json:"amount"` -} - -type IBCMsg struct { - Transfer *TransferMsg `json:"transfer,omitempty"` - SendPacket *SendPacketMsg `json:"send_packet,omitempty"` - CloseChannel *CloseChannelMsg `json:"close_channel,omitempty"` -} - -type GovMsg struct { - // This maps directly to [MsgVote](https://github.com/cosmos/cosmos-sdk/blob/v0.42.5/proto/cosmos/gov/v1beta1/tx.proto#L46-L56) in the Cosmos SDK with voter set to the contract address. - Vote *VoteMsg `json:"vote,omitempty"` -} - -type VoteOption int - -type VoteMsg struct { - ProposalId uint64 `json:"proposal_id"` - Vote VoteOption `json:"vote"` -} - -const ( - Yes VoteOption = iota - No - Abstain - NoWithVeto -) - -var fromVoteOption = map[VoteOption]string{ - Yes: "yes", - No: "no", - Abstain: "abstain", - NoWithVeto: "no_with_veto", -} - -var ToVoteOption = map[string]VoteOption{ - "yes": Yes, - "no": No, - "abstain": Abstain, - "no_with_veto": NoWithVeto, -} - -func (v VoteOption) String() string { - return fromVoteOption[v] -} - -func (v VoteOption) MarshalJSON() ([]byte, error) { - return json.Marshal(v.String()) -} - -func (v *VoteOption) UnmarshalJSON(b []byte) error { - var j string - err := json.Unmarshal(b, &j) - if err != nil { - return err - } - - voteOption, ok := ToVoteOption[j] - if !ok { - return fmt.Errorf("invalid vote option '%s'", j) - } - *v = voteOption - return nil -} - -type TransferMsg struct { - ChannelID string `json:"channel_id"` - ToAddress string `json:"to_address"` - Amount types.Coin `json:"amount"` - Timeout IBCTimeout `json:"timeout"` - Memo string `json:"memo"` -} - -type SendPacketMsg struct { - ChannelID string `json:"channel_id"` - Data []byte `json:"data"` - Timeout IBCTimeout `json:"timeout"` -} - -type CloseChannelMsg struct { - ChannelID string `json:"channel_id"` -} - -type StakingMsg struct { - Delegate *v010msgtypes.DelegateMsg `json:"delegate,omitempty"` - Undelegate *v010msgtypes.UndelegateMsg `json:"undelegate,omitempty"` - Redelegate *v010msgtypes.RedelegateMsg `json:"redelegate,omitempty"` - Withdraw *v010msgtypes.WithdrawMsg `json:"withdraw,omitempty"` -} - -type DistributionMsg struct { - SetWithdrawAddress *SetWithdrawAddressMsg `json:"set_withdraw_address,omitempty"` - WithdrawDelegatorReward *WithdrawDelegatorRewardMsg `json:"withdraw_delegator_reward,omitempty"` -} - -// SetWithdrawAddressMsg is translated to a [MsgSetWithdrawAddress](https://github.com/cosmos/cosmos-sdk/blob/v0.42.4/proto/cosmos/distribution/v1beta1/tx.proto#L29-L37). -// `delegator_address` is automatically filled with the current contract's address. -type SetWithdrawAddressMsg struct { - // Address contains the `delegator_address` of a MsgSetWithdrawAddress - Address string `json:"address"` -} - -// WithdrawDelegatorRewardMsg is translated to a [MsgWithdrawDelegatorReward](https://github.com/cosmos/cosmos-sdk/blob/v0.42.4/proto/cosmos/distribution/v1beta1/tx.proto#L42-L50). -// `delegator_address` is automatically filled with the current contract's address. -type WithdrawDelegatorRewardMsg struct { - // Validator contains `validator_address` of a MsgWithdrawDelegatorReward - Validator string `json:"validator"` -} - -// StargateMsg is encoded the same way as a protobof [Any](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). -// This is the same structure as messages in `TxBody` from [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-020-protobuf-transaction-encoding.md) -type StargateMsg struct { - TypeURL string `json:"type_url"` - Value []byte `json:"value"` -} - -type WasmMsg struct { - Execute *v010msgtypes.ExecuteMsg `json:"execute,omitempty"` - Instantiate *v010msgtypes.InstantiateMsg `json:"instantiate,omitempty"` - Migrate *v010msgtypes.MigrateMsg `json:"migrate,omitempty"` - UpdateAdmin *v010msgtypes.UpdateAdminMsg `json:"update_admin,omitempty"` - ClearAdmin *v010msgtypes.ClearAdminMsg `json:"clear_admin,omitempty"` -} diff --git a/go-cosmwasm/types/v1/subcall.go b/go-cosmwasm/types/v1/subcall.go deleted file mode 100644 index 3502e854d..000000000 --- a/go-cosmwasm/types/v1/subcall.go +++ /dev/null @@ -1,124 +0,0 @@ -package v1types - -import ( - "encoding/json" - "fmt" -) - -type replyOn int - -const ( - ReplyAlways replyOn = iota - ReplySuccess - ReplyError - ReplyNever -) - -var fromReplyOn = map[replyOn]string{ - ReplyAlways: "always", - ReplySuccess: "success", - ReplyError: "error", - ReplyNever: "never", -} - -var toReplyOn = map[string]replyOn{ - "always": ReplyAlways, - "success": ReplySuccess, - "error": ReplyError, - "never": ReplyNever, -} - -func (r replyOn) String() string { - return fromReplyOn[r] -} - -func (r replyOn) MarshalJSON() ([]byte, error) { - return json.Marshal(r.String()) -} - -func (r *replyOn) UnmarshalJSON(b []byte) error { - var j string - err := json.Unmarshal(b, &j) - if err != nil { - return err - } - - voteOption, ok := toReplyOn[j] - if !ok { - return fmt.Errorf("invalid reply_on value '%s'", j) - } - *r = voteOption - return nil -} - -type SubMsgResponse struct { - Events Events `json:"events"` - Data []byte `json:"data,omitempty"` -} - -// SubMsgResult is the raw response we return from wasmd after executing a SubMsg. -// This mirrors Rust's SubMsgResult. -type SubMsgResult struct { - Ok *SubMsgResponse `json:"ok,omitempty"` - Err string `json:"error,omitempty"` -} - -// SubMsg wraps a CosmosMsg with some metadata for handling replies (ID) and optionally -// limiting the gas usage (GasLimit) -type SubMsg struct { - ID uint64 `json:"id"` - Msg CosmosMsg `json:"msg"` - GasLimit *uint64 `json:"gas_limit,omitempty"` - ReplyOn replyOn `json:"reply_on"` - WasMsgEncrypted bool `json:"was_msg_encrypted"` -} - -type Reply struct { - ID []byte `json:"id"` - Result SubMsgResult `json:"result"` - WasOrigMsgEncrypted bool `json:"was_orig_msg_encrypted"` - IsEncrypted bool `json:"is_encrypted"` -} - -// SubcallResult is the raw response we return from the sdk -> reply after executing a SubMsg. -// This is mirrors Rust's ContractResult. -type SubcallResult struct { - Ok *SubcallResponse `json:"ok,omitempty"` - Err string `json:"error,omitempty"` -} - -type SubcallResponse struct { - Events Events `json:"events"` - Data []byte `json:"data,omitempty"` -} - -// Events must encode empty array as [] -type Events []Event - -// MarshalJSON ensures that we get [] for empty arrays -func (e Events) MarshalJSON() ([]byte, error) { - if len(e) == 0 { - return []byte("[]"), nil - } - var raw []Event = e - return json.Marshal(raw) -} - -// UnmarshalJSON ensures that we get [] for empty arrays -func (e *Events) UnmarshalJSON(data []byte) error { - // make sure we deserialize [] back to null - if string(data) == "[]" || string(data) == "null" { - return nil - } - var raw []Event - if err := json.Unmarshal(data, &raw); err != nil { - return err - } - *e = raw - return nil -} - -type Event struct { - Type string `json:"type"` - Attributes LogAttributes `json:"attributes"` -} diff --git a/go-cosmwasm/types/v1/type.go b/go-cosmwasm/types/v1/type.go deleted file mode 100644 index e4ffa3128..000000000 --- a/go-cosmwasm/types/v1/type.go +++ /dev/null @@ -1,8 +0,0 @@ -package v1types - -// Contains static analysis info of the contract (the Wasm code to be precise). -// This type is returned by VM.AnalyzeCode(). -type AnalysisReport struct { - HasIBCEntryPoints bool - RequiredFeatures string -} diff --git a/go.mod b/go.mod index fcfce57b9..5b42f3815 100644 --- a/go.mod +++ b/go.mod @@ -217,7 +217,7 @@ require ( github.com/regen-network/cosmos-proto v0.3.1 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/rs/cors v1.8.2 // indirect - github.com/rs/zerolog v1.29.1 // indirect + github.com/rs/zerolog v1.27.0 // indirect github.com/ryancurrah/gomodguard v1.3.0 // indirect github.com/ryanrolds/sqlclosecheck v0.4.0 // indirect github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect @@ -292,8 +292,6 @@ replace ( github.com/cosmos/iavl v0.19.5 => github.com/cosmos/iavl v0.19.4 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // Informal Tendermint fork to be replaced with skip-mev tendermint - // github.com/tendermint/tendermint => github.com/skip-mev/mev-tendermint v0.34.24-mev.18 - github.com/tendermint/tendermint => /Users/chandragupta/go/src/github.com/skip-mev/mev-tendermint - // github.com/tendermint/tendermint => github.com/scrtlabs/tendermint v1.9.0-scrt + github.com/tendermint/tendermint => github.com/skip-mev/mev-tendermint v0.34.24-mev.18 google.golang.org/grpc => google.golang.org/grpc v1.33.2 ) diff --git a/go.sum b/go.sum index 827248e5a..79a0866ac 100644 --- a/go.sum +++ b/go.sum @@ -764,7 +764,6 @@ github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+ github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= @@ -2207,10 +2206,8 @@ github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= -github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= -github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= @@ -2292,6 +2289,8 @@ github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvR github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/sivchari/tenv v1.7.1 h1:PSpuD4bu6fSmtWMxSGWcvqUUgIn7k3yOJhOIzVWn8Ak= github.com/sivchari/tenv v1.7.1/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/skip-mev/mev-tendermint v0.34.24-mev.18 h1:Xqq3vtJxE2cSBUAIXproDiUwW9qXkHNgNSFLS07/QQA= +github.com/skip-mev/mev-tendermint v0.34.24-mev.18/go.mod h1:m3iKcdA/hSGrBwhwgg1fre71te6Ln6SZEstGroM5CJs= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= diff --git a/x/market/abci.go b/x/market/abci.go index 17aee5333..998a6c57d 100644 --- a/x/market/abci.go +++ b/x/market/abci.go @@ -1,8 +1,6 @@ package market import ( - "fmt" - assetkeeper "github.com/comdex-official/comdex/x/asset/keeper" bandkeeper "github.com/comdex-official/comdex/x/bandoracle/keeper" bandoraclemoduletypes "github.com/comdex-official/comdex/x/bandoracle/types" @@ -62,10 +60,4 @@ func BeginBlocker(ctx sdk.Context, _ abci.RequestBeginBlock, k keeper.Keeper, ba k.SetTwa(ctx, twa) } } - fmt.Println("----------+++++++++++--------------") - fmt.Println("---------") - fmt.Println(k.GetRandomSeed(ctx, ctx.BlockHeight())) - fmt.Println("---------") - fmt.Println("----------+++++++++++--------------") - -} +} \ No newline at end of file diff --git a/x/market/keeper/seed.go b/x/market/keeper/seed.go deleted file mode 100644 index e1b90c9c4..000000000 --- a/x/market/keeper/seed.go +++ /dev/null @@ -1,24 +0,0 @@ -package keeper - -import ( - "fmt" - "encoding/hex" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/comdex-official/comdex/x/market/types" -) - -func (k Keeper) GetRandomSeed(ctx sdk.Context, height int64) []byte { - store := ctx.KVStore(k.key) - - random := store.Get(types.GetRandomKey(height)) - - return random -} - -func (k Keeper) SetRandomSeed(ctx sdk.Context, random []byte) { - store := ctx.KVStore(k.key) - - ctx.Logger().Info(fmt.Sprintf("Setting random: %s", hex.EncodeToString(random))) - - store.Set(types.GetRandomKey(ctx.BlockHeight()), random) -} diff --git a/x/market/module.go b/x/market/module.go index 840f6a864..7829efec0 100644 --- a/x/market/module.go +++ b/x/market/module.go @@ -1,14 +1,12 @@ package market import ( - "fmt" "context" "encoding/json" "math/rand" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" - // "github.com/comdex-official/comdex/go-cosmwasm/api" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" @@ -127,47 +125,6 @@ func (a AppModule) RegisterServices(configurator module.Configurator) { func (a AppModule) BeginBlock(ctx sdk.Context, req abcitypes.RequestBeginBlock) { BeginBlocker(ctx, req, a.keeper, a.bandKeeper, a.assetKeeper) - - // header, err := req.Header.Marshal() - // if err != nil { - // ctx.Logger().Error("Failed to marshal header") - // panic(err) - // } - - // There is a possibility, specifically was found on upgrade block, when there are no pre-commits at all (beginBlock.Commit == nil) - // In this case Marshal will fail with a Seg Fault. - // The fix below it a temporary fix until we will investigate the issue in tendermint. - if req.Commit == nil { - ctx.Logger().Info(fmt.Sprintf("Skipping commit submission to the enclave for block %d\n", req.Header.Height)) - return - } - - commit, err := req.Commit.Marshal() - if err != nil { - ctx.Logger().Error("Failed to marshal commit") - panic(err) - } - - data, err := req.Data.Marshal() - if err != nil { - ctx.Logger().Error("Failed to marshal data") - panic(err) - } - - if req.Header.EncryptedRandom != nil { - randomAndProof := append(req.Header.EncryptedRandom.Random, req.Header.EncryptedRandom.Proof...,) //nolint:all - ProofAppend := append(commit, data...) - // random, err := api.SubmitBlockSignatures(header, commit, data, randomAndProof) - // if err != nil { - // ctx.Logger().Error("Failed to submit block signatures") - // panic(err) - // } - - // a.keeper.SetRandomSeed(ctx, random) - a.keeper.SetRandomSeed(ctx, append(randomAndProof, ProofAppend...)) - } else { - println("No random got from TM header") - } } func (a AppModule) EndBlock(_ sdk.Context, _ abcitypes.RequestEndBlock) []abcitypes.ValidatorUpdate { @@ -188,4 +145,4 @@ func (a AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} func (a AppModule) WeightedOperations(_ module.SimulationState) []simulation.WeightedOperation { return nil -} +} \ No newline at end of file diff --git a/x/market/types/keys.go b/x/market/types/keys.go index 013ba5007..5982f08a3 100644 --- a/x/market/types/keys.go +++ b/x/market/types/keys.go @@ -1,7 +1,6 @@ package types import ( - "encoding/binary" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -13,18 +12,8 @@ const ( StoreKey = ModuleName ) -var ( - TwaKeyPrefix = []byte{0x24} - RandomPrefix = []byte{0x0A} -) +var TwaKeyPrefix = []byte{0x24} func TwaKey(id uint64) []byte { return append(TwaKeyPrefix, sdk.Uint64ToBigEndian(id)...) -} - -// GetRandomKey returns the key for the random seed for each block -func GetRandomKey(height int64) []byte { - b := make([]byte, 8) - binary.LittleEndian.PutUint64(b, uint64(height)) - return append(RandomPrefix, b...) } \ No newline at end of file From 0564783a542884c4ddb4e4da61ef1531fc9a5098 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 28 Aug 2023 14:42:31 +0530 Subject: [PATCH 35/90] linting --- x/market/abci.go | 2 +- x/market/module.go | 2 +- x/market/types/keys.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/x/market/abci.go b/x/market/abci.go index 998a6c57d..67ef3a206 100644 --- a/x/market/abci.go +++ b/x/market/abci.go @@ -60,4 +60,4 @@ func BeginBlocker(ctx sdk.Context, _ abci.RequestBeginBlock, k keeper.Keeper, ba k.SetTwa(ctx, twa) } } -} \ No newline at end of file +} diff --git a/x/market/module.go b/x/market/module.go index 7829efec0..790075616 100644 --- a/x/market/module.go +++ b/x/market/module.go @@ -145,4 +145,4 @@ func (a AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} func (a AppModule) WeightedOperations(_ module.SimulationState) []simulation.WeightedOperation { return nil -} \ No newline at end of file +} diff --git a/x/market/types/keys.go b/x/market/types/keys.go index 5982f08a3..b2690ee55 100644 --- a/x/market/types/keys.go +++ b/x/market/types/keys.go @@ -16,4 +16,4 @@ var TwaKeyPrefix = []byte{0x24} func TwaKey(id uint64) []byte { return append(TwaKeyPrefix, sdk.Uint64ToBigEndian(id)...) -} \ No newline at end of file +} From 68f1a7ea2512aae2cf02be5ef91d21cc77559fd1 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 28 Aug 2023 16:56:59 +0530 Subject: [PATCH 36/90] wasm permissionless and contract whitelisted for bindings --- app/app.go | 10 ++ app/upgrades/testnet/v12_1/constants.go | 15 ++ app/upgrades/testnet/v12_1/upgrades.go | 36 +++++ app/wasm/message_plugin.go | 183 ++++++++++++++++++++++++ 4 files changed, 244 insertions(+) create mode 100644 app/upgrades/testnet/v12_1/constants.go create mode 100644 app/upgrades/testnet/v12_1/upgrades.go diff --git a/app/app.go b/app/app.go index b1a75c8b7..a99d35666 100644 --- a/app/app.go +++ b/app/app.go @@ -191,6 +191,7 @@ import ( cwasm "github.com/comdex-official/comdex/app/wasm" mv12 "github.com/comdex-official/comdex/app/upgrades/mainnet/v12" + tv12_1 "github.com/comdex-official/comdex/app/upgrades/testnet/v12_1" ) const ( @@ -1456,6 +1457,11 @@ func (a *App) registerUpgradeHandlers() { mv12.UpgradeName, mv12.CreateUpgradeHandlerV12(a.mm, a.configurator, a.ICQKeeper, a.NewliqKeeper, a.NewaucKeeper, a.BankKeeper, a.CollectorKeeper, a.LendKeeper, a.AuctionKeeper, a.LiquidationKeeper, a.AssetKeeper), ) + case upgradeInfo.Name == tv12_1.UpgradeName: + a.UpgradeKeeper.SetUpgradeHandler( + tv12_1.UpgradeName, + tv12_1.CreateUpgradeHandlerV121(a.mm, a.configurator, a.WasmKeeper), + ) } var storeUpgrades *storetypes.StoreUpgrades @@ -1479,6 +1485,10 @@ func upgradeHandlers(upgradeInfo storetypes.UpgradeInfo, a *App, storeUpgrades * auctionsV2types.ModuleName, }, } + case upgradeInfo.Name == tv12_1.UpgradeName && !a.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height): + storeUpgrades = &storetypes.StoreUpgrades{ + Added: []string{}, + } } return storeUpgrades } diff --git a/app/upgrades/testnet/v12_1/constants.go b/app/upgrades/testnet/v12_1/constants.go new file mode 100644 index 000000000..681585830 --- /dev/null +++ b/app/upgrades/testnet/v12_1/constants.go @@ -0,0 +1,15 @@ +package v12_1 + +const ( + UpgradeName = "v12.1.0" + UpgradeHeight = "" + UpgradeInfo = `'{ + "binaries": { + "darwin/arm64":"", + "darwin/x86_64":"", + "linux/arm64":"", + "linux/x86_64":"", + "windows/x86_64":"" + } + }'` +) diff --git a/app/upgrades/testnet/v12_1/upgrades.go b/app/upgrades/testnet/v12_1/upgrades.go new file mode 100644 index 000000000..e2b8e97b6 --- /dev/null +++ b/app/upgrades/testnet/v12_1/upgrades.go @@ -0,0 +1,36 @@ +package v12_1 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" +) + +// An error occurred during the creation of the CMST/STJUNO pair, as it was mistakenly created in the Harbor app (ID-2) instead of the cSwap app (ID-1). +// As a result, the transaction fee was charged to the creator of the pair, who is entitled to a refund. +// The provided code is designed to initiate the refund process. +// The transaction hash for the pair creation is EF408AD53B8BB0469C2A593E4792CB45552BD6495753CC2C810A1E4D82F3982F. +// MintScan - https://www.mintscan.io/comdex/txs/EF408AD53B8BB0469C2A593E4792CB45552BD6495753CC2C810A1E4D82F3982F + +func CreateUpgradeHandlerV121( + mm *module.Manager, + configurator module.Configurator, + wasmKeeper wasmkeeper.Keeper, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + ctx.Logger().Info("Applying test net upgrade - v.12.1.0") + + vm, err := mm.RunMigrations(ctx, configurator, fromVM) + if err != nil { + return nil, err + } + + // update wasm to permissionless + wasmParams := wasmKeeper.GetParams(ctx) + wasmParams.CodeUploadAccess = wasmtypes.AllowEverybody + wasmKeeper.SetParams(ctx, wasmParams) + return vm, err + } +} diff --git a/app/wasm/message_plugin.go b/app/wasm/message_plugin.go index abc545ea5..4eeef075d 100644 --- a/app/wasm/message_plugin.go +++ b/app/wasm/message_plugin.go @@ -62,6 +62,9 @@ type CustomMessenger struct { var _ wasmkeeper.Messenger = (*CustomMessenger)(nil) +var comdex1 = []string{"comdex17p9rzwnnfxcjp32un9ug7yhhzgtkhvl9jfksztgw5uh69wac2pgs4jg6dx", "comdex1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrqdfklyz"} +var testnet3 = []string{"comdex1qwlgtx52gsdu7dtp0cekka5zehdl0uj3fhp9acg325fvgs8jdzksjvgq6q", "comdex1ghd753shjuwexxywmgs4xz7x2q732vcnkm6h2pyv9s6ah3hylvrqfy9rd8"} + func (m *CustomMessenger) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) ([]sdk.Event, [][]byte, error) { if msg.Custom != nil { // only handle the happy path where this is really minting / swapping ... @@ -135,6 +138,15 @@ func (m *CustomMessenger) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddre } func (m *CustomMessenger) whitelistAssetLocker(ctx sdk.Context, contractAddr sdk.AccAddress, whiteListAsset *bindings.MsgWhiteListAssetLocker) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := WhiteListAsset(m.lockerKeeper, ctx, contractAddr.String(), whiteListAsset) if err != nil { return nil, nil, sdkerrors.Wrap(err, "white list asset") @@ -159,6 +171,15 @@ func WhiteListAsset(lockerKeeper lockerkeeper.Keeper, ctx sdk.Context, contractA } func (m *CustomMessenger) whitelistAppIDLockerRewards(ctx sdk.Context, contractAddr sdk.AccAddress, whiteListAsset *bindings.MsgWhitelistAppIDLockerRewards) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := WhitelistAppIDLockerRewards(m.rewardsKeeper, ctx, contractAddr.String(), whiteListAsset) if err != nil { return nil, nil, sdkerrors.Wrap(err, "white list appId locker rewards") @@ -183,6 +204,15 @@ func WhitelistAppIDLockerRewards(rewardsKeeper rewardskeeper.Keeper, ctx sdk.Con } func (m *CustomMessenger) whitelistAppIDVaultInterest(ctx sdk.Context, contractAddr sdk.AccAddress, whiteListAsset *bindings.MsgWhitelistAppIDVaultInterest) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := WhitelistAppIDVaultInterest(m.rewardsKeeper, ctx, contractAddr.String(), whiteListAsset) if err != nil { return nil, nil, sdkerrors.Wrap(err, "white list appId vault Interest") @@ -206,6 +236,15 @@ func WhitelistAppIDVaultInterest(rewardsKeeper rewardskeeper.Keeper, ctx sdk.Con } func (m *CustomMessenger) AddExtendedPairsVault(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgAddExtendedPairsVault) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgAddExtendedPairsVault(m.assetKeeper, ctx, contractAddr, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "AddExtendedPairsVault error") @@ -224,6 +263,15 @@ func MsgAddExtendedPairsVault(assetKeeper assetkeeper.Keeper, ctx sdk.Context, c } func (m *CustomMessenger) SetCollectorLookupTable(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgSetCollectorLookupTable) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgSetCollectorLookupTable(m.collectorKeeper, ctx, contractAddr, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "SetCollectorLookupTable error") @@ -242,6 +290,15 @@ func MsgSetCollectorLookupTable(collectorKeeper collectorkeeper.Keeper, ctx sdk. } func (m *CustomMessenger) SetAuctionMappingForApp(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgSetAuctionMappingForApp) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgSetAuctionMappingForApp(m.collectorKeeper, ctx, contractAddr, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "SetAuctionMappingForApp error") @@ -260,6 +317,15 @@ func MsgSetAuctionMappingForApp(collectorKeeper collectorkeeper.Keeper, ctx sdk. } func (m *CustomMessenger) UpdatePairsVault(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgUpdatePairsVault) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgUpdatePairsVault(m.assetKeeper, ctx, contractAddr, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "UpdatePairsVault error") @@ -278,6 +344,15 @@ func MsgUpdatePairsVault(assetKeeper assetkeeper.Keeper, ctx sdk.Context, contra } func (m *CustomMessenger) UpdateCollectorLookupTable(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgUpdateCollectorLookupTable) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgUpdateCollectorLookupTable(m.collectorKeeper, ctx, contractAddr, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "UpdateCollectorLookupTable error") @@ -296,6 +371,15 @@ func MsgUpdateCollectorLookupTable(collectorKeeper collectorkeeper.Keeper, ctx s } func (m *CustomMessenger) RemoveWhitelistAssetLocker(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgRemoveWhitelistAssetLocker) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgRemoveWhitelistAssetLocker(m.rewardsKeeper, ctx, contractAddr, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "RemoveWhitelistAssetRewards error") @@ -314,6 +398,15 @@ func MsgRemoveWhitelistAssetLocker(rewardsKeeper rewardskeeper.Keeper, ctx sdk.C } func (m *CustomMessenger) RemoveWhitelistAppIDVaultInterest(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgRemoveWhitelistAppIDVaultInterest) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgRemoveWhitelistAppIDVaultInterest(m.rewardsKeeper, ctx, contractAddr, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "RemoveWhitelistAppIdVaultInterest error") @@ -332,6 +425,15 @@ func MsgRemoveWhitelistAppIDVaultInterest(rewardsKeeper rewardskeeper.Keeper, ct } func (m *CustomMessenger) WhitelistAppIDLiquidation(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgWhitelistAppIDLiquidation) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgWhitelistAppIDLiquidation(m.liquidationKeeper, ctx, contractAddr, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "WhitelistAppIdLiquidation error") @@ -350,6 +452,15 @@ func MsgWhitelistAppIDLiquidation(liquidationKeeper liquidationkeeper.Keeper, ct } func (m *CustomMessenger) RemoveWhitelistAppIDLiquidation(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgRemoveWhitelistAppIDLiquidation) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgRemoveWhitelistAppIDLiquidation(m.liquidationKeeper, ctx, contractAddr, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "RemoveWhitelistAppIdLiquidation error") @@ -368,6 +479,15 @@ func MsgRemoveWhitelistAppIDLiquidation(liquidationKeeper liquidationkeeper.Keep } func (m *CustomMessenger) AddAuctionParams(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgAddAuctionParams) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgAddAuctionParams(m.auctionKeeper, ctx, contractAddr, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "AddAuctionParams error") @@ -386,6 +506,15 @@ func MsgAddAuctionParams(auctionKeeper auctionkeeper.Keeper, ctx sdk.Context, co } func (m *CustomMessenger) BurnGovTokensForApp(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgBurnGovTokensForApp) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgBurnGovTokensForApp(m.tokenMintKeeper, ctx, contractAddr, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "BurnGovTokensForApp error") @@ -404,6 +533,15 @@ func MsgBurnGovTokensForApp(tokenMintKeeper tokenmintkeeper.Keeper, ctx sdk.Cont } func (m *CustomMessenger) AddESMTriggerParams(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgAddESMTriggerParams) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[0] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgAddESMTriggerParams(m.esmKeeper, ctx, contractAddr, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "BurnGovTokensForApp error") @@ -422,6 +560,15 @@ func MsgAddESMTriggerParams(esmKeeper esmkeeper.Keeper, ctx sdk.Context, contrac } func (m *CustomMessenger) ExecuteAddEmissionRewards(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgEmissionRewards) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[1] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + }else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[1] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgAddEmissionRewards(m.vaultKeeper, ctx, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "Emission rewards error") @@ -430,6 +577,15 @@ func (m *CustomMessenger) ExecuteAddEmissionRewards(ctx sdk.Context, contractAdd } func (m *CustomMessenger) ExecuteAddEmissionPoolRewards(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgEmissionPoolRewards) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[1] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[1] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgAddEmissionPoolRewards(m.liquiditykeeper, ctx, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "Emission pool rewards error") @@ -458,6 +614,15 @@ func MsgAddEmissionPoolRewards(liquiditykeeper liquidityKeeper.Keeper, ctx sdk.C } func (m *CustomMessenger) ExecuteFoundationEmission(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgFoundationEmission) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[1] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[1] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgFoundationEmission(m.tokenMintKeeper, ctx, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "Foundation Emission rewards error") @@ -476,6 +641,15 @@ func MsgFoundationEmission(tokenmintKeeper tokenmintkeeper.Keeper, ctx sdk.Conte } func (m *CustomMessenger) ExecuteMsgRebaseMint(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgRebaseMint) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[1] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[1] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgRebaseMint(m.tokenMintKeeper, ctx, a) if err != nil { return nil, nil, sdkerrors.Wrap(err, "Foundation Emission rewards error") @@ -494,6 +668,15 @@ func MsgRebaseMint(tokenmintKeeper tokenmintkeeper.Keeper, ctx sdk.Context, } func (m *CustomMessenger) ExecuteMsgGetSurplusFund(ctx sdk.Context, contractAddr sdk.AccAddress, a *bindings.MsgGetSurplusFund) ([]sdk.Event, [][]byte, error) { + if ctx.ChainID() == "comdex-1" { + if contractAddr.String() != comdex1[1] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } else if ctx.ChainID() == "comdex-test3" { + if contractAddr.String() != testnet3[1] { + return nil, nil, sdkerrors.ErrInvalidAddress + } + } err := MsgGetSurplusFund(m.collectorKeeper, ctx, a, contractAddr) if err != nil { return nil, nil, sdkerrors.Wrap(err, "Execute surplus fund rewards error") From d65a1f48503d9284fe6bf4fc682b2e2261de8522 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Sun, 3 Sep 2023 19:42:41 +0530 Subject: [PATCH 37/90] sdk upgraded to v47.5 --- go.mod | 29 +++++++++++++++------------- go.sum | 60 +++++++++++++++++++++++++++++++++------------------------- 2 files changed, 50 insertions(+), 39 deletions(-) diff --git a/go.mod b/go.mod index bfb9cc734..c4d0c1017 100644 --- a/go.mod +++ b/go.mod @@ -4,14 +4,14 @@ go 1.20 require ( cosmossdk.io/errors v1.0.0 - cosmossdk.io/math v1.0.1 + cosmossdk.io/math v1.1.2 cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff github.com/CosmWasm/wasmd v0.40.2 github.com/CosmWasm/wasmvm v1.3.0 github.com/bandprotocol/bandchain-packet v0.0.3 github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 - github.com/cosmos/cosmos-sdk v0.47.4 + github.com/cosmos/cosmos-sdk v0.47.5 github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.0.0-20230726182236-3a9d46a7c2a4 github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4 @@ -51,8 +51,8 @@ require ( cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.6.1 // indirect - cosmossdk.io/depinject v1.0.0-alpha.3 // indirect - cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca // indirect + cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/log v1.2.1 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect @@ -89,6 +89,9 @@ require ( github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect + github.com/cockroachdb/errors v1.10.0 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect @@ -120,6 +123,7 @@ require ( github.com/firefart/nonamedreturns v1.0.4 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/fzipp/gocyclo v0.6.0 // indirect + github.com/getsentry/sentry-go v0.23.0 // indirect github.com/gin-gonic/gin v1.9.0 // indirect github.com/go-critic/go-critic v0.8.1 // indirect github.com/go-kit/kit v0.12.0 // indirect @@ -195,6 +199,8 @@ require ( github.com/kisielk/gotool v1.0.0 // indirect github.com/kkHAIKE/contextcheck v1.1.3 // indirect github.com/klauspost/compress v1.16.3 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/kulti/thelper v0.6.3 // indirect github.com/kunwardeep/paralleltest v1.0.7 // indirect github.com/kyoh86/exportloopref v0.1.11 // indirect @@ -243,8 +249,9 @@ require ( github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rivo/uniseg v0.2.0 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/rs/cors v1.8.3 // indirect - github.com/rs/zerolog v1.29.1 // indirect + github.com/rs/zerolog v1.30.0 // indirect github.com/ryancurrah/gomodguard v1.3.0 // indirect github.com/ryanrolds/sqlclosecheck v0.4.0 // indirect github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect @@ -291,15 +298,15 @@ require ( go.uber.org/multierr v1.10.0 // indirect go.uber.org/zap v1.24.0 // indirect golang.org/x/crypto v0.11.0 // indirect - golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect + golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect golang.org/x/exp/typeparams v0.0.0-20230213192124-5e25df0256eb // indirect - golang.org/x/mod v0.10.0 // indirect + golang.org/x/mod v0.11.0 // indirect golang.org/x/net v0.12.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.10.0 // indirect + golang.org/x/sys v0.11.0 // indirect golang.org/x/term v0.10.0 // indirect - golang.org/x/text v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect golang.org/x/tools v0.9.3 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.126.0 // indirect @@ -317,8 +324,4 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) -// github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 -// github.com/cosmos/cosmos-sdk => /Users/chandragupta/go/src/github.com/cosmos/cosmos-sdk -//breaking changes -// github.com/cosmos/iavl v0.19.5 => github.com/cosmos/iavl v0.19.4 replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 diff --git a/go.sum b/go.sum index dfc75663f..2df7a1756 100644 --- a/go.sum +++ b/go.sum @@ -200,14 +200,14 @@ cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s= cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= -cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= -cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= +cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= +cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= -cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca h1:msenprh2BLLRwNT7zN56TbBHOGk/7ARQckXHxXyvjoQ= -cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca/go.mod h1:PkIAKXZvaxrTRc++z53XMRvFk8AcGGWYHcMIPzVYX9c= -cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= -cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= +cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= +cosmossdk.io/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM= +cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff h1:P1ialzTepD1oxdNPYc5N8Eggq3RdejZq3cJs8YYMs9Y= cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff/go.mod h1:AKzx6Mb544LjJ9RHmGFHjY9rEOLiUAi8I0F727TR0dY= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= @@ -288,7 +288,6 @@ github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= 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= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -440,8 +439,13 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= -github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= +github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= github.com/coinbase/rosetta-sdk-go v0.6.10/go.mod h1:J/JFMsfcePrjJZkwQFLh+hJErkAmdm9Iyy3D5Y0LfXo= @@ -478,8 +482,8 @@ github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= github.com/cosmos/cosmos-sdk v0.43.0/go.mod h1:ctcrTEAhei9s8O3KSNvL0dxe+fVQGp07QyRb/7H9JYE= -github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= -github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= +github.com/cosmos/cosmos-sdk v0.47.5 h1:n1+WjP/VM/gAEOx3TqU2/Ny734rj/MX1kpUnn7zVJP8= +github.com/cosmos/cosmos-sdk v0.47.5/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -517,8 +521,6 @@ github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJF github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= -github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= @@ -638,6 +640,8 @@ github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlya github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= +github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -649,6 +653,7 @@ github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1T github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-critic/go-critic v0.8.1 h1:16omCF1gN3gTzt4j4J6fKI/HnRojhEp+Eks6EuKw3vw= github.com/go-critic/go-critic v0.8.1/go.mod h1:kpzXl09SIJX1cr9TB/g/sAG+eFEl7ZS9f9cqvZtyNl0= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= 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= @@ -717,7 +722,6 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= @@ -1084,6 +1088,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -1309,6 +1314,8 @@ github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7c github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= 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/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= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -1387,7 +1394,6 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5X github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= -github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= @@ -1398,17 +1404,19 @@ github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRr github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= -github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= -github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= +github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1723,8 +1731,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230213192124-5e25df0256eb h1:WGs/bGIWYyAY5PVgGGMXqGGCxSJz4fpoUExb/vgqNCU= @@ -1762,8 +1770,8 @@ golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -2007,8 +2015,8 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -2029,8 +2037,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From 2167f6084c4c85e2411c92314d35138ee5073a90 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 4 Sep 2023 01:17:57 +0530 Subject: [PATCH 38/90] ibc-go bump, test-suite fix, rate-limit removed --- app/app.go | 51 +- go.mod | 13 +- go.sum | 22 +- testutil/network/network.go | 1 + x/asset/types/codec.go | 1 + x/auction/types/codec.go | 1 + x/auctionsV2/types/codec.go | 1 + x/bandoracle/expected/keeper.go | 5 +- x/bandoracle/keeper/oracle.go | 52 +- x/esm/types/codec.go | 1 + x/ibcratelimit/Beaker.toml | 1 - x/ibcratelimit/Cargo.lock | 914 ------------------ x/ibcratelimit/Cargo.toml | 16 - x/ibcratelimit/README.md | 307 ------ x/ibcratelimit/bytecode/rate_limiter.wasm | Bin 264433 -> 0 bytes x/ibcratelimit/client/cli/query.go | 21 - x/ibcratelimit/client/grpc/grpc_query.go | 32 - x/ibcratelimit/client/query_proto_wrap.go | 21 - x/ibcratelimit/client/queryproto/query.pb.go | 544 ----------- .../client/queryproto/query.pb.gw.go | 153 --- .../contracts/rate-limiter/.cargo/config | 3 - .../contracts/rate-limiter/Cargo.toml | 51 - .../contracts/rate-limiter/examples/schema.rs | 13 - .../contracts/rate-limiter/src/contract.rs | 106 -- .../rate-limiter/src/contract_tests.rs | 399 -------- .../contracts/rate-limiter/src/error.rs | 29 - .../contracts/rate-limiter/src/execute.rs | 249 ----- .../contracts/rate-limiter/src/helpers.rs | 61 -- .../rate-limiter/src/integration_tests.rs | 417 -------- .../contracts/rate-limiter/src/lib.rs | 21 - .../contracts/rate-limiter/src/management.rs | 250 ----- .../contracts/rate-limiter/src/msg.rs | 105 -- .../contracts/rate-limiter/src/packet.rs | 482 --------- .../contracts/rate-limiter/src/query.rs | 12 - .../contracts/rate-limiter/src/state.rs | 372 ------- .../contracts/rate-limiter/src/sudo.rs | 193 ---- x/ibcratelimit/genesis.go | 20 - x/ibcratelimit/genesis_test.go | 43 - x/ibcratelimit/ibc_middleware_test.go | 540 ----------- x/ibcratelimit/ibc_module.go | 245 ----- x/ibcratelimit/ibcratelimitmodule/module.go | 136 --- x/ibcratelimit/ics4_wrapper.go | 109 --- x/ibcratelimit/rate_limit.go | 154 --- x/ibcratelimit/types/errors.go | 11 - x/ibcratelimit/types/events.go | 8 - x/ibcratelimit/types/genesis.go | 17 - x/ibcratelimit/types/genesis.pb.go | 329 ------- x/ibcratelimit/types/keys.go | 12 - x/ibcratelimit/types/params.go | 73 -- x/ibcratelimit/types/params.pb.go | 322 ------ x/ibcratelimit/types/params_test.go | 79 -- x/ibcratelimit/types/query.pb.go | 542 ----------- x/ibcratelimit/types/query.pb.gw.go | 153 --- x/lend/types/codec.go | 1 + x/liquidation/types/codec.go | 1 + x/liquidationsV2/types/codec.go | 1 + x/liquidity/amm/amm.go | 2 +- x/liquidity/client/testutil/suite.go | 9 +- x/liquidity/types/codec.go | 1 + x/locker/types/codec.go | 1 + x/market/expected/keeper.go | 4 +- x/rewards/types/codec.go | 1 + x/tokenmint/types/codec.go | 1 + x/vault/client/testutil/suite.go | 9 +- x/vault/types/codec.go | 1 + 65 files changed, 102 insertions(+), 7643 deletions(-) delete mode 100644 x/ibcratelimit/Beaker.toml delete mode 100644 x/ibcratelimit/Cargo.lock delete mode 100644 x/ibcratelimit/Cargo.toml delete mode 100644 x/ibcratelimit/README.md delete mode 100644 x/ibcratelimit/bytecode/rate_limiter.wasm delete mode 100644 x/ibcratelimit/client/cli/query.go delete mode 100644 x/ibcratelimit/client/grpc/grpc_query.go delete mode 100644 x/ibcratelimit/client/query_proto_wrap.go delete mode 100644 x/ibcratelimit/client/queryproto/query.pb.go delete mode 100644 x/ibcratelimit/client/queryproto/query.pb.gw.go delete mode 100644 x/ibcratelimit/contracts/rate-limiter/.cargo/config delete mode 100644 x/ibcratelimit/contracts/rate-limiter/Cargo.toml delete mode 100644 x/ibcratelimit/contracts/rate-limiter/examples/schema.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/contract.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/contract_tests.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/error.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/execute.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/helpers.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/integration_tests.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/lib.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/management.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/msg.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/packet.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/query.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/state.rs delete mode 100644 x/ibcratelimit/contracts/rate-limiter/src/sudo.rs delete mode 100644 x/ibcratelimit/genesis.go delete mode 100644 x/ibcratelimit/genesis_test.go delete mode 100644 x/ibcratelimit/ibc_middleware_test.go delete mode 100644 x/ibcratelimit/ibc_module.go delete mode 100644 x/ibcratelimit/ibcratelimitmodule/module.go delete mode 100644 x/ibcratelimit/ics4_wrapper.go delete mode 100644 x/ibcratelimit/rate_limit.go delete mode 100644 x/ibcratelimit/types/errors.go delete mode 100644 x/ibcratelimit/types/events.go delete mode 100644 x/ibcratelimit/types/genesis.go delete mode 100644 x/ibcratelimit/types/genesis.pb.go delete mode 100644 x/ibcratelimit/types/keys.go delete mode 100644 x/ibcratelimit/types/params.go delete mode 100644 x/ibcratelimit/types/params.pb.go delete mode 100644 x/ibcratelimit/types/params_test.go delete mode 100644 x/ibcratelimit/types/query.pb.go delete mode 100644 x/ibcratelimit/types/query.pb.gw.go diff --git a/app/app.go b/app/app.go index cc0aeb2f6..8d1a51fe2 100644 --- a/app/app.go +++ b/app/app.go @@ -28,9 +28,9 @@ import ( // "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/ibcratelimitmodule" // ibcratelimittypes "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/types" - ibcratelimit "github.com/comdex-official/comdex/x/ibcratelimit" - "github.com/comdex-official/comdex/x/ibcratelimit/ibcratelimitmodule" - ibcratelimittypes "github.com/comdex-official/comdex/x/ibcratelimit/types" + // ibcratelimit "github.com/comdex-official/comdex/x/ibcratelimit" + // "github.com/comdex-official/comdex/x/ibcratelimit/ibcratelimitmodule" + // ibcratelimittypes "github.com/comdex-official/comdex/x/ibcratelimit/types" packetforward "github.com/strangelove-ventures/packet-forward-middleware/v7/router" packetforwardkeeper "github.com/strangelove-ventures/packet-forward-middleware/v7/router/keeper" @@ -305,7 +305,7 @@ var ( liquidationsV2.AppModuleBasic{}, auctionsV2.AppModuleBasic{}, ibchooks.AppModuleBasic{}, - ibcratelimitmodule.AppModuleBasic{}, + // ibcratelimitmodule.AppModuleBasic{}, packetforward.AppModuleBasic{}, ) ) @@ -389,7 +389,7 @@ type App struct { // IBC modules // transfer module RawIcs20TransferAppModule ibctransfer.AppModule - RateLimitingICS4Wrapper *ibcratelimit.ICS4Wrapper + // RateLimitingICS4Wrapper *ibcratelimit.ICS4Wrapper TransferStack *ibchooks.IBCMiddleware Ics20WasmHooks *ibchooks.WasmHooks HooksICS4Wrapper ibchooks.ICS4Middleware @@ -489,7 +489,7 @@ func New( app.ParamsKeeper.Subspace(rewardstypes.ModuleName) app.ParamsKeeper.Subspace(liquidationsV2types.ModuleName) app.ParamsKeeper.Subspace(auctionsV2types.ModuleName) - app.ParamsKeeper.Subspace(ibcratelimittypes.ModuleName) + // app.ParamsKeeper.Subspace(ibcratelimittypes.ModuleName) app.ParamsKeeper.Subspace(icqtypes.ModuleName) app.ParamsKeeper.Subspace(packetforwardtypes.ModuleName).WithKeyTable(packetforwardtypes.ParamKeyTable()) @@ -889,9 +889,9 @@ func New( ) // Pass the contract keeper to all the structs (generally ICS4Wrappers for ibc middlewares) that need it - app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) - app.RateLimitingICS4Wrapper.ContractKeeper = app.ContractKeeper - app.Ics20WasmHooks.ContractKeeper = &app.WasmKeeper + // app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) + // app.RateLimitingICS4Wrapper.ContractKeeper = app.ContractKeeper + // app.Ics20WasmHooks.ContractKeeper = &app.WasmKeeper // register the proposal types govRouter := govtypesv1beta1.NewRouter() @@ -998,7 +998,7 @@ func New( rewards.NewAppModule(app.cdc, app.Rewardskeeper, app.AccountKeeper, app.BankKeeper), liquidationsV2.NewAppModule(app.cdc, app.NewliqKeeper, app.AccountKeeper, app.BankKeeper), auctionsV2.NewAppModule(app.cdc, app.NewaucKeeper, app.BankKeeper), - ibcratelimitmodule.NewAppModule(*app.RateLimitingICS4Wrapper), + // ibcratelimitmodule.NewAppModule(*app.RateLimitingICS4Wrapper), ibchooks.NewAppModule(app.AccountKeeper), icq.NewAppModule(*app.ICQKeeper), packetforward.NewAppModule(app.PacketForwardKeeper), @@ -1044,7 +1044,7 @@ func New( esmtypes.ModuleName, liquidationsV2types.ModuleName, auctionsV2types.ModuleName, - ibcratelimittypes.ModuleName, + // ibcratelimittypes.ModuleName, ibchookstypes.ModuleName, icqtypes.ModuleName, packetforwardtypes.ModuleName, @@ -1086,7 +1086,7 @@ func New( esmtypes.ModuleName, liquidationsV2types.ModuleName, auctionsV2types.ModuleName, - ibcratelimittypes.ModuleName, + // ibcratelimittypes.ModuleName, ibchookstypes.ModuleName, icqtypes.ModuleName, packetforwardtypes.ModuleName, @@ -1132,7 +1132,7 @@ func New( crisistypes.ModuleName, liquidationsV2types.ModuleName, auctionsV2types.ModuleName, - ibcratelimittypes.ModuleName, + // ibcratelimittypes.ModuleName, ibchookstypes.ModuleName, icqtypes.ModuleName, packetforwardtypes.ModuleName, @@ -1239,15 +1239,15 @@ func (a *App) WireICS20PreWasmKeeper( ) // ChannelKeeper wrapper for rate limiting SendPacket(). The wasmKeeper needs to be added after it's created - rateLimitingICS4Wrapper := ibcratelimit.NewICS4Middleware( - a.HooksICS4Wrapper, - &a.AccountKeeper, - // wasm keeper we set later. - nil, - a.BankBaseKeeper, - a.GetSubspace(ibcratelimittypes.ModuleName), - ) - a.RateLimitingICS4Wrapper = &rateLimitingICS4Wrapper + // rateLimitingICS4Wrapper := ibcratelimit.NewICS4Middleware( + // a.HooksICS4Wrapper, + // &a.AccountKeeper, + // // wasm keeper we set later. + // nil, + // a.BankBaseKeeper, + // a.GetSubspace(ibcratelimittypes.ModuleName), + // ) + // a.RateLimitingICS4Wrapper = &rateLimitingICS4Wrapper // Create Transfer Keepers transferKeeper := ibctransferkeeper.NewKeeper( @@ -1255,7 +1255,8 @@ func (a *App) WireICS20PreWasmKeeper( a.keys[ibctransfertypes.StoreKey], a.GetSubspace(ibctransfertypes.ModuleName), // The ICS4Wrapper is replaced by the rateLimitingICS4Wrapper instead of the channel - a.RateLimitingICS4Wrapper, + // a.RateLimitingICS4Wrapper, + a.PacketForwardKeeper, a.IbcKeeper.ChannelKeeper, &a.IbcKeeper.PortKeeper, a.AccountKeeper, @@ -1287,10 +1288,10 @@ func (a *App) WireICS20PreWasmKeeper( ) // RateLimiting IBC Middleware - rateLimitingTransferModule := ibcratelimit.NewIBCModule(packetForwardMiddleware, a.RateLimitingICS4Wrapper) + // rateLimitingTransferModule := ibcratelimit.NewIBCModule(packetForwardMiddleware, a.RateLimitingICS4Wrapper) // Hooks Middleware - hooksTransferModule := ibchooks.NewIBCMiddleware(&rateLimitingTransferModule, &a.HooksICS4Wrapper) + hooksTransferModule := ibchooks.NewIBCMiddleware(&packetForwardMiddleware, &a.HooksICS4Wrapper) a.TransferStack = &hooksTransferModule } diff --git a/go.mod b/go.mod index c4d0c1017..862c313a5 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,6 @@ module github.com/comdex-official/comdex go 1.20 require ( - cosmossdk.io/errors v1.0.0 cosmossdk.io/math v1.1.2 cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff github.com/CosmWasm/wasmd v0.40.2 @@ -21,17 +20,16 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.16.0 - github.com/regen-network/cosmos-proto v0.3.1 github.com/spf13/cast v1.5.1 github.com/spf13/cobra v1.7.0 github.com/stretchr/testify v1.8.4 google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 - google.golang.org/grpc v1.56.2 + google.golang.org/grpc v1.57.0 google.golang.org/protobuf v1.31.0 ) require ( - github.com/cosmos/ibc-go/v7 v7.1.0 + github.com/cosmos/ibc-go/v7 v7.3.0 github.com/cosmos/ics23/go v0.10.0 // indirect github.com/golangci/golangci-lint v1.51.2 github.com/rakyll/statik v0.1.7 @@ -52,6 +50,7 @@ require ( cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.6.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/errors v1.0.0 // indirect cosmossdk.io/log v1.2.1 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect @@ -144,7 +143,7 @@ require ( github.com/golang/glog v1.1.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 // indirect github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe // indirect @@ -266,9 +265,9 @@ require ( github.com/sivchari/tenv v1.7.1 // indirect github.com/sonatard/noctx v0.0.2 // indirect github.com/sourcegraph/go-diff v0.7.0 // indirect - github.com/spf13/afero v1.9.3 // indirect + github.com/spf13/afero v1.9.5 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/viper v1.15.0 // indirect + github.com/spf13/viper v1.16.0 // indirect github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect github.com/stretchr/objx v0.5.0 // indirect diff --git a/go.sum b/go.sum index 2df7a1756..9b81ff29c 100644 --- a/go.sum +++ b/go.sum @@ -503,8 +503,8 @@ github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.0.0-20230726182236-3a9d46a7c2 github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4 h1:NuFmpHnENcTtZDEQf2vZzZluk5rQl3f7J4tqo9FlH/c= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= github.com/cosmos/ibc-go v1.0.0/go.mod h1:2wHKQUa+BLJMEyN635KrHfmTTwSNHBtXcqdY8JWGuXA= -github.com/cosmos/ibc-go/v7 v7.1.0 h1:SCLgs7tqVnzdIDO5MRLgovAnc696vTTKl+8qsTu8IMM= -github.com/cosmos/ibc-go/v7 v7.1.0/go.mod h1:7MptlWeIyqmDiuJeRAFqBvXKY8Hybd+rF8vMSmGd2zg= +github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= +github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= @@ -774,8 +774,9 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8l github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= @@ -1392,7 +1393,6 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= @@ -1476,8 +1476,8 @@ github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0b github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= -github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= +github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= @@ -1501,8 +1501,8 @@ github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/y github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.0/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= +github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= @@ -1711,8 +1711,8 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= @@ -2370,8 +2370,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= -google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw= +google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/testutil/network/network.go b/testutil/network/network.go index bbf40cd21..cc2897844 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -23,6 +23,7 @@ import ( type ( Network = network.Network Config = network.Config + Validator = network.Validator ) // New creates instance with fully configured cosmos network. diff --git a/x/asset/types/codec.go b/x/asset/types/codec.go index 3d900a8b9..f933f78a6 100644 --- a/x/asset/types/codec.go +++ b/x/asset/types/codec.go @@ -54,5 +54,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/auction/types/codec.go b/x/auction/types/codec.go index dbc24b83b..f3a3eacb6 100644 --- a/x/auction/types/codec.go +++ b/x/auction/types/codec.go @@ -34,5 +34,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/auctionsV2/types/codec.go b/x/auctionsV2/types/codec.go index 360bc0a2e..58d916b77 100644 --- a/x/auctionsV2/types/codec.go +++ b/x/auctionsV2/types/codec.go @@ -40,5 +40,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/bandoracle/expected/keeper.go b/x/bandoracle/expected/keeper.go index 1048f0432..183ad9c7d 100644 --- a/x/bandoracle/expected/keeper.go +++ b/x/bandoracle/expected/keeper.go @@ -4,7 +4,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + // ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" assettypes "github.com/comdex-official/comdex/x/asset/types" marketttypes "github.com/comdex-official/comdex/x/market/types" @@ -22,7 +23,7 @@ type AssetKeeper interface { type ChannelKeeper interface { GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) - SendPacket(ctx sdk.Context, channelCap *capabilitytypes.Capability, packet ibcexported.PacketI) error + SendPacket(ctx sdk.Context, channelCap *capabilitytypes.Capability, sourcePort string, sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, data []byte) (uint64, error) } // PortKeeper defines the expected IBC port keeper diff --git a/x/bandoracle/keeper/oracle.go b/x/bandoracle/keeper/oracle.go index 886aaf360..95192bc72 100644 --- a/x/bandoracle/keeper/oracle.go +++ b/x/bandoracle/keeper/oracle.go @@ -8,7 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + // channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" protobuftypes "github.com/gogo/protobuf/types" @@ -50,18 +50,18 @@ func (k Keeper) SetLastFetchPriceID(ctx sdk.Context, id types.OracleRequestID) { func (k Keeper) FetchPrice(ctx sdk.Context, msg types.MsgFetchPriceData) (*types.MsgFetchPriceDataResponse, error) { sourcePort := types.PortID - sourceChannelEnd, found := k.channelKeeper.GetChannel(ctx, sourcePort, msg.SourceChannel) - if !found { - return nil, nil - } - destinationPort := sourceChannelEnd.GetCounterparty().GetPortID() - destinationChannel := sourceChannelEnd.GetCounterparty().GetChannelID() - - // get the next sequence - sequence, found := k.channelKeeper.GetNextSequenceSend(ctx, sourcePort, msg.SourceChannel) - if !found { - return nil, nil - } + // sourceChannelEnd, found := k.channelKeeper.GetChannel(ctx, sourcePort, msg.SourceChannel) + // if !found { + // return nil, nil + // } + // destinationPort := sourceChannelEnd.GetCounterparty().GetPortID() + // destinationChannel := sourceChannelEnd.GetCounterparty().GetChannelID() + + // // get the next sequence + // sequence, found := k.channelKeeper.GetNextSequenceSend(ctx, sourcePort, msg.SourceChannel) + // if !found { + // return nil, nil + // } channelCap, ok := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(sourcePort, msg.SourceChannel)) if !ok { @@ -88,16 +88,24 @@ func (k Keeper) FetchPrice(ctx sdk.Context, msg types.MsgFetchPriceData) (*types msg.PrepareGas, msg.ExecuteGas, ) - err := k.channelKeeper.SendPacket(ctx, channelCap, channeltypes.NewPacket( - packetData.GetBytes(), - sequence, - sourcePort, - msg.SourceChannel, - destinationPort, - destinationChannel, - clienttypes.NewHeight(0, 0), + // err := k.channelKeeper.SendPacket(ctx, channelCap, channeltypes.NewPacket( + // packetData.GetBytes(), + // sequence, + // sourcePort, + // msg.SourceChannel, + // destinationPort, + // destinationChannel, + // clienttypes.NewHeight(0, 0), + // uint64(ctx.BlockTime().UnixNano()+int64(10*time.Minute)), // Arbitrary timestamp timeout for now + // )) + _, err := k.channelKeeper.SendPacket(ctx, + channelCap, + sourcePort, + msg.SourceChannel, + clienttypes.NewHeight(0, 0), uint64(ctx.BlockTime().UnixNano()+int64(10*time.Minute)), // Arbitrary timestamp timeout for now - )) + packetData.GetBytes(), + ) if err != nil { return nil, nil } diff --git a/x/esm/types/codec.go b/x/esm/types/codec.go index 1fd84484a..ca0e4486a 100644 --- a/x/esm/types/codec.go +++ b/x/esm/types/codec.go @@ -39,5 +39,6 @@ var ( func init() { RegisterCodec(Amino) cryptocodec.RegisterCrypto(Amino) + sdk.RegisterLegacyAminoCodec(Amino) Amino.Seal() } \ No newline at end of file diff --git a/x/ibcratelimit/Beaker.toml b/x/ibcratelimit/Beaker.toml deleted file mode 100644 index 46da1ec58..000000000 --- a/x/ibcratelimit/Beaker.toml +++ /dev/null @@ -1 +0,0 @@ -name = "ibcratelimit" diff --git a/x/ibcratelimit/Cargo.lock b/x/ibcratelimit/Cargo.lock deleted file mode 100644 index 07e4f7e4a..000000000 --- a/x/ibcratelimit/Cargo.lock +++ /dev/null @@ -1,914 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "anyhow" -version = "1.0.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64ct" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array", -] - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "const-oid" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722e23542a15cea1f65d4a1419c4cfd7a26706c70871a13a04238ca3f40f1661" - -[[package]] -name = "cosmwasm-crypto" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28376836c7677e1ea6d6656a754582e88b91e544ce22fae42956d5fe5549a958" -dependencies = [ - "digest 0.10.5", - "ed25519-zebra", - "k256", - "rand_core 0.6.4", - "thiserror", -] - -[[package]] -name = "cosmwasm-derive" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb69f4f7a8a4bce68c8fbd3646238fede1e77056e4ea31c5b6bfc37b709eec3" -dependencies = [ - "syn", -] - -[[package]] -name = "cosmwasm-schema" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a227cfeb9a7152b26a354b1c990e930e962f75fd68f57ab5ae2ef888c8524292" -dependencies = [ - "cosmwasm-schema-derive", - "schemars", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cosmwasm-schema-derive" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3626cb42eef870de67f791e873711255325224d86f281bf628c42abd295f3a14" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "cosmwasm-std" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bf9157d060abbc55152aeadcace799d03dc630575daa66604079a1206cb060" -dependencies = [ - "base64", - "cosmwasm-crypto", - "cosmwasm-derive", - "derivative", - "forward_ref", - "hex", - "schemars", - "serde", - "serde-json-wasm", - "thiserror", - "uint", -] - -[[package]] -name = "cosmwasm-storage" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b61fcfef87d15af0263e2e4d792af80355929674a3b4e29ffb3c898ec6e25852" -dependencies = [ - "cosmwasm-std", - "serde", -] - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -dependencies = [ - "libc", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-bigint" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "cw-multi-test" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f9a8ab7c3c29ec93cb7a39ce4b14a05e053153b4a17ef7cf2246af1b7c087e" -dependencies = [ - "anyhow", - "cosmwasm-std", - "cosmwasm-storage", - "cw-storage-plus 0.13.4", - "cw-utils", - "derivative", - "itertools", - "prost 0.9.0", - "schemars", - "serde", - "thiserror", -] - -[[package]] -name = "cw-storage-plus" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "648b1507290bbc03a8d88463d7cd9b04b1fa0155e5eef366c4fa052b9caaac7a" -dependencies = [ - "cosmwasm-std", - "schemars", - "serde", -] - -[[package]] -name = "cw-storage-plus" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b6f91c0b94481a3e9ef1ceb183c37d00764f8751e39b45fc09f4d9b970d469" -dependencies = [ - "cosmwasm-std", - "schemars", - "serde", -] - -[[package]] -name = "cw-utils" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dbaecb78c8e8abfd6b4258c7f4fbeb5c49a5e45ee4d910d3240ee8e1d714e1b" -dependencies = [ - "cosmwasm-std", - "schemars", - "serde", - "thiserror", -] - -[[package]] -name = "cw2" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cf4639517490dd36b333bbd6c4fbd92e325fd0acf4683b41753bc5eb63bfc1" -dependencies = [ - "cosmwasm-std", - "cw-storage-plus 0.13.4", - "schemars", - "serde", -] - -[[package]] -name = "der" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dd2ae565c0a381dde7fade45fce95984c568bdcb4700a4fdbe3175e0380b2f" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" -dependencies = [ - "block-buffer 0.10.3", - "crypto-common", - "subtle", -] - -[[package]] -name = "dyn-clone" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" - -[[package]] -name = "ecdsa" -version = "0.14.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" -dependencies = [ - "der", - "elliptic-curve", - "rfc6979", - "signature", -] - -[[package]] -name = "ed25519-zebra" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" -dependencies = [ - "curve25519-dalek", - "hashbrown", - "hex", - "rand_core 0.6.4", - "serde", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "either" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" - -[[package]] -name = "elliptic-curve" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" -dependencies = [ - "base16ct", - "crypto-bigint", - "der", - "digest 0.10.5", - "ff", - "generic-array", - "group", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "ff" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "forward_ref" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "group" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.5", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" - -[[package]] -name = "k256" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "sha2 0.10.6", -] - -[[package]] -name = "libc" -version = "0.2.137" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "osmosis-std" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b3792977036dc49cfc9af9fd7a6c021fd48dfffc8ebf09324201506c65a47a" -dependencies = [ - "chrono", - "cosmwasm-std", - "osmosis-std-derive", - "prost 0.11.2", - "prost-types", - "schemars", - "serde", - "serde-cw-value", -] - -[[package]] -name = "osmosis-std-derive" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c501f2b8ff88b1c60ab671d7b808e947f384fa2524fe4ec8c06f63ef4be29979" -dependencies = [ - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pkcs8" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "proc-macro2" -version = "1.0.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" -dependencies = [ - "bytes", - "prost-derive 0.9.0", -] - -[[package]] -name = "prost" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0841812012b2d4a6145fae9a6af1534873c32aa67fff26bd09f8fa42c83f95a" -dependencies = [ - "bytes", - "prost-derive 0.11.2", -] - -[[package]] -name = "prost-derive" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-derive" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164ae68b6587001ca506d3bf7f1000bfa248d0e1217b618108fba4ec1d0cc306" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-types" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747761bc3dc48f9a34553bf65605cf6cb6288ba219f3450b4275dbd81539551a" -dependencies = [ - "bytes", - "prost 0.11.2", -] - -[[package]] -name = "quote" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "rate-limiter" -version = "0.1.0" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cosmwasm-storage", - "cw-multi-test", - "cw-storage-plus 0.16.0", - "cw2", - "hex", - "osmosis-std", - "osmosis-std-derive", - "prost 0.11.2", - "schemars", - "serde", - "serde-json-wasm", - "sha2 0.10.6", - "thiserror", -] - -[[package]] -name = "rfc6979" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" -dependencies = [ - "crypto-bigint", - "hmac", - "zeroize", -] - -[[package]] -name = "ryu" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" - -[[package]] -name = "schemars" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a5fb6c61f29e723026dc8e923d94c694313212abbecbbe5f55a7748eec5b307" -dependencies = [ - "dyn-clone", - "schemars_derive", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f188d036977451159430f3b8dc82ec76364a42b7e289c2b18a9a18f4470058e9" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn", -] - -[[package]] -name = "sec1" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" -dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", -] - -[[package]] -name = "serde" -version = "1.0.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde-cw-value" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75d32da6b8ed758b7d850b6c3c08f1d7df51a4df3cb201296e63e34a78e99d4" -dependencies = [ - "serde", -] - -[[package]] -name = "serde-json-wasm" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479b4dbc401ca13ee8ce902851b834893251404c4f3c65370a49e047a6be09a5" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_derive_internals" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.5", -] - -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -dependencies = [ - "digest 0.10.5", - "rand_core 0.6.4", -] - -[[package]] -name = "spki" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "syn" -version = "1.0.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "thiserror" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "typenum" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" - -[[package]] -name = "uint" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a45526d29728d135c2900b0d30573fe3ee79fceb12ef534c7bb30e810a91b601" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - -[[package]] -name = "unicode-ident" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "zeroize" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" diff --git a/x/ibcratelimit/Cargo.toml b/x/ibcratelimit/Cargo.toml deleted file mode 100644 index 9e4bf04d4..000000000 --- a/x/ibcratelimit/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[workspace] - -members = [ - 'contracts/*', -] - -[profile.release] -codegen-units = 1 -debug = false -debug-assertions = false -incremental = false -lto = true -opt-level = 3 -overflow-checks = true -panic = 'abort' -rpath = false diff --git a/x/ibcratelimit/README.md b/x/ibcratelimit/README.md deleted file mode 100644 index f8a0b91bd..000000000 --- a/x/ibcratelimit/README.md +++ /dev/null @@ -1,307 +0,0 @@ -# IBC Rate Limit - -The IBC Rate Limit module is responsible for adding a governance-configurable rate limit to IBC transfers. -This is a safety control, intended to protect assets on osmosis in event of: - -* a bug/hack on osmosis -* a bug/hack on the counter-party chain -* a bug/hack in IBC itself - -This is done in exchange for a potential (one-way) bridge liveness tradeoff, in periods of high deposits or withdrawals. - -The architecture of this package is a minimal go package which implements an [IBC Middleware](https://github.com/cosmos/ibc-go/blob/f57170b1d4dd202a3c6c1c61dcf302b6a9546405/docs/ibc/middleware/develop.md) that wraps the [ICS20 transfer](https://ibc.cosmos.network/main/apps/transfer/overview.html) app, and calls into a cosmwasm contract. -The cosmwasm contract then has all of the actual IBC rate limiting logic. -The Cosmwasm code can be found in the [`contracts`](./contracts/) package, with bytecode findable in the [`bytecode`](./bytecode/) folder. The cosmwasm VM usage allows Osmosis chain governance to choose to change this safety control with no hard forks, via a parameter change proposal, a great mitigation for faster threat adaptavity. - -The status of the module is being in a state suitable for some initial governance settable rate limits for high value bridged assets. -Its not in its long term / end state for all channels by any means, but does act as a strong protection we -can instantiate today for high value IBC connections. - -## Motivation - -The motivation of IBC-rate-limit comes from the empirical observations of blockchain bridge hacks that a rate limit would have massively reduced the stolen amount of assets in: - -- [Polynetwork Bridge Hack ($611 million)](https://rekt.news/polynetwork-rekt/) -- [BNB Bridge Hack ($586 million)](https://rekt.news/bnb-bridge-rekt/) -- [Wormhole Bridge Hack ($326 million)](https://rekt.news/wormhole-rekt/) -- [Nomad Bridge Hack ($190 million)](https://rekt.news/nomad-rekt/) -- [Harmony Bridge Hack ($100 million)](https://rekt.news/harmony-rekt/) - (Would require rate limit + monitoring) -- [Dragonberry IBC bug](https://forum.cosmos.network/t/ibc-security-advisory-dragonberry/7702) (can't yet disclose amount at risk, but was saved due to being found first by altruistic Osmosis core developers) - -In the presence of a software bug on Osmosis, IBC itself, or on a counterparty chain, we would like to prevent the bridge from being fully depegged. -This stems from the idea that a 30% asset depeg is ~infinitely better than a 100% depeg. -Its _crazy_ that today these complex bridged assets can instantly go to 0 in event of bug. -The goal of a rate limit is to raise an alert that something has potentially gone wrong, allowing validators and developers to have time to analyze, react, and protect larger portions of user funds. - -The thesis of this is that, it is worthwile to sacrifice liveness in the case of legitimate demand to send extreme amounts of funds, to prevent the terrible long-tail full fund risks. -Rate limits aren't the end-all of safety controls, they're merely the simplest automated one. More should be explored and added onto IBC! - -## Rate limit types - -We express rate limits in time-based periods. -This means, we set rate limits for (say) 6-hour, daily, and weekly intervals. -The rate limit for a given time period stores the relevant amount of assets at the start of the rate limit. -Rate limits are then defined on percentage terms of the asset. -The time windows for rate limits are currently _not_ rolling, they have discrete start/end times. - -We allow setting separate rate limits for the inflow and outflow of assets. -We do all of our rate limits based on the _net flow_ of assets on a channel pair. This prevents DOS issues, of someone repeatedly sending assets back and forth, to trigger rate limits and break liveness. - -We currently envision creating two kinds of rate limits: - -* Per denomination rate limits - - allows safety statements like "Only 30% of Stars on Osmosis can flow out in one day" or "The amount of Atom on Osmosis can at most double per day". -* Per channel rate limits - - Limit the total inflow and outflow on a given IBC channel, based on "USDC" equivalent, using Osmosis as the price oracle. - -We currently only implement per denomination rate limits for non-native assets. We do not yet implement channel based rate limits. - -Currently these rate limits automatically "expire" at the end of the quota duration. TODO: Think of better designs here. E.g. can we have a constant number of subsequent quotas start filled? Or perhaps harmonically decreasing amounts of next few quotas pre-filled? Halted until DAO override seems not-great. - -## Instantiating rate limits - -Today all rate limit quotas must be set manually by governance. -In the future, we should design towards some conservative rate limit to add as a safety-backstop automatically for channels. -Ideas for how this could look: - -* One month after a channel has been created, automatically add in some USDC-based rate limit -* One month after governance incentivizes an asset, add on a per-denomination rate limit. - -Definitely needs far more ideation and iteration! - -## Parameterizing the rate limit - -One element is we don't want any rate limit timespan thats too short, e.g. not enough time for humans to react to. So we wouldn't want a 1 hour rate limit, unless we think that if its hit, it could be assessed within an hour. - -### Handling rate limit boundaries - -We want to be safe against the case where say we have a daily rate limit ending at a given time, and an adversary attempts to attack near the boundary window. -We would not like them to be able to "double extract funds" by timing their extraction near a window boundary. - -Admittedly, not a lot of thought has been put into how to deal with this well. -Right now we envision simply handling this by saying if you want a quota of duration D, instead include two quotas of duration D, but offset by `D/2` from each other. - -Ideally we can change windows to be more 'rolling' in the future, to avoid this overhead and more cleanly handle the problem. (Perhaps rolling ~1 hour at a time) - -### Inflow parameterization - -The "Inflow" side of a rate limit is essentially protection against unforeseen bug on a counterparty chain. -This can be quite conservative (e.g. bridged amount doubling in one week). This covers a few cases: - -* Counter-party chain B having a token theft attack - - TODO: description of how this looks -* Counter-party chain B runaway mint - - TODO: description of how this looks -* IBC theft - - TODO: description of how this looks - -It does get more complex when the counterparty chain is itself a DEX, but this is still much more protection than nothing. - -### Outflow parameterization - -The "Outflow" side of a rate limit is protection against a bug on Osmosis OR IBC. -This has potential for much more user-frustrating issues, if set too low. -E.g. if theres some event that causes many people to suddenly withdraw many STARS or many USDC. - -So this parameterization has to contend with being a tradeoff of withdrawal liveness in high volatility periods vs being a crucial safety rail, in event of on-Osmosis bug. - -TODO: Better fill out - -### Example suggested parameterization - -## Code structure - -As mentioned at the beginning of the README, the go code is a relatively minimal ICS 20 wrapper, that dispatches relevant calls to a cosmwasm contract that implements the rate limiting functionality. - -### Go Middleware - -To achieve this, the middleware needs to implement the `porttypes.Middleware` interface and the -`porttypes.ICS4Wrapper` interface. This allows the middleware to send and receive IBC messages by wrapping -any IBC module, and be used as an ICS4 wrapper by a transfer module (for sending packets or writing acknowledgements). - -Of those interfaces, just the following methods have custom logic: - -* `ICS4Wrapper.SendPacket` forwards to contract, with intent of tracking of value sent via an ibc channel -* `Middleware.OnRecvPacket` forwards to contract, with intent of tracking of value received via an ibc channel -* `Middleware.OnAcknowledgementPacket` forwards to contract, with intent of undoing the tracking of a sent packet if the acknowledgment is not a success -* `OnTimeoutPacket` forwards to contract, with intent of undoing the tracking of a sent packet if the packet times out (is not relayed) - -All other methods from those interfaces are passthroughs to the underlying implementations. - -#### Parameters - -The middleware uses the following parameters: - -| Key | Type | -|-----------------|--------| -| ContractAddress | string | - -1. **ContractAddress** - - The contract address is the address of an instantiated version of the contract provided under `./contracts/` - -### Cosmwasm Contract Concepts - -Something to keep in mind with all of the code, is that we have to reason separately about every item in the following matrix: - -| Native Token | Non-Native Token | -|----------------------|--------------------------| -| Send Native Token | Send Non-Native Token | -| Receive Native Token | Receive Non-Native Token | -| Timeout Native Send | Timeout Non-native Send | - -(Error ACK can reuse the same code as timeout) - -TODO: Spend more time on sudo messages in the following description. We need to better describe how we map the quota concepts onto the code. -Need to describe how we get the quota beginning balance, and that its different for sends and receives. -Explain intracacies of tracking that a timeout and/or ErrorAck must appear from the same quota, else we ignore its update to the quotas. - - -The tracking contract uses the following concepts - -1. **RateLimit** - tracks the value flow transferred and the quota for a path. -2. **Path** - is a (denom, channel) pair. -3. **Flow** - tracks the value that has moved through a path during the current time window. -4. **Quota** - is the percentage of the denom's total value that can be transferred through the path in a given period of time (duration) - -#### Messages - -The contract specifies the following messages: - -##### Query - -* GetQuotas - Returns the quotas for a path - -##### Exec - -* AddPath - Adds a list of quotas for a path -* RemovePath - Removes a path -* ResetPathQuota - If a rate limit has been reached, the contract's governance address can reset the quota so that transfers are allowed again - -##### Sudo - -Sudo messages can only be executed by the chain. - -* SendPacket - Increments the amount used out of the send quota and checks that the send is allowed. If it isn't, it will return a RateLimitExceeded error -* RecvPacket - Increments the amount used out of the receive quota and checks that the receive is allowed. If it isn't, it will return a RateLimitExceeded error -* UndoSend - If a send has failed, the undo message is used to remove its cost from the send quota - -All of these messages receive the packet from the chain and extract the necessary information to process the packet and determine if it should be the rate limited. - -### Necessary information - -To determine if a packet should be rate limited, we need: - -* Channel: The channel on the Osmosis side: `packet.SourceChannel` for sends, and `packet.DestinationChannel` for receives. -* Denom: The denom of the token being transferred as known on the Osmosis side (more on that bellow) -* Channel Value: The total value of the chanel denominated in `Denom` (i.e.: channel-17 is worth 10k osmo). -* Funds: the amount being transferred - -#### Notes on Channel -The contract also supports quotas on a custom channel called "any" that is checked on every transfer. If either the -transfer channel or the "any" channel have a quota that has been filled, the transaction will be rate limited. - -#### Notes on Denom -We always use the the denom as represented on Osmosis. For native assets that is the local denom, and for non-native -assets it's the "ibc" prefix and the sha256 hash of the denom trace (`ibc/...`). - -##### Sends - -For native denoms, we can just use the denom in the packet. If the denom is invalid, it will fail somewhere else along the chain. Example result: `uosmo` - -For non-native denoms, the contract needs to hash the denom trace and append it to the `ibc/` prefix. The -contract always receives the parsed denom (i.e.: `transfer/channel-32/uatom` instead of -`ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2`). This is because of the order in which -the middleware is called. When sending a non-native denom, the packet contains `transfer/source-channel/denom` as it -is built on the `relay.SendTransfer()` in the transfer module and then passed to the middleware. Example result: `ibc/` - -##### Receives - -This behaves slightly different if the asset is an osmosis asset that was sent to the counterparty and is being -returned to the chain, or if the asset is being received by the chain and originates on the counterparty. In ibc this -is called being a "source" or a "sink" respectively. - -If the chain is a sink for the denom, we build the local denom by prefixing the port and the channel -(`transfer/local-channel`) and hashing that denom. Example result: `ibc/` - -If the chain is the source for the denom, there are two possibilities: - -* The token is a native token, in which case we just remove the prefix added by the counterparty. Example result: `uosmo` -* The token is a non-native token, in which case we remove the extra prefix and hash it. Example result `ibc/` - -#### Notes on Channel Value -We have iterated on different strategies for calculating the channel value. Our preferred strategy is the following: -* For non-native tokens (`ibc/...`), the channel value should be the supply of those tokens in Osmosis -* For native tokens, the channel value should be the total amount of tokens in escrow across all ibc channels - -The later ensures the limits are lower and represent the amount of native tokens that exist outside Osmosis. This is -beneficial as we assume the majority of native tokens exist on the native chain and the amount "normal" ibc transfers is -proportional to the tokens that have left the chain. - -This strategy cannot be implemented at the moment because IBC does not track the amount of tokens in escrow across -all channels ([github issue](https://github.com/cosmos/ibc-go/issues/2664)). Instead, we use the current supply on -Osmosis for all denoms (i.e.: treat native and non-native tokens the same way). Once that ticket is fixed, we will -update this strategy. - -##### Caching - -The channel value varies constantly. To have better predictability, and avoid issues of the value growing if there is -a potential infinite mint bug, we cache the channel value at the beginning of the period for every quota. - -This means that if we have a daily quota of 1% of the osmo supply, and the channel value is 1M osmo at the beginning of -the quota, no more than 100k osmo can transferred during that day. If 10M osmo were to be minted or IBC'd in during that -period, the quota will not increase until the period expired. Then it will be 1% of the new channel value (~11M) - -### Integration - -The rate limit middleware wraps the `transferIBCModule` and is added as the entry route for IBC transfers. - -The module is also provided to the underlying `transferIBCModule` as its `ICS4Wrapper`; previously, this would have -pointed to a channel, which also implements the `ICS4Wrapper` interface. - -This integration can be seen in [osmosis/app/keepers/keepers.go](https://github.com/osmosis-labs/osmosis/blob/main/app/keepers/keepers.go) - -## Testing strategy - - -A general testing strategy is as follows: - -* Setup two chains. -* Send some tokens from A->B and some from B->A (so that there are IBC tokens to play with in both sides) -* Add the rate limiter on A with low limits (i.e. 1% of supply) -* Test Function for chains A' and B' and denom d - * Send some d tokens from A' to B' and get close to the limit. - * Do the same transfer making sure the amount is above the quota and verify it fails with the rate limit error - * Wait until the reset time has passed, and send again. The transfer should now succeed -* Repeat the above test for the following combination of chains and tokens: `(A,B,a)`, `(B,A,a)`, `(A,B,b)`, `(B,A,b)`, - where `a` and `b` are native tokens to chains A and B respectively. - -For more comprehensive tests we can also: -* Add a third chain C and make sure everything works properly for C tokens that have been transferred to A and to B -* Test that the contracts gov address can reset rate limits if the quota has been hit -* Test the queries for getting information about the state of the quotas -* Test that rate limit symmetries hold (i.e.: sending the a token through a rate-limited channel and then sending back - reduces the rate limits by the same amount that it was increased during the first send) -* Ensure that the channels between the test chains have different names (A->B="channel-0", B->A="channel-1", for example) - -## Known Future work - -Items that have been highlighted above: - -* Making automated rate limits get added for channels, instead of manual configuration only -* Improving parameterization strategies / data analysis -* Adding the USDC based rate limits -* We need better strategies for how rate limits "expire". - -Not yet highlighted - -* Making monitoring tooling to know when approaching rate limiting and when they're hit -* Making tooling to easily give us summaries we can use, to reason about "bug or not bug" in event of rate limit being hit -* Enabling ways to pre-declare large transfers so as to not hit rate limits. - * Perhaps you can on-chain declare intent to send these assets with a large delay, that raises monitoring but bypasses rate limits? - * Maybe contract-based tooling to split up the transfer suffices? -* Strategies to account for high volatility periods without hitting rate limits - * Can imagine "Hop network" style markets emerging - * Could imagine tieng it into looking at AMM volatility, or off-chain oracles - * but these are both things we should be wary of security bugs in. - * Maybe [constraint based programming with tracking of provenance](https://youtu.be/HB5TrK7A4pI?t=2852) as a solution -* Analyze changing denom-based rate limits, to just overall withdrawal amount for Osmosis \ No newline at end of file diff --git a/x/ibcratelimit/bytecode/rate_limiter.wasm b/x/ibcratelimit/bytecode/rate_limiter.wasm deleted file mode 100644 index 30b545e0612d86ee2751dbcfa11595954e0575e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264433 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®DTRGfgV2Gtk)wKJ`nVy5}E!1e?-M*0_`U|ALXk z`N4Rq^T`A$!l(PM#T1M4f5hwAEGcj>&R0%%zK)T=jYE(6Xr`uSdiAoQ9!hO~JD3@B z+o5>q-0Q8WZx1vTho-W|z4_)nS46vL6-jXr>P_;;zX$KpIduxGTkogx3$tXp^XvL~ zD8|af0!1K6TEUS}2tH6y`HBprk%urrjCWJ7q8^xN! z7L>`)r)y4*%r!Aa`odFI=w|sM?=10w^7@}QNM+Ji@g_-Ih!@oYok~L}^ff4LEw(Zs zZLQFAjIE%RK#iP)b3g$aU=9kZQp?prE6>78E5$I;;tW#-^`PKm|00>(*D$qQFVyl3 z&Y)b`r1M4b@l&yAtU|TxgM`ib=T=V z*JWIPi=r2C{UzQ{a{UFaFUcF-3o-rn$^0w-*{{@oBmA(sdP#l}kf3{i99@Oo1^?tx zcO&*eUhj^##+nS!z%m=gDzMDj7~4?QWb|io7cppcsS1j(pq$?2rv{3g@*<-u@{KtE zZvp)FWoY4~eeQsNG?qP-pWqRcdou1d1?Hqnq<1np5kR~n>0U}_+buj|9)E$JC}w+G zH`ALPQTH-N>f`5c7;nYLTgm^sx{zhX2acCGViVx1qF?w1fX7+&&EGG{3JN+DFjJO))b-?H`plhYfJVoPFbOFbMlj z@F-t(RU2F0nDT%!7mFYRH662(&T{v~un*ni5nVeL_r}C>5e{3@9TA39&k-kohBq1gat!(DcXw30 z#($Ud-%DM(^if*g1xW<)49Okm!%;mHFLtqMndn(AnIewF^Jt;J>^(Hx3Gc_7*_dh!X}DVOigy0-C%PDC~>L z=%-88v@)S12yO~GYu;Dyjv5&2zzA?2tvibzsUvWWH32HM0o4kuS-^;4)~3g*nn+FH z&T9VP5$L-HcLEwPDo9lG-_*mp9@0G?+LynrhogEJfv{0=amoclD8QYjhHI}3*KQ8y zaNY6}EBR2(RG6nt23Hj`SIjOp+yFv4=t!f~9z>8sz9J^BjHQ)STzuKJuLHlO8Y=5g^xeU{F zL3S+1XQT9qeh1_#ruoT%2ix@ERQVvy=-d$riY;5yQwooq(i~TIF0D$Q(SbCd zvzI7jGzuK0b6#qkR_kua(u<=H)w<`=Hy2G`0cVB!xvI@DE{;CP-^u9bYk6nyo)(h@ zCZhRU$~O~~jD0J@+GVWsQ6Xdd9Fyix7@Cl@gEICgMIRUFh=j}r89QsNXfk%zWUMJ& zlmjiFcBlstoz8m8ttRA{$4Fy7@gA%%Xi*W5K#M!#?n_%l36~y*WUf?^SPx=1BKI!2 z@SZg(potI2Y!khg;9usH%^1tkF(PS?U=oTOOT`ytz=jqbFFFh_AqSuh3^WD_=Y z60-5eLZ|>;z{7fY+4rS~L3C}9x|!F*0OcimXh8Ns6mkmTAgJ;e60niL76PD1fI(pf zo`;Ns(nPEI;VOx_jakb%RMASH(@L5?m|$xNL}E>}Me3~0ljlER0Z4@fH#yEVMhi&3|Cs#}l_AcW+L z!@7=a0V#YVAwf+zB}kD1J7%rA&NfNnl0|gcLZ|48FNDwsyitaGvdP-oW`q6mfyrzLphW-Z%cDm^&$1G+My zw_n#yTap=FFEzV0%{FgM&p_$<=~VKbxSkVkcD~)s>eYdCDtj@pKbxDwi{~ z_{_S}a=+a}6tKu+=%MPz`aYm8s!vJrDYN%?xVv(9lC3Zin;%N1x`|Jj5qgzTl&w%O z*&K(&!@s?brh2h3_}66W8p{nErNY#8g<#$-U0E!jzUTe*Yw~n&cLg85n2D=fk_(g3JNsTq zMUR44@>Haf?v>oBzVn;P-`=YSGyhil=nm~*ZSoaxMrt(B+mUp);EX6dZ~^}%i#jFS z%K=DNSIlOudWfJZPXTMy=EKa?jtLc@gzW*f*6>Gw8a_!S8|hYM-qhVEA(qRn2Zl7z zn?i>x{V#cXGl4l(P&VsM3g1}MKvA`xOE>~AS?$^HRpQIp(15@`8C_5Haw2qpLlHHw zWVz5EVXGco6Ff(7^h!l&EQBy(6iEodQFwQ)S1rwQcxs@(vh$p&N-NsHiY22l_f|??t`2QpB00U<<+O}y?}&leZ?kT9O$!+l-gq56!maj4 zNPGk3%9hD_Cy>JC4kQ8rnyJNK%&t=Hg}BPmfp|u}h-Ww{IBkJyg1vWWw$~iF&1xMm zz1D&j0_%5$fp%v@i==}~vA*RgIuz>tFh?m+G=pYLB~F0IuI)1wL(SVx!IRNzdoRi- zr^hNQqNo)$vlr!;OpC4akspFz$8h3-i}A&a^3But@A#+qC%T(cHO!nFFMdD9_PJCI zT&)J$=*Y?F8ium@8u;>MuiC?tz*b1s&CK16YKD(7ZtF64#C+V2=ymNC*=GJx$XmFx zxA_fNOhCZBhXJD6faEhXyic0cUq*S#;bV^!@^5p04X3fsEViJe%F8*O&BK z28oqXlmdy?JV?NkHk20q6pXqp1B8?ba4^=QnhApg)I1q&>LDJ01WK-&UvW(vGqVMb zWwUxk_wN|Jt9SXm^y2az*@0`tZB7J;0>noxG&I#~Wz`=7B32xHY6zlNqxC-7h`)?z z%}Nd&YxJV#7OnHf;(vj= z0Hu`bYpgnWPGc&-t3=VZg?&M?Od>EErV7xA6LKj84 zS;Hg1HYn)FVL`se@R!#~bkohP5x>$N_5UhD>15_>_&VvDsz6Ctu)-`FH8Uur- zl8d9ChLt9xpJm?2ow3OX7r_vBchbGYV>`0F!!(D-28JQ3SS%0+q!yP0q#M*feAAx< zYWaI`R|fr4_cQTN&Cg_7Vx}T+$kOj#>}+$8BKYz`C8IOHv>p6XT%Z}i+t{fBugxyr zvj;^WP}*pU1`E2e$*7r1ms#jZ+H>3=s4y^s)0Jj-98u$@0;8^ED}c3mM3~fOvg30p z>nOiWwg)d!Ji4>yVmvV-^}U3-HeflfNl5Xka(q21%@o*G^v;ZRd?smzss=dt0NdBR z(o_?`oiF2v-7AaK72iaH;~XZ^E2kJdwXh3-MEFJjnFyy8Rj8+f8}9X zXRWKuB-i+Mx>vIvH`a77d#4olhy&6Di?YGMxw6T@b;JeQ zy#&!}Bq3^N{)`1CTNpW4=!SR%(}VBFfVYAqioj8t_N4`Bfr}_VmC8M6iJ4+HE+4LY6n=eM9JCQ8*H%lg? zZLqq}?C96au#CSMO^;omHFZnJ*4v27&Ti$@wiN!J?dOyDAq&HnqOF6BUVv~;GMX{+>YaC5-j&7Y}rdJ2NRmV)|iIyKliWi#S)=WzDg}wb?8L+B0Q3L zt#lnl{u5226fK!GraC60u97v%(P+-a(lZh@ieW}8tGji5xSrm1E07)OQl7DCHkY~K zHK9s!XwdHJVwu@j0$B#wmnSER8ra~bxIy_wafXc^}oNtwt zxeztCj?B=s35kq$ieMZj%w%+-Nq=+0FJd4_u?cb!d9e{)ZKf4?H+^WCv%FHDVxE=*Rl`WA9fStqb1!YIrtTKk5jDD+lAFXGCANMc##HaXtR$Y_8FxmvO0 zVS!GGqku%ilw74GEDh6YJ1QVb2)bKaAx7gTC#9@qeCCTkn5#%=u0*o=F?fUE?h>Vh zw3(Gv03}g4%aJT#7;-NXauwSVf=`w?xdFrA)_UC=mDO)J4Y;P`+@bXuX{IR=rhb*0 ztGg!XFFyB);)atzLrENztl5loRpIE0W}`(1H89>mGAmcyqdmb~DM_M@ToNsm)6b3m z^s{Pa`q|7Li#8D*sqj+)G4Xd{Eeg4!EzQ3d@4*!9iCNnTX z_hx8`jvKm1gl^XvV&)JQ$kY#JyBOj`a*^OaNaC`C`g~x3D4`H097>5*Kr8`bD9=$R zd-2Fb@@gu^x)r7xcaXsJjIl9$irls7L83=|Gb!R)wo65=X@y%o}_5ZWk;gcc5@zzqXNS2S`7$ z$t23ZPC*X)r9};|%Tg&qnVJ#`iS*^Ux+sLtBmu^Zo`WWmf!)-=#t2P`{32T!=Vifd zNAwH=V2~}zdY7h@(~>)|K#Yzz9raf=rmGQWPB+xU6j?)Nn!V}B9X9JN3A2a3n9dSd zpRrl?zz6?lG|Rpd7oxrx^>-EENROl%ud!^rXv;_m(C{!w`{#0VfEuM&?{BJ+^8y~Mh z*tvoQIU~awBzyr@`d;Q?kE1}Q-4eNQhAW{JuX7D zmR6)0g}mAXP9^Qd*cHv+8C>hO06x6W&m&Hf?KtNsM+{nl6nF6lnY55K$_km?nl3~P zYW_54HWXwItP>QZgIL4(6{O8_lGv0AD;~@(VurE_(1i_UvATOo=(`96sDj*6mA`)O{!^EO+_#I50(0x6%+o zNGK6h)QOOYAn;TyK~;}_sz0UZ+1?ff9F&<{(UTes!Q(bQl zHdsO^ka6+k9XRne$ta)oGVsSM^doxmA5rBz7{oO{=MjN<$X1RU5L9 zldRosN_@4|a91;O#`KI}pu(HNV0npss0g9zzPT_stwiX@3BcG27AJ|?Sk_9>7C0x8 zN8+woV<+OC5*^!MD{Bfx0MXFKBEx?2@$c%yW{Dg&Soq8k~CMIm!iSjwPuQ7tigsc|YE( zGZ@ec42rgGs*;>^Myr4Xh?fnqB0xj)dMEu+Tan&czkC?tobusgvyy=(mV8kqcA#a| zJU}yY3t4G3L?0f$>ZvLzr@AgSi*Q815}>V9SU3rU_LVVw)HhFzEos zKow&Us?0M%+y}wGl0bp00IU@Y9+={Q=7QqzV4;Xknp3|#^6er5TYXh3r7`Rl4VzBwFZW86uwiZvAoUGTlykDHt7hoGXb^0cDzSbO7v% zC)t&~G>zhV#s7w0<6wHP@kvV2dp(j;Ls70pv5aU`!w%w6lRmAGzVb$wif`yHGpE~n zaGY*y3DHC9z9KElkm)&z+&LQpsM>2ywp)znwS~e_lM7VRLt$u-p@$>`(%Xi6&6*E zhUGVTxv0mUgl35wEDNx>lHqPPZM)6a7N8PTl|_Nj5Rt|G9W?}mx-4(L&C>3f_UfLe zaWDGMgE&&IMZW)#avhQ4D->+q6l}Fnu>KBG3t9XV{p|kZ0k4&-39=Gq34^VKjF@g;#WI^4dLfBatR;97(hxne2+fqj6G7FU zjxD|eDORm9MlXj2O<5J72yjT#vX+2Qe^`T#It`ju@e|XNBeozg*BS$brKCN*{6Gz8 z+R6eo1Wj8Rs)5GJl>v;BZ59M?jMP0ngAIm{>D5ZmtBTCU?rFJ6<*VgA*GAG1knejhf;X0O=@h--D=Aza^mFI4j?#tG6PVmPNzE|VP1y#vf^V!;9({-| z_Y#OXOZ-<|ZvCP-h#t+jK`6TqG@0U$YyxcLY)CVJlRpk^n)uO>cgp3j( z^cj*RUBYWcUZb;74j}^{eZB~$yw&XWDH8yRKSOU0yI9y zcR_(3r)2NJ5E)Rnr==(@o^fsa>_ zIHnB#C|jkPMVo_UNj^fGhb>_<1q%z!lNJ{kzV@MfV+VKQ<|%Gc8fR1+)^aVuLK zWa#!7w~C!RT5uc`4`J4gzL>khgR{FU{XvMbq_QX`0~i$X0C#UECVPSAaf7`zEu;ho z$2!PwnRx1;ZcXeSjg^gHo7#XbB_3!v>c0^eLo(umsEoKUSy4<;e&74yShz}<^T~Ab z;kE5RHL3YlG@6CBiA@nCty(FN7?g*tSpn#y5qWhshl6T3Pgajw1G+Ao2n2i=Wj}=)rBgHSPoM3$|A9)os zw=BI`O(rB;IHeIQ()iiAvxjx?`aO!9Z%VUXOM8cat?}Y@4E@<+@rX-bKk#&&n){(gzD`^+v67-m@zT(z>kA zW=3y-=W$c(J}Neanrs&dHw1Q2!Dv+*wTM(L+AFp0 zibyr!FEXEZMRZ}t765Gh0Y-&Ehygp9n+r*LphnFSko2I}Z_F%R;??|m=&<7QSKEi% z`0x!pn~;ivcp}6@=jRmFuIwS&_4D$($#URh<`(E2mkFb1>*duxH(_p*`F4me+dl>+ zBOb)@fds!1m%G*x-xX~bQkdMwXdr9AWEGts-h+=|xh>3y6-Cew0_2&k%fLVly9**I zYhuMdtAE=-HnwVL&|9TCBPDWp)N+LU!!%Zql=nG@!)(zoDg5i520an2F;l$Sp98b`wD8@E)r?mzS8-7?U zvCeMUY+Efy$+w=hxFcXdp35+c^9S}HXHG|ptLYgJ^`)jvzV#=c{^-4*IQ45!GG!9U zagtX>Y8WW%PuR?Bq-FctmW`;k)^HOt<5~+eK)qUhU6q;5ysWXYp-6eq(1m%w6y4J^ z_>%r@tFK$d>TAV{nuOV$QhrOL3ac89TeMaj|43q*jL1xW!f#omYM^X-WKKk;4SE@X zd@Yoee>!MnAJ>|%U~f8tWN)e-P$8#If++u<74-&Pqhr=TOiI|3@Q0M!nc!zZ;^5f) ztTX0knJMTkKQ-)Uow1gw9Eo`>QIDG*oWmc>!-zLz%i1kZIZDi#kh4}`Ko+x?C3qr$ znNeGec<8Nxk&d}7U2tzPM)xZe;3??Z0y_{e(-oj=)ND@HD-4JY0*`^L6|Wfy0z)Ey z`?R2UwXK1I(unT%gD|8~8m-FAn2d5_KuC#E9<_H6IpM$V0%BlrO2XGY#V!bpUm16~ zC4(E*2m(Sf3eV)7@D70xa!?5K6qzf^dkZrYFY|N^O?OlaX`rP|#r`N`nG%3uWjEWY zy*uV>z=;zT^%dbE-q|3PF{*r_APTHN=!M9nNQL=c@P(gJYAKL=GKhvVCH=+Ln1sNf zL>SfFYBf$H+kv5y`$o-TeaQpcfx&i0dGc#E%PM(bJ1|s?T~Gexm%jZsfB4|zK^`o& z4Z~m))!`-t?CM0se)nYqk_OcUst?kDw3fc_?t3v{_jN~ssv<8vl;<9dGRK0+gKCfm zjQzZ@$_daF{qQi0$peI_)^CzhEaJ|(10Vn25*}flmUz-8KkVc4VH=BfYsI8i#>gFb zR9E7|Cv{aEK-Udh)8mObV-htG`2xJm2M~yBxz7&>ESCe=+e;ReqqXD*7O-);DI`>% zLel&R>lShffnSO1Yvvq3`58tIvYnl%X}&n&cjdRRiuBB2-+VHCim0Z5>R zp>5E@E`(MSSetRqYwsOOpAev`mPm3y?})oy&m3Clp%KxtUsqkHGdDJY-@3bb>X)U4BLM zum}LV`nax@mq)*2S4$`RywkJ*`#m&?u>ki^C5j3eBbYquEyxZc3i;8S(o;#d>(qfF z@c5T2Pr{5EidvkEKJP;z@I(|M(GFsh^o@8RgfwEiE%^{cWPxWxObC)7qoJU$emtm8 z|5%rs5S)rPv3^GkI>-t0s6W$)o%-eAEJ^)R;1kIcwxbs|aN>!Jk0-VuKy4M`e?(aF z+>zk+optCQOe2=_h~WhHT36g|!x{0m_dHG23!05m87lK|Q+aI-=M1+Yp=u$v2q2Q2HuD3{=85Hw#Qq z!X|5U$%?Q*DJBo=*~}Y3sMvetpx$?QkC-2KxuATGqDPj$L12fWy`w*WV}1#HL8(4q zq$aOwv!Qe=v-p&~7QMuCUSlW76!5U5LCeC8tC$Qy z{Wr-4s_kLsxx4}fWE!36Z2v5y2IBv?G@69I&>f47~Xi%t7 zna4D+CR-Z<)~vyrvdzs(O{(bjfPFtcXx}Rwo})MUyMRrA(v>uqpa#eTt(I)0%$9-- zZYr_1+^~j=)@CuM5uj+}=AgwYbG4YS7q;Af!>Uw@U}p<1EHpwJ{bjP(o7Rd{068Lj~|sC6Ah< z8=2j%X#m9-bHd3c`h*yiriuiuKum4uQ_q}m_+mQD_1tC!-3e?Q_=D@L%O_^d&F#|s zb^+UeBZ{7k-oVh+&w_g-0xDW!SSr*(6{htMP-${MJw`~e0r1Sstv|89XW~jtm?krA z!ax#ZdWN26nktc4g>p{oiWoLKjKH#WnaQ1`%UG>QQ%qJ$YUXZCQuC=v=$MZ{D} zHyJ%t$WTQdG-Pc937ISdzP4DUAG=x5Wi$8}@f$fl<^s6O=I{D0o1*K5l6}C(0Zg@3 z;90yjju)VJc&dG`t>c!&v4JX&6+`h|EvrE#{9k1Z$I1k2PK;bQZp3hG!Ukz+jvLa_ zq$WaT%!SGraO8iVfYl9sG#khIj+cuaHS-kG$t*OHdiIj>=gzT;$&vh0Zl z!dKF=OTdwwnxZFDj!j@h z28^>GU@>LA1Yef69N-#|dm*B-l(d}_O$kdg+>0_{x|FoFd?-hfrY`ynq2c>;W7mbo zH2Aqq5RoNS65cP1x*@tFq88bAE_oKJM-*psDqUqTdYXtlOOpu9t(ZhWGMGfb^OQtr z?gSruWaL@qpStoy0Q>0xc7z;!W@1t}l;s^2mFGDW@&%Cg!)Bgv1F zQ{*GDsZp9O+rpMVT$!#i^N?P8P;A4F3FfUwabYxneNMLFURD=3y638JAzNa}ugNHK zz+nGqF&KiPZGvH`up5(C_?0qijp@{#hv>$p^r6IN)DJK^o7)dw#ep&;LVF*OKOqjh z*i2YtmF{`OBJ*c9yt#+@z?(0ypSG-rn{CTNZ=Pny13Mk|bc@gtLgmCheZ3C_TAm2eV> zNi_N}V+%8>FSheQ;6i1c@M3?=Y#kfV1HeP9Y;GYWH40Ut9OqFS_5_-Q5Jq%71(T=Y zcnV5!D1;trzLQ@}+bJ2HC*Z>mr?4K=n-M!lL(PSLs9hHY2V$zOSS^wUx>FAOGdlyr zxLBv1kyO`@-He(odZoC63@y$svYtsESFG>es$Z>sQXRvgbu@u@& z^{FfV$+!HI?bE8I_(T(#{ZD)sC7TfD*t>p*Cz6{)VUy7e8OLA+W@Y)P22ghbGl`c!4(8MRpv}pbVY~gL?!K}AegVpOqnXc3m6lDm z)O)F~rQRD|LI}5jZ3wWgo>xVH3AtBcbWo>_s5<4x2=S^Msu!5fTOvTcXhVPolYS}k z*R`<{0b`w#*M{8k|JMI)g#zG;+Kd48LIgOcw&FMydo6xW@SB7K6dl`k zu29mM02U$?dU|%4$f-zjJ1mbv1nivgS>^(W%(ffgQ1>dt-c~VRlt_N#*2MW+kPSjd z+&zbdp9RmS12Aoh9V?*TSBD_=hdmUBf(m^E$K(S3j+84SuKj7?)VgsMcC=#*EzEw)z*{0nak*6)JWx{^FCcZXyBP!IaXB;CP zvjxIe6Djv7hITc8U;5|Qq>bL#*7OaS8T|wH#ynHRa{R3)8yAtW>peKLD0>RMR+cXY zS=Ud$v>x?DwHt@tu2+BPwNA+5(g-P80w6nemI5Gs1Dj68biCY}1VDFQq&5KtmeS{I zNwqwfuSV9CN-N`e=moX zJiGL_8j4=hA!~NJIHZxS{pZ(S2z(Vy%z(3ey7~nqF->b_V&1?rA-v>ETv=;KW;KJ6 zwULkR#-bR#W!es68p%m{b$c@(wKOs)e)Lv*CpD7h---xtsVF*gck!y8*X8=KQMXnY z>gDNr`LdSR?B$`aM8#Wf%h%*{*y|(js}--gEnh1yUsWI9|GyQlxh-F(92} zDcPhYb+t%^$+Vf=!$GC}&ai zh-n4v2-m$hoWMzEI(InwDP=?>fdS?4LWgkHJ->{EkSsM^DOq%5Bn27gqxnORaUA76 zWO4y*6zQC!cyxd+l5F5`O%4##fs0F@hE!v^4n}&$hiiV+w}PSj@NeWy{Ok_bd}46H zaeXl!t_cbTPUFzP!~g3Zql(DsOn_+g+Z;qMdW!1Oh^{-L50V+B&77Y7x@7G(f`ndl zT{4xEHyUqbmAlb~ERq6tQ)||9>b@H2fpp9)L@H+p=rV(HPWyM-S zoOdL9@%d3JPwqZjAS*xs=P@+j5t^AN?lOB;;qIb-rQ#v&n}DaY@Oo)1AH@!AlX+V& z9Tv;sNJ~CK<#a=Wj=P>Ol6Edv*wGWZpYdYpufHZ)zAsU}A|M-u_6dwk;pWqfbVp@7 zZ)TOu8(#HT_t!waa4`-*6QYOou!}P@3LJ=^N&I?!*kHNgv#M1Jb`Ct7MmStiG zw+43;i}0lJ^ODuiulEW$!J%4W0J1Dk%G)Gfqs(;a(+R+Cz$5N!${8O}XG!5fLl@?w z+onnu8DQ=`3=BoV!0a^xliDZ@KAzc_%r?bCV{Z~k(fl#<58dja{Y`3rCAk?f0pP;! z8Ov76?isTU8D!WdvR#U@qOwquqq`+<5-IY6`l6#= zU^=h6tATtjT#bII9e?x1FaN^NKk&HkV35=Qs~!ED0mfh z1@HJMB1Dc8@n8XV-w%W3nr+kORbFY6&I4>-&a%q7lEd*4L@SCADe`mNZ<+E14+PUy zTiXedixDEL4}ggtiV*n~D3B*5wggXVCFH1R$3Vxl#m6aP9D57G*^=BEzD=}wTYlUq zmQGGg_jE7<0f&-gxw*BAqc$1sEeI+VYDGJoe96T+I0tEtCqzs*ZWRRf3F--RU!9pe7U`l#8UO3233wa! zSyvCF7l8k~S|!LJNtO#tQ=*p|yNFgR`8y9-6Ms@P(G!t6y&mM58h%unBHSBwCvpSx zPbsB#ROcTP65{++u0-R!lhiQqr7!Km-o`Jr&)9LO5ToKe{Zi$`?AZV%Ze38Y5i3^T zGu*ZA)9PAiaHwmcO&1djHriqr2{g;IMbvkND3+zd_=BwfEYK8yS1I+4vJ;d15g@ey zPd;pm=#u<10%Xt;LoEGZ+og2;SvI0`Cy*!P8$g=#y7%-FvBhMBr z-w{}t;k3q3o%Lr&xQT#T%~y+l#92uknPzkf{&P|AXs4uL+mPz46#RrrwF~0q+8QEa zDj6W+e=I&W5;otaB=?~&Mdec+7Ks!VM+x~s8qb=o^?fpbx1|3-|JOY&GQSt0n2#*l ze=6zsU%i?xd)401TGwy=kXmo_p||$=Xq`$HZGBy9?XxGSuS+Dfo-;uKko7{h3j`;l zW2$;(9}sJv79f1SocfG7xtfG6i37qfSZ|O3fPe$2l7B$WuIV?c1x9C=za{n;Y<5vO zx3g6L?k(g_1a=YCZs2bdK5 z@HxYUh3A8v3mQETFr9R5T`2XTkLhO+al@5RDx2yLVTCpic($tJv3aJ?vrwj@Gyg}| zO7)@RT-XV&gziB}_W{)Nrhx9zSodxM9pOGmwIi57cS`^-sz8RQP9-O!qh{Y|+YQcd z^M&yi>*%ZX7UvukDF1nNs#VgXc`-{Bd(J&RYYPKo|EN00#=TA?L;6q~8Z16Q?G0)5 zRPtl0qyF>;sAAvW0hS$0av}FujU+Tc zTI(ffwD0udygD315|K-^-X)lyyz$#wL78nqVWp=v#;S|tzrn*Eto z^?*CV>MSc_q$s3y9*El;%wqzDv^byuU)eS@x^UbUh~)qhv+|d~jSTUnYgluZ4@!9G zG`U5!nzB8X@=(iK&e4a&c_8|RVv?T5J1gbAeS};j36ik|1@*_`1FAwD`7MW}>{;_5OW0svNbjp%b zMkD`}T&uM6P1||5c=#K7nCM~Y!Zz|x=wV$CEh;N%-pD_qhbzYq z2>D0hSJugvqf40e^nZ?Qw;x3aNiJdkJEq!!FGpqf4H63t^*>rb#WEe_?RYgyYf*A6 z20wm8ZJJcGNIizc8! zbD|a(AF%G?FJYp^UqW(=zEm%f<;MdbEt^#KmN9G=?bU*v8jKtac52}HVx6*WM_u?X-6^&YIBTaCYozWtpF8sYh#`ry zR_@|3pkZKSeW?c62c9q1nN(?!^GDq846o1HnZ+s}h_()bvtK#nIA?0lRM-^j_KN9? zU}yQbd@2UW7389sy$6ZA+GNWz?fC4r>M~6f>2}rPW@~6l6FtS0qFHo_&)F<$?uK%U zPS-Sw>6(%G6D-Vod=5PoGI*40nSYVrL2_zhb0kPkZ@!%Edm7UXPl+EakV1aH($r}9tkWakFF1vnP4-*3W(C581F@iLL?+Gogl_ zX9<{6UsxP%$n>b>-;(W68!|mA`Jd=vb;$In+GbIiZ4Eho6xq&RTZR6aAXCm=Jg&CA zT<49BY3s}4)7o@J`4Zr`Tj$P?NT{jkgioVtTPX={Y-(|kTH zw}@xB3&AZiDZB(c%(R2!!`!;%LM`NIF2;FYU^=fBoL8GqQDlAI{qIVf#ZvbV^ZVk+ zY*Z0gEf82S)t){><}11Gu~@|B;CI8sGaR~UNrXurTo}?4$Tnm}2HU0OtC@3WBg37V zlb5@s8F!y%w>24-??j9w0H2j}0ACMfuJbEQvO6>!^r9UZJk@f3OcsvYnpY5F)BS?s zx_=N!GfOUzD+_^Z8Kn>T091X1s%wGnY75ZaQs%cAK6CAeVxFx{0wz$XL6FSaj}&RH zS|nvDu5=o2&*t-OT3_yuGAw*{ccFxgAm;lC87Ag0@_e;tlE@L0B+^xqWSIpL94O^n zl=N>8n9D^)Cq^??Mr~9UFQ2T`C!`Qsg7ql5J(h$eDCsly?N75T%D?nJc>m9M zMw6WvdE;c0j=Fa6?%Verbw8p+(S6q1^)t!UXFHl`Hc65)ExYO|oej1wf|@P31~VbZ z_|?$rWU-d#tBKk(d`k}}5-rl$gH{fy1IRja6;=2d)M%M%ULg|DCg@ZXthHoCQAk>x z*Fz^@cu^5>{tTquqSlpm%Q5i7fbvsgahS5<9b17)v$2|x6>)NH_vt7 z%hk6SX#U_=zW$Q$Kw^s>LrU*8Prk@D1dj!!VsKV zQ@xe?g~%WUYvnC$7R>#6{aKCu!ATuL8h<*y#FEujL3bGyvO91%z6eyY425+vuOec$ z%q0@e4ZDP5pg?WaSFP(2PsAvxa7Uc$7M874^S^xLLoYRGVG7x{zNk?_i*wldM9^YG z1n3J2k=&_>;Ru$BGROvn`q(8@#wV4@!jyHz6tD!C`XI`R%uJ=jyru{5WdDh`+dhEG z%N5-V_kMg)#hAwi+J!9`aHB_UbcEy~@)9ix--pS06CK*JV|AUs!ry&tC2Turu}hzN zJf5e306SoJ&o)XM*T@?@j@e#>|E0HOZ92cKo2JDkeb|cn7Z!wTgSsTG=ulYsJdA?1 z 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

2L+KQ! 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%0DtRrm)^COJ(C@eeZ@KLkrxt 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 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *ParamsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *ParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *ParamsRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ParamsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ParamsResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ParamsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipQuery(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowQuery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowQuery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowQuery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthQuery - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupQuery - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthQuery - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") -) diff --git a/x/ibcratelimit/client/queryproto/query.pb.gw.go b/x/ibcratelimit/client/queryproto/query.pb.gw.go deleted file mode 100644 index b2ea5f77d..000000000 --- a/x/ibcratelimit/client/queryproto/query.pb.gw.go +++ /dev/null @@ -1,153 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: osmosis/ibc-rate-limit/v1beta1/query.proto - -/* -Package queryproto is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ -package queryproto - -import ( - "context" - "io" - "net/http" - - "github.com/golang/protobuf/descriptor" - "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage -var _ = metadata.Join - -func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ParamsRequest - var metadata runtime.ServerMetadata - - msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ParamsRequest - var metadata runtime.ServerMetadata - - msg, err := server.Params(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". -// UnaryRPC :call QueryServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. -func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { - - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterQueryHandler(ctx, mux, conn) -} - -// RegisterQueryHandler registers the http handlers for service Query to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) -} - -// RegisterQueryHandlerClient registers the http handlers for service Query -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "QueryClient" to call the correct interceptors. -func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { - - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"osmosis", "ibcratelimit", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) -) - -var ( - forward_Query_Params_0 = runtime.ForwardResponseMessage -) diff --git a/x/ibcratelimit/contracts/rate-limiter/.cargo/config b/x/ibcratelimit/contracts/rate-limiter/.cargo/config deleted file mode 100644 index f31de6c2a..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/.cargo/config +++ /dev/null @@ -1,3 +0,0 @@ -[alias] -wasm = "build --release --target wasm32-unknown-unknown" -unit-test = "test --lib" diff --git a/x/ibcratelimit/contracts/rate-limiter/Cargo.toml b/x/ibcratelimit/contracts/rate-limiter/Cargo.toml deleted file mode 100644 index 9a82ff8d9..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/Cargo.toml +++ /dev/null @@ -1,51 +0,0 @@ -[package] -name = "rate-limiter" -version = "0.1.0" -authors = ["Nicolas Lara "] -edition = "2021" - -exclude = [ - # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. - "contract.wasm", - "hash.txt", -] - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[lib] -crate-type = ["cdylib", "rlib"] - -[features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] -# use library feature to disable all instantiate/execute/query exports -library = [] -# Use the verbose responses feature if you want to include information about -# the remaining quotas in the SendPacket/RecvPacket responses -verbose_responses = [] - -[package.metadata.scripts] -optimize = """docker run --rm -v "$(pwd)":/code \ - --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ - --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ - cosmwasm/rust-optimizer:0.12.6 -""" - -[dependencies] -cosmwasm-std = { version = "1.1.5", features = ["stargate", "cosmwasm_1_1"]} -cosmwasm-schema = "1.1.5" -cosmwasm-storage = "1.1.5" -cw-storage-plus = "0.16.0" -cw2 = "0.13.2" -schemars = "0.8.8" -serde = { version = "1.0.137", default-features = false, features = ["derive"] } -thiserror = { version = "1.0.31" } -prost = {version = "0.11.2", default-features = false, features = ["prost-derive"]} -osmosis-std-derive = {version = "0.12.0"} -osmosis-std = "0.12.0" -sha2 = "0.10.6" -hex = "0.4.3" - -[dev-dependencies] -cw-multi-test = "0.13.2" -serde-json-wasm = "0.4.1" diff --git a/x/ibcratelimit/contracts/rate-limiter/examples/schema.rs b/x/ibcratelimit/contracts/rate-limiter/examples/schema.rs deleted file mode 100644 index 954edd462..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/examples/schema.rs +++ /dev/null @@ -1,13 +0,0 @@ -use cosmwasm_schema::write_api; - -use rate_limiter::msg::{ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg, SudoMsg}; - -fn main() { - write_api! { - instantiate: InstantiateMsg, - query: QueryMsg, - execute: ExecuteMsg, - sudo: SudoMsg, - migrate: MigrateMsg, - } -} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/contract.rs b/x/ibcratelimit/contracts/rate-limiter/src/contract.rs deleted file mode 100644 index 30bae5b33..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/contract.rs +++ /dev/null @@ -1,106 +0,0 @@ -#[cfg(not(feature = "library"))] -use cosmwasm_std::entry_point; -use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; -use cw2::set_contract_version; - -use crate::error::ContractError; -use crate::msg::{ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg, SudoMsg}; -use crate::state::{FlowType, GOVMODULE, IBCMODULE}; -use crate::{execute, query, sudo}; - -// version info for migration info -const CONTRACT_NAME: &str = "crates.io:rate-limiter"; -const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); - -#[cfg_attr(not(feature = "library"), entry_point)] -pub fn instantiate( - deps: DepsMut, - env: Env, - _info: MessageInfo, - msg: InstantiateMsg, -) -> Result { - set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; - IBCMODULE.save(deps.storage, &msg.ibc_module)?; - GOVMODULE.save(deps.storage, &msg.gov_module)?; - - execute::add_new_paths(deps, msg.paths, env.block.time)?; - - Ok(Response::new() - .add_attribute("method", "instantiate") - .add_attribute("ibc_module", msg.ibc_module.to_string()) - .add_attribute("gov_module", msg.gov_module.to_string())) -} - -#[cfg_attr(not(feature = "library"), entry_point)] -pub fn execute( - deps: DepsMut, - env: Env, - info: MessageInfo, - msg: ExecuteMsg, -) -> Result { - match msg { - ExecuteMsg::AddPath { - channel_id, - denom, - quotas, - } => execute::try_add_path(deps, info.sender, channel_id, denom, quotas, env.block.time), - ExecuteMsg::RemovePath { channel_id, denom } => { - execute::try_remove_path(deps, info.sender, channel_id, denom) - } - ExecuteMsg::ResetPathQuota { - channel_id, - denom, - quota_id, - } => execute::try_reset_path_quota( - deps, - info.sender, - channel_id, - denom, - quota_id, - env.block.time, - ), - } -} - -#[cfg_attr(not(feature = "library"), entry_point)] -pub fn sudo(deps: DepsMut, env: Env, msg: SudoMsg) -> Result { - match msg { - SudoMsg::SendPacket { - packet, - #[cfg(test)] - channel_value_mock, - } => sudo::process_packet( - deps, - packet, - FlowType::Out, - env.block.time, - #[cfg(test)] - channel_value_mock, - ), - SudoMsg::RecvPacket { - packet, - #[cfg(test)] - channel_value_mock, - } => sudo::process_packet( - deps, - packet, - FlowType::In, - env.block.time, - #[cfg(test)] - channel_value_mock, - ), - SudoMsg::UndoSend { packet } => sudo::undo_send(deps, packet), - } -} - -#[cfg_attr(not(feature = "library"), entry_point)] -pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { - match msg { - QueryMsg::GetQuotas { channel_id, denom } => query::get_quotas(deps, channel_id, denom), - } -} - -#[cfg_attr(not(feature = "library"), entry_point)] -pub fn migrate(_deps: DepsMut, _env: Env, _msg: MigrateMsg) -> Result { - unimplemented!() -} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/contract_tests.rs b/x/ibcratelimit/contracts/rate-limiter/src/contract_tests.rs deleted file mode 100644 index b51009c06..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/contract_tests.rs +++ /dev/null @@ -1,399 +0,0 @@ -#![cfg(test)] - -use crate::packet::Packet; -use crate::{contract::*, test_msg_recv, test_msg_send, ContractError}; -use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; -use cosmwasm_std::{from_binary, Addr, Attribute, Uint256}; - -use crate::helpers::tests::verify_query_response; -use crate::msg::{InstantiateMsg, PathMsg, QueryMsg, QuotaMsg, SudoMsg}; -use crate::state::tests::RESET_TIME_WEEKLY; -use crate::state::{RateLimit, GOVMODULE, IBCMODULE, RATE_LIMIT_TRACKERS}; - -const IBC_ADDR: &str = "IBC_MODULE"; -const GOV_ADDR: &str = "GOV_MODULE"; - -#[test] // Tests we ccan instantiate the contract and that the owners are set correctly -fn proper_instantiation() { - let mut deps = mock_dependencies(); - - let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), - paths: vec![], - }; - let info = mock_info(IBC_ADDR, &vec![]); - - // we can just call .unwrap() to assert this was a success - let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - assert_eq!(0, res.messages.len()); - - // The ibc and gov modules are properly stored - assert_eq!(IBCMODULE.load(deps.as_ref().storage).unwrap(), IBC_ADDR); - assert_eq!(GOVMODULE.load(deps.as_ref().storage).unwrap(), GOV_ADDR); -} - -#[test] // Tests that when a packet is transferred, the peropper allowance is consummed -fn consume_allowance() { - let mut deps = mock_dependencies(); - - let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); - let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), - paths: vec![PathMsg { - channel_id: format!("any"), - denom: format!("denom"), - quotas: vec![quota], - }], - }; - let info = mock_info(GOV_ADDR, &vec![]); - let _res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom") , - channel_value: 3_300_u32.into(), - funds: 300_u32.into() - ); - let res = sudo(deps.as_mut(), mock_env(), msg).unwrap(); - - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "300"); - - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_300_u32.into(), - funds: 300_u32.into() - ); - let err = sudo(deps.as_mut(), mock_env(), msg).unwrap_err(); - assert!(matches!(err, ContractError::RateLimitExceded { .. })); -} - -#[test] // Tests that the balance of send and receive is maintained (i.e: recives are sustracted from the send allowance and sends from the receives) -fn symetric_flows_dont_consume_allowance() { - let mut deps = mock_dependencies(); - - let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); - let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), - paths: vec![PathMsg { - channel_id: format!("any"), - denom: format!("denom"), - quotas: vec![quota], - }], - }; - let info = mock_info(GOV_ADDR, &vec![]); - let _res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); - - let send_msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_300_u32.into(), - funds: 300_u32.into() - ); - let recv_msg = test_msg_recv!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 300_u32.into() - ); - - let res = sudo(deps.as_mut(), mock_env(), send_msg.clone()).unwrap(); - let Attribute { key, value } = &res.attributes[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "0"); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "300"); - - let res = sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap(); - let Attribute { key, value } = &res.attributes[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "0"); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "0"); - - // We can still use the path. Even if we have sent more than the - // allowance through the path (900 > 3000*.1), the current "balance" - // of inflow vs outflow is still lower than the path's capacity/quota - let res = sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap(); - let Attribute { key, value } = &res.attributes[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "300"); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "0"); - - let err = sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap_err(); - - assert!(matches!(err, ContractError::RateLimitExceded { .. })); -} - -#[test] // Tests that we can have different quotas for send and receive. In this test we use 4% send and 1% receive -fn asymetric_quotas() { - let mut deps = mock_dependencies(); - - let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 4, 1); - let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), - paths: vec![PathMsg { - channel_id: format!("any"), - denom: format!("denom"), - quotas: vec![quota], - }], - }; - let info = mock_info(GOV_ADDR, &vec![]); - let _res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); - - // Sending 2% - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_060_u32.into(), - funds: 60_u32.into() - ); - let res = sudo(deps.as_mut(), mock_env(), msg).unwrap(); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "60"); - - // Sending 2% more. Allowed, as sending has a 4% allowance - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_060_u32.into(), - funds: 60_u32.into() - ); - - let res = sudo(deps.as_mut(), mock_env(), msg).unwrap(); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "120"); - - // Receiving 1% should still work. 4% *sent* through the path, but we can still receive. - let recv_msg = test_msg_recv!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 30_u32.into() - ); - let res = sudo(deps.as_mut(), mock_env(), recv_msg).unwrap(); - let Attribute { key, value } = &res.attributes[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "0"); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "90"); - - // Sending 2%. Should fail. In balance, we've sent 4% and received 1%, so only 1% left to send. - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_060_u32.into(), - funds: 60_u32.into() - ); - let err = sudo(deps.as_mut(), mock_env(), msg.clone()).unwrap_err(); - assert!(matches!(err, ContractError::RateLimitExceded { .. })); - - // Sending 1%: Allowed; because sending has a 4% allowance. We've sent 4% already, but received 1%, so there's send cappacity again - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_060_u32.into(), - funds: 30_u32.into() - ); - let res = sudo(deps.as_mut(), mock_env(), msg.clone()).unwrap(); - let Attribute { key, value } = &res.attributes[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "0"); - let Attribute { key, value } = &res.attributes[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "120"); -} - -#[test] // Tests we can get the current state of the trackers -fn query_state() { - let mut deps = mock_dependencies(); - - let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); - let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), - paths: vec![PathMsg { - channel_id: format!("any"), - denom: format!("denom"), - quotas: vec![quota], - }], - }; - let info = mock_info(GOV_ADDR, &vec![]); - let env = mock_env(); - let _res = instantiate(deps.as_mut(), env.clone(), info, msg).unwrap(); - - let query_msg = QueryMsg::GetQuotas { - channel_id: format!("any"), - denom: format!("denom"), - }; - - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - let value: Vec = from_binary(&res).unwrap(); - assert_eq!(value[0].quota.name, "weekly"); - assert_eq!(value[0].quota.max_percentage_send, 10); - assert_eq!(value[0].quota.max_percentage_recv, 10); - assert_eq!(value[0].quota.duration, RESET_TIME_WEEKLY); - assert_eq!(value[0].flow.inflow, Uint256::from(0_u32)); - assert_eq!(value[0].flow.outflow, Uint256::from(0_u32)); - assert_eq!( - value[0].flow.period_end, - env.block.time.plus_seconds(RESET_TIME_WEEKLY) - ); - - let send_msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_300_u32.into(), - funds: 300_u32.into() - ); - sudo(deps.as_mut(), mock_env(), send_msg.clone()).unwrap(); - - let recv_msg = test_msg_recv!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 30_u32.into() - ); - sudo(deps.as_mut(), mock_env(), recv_msg.clone()).unwrap(); - - // Query - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - let value: Vec = from_binary(&res).unwrap(); - verify_query_response( - &value[0], - "weekly", - (10, 10), - RESET_TIME_WEEKLY, - 30_u32.into(), - 300_u32.into(), - env.block.time.plus_seconds(RESET_TIME_WEEKLY), - ); -} - -#[test] // Tests quota percentages are between [0,100] -fn bad_quotas() { - let mut deps = mock_dependencies(); - - let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), - paths: vec![PathMsg { - channel_id: format!("any"), - denom: format!("denom"), - quotas: vec![QuotaMsg { - name: "bad_quota".to_string(), - duration: 200, - send_recv: (5000, 101), - }], - }], - }; - let info = mock_info(IBC_ADDR, &vec![]); - - let env = mock_env(); - instantiate(deps.as_mut(), env.clone(), info, msg).unwrap(); - - // If a quota is higher than 100%, we set it to 100% - let query_msg = QueryMsg::GetQuotas { - channel_id: format!("any"), - denom: format!("denom"), - }; - let res = query(deps.as_ref(), env.clone(), query_msg).unwrap(); - let value: Vec = from_binary(&res).unwrap(); - verify_query_response( - &value[0], - "bad_quota", - (100, 100), - 200, - 0_u32.into(), - 0_u32.into(), - env.block.time.plus_seconds(200), - ); -} - -#[test] // Tests that undo reverts a packet send without affecting expiration or channel value -fn undo_send() { - let mut deps = mock_dependencies(); - - let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); - let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), - paths: vec![PathMsg { - channel_id: format!("any"), - denom: format!("denom"), - quotas: vec![quota], - }], - }; - let info = mock_info(GOV_ADDR, &vec![]); - let _res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); - - let send_msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_300_u32.into(), - funds: 300_u32.into() - ); - let undo_msg = SudoMsg::UndoSend { - packet: Packet::mock( - format!("channel"), - format!("channel"), - format!("denom"), - 300_u32.into(), - ), - }; - - sudo(deps.as_mut(), mock_env(), send_msg.clone()).unwrap(); - - let trackers = RATE_LIMIT_TRACKERS - .load(&deps.storage, ("any".to_string(), "denom".to_string())) - .unwrap(); - assert_eq!( - trackers.first().unwrap().flow.outflow, - Uint256::from(300_u32) - ); - let period_end = trackers.first().unwrap().flow.period_end; - let channel_value = trackers.first().unwrap().quota.channel_value; - - sudo(deps.as_mut(), mock_env(), undo_msg.clone()).unwrap(); - - let trackers = RATE_LIMIT_TRACKERS - .load(&deps.storage, ("any".to_string(), "denom".to_string())) - .unwrap(); - assert_eq!(trackers.first().unwrap().flow.outflow, Uint256::from(0_u32)); - assert_eq!(trackers.first().unwrap().flow.period_end, period_end); - assert_eq!(trackers.first().unwrap().quota.channel_value, channel_value); -} - -#[test] -fn test_basic_message() { - let json = r#"{"send_packet":{"packet":{"sequence":2,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-0","data":{"denom":"stake","amount":"125000000000011250","sender":"osmo1dwtagd6xzl4eutwtyv6mewra627lkg3n3w26h6","receiver":"osmo1yvjkt8lnpxucjmspaj5ss4aa8562gx0a3rks8s"},"timeout_height":{"revision_height":100}}}}"#; - let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); - //println!("{parsed:?}"); -} - -#[test] -fn test_testnet_message() { - let json = r#"{"send_packet":{"packet":{"sequence":4,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-1491","data":{"denom":"uosmo","amount":"100","sender":"osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks","receiver":"osmo1c584m4lq25h83yp6ag8hh4htjr92d954vklzja"},"timeout_height":{},"timeout_timestamp":1668024637477293371}}}"#; - let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); - //println!("{parsed:?}"); -} - -#[test] -fn test_tokenfactory_message() { - let json = r#"{"send_packet":{"packet":{"sequence":4,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-1491","data":{"denom":"transfer/channel-0/factory/osmo12smx2wdlyttvyzvzg54y2vnqwq2qjateuf7thj/czar","amount":"100000000000000000","sender":"osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks","receiver":"osmo1c584m4lq25h83yp6ag8hh4htjr92d954vklzja"},"timeout_height":{},"timeout_timestamp":1668024476848430980}}}"#; - let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); - //println!("{parsed:?}"); -} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/error.rs b/x/ibcratelimit/contracts/rate-limiter/src/error.rs deleted file mode 100644 index f5dcda946..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/error.rs +++ /dev/null @@ -1,29 +0,0 @@ -use cosmwasm_std::{StdError, Timestamp, Uint256}; -use thiserror::Error; - -#[derive(Error, Debug, PartialEq)] -pub enum ContractError { - #[error("{0}")] - Std(#[from] StdError), - - #[error("Unauthorized")] - Unauthorized {}, - - #[error("IBC Rate Limit exceeded for {channel}/{denom}. Tried to transfer {amount} which exceeds capacity on the '{quota_name}' quota ({used}/{max}). Try again after {reset:?}")] - RateLimitExceded { - channel: String, - denom: String, - amount: Uint256, - quota_name: String, - used: Uint256, - max: Uint256, - reset: Timestamp, - }, - - #[error("Quota {quota_id} not found for channel {channel_id}")] - QuotaNotFound { - quota_id: String, - channel_id: String, - denom: String, - }, -} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/execute.rs b/x/ibcratelimit/contracts/rate-limiter/src/execute.rs deleted file mode 100644 index 047a2179d..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/execute.rs +++ /dev/null @@ -1,249 +0,0 @@ -use crate::msg::{PathMsg, QuotaMsg}; -use crate::state::{Flow, Path, RateLimit, GOVMODULE, IBCMODULE, RATE_LIMIT_TRACKERS}; -use crate::ContractError; -use cosmwasm_std::{Addr, DepsMut, Response, Timestamp}; - -pub fn add_new_paths( - deps: DepsMut, - path_msgs: Vec, - now: Timestamp, -) -> Result<(), ContractError> { - for path_msg in path_msgs { - let path = Path::new(path_msg.channel_id, path_msg.denom); - - RATE_LIMIT_TRACKERS.save( - deps.storage, - path.into(), - &path_msg - .quotas - .iter() - .map(|q| RateLimit { - quota: q.into(), - flow: Flow::new(0_u128, 0_u128, now, q.duration), - }) - .collect(), - )? - } - Ok(()) -} - -pub fn try_add_path( - deps: DepsMut, - sender: Addr, - channel_id: String, - denom: String, - quotas: Vec, - now: Timestamp, -) -> Result { - // codenit: should we make a function for checking this authorization? - let ibc_module = IBCMODULE.load(deps.storage)?; - let gov_module = GOVMODULE.load(deps.storage)?; - if sender != ibc_module && sender != gov_module { - return Err(ContractError::Unauthorized {}); - } - add_new_paths(deps, vec![PathMsg::new(&channel_id, &denom, quotas)], now)?; - - Ok(Response::new() - .add_attribute("method", "try_add_channel") - .add_attribute("channel_id", channel_id) - .add_attribute("denom", denom)) -} - -pub fn try_remove_path( - deps: DepsMut, - sender: Addr, - channel_id: String, - denom: String, -) -> Result { - let ibc_module = IBCMODULE.load(deps.storage)?; - let gov_module = GOVMODULE.load(deps.storage)?; - if sender != ibc_module && sender != gov_module { - return Err(ContractError::Unauthorized {}); - } - - let path = Path::new(&channel_id, &denom); - RATE_LIMIT_TRACKERS.remove(deps.storage, path.into()); - Ok(Response::new() - .add_attribute("method", "try_remove_channel") - .add_attribute("denom", denom) - .add_attribute("channel_id", channel_id)) -} - -// Reset specified quote_id for the given channel_id -pub fn try_reset_path_quota( - deps: DepsMut, - sender: Addr, - channel_id: String, - denom: String, - quota_id: String, - now: Timestamp, -) -> Result { - let gov_module = GOVMODULE.load(deps.storage)?; - if sender != gov_module { - return Err(ContractError::Unauthorized {}); - } - - let path = Path::new(&channel_id, &denom); - RATE_LIMIT_TRACKERS.update(deps.storage, path.into(), |maybe_rate_limit| { - match maybe_rate_limit { - None => Err(ContractError::QuotaNotFound { - quota_id, - channel_id: channel_id.clone(), - denom: denom.clone(), - }), - Some(mut limits) => { - // Q: What happens here if quote_id not found? seems like we return ok? - limits.iter_mut().for_each(|limit| { - if limit.quota.name == quota_id.as_ref() { - limit.flow.expire(now, limit.quota.duration) - } - }); - Ok(limits) - } - } - })?; - - Ok(Response::new() - .add_attribute("method", "try_reset_channel") - .add_attribute("channel_id", channel_id)) -} - -#[cfg(test)] -mod tests { - use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; - use cosmwasm_std::{from_binary, Addr, StdError}; - - use crate::contract::{execute, query}; - use crate::helpers::tests::verify_query_response; - use crate::msg::{ExecuteMsg, QueryMsg, QuotaMsg}; - use crate::state::{RateLimit, GOVMODULE, IBCMODULE}; - - const IBC_ADDR: &str = "IBC_MODULE"; - const GOV_ADDR: &str = "GOV_MODULE"; - - #[test] // Tests AddPath and RemovePath messages - fn management_add_and_remove_path() { - let mut deps = mock_dependencies(); - IBCMODULE - .save(deps.as_mut().storage, &Addr::unchecked(IBC_ADDR)) - .unwrap(); - GOVMODULE - .save(deps.as_mut().storage, &Addr::unchecked(GOV_ADDR)) - .unwrap(); - - let msg = ExecuteMsg::AddPath { - channel_id: format!("channel"), - denom: format!("denom"), - quotas: vec![QuotaMsg { - name: "daily".to_string(), - duration: 1600, - send_recv: (3, 5), - }], - }; - let info = mock_info(IBC_ADDR, &vec![]); - - let env = mock_env(); - let res = execute(deps.as_mut(), env.clone(), info, msg).unwrap(); - assert_eq!(0, res.messages.len()); - - let query_msg = QueryMsg::GetQuotas { - channel_id: format!("channel"), - denom: format!("denom"), - }; - - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - - let value: Vec = from_binary(&res).unwrap(); - verify_query_response( - &value[0], - "daily", - (3, 5), - 1600, - 0_u32.into(), - 0_u32.into(), - env.block.time.plus_seconds(1600), - ); - - assert_eq!(value.len(), 1); - - // Add another path - let msg = ExecuteMsg::AddPath { - channel_id: format!("channel2"), - denom: format!("denom"), - quotas: vec![QuotaMsg { - name: "daily".to_string(), - duration: 1600, - send_recv: (3, 5), - }], - }; - let info = mock_info(IBC_ADDR, &vec![]); - - let env = mock_env(); - execute(deps.as_mut(), env.clone(), info, msg).unwrap(); - - // remove the first one - let msg = ExecuteMsg::RemovePath { - channel_id: format!("channel"), - denom: format!("denom"), - }; - - let info = mock_info(IBC_ADDR, &vec![]); - let env = mock_env(); - execute(deps.as_mut(), env.clone(), info, msg).unwrap(); - - // The channel is not there anymore - let err = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap_err(); - assert!(matches!(err, StdError::NotFound { .. })); - - // The second channel is still there - let query_msg = QueryMsg::GetQuotas { - channel_id: format!("channel2"), - denom: format!("denom"), - }; - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - let value: Vec = from_binary(&res).unwrap(); - assert_eq!(value.len(), 1); - verify_query_response( - &value[0], - "daily", - (3, 5), - 1600, - 0_u32.into(), - 0_u32.into(), - env.block.time.plus_seconds(1600), - ); - - // Paths are overriden if they share a name and denom - let msg = ExecuteMsg::AddPath { - channel_id: format!("channel2"), - denom: format!("denom"), - quotas: vec![QuotaMsg { - name: "different".to_string(), - duration: 5000, - send_recv: (50, 30), - }], - }; - let info = mock_info(IBC_ADDR, &vec![]); - - let env = mock_env(); - execute(deps.as_mut(), env.clone(), info, msg).unwrap(); - - let query_msg = QueryMsg::GetQuotas { - channel_id: format!("channel2"), - denom: format!("denom"), - }; - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - let value: Vec = from_binary(&res).unwrap(); - assert_eq!(value.len(), 1); - - verify_query_response( - &value[0], - "different", - (50, 30), - 5000, - 0_u32.into(), - 0_u32.into(), - env.block.time.plus_seconds(5000), - ); - } -} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/helpers.rs b/x/ibcratelimit/contracts/rate-limiter/src/helpers.rs deleted file mode 100644 index 530d3b6cf..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/helpers.rs +++ /dev/null @@ -1,61 +0,0 @@ -#![cfg(test)] -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -use cosmwasm_std::{to_binary, Addr, CosmosMsg, StdResult, WasmMsg}; - -use crate::msg::ExecuteMsg; -use crate::msg::SudoMsg; - -/// CwTemplateContract is a wrapper around Addr that provides a lot of helpers -/// for working with this. -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct RateLimitingContract(pub Addr); - -impl RateLimitingContract { - pub fn addr(&self) -> Addr { - self.0.clone() - } - - pub fn call>(&self, msg: T) -> StdResult { - let msg = to_binary(&msg.into())?; - Ok(WasmMsg::Execute { - contract_addr: self.addr().into(), - msg, - funds: vec![], - } - .into()) - } - - pub fn sudo>(&self, msg: T) -> cw_multi_test::SudoMsg { - let msg = to_binary(&msg.into()).unwrap(); - cw_multi_test::SudoMsg::Wasm(cw_multi_test::WasmSudo { - contract_addr: self.addr().into(), - msg, - }) - } -} - -pub mod tests { - use cosmwasm_std::{Timestamp, Uint256}; - - use crate::state::RateLimit; - - pub fn verify_query_response( - value: &RateLimit, - quota_name: &str, - send_recv: (u32, u32), - duration: u64, - inflow: Uint256, - outflow: Uint256, - period_end: Timestamp, - ) { - assert_eq!(value.quota.name, quota_name); - assert_eq!(value.quota.max_percentage_send, send_recv.0); - assert_eq!(value.quota.max_percentage_recv, send_recv.1); - assert_eq!(value.quota.duration, duration); - assert_eq!(value.flow.inflow, inflow); - assert_eq!(value.flow.outflow, outflow); - assert_eq!(value.flow.period_end, period_end); - } -} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/integration_tests.rs b/x/ibcratelimit/contracts/rate-limiter/src/integration_tests.rs deleted file mode 100644 index bd9befeb8..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/integration_tests.rs +++ /dev/null @@ -1,417 +0,0 @@ -#![cfg(test)] -use crate::{helpers::RateLimitingContract, msg::ExecuteMsg, test_msg_send, ContractError}; -use cosmwasm_std::{Addr, Coin, Empty, Timestamp, Uint128, Uint256}; -use cw_multi_test::{App, AppBuilder, Contract, ContractWrapper, Executor}; - -use crate::{ - msg::{InstantiateMsg, PathMsg, QuotaMsg}, - state::tests::{RESET_TIME_DAILY, RESET_TIME_MONTHLY, RESET_TIME_WEEKLY}, -}; - -pub fn contract_template() -> Box> { - let contract = ContractWrapper::new( - crate::contract::execute, - crate::contract::instantiate, - crate::contract::query, - ) - .with_sudo(crate::contract::sudo); - Box::new(contract) -} - -const USER: &str = "USER"; -const IBC_ADDR: &str = "IBC_MODULE"; -const GOV_ADDR: &str = "GOV_MODULE"; -const NATIVE_DENOM: &str = "nosmo"; - -fn mock_app() -> App { - AppBuilder::new().build(|router, _, storage| { - router - .bank - .init_balance( - storage, - &Addr::unchecked(USER), - vec![Coin { - denom: NATIVE_DENOM.to_string(), - amount: Uint128::new(1_000), - }], - ) - .unwrap(); - }) -} - -// Instantiate the contract -fn proper_instantiate(paths: Vec) -> (App, RateLimitingContract) { - let mut app = mock_app(); - let cw_code_id = app.store_code(contract_template()); - - let msg = InstantiateMsg { - gov_module: Addr::unchecked(GOV_ADDR), - ibc_module: Addr::unchecked(IBC_ADDR), - paths, - }; - - let cw_rate_limit_contract_addr = app - .instantiate_contract( - cw_code_id, - Addr::unchecked(GOV_ADDR), - &msg, - &[], - "test", - None, - ) - .unwrap(); - - let cw_rate_limit_contract = RateLimitingContract(cw_rate_limit_contract_addr); - - (app, cw_rate_limit_contract) -} - -use cosmwasm_std::Attribute; - -#[test] // Checks that the RateLimit flows are expired properly when time passes -fn expiration() { - let quota = QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 10, 10); - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: format!("any"), - denom: format!("denom"), - quotas: vec![quota], - }]); - - // Using all the allowance - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 300_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - let res = app.sudo(cosmos_msg).unwrap(); - - let Attribute { key, value } = &res.custom_attrs(1)[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "0"); - let Attribute { key, value } = &res.custom_attrs(1)[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "300"); - let Attribute { key, value } = &res.custom_attrs(1)[5]; - assert_eq!(key, "weekly_max_in"); - assert_eq!(value, "300"); - let Attribute { key, value } = &res.custom_attrs(1)[6]; - assert_eq!(key, "weekly_max_out"); - assert_eq!(value, "300"); - - // Another packet is rate limited - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 300_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - let err = app.sudo(cosmos_msg).unwrap_err(); - - assert_eq!( - err.downcast_ref::().unwrap(), - &ContractError::RateLimitExceded { - channel: "channel".to_string(), - denom: "denom".to_string(), - amount: Uint256::from_u128(300), - quota_name: "weekly".to_string(), - used: Uint256::from_u128(300), - max: Uint256::from_u128(300), - reset: Timestamp::from_nanos(1572402219879305533), - } - ); - - // ... Time passes - app.update_block(|b| { - b.height += 1000; - b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) - }); - - // Sending the packet should work now - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 300_u32.into() - ); - - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - let res = app.sudo(cosmos_msg).unwrap(); - - let Attribute { key, value } = &res.custom_attrs(1)[3]; - assert_eq!(key, "weekly_used_in"); - assert_eq!(value, "0"); - let Attribute { key, value } = &res.custom_attrs(1)[4]; - assert_eq!(key, "weekly_used_out"); - assert_eq!(value, "300"); - let Attribute { key, value } = &res.custom_attrs(1)[5]; - assert_eq!(key, "weekly_max_in"); - assert_eq!(value, "300"); - let Attribute { key, value } = &res.custom_attrs(1)[6]; - assert_eq!(key, "weekly_max_out"); - assert_eq!(value, "300"); -} - -#[test] // Tests we can have different maximums for different quotaas (daily, weekly, etc) and that they all are active at the same time -fn multiple_quotas() { - let quotas = vec![ - QuotaMsg::new("daily", RESET_TIME_DAILY, 1, 1), - QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), - QuotaMsg::new("monthly", RESET_TIME_MONTHLY, 5, 5), - ]; - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: format!("any"), - denom: format!("denom"), - quotas, - }]); - - // Sending 1% to use the daily allowance - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); - - // Another packet is rate limited - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // ... One day passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) - }); - - // Sending the packet should work now - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); - - // Do that for 4 more days - for _ in 1..4 { - // ... One day passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) - }); - - // Sending the packet should work now - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); - } - - // ... One day passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) - }); - - // We now have exceeded the weekly limit! Even if the daily limit allows us, the weekly doesn't - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // ... One week passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) - }); - - // We can still can't send because the weekly and monthly limits are the same - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // Waiting a week again, doesn't help!! - // ... One week passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) - }); - - // We can still can't send because the monthly limit hasn't passed - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // Only after two more weeks we can send again - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds((RESET_TIME_WEEKLY * 2) + 1) // Two weeks - }); - - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 101_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); -} - -#[test] // Tests that the channel value is based on the value at the beginning of the period -fn channel_value_cached() { - let quotas = vec![ - QuotaMsg::new("daily", RESET_TIME_DAILY, 2, 2), - QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 5, 5), - ]; - - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![PathMsg { - channel_id: format!("any"), - denom: format!("denom"), - quotas, - }]); - - // Sending 1% (half of the daily allowance) - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 100_u32.into(), - funds: 1_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); - - // Sending 3% is now rate limited - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 100_u32.into(), - funds: 3_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // Even if the channel value increases, the percentage is calculated based on the value at period start - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 100000_u32.into(), - funds: 3_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // ... One day passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_DAILY + 1) - }); - - // New Channel Value world! - - // Sending 1% of a new value (10_000) passes the daily check, cause it - // has expired, but not the weekly check (The value for last week is - // sitll 100, as only 1 day has passed) - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 10_000_u32.into(), - funds: 100_u32.into() - ); - - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); - - // ... One week passes - app.update_block(|b| { - b.height += 10; - b.time = b.time.plus_seconds(RESET_TIME_WEEKLY + 1) - }); - - // Sending 1% of a new value should work and set the value for the day at 10_000 - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 10_000_u32.into(), - funds: 100_u32.into() - ); - - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); - - // If the value magically decreasses. We can still send up to 100 more (1% of 10k) - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 1_u32.into(), - funds: 75_u32.into() - ); - - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap(); -} - -#[test] // Checks that RateLimits added after instantiation are respected -fn add_paths_later() { - let (mut app, cw_rate_limit_contract) = proper_instantiate(vec![]); - - // All sends are allowed - let msg = test_msg_send!( - channel_id: format!("channel"), - denom: format!("denom"), - channel_value: 3_000_u32.into(), - funds: 300_u32.into() - ); - let cosmos_msg = cw_rate_limit_contract.sudo(msg.clone()); - let res = app.sudo(cosmos_msg).unwrap(); - - let Attribute { key, value } = &res.custom_attrs(1)[3]; - assert_eq!(key, "quota"); - assert_eq!(value, "none"); - - // Add a weekly limit of 1% - let management_msg = ExecuteMsg::AddPath { - channel_id: format!("any"), - denom: format!("denom"), - quotas: vec![QuotaMsg::new("weekly", RESET_TIME_WEEKLY, 1, 1)], - }; - - let cosmos_msg = cw_rate_limit_contract.call(management_msg).unwrap(); - app.execute(Addr::unchecked(GOV_ADDR), cosmos_msg).unwrap(); - - // Executing the same message again should fail, as it is now rate limited - let cosmos_msg = cw_rate_limit_contract.sudo(msg); - app.sudo(cosmos_msg).unwrap_err(); -} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/lib.rs b/x/ibcratelimit/contracts/rate-limiter/src/lib.rs deleted file mode 100644 index 6fcd1c32c..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/lib.rs +++ /dev/null @@ -1,21 +0,0 @@ -#![allow(clippy::result_large_err)] - -// Contract -pub mod contract; -mod error; -pub mod msg; -mod state; - -pub mod packet; - -// Functions -mod execute; -mod query; -mod sudo; - -// Tests -mod contract_tests; -mod helpers; -mod integration_tests; - -pub use crate::error::ContractError; diff --git a/x/ibcratelimit/contracts/rate-limiter/src/management.rs b/x/ibcratelimit/contracts/rate-limiter/src/management.rs deleted file mode 100644 index 04dc47df8..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/management.rs +++ /dev/null @@ -1,250 +0,0 @@ -use crate::msg::{PathMsg, QuotaMsg}; -use crate::state::{Flow, Path, RateLimit, GOVMODULE, IBCMODULE, RATE_LIMIT_TRACKERS}; -use crate::ContractError; -use cosmwasm_std::{Addr, DepsMut, Response, Timestamp}; - -pub fn add_new_paths( - deps: DepsMut, - path_msgs: Vec, - now: Timestamp, -) -> Result<(), ContractError> { - for path_msg in path_msgs { - let path = Path::new(path_msg.channel_id, path_msg.denom); - - RATE_LIMIT_TRACKERS.save( - deps.storage, - path.into(), - &path_msg - .quotas - .iter() - .map(|q| RateLimit { - quota: q.into(), - flow: Flow::new(0_u128, 0_u128, now, q.duration), - }) - .collect(), - )? - } - Ok(()) -} - -pub fn try_add_path( - deps: DepsMut, - sender: Addr, - channel_id: String, - denom: String, - quotas: Vec, - now: Timestamp, -) -> Result { - // codenit: should we make a function for checking this authorization? - let ibc_module = IBCMODULE.load(deps.storage)?; - let gov_module = GOVMODULE.load(deps.storage)?; - if sender != ibc_module && sender != gov_module { - return Err(ContractError::Unauthorized {}); - } - add_new_paths(deps, vec![PathMsg::new(&channel_id, &denom, quotas)], now)?; - - Ok(Response::new() - .add_attribute("method", "try_add_channel") - .add_attribute("channel_id", channel_id) - .add_attribute("denom", denom)) -} - -pub fn try_remove_path( - deps: DepsMut, - sender: Addr, - channel_id: String, - denom: String, -) -> Result { - let ibc_module = IBCMODULE.load(deps.storage)?; - let gov_module = GOVMODULE.load(deps.storage)?; - if sender != ibc_module && sender != gov_module { - return Err(ContractError::Unauthorized {}); - } - - let path = Path::new(&channel_id, &denom); - RATE_LIMIT_TRACKERS.remove(deps.storage, path.into()); - Ok(Response::new() - .add_attribute("method", "try_remove_channel") - .add_attribute("denom", denom) - .add_attribute("channel_id", channel_id)) -} - -// Reset specified quote_id for the given channel_id -pub fn try_reset_path_quota( - deps: DepsMut, - sender: Addr, - channel_id: String, - denom: String, - quota_id: String, - now: Timestamp, -) -> Result { - let gov_module = GOVMODULE.load(deps.storage)?; - if sender != gov_module { - return Err(ContractError::Unauthorized {}); - } - - let path = Path::new(&channel_id, &denom); - RATE_LIMIT_TRACKERS.update(deps.storage, path.into(), |maybe_rate_limit| { - match maybe_rate_limit { - None => Err(ContractError::QuotaNotFound { - quota_id, - channel_id: channel_id.clone(), - denom: denom.clone(), - }), - Some(mut limits) => { - // Q: What happens here if quote_id not found? seems like we return ok? - limits.iter_mut().for_each(|limit| { - if limit.quota.name == quota_id.as_ref() { - limit.flow.expire(now, limit.quota.duration) - } - }); - Ok(limits) - } - } - })?; - - Ok(Response::new() - .add_attribute("method", "try_reset_channel") - .add_attribute("channel_id", channel_id)) -} - -#[cfg(test)] -mod tests { - - use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; - use cosmwasm_std::{from_binary, Addr, StdError}; - - use crate::contract::{execute, query}; - use crate::helpers::tests::verify_query_response; - use crate::msg::{ExecuteMsg, QueryMsg, QuotaMsg}; - use crate::state::{RateLimit, GOVMODULE, IBCMODULE}; - - const IBC_ADDR: &str = "IBC_MODULE"; - const GOV_ADDR: &str = "GOV_MODULE"; - - #[test] // Tests AddPath and RemovePath messages - fn management_add_and_remove_path() { - let mut deps = mock_dependencies(); - IBCMODULE - .save(deps.as_mut().storage, &Addr::unchecked(IBC_ADDR)) - .unwrap(); - GOVMODULE - .save(deps.as_mut().storage, &Addr::unchecked(GOV_ADDR)) - .unwrap(); - - let msg = ExecuteMsg::AddPath { - channel_id: format!("channel"), - denom: format!("denom"), - quotas: vec![QuotaMsg { - name: "daily".to_string(), - duration: 1600, - send_recv: (3, 5), - }], - }; - let info = mock_info(IBC_ADDR, &vec![]); - - let env = mock_env(); - let res = execute(deps.as_mut(), env.clone(), info, msg).unwrap(); - assert_eq!(0, res.messages.len()); - - let query_msg = QueryMsg::GetQuotas { - channel_id: format!("channel"), - denom: format!("denom"), - }; - - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - - let value: Vec = from_binary(&res).unwrap(); - verify_query_response( - &value[0], - "daily", - (3, 5), - 1600, - 0, - 0, - env.block.time.plus_seconds(1600), - ); - - assert_eq!(value.len(), 1); - - // Add another path - let msg = ExecuteMsg::AddPath { - channel_id: format!("channel2"), - denom: format!("denom"), - quotas: vec![QuotaMsg { - name: "daily".to_string(), - duration: 1600, - send_recv: (3, 5), - }], - }; - let info = mock_info(IBC_ADDR, &vec![]); - - let env = mock_env(); - execute(deps.as_mut(), env.clone(), info, msg).unwrap(); - - // remove the first one - let msg = ExecuteMsg::RemovePath { - channel_id: format!("channel"), - denom: format!("denom"), - }; - - let info = mock_info(IBC_ADDR, &vec![]); - let env = mock_env(); - execute(deps.as_mut(), env.clone(), info, msg).unwrap(); - - // The channel is not there anymore - let err = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap_err(); - assert!(matches!(err, StdError::NotFound { .. })); - - // The second channel is still there - let query_msg = QueryMsg::GetQuotas { - channel_id: format!("channel2"), - denom: format!("denom"), - }; - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - let value: Vec = from_binary(&res).unwrap(); - assert_eq!(value.len(), 1); - verify_query_response( - &value[0], - "daily", - (3, 5), - 1600, - 0, - 0, - env.block.time.plus_seconds(1600), - ); - - // Paths are overriden if they share a name and denom - let msg = ExecuteMsg::AddPath { - channel_id: format!("channel2"), - denom: format!("denom"), - quotas: vec![QuotaMsg { - name: "different".to_string(), - duration: 5000, - send_recv: (50, 30), - }], - }; - let info = mock_info(IBC_ADDR, &vec![]); - - let env = mock_env(); - execute(deps.as_mut(), env.clone(), info, msg).unwrap(); - - let query_msg = QueryMsg::GetQuotas { - channel_id: format!("channel2"), - denom: format!("denom"), - }; - let res = query(deps.as_ref(), mock_env(), query_msg.clone()).unwrap(); - let value: Vec = from_binary(&res).unwrap(); - assert_eq!(value.len(), 1); - - verify_query_response( - &value[0], - "different", - (50, 30), - 5000, - 0, - 0, - env.block.time.plus_seconds(5000), - ); - } -} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/msg.rs b/x/ibcratelimit/contracts/rate-limiter/src/msg.rs deleted file mode 100644 index 57279c0ad..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/msg.rs +++ /dev/null @@ -1,105 +0,0 @@ -use cosmwasm_schema::{cw_serde, QueryResponses}; -use cosmwasm_std::Addr; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; - -#[cfg(test)] -use cosmwasm_std::Uint256; - -use crate::packet::Packet; - -// PathMsg contains a channel_id and denom to represent a unique identifier within ibc-go, and a list of rate limit quotas -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct PathMsg { - pub channel_id: String, - pub denom: String, - pub quotas: Vec, -} - -impl PathMsg { - pub fn new( - channel: impl Into, - denom: impl Into, - quotas: Vec, - ) -> Self { - PathMsg { - channel_id: channel.into(), - denom: denom.into(), - quotas, - } - } -} - -// QuotaMsg represents a rate limiting Quota when sent as a wasm msg -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct QuotaMsg { - pub name: String, - pub duration: u64, - pub send_recv: (u32, u32), -} - -impl QuotaMsg { - pub fn new(name: &str, seconds: u64, send_percentage: u32, recv_percentage: u32) -> Self { - QuotaMsg { - name: name.to_string(), - duration: seconds, - send_recv: (send_percentage, recv_percentage), - } - } -} - -/// Initialize the contract with the address of the IBC module and any existing channels. -/// Only the ibc module is allowed to execute actions on this contract -#[cw_serde] -pub struct InstantiateMsg { - pub gov_module: Addr, - pub ibc_module: Addr, - pub paths: Vec, -} - -/// The caller (IBC module) is responsible for correctly calculating the funds -/// being sent through the channel -#[cw_serde] -pub enum ExecuteMsg { - AddPath { - channel_id: String, - denom: String, - quotas: Vec, - }, - RemovePath { - channel_id: String, - denom: String, - }, - ResetPathQuota { - channel_id: String, - denom: String, - quota_id: String, - }, -} - -#[cw_serde] -#[derive(QueryResponses)] -pub enum QueryMsg { - #[returns(Vec)] - GetQuotas { channel_id: String, denom: String }, -} - -#[cw_serde] -pub enum SudoMsg { - SendPacket { - packet: Packet, - #[cfg(test)] - channel_value_mock: Option, - }, - RecvPacket { - packet: Packet, - #[cfg(test)] - channel_value_mock: Option, - }, - UndoSend { - packet: Packet, - }, -} - -#[cw_serde] -pub enum MigrateMsg {} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/packet.rs b/x/ibcratelimit/contracts/rate-limiter/src/packet.rs deleted file mode 100644 index 6e53754bb..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/packet.rs +++ /dev/null @@ -1,482 +0,0 @@ -use crate::state::FlowType; -use cosmwasm_std::{Addr, Deps, StdError, Uint256}; -use osmosis_std_derive::CosmwasmExt; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; -use sha2::{Digest, Sha256}; - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct Height { - /// Previously known as "epoch" - revision_number: Option, - - /// The height of a block - revision_height: Option, -} - -// IBC transfer data -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct FungibleTokenData { - pub denom: String, - amount: Uint256, - sender: Addr, - receiver: Addr, -} - -// An IBC packet -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct Packet { - pub sequence: u64, - pub source_port: String, - pub source_channel: String, - pub destination_port: String, - pub destination_channel: String, - pub data: FungibleTokenData, - pub timeout_height: Height, - pub timeout_timestamp: Option, -} - -// SupplyOf query message definition. -// osmosis-std doesn't currently support the SupplyOf query, so I'm defining it localy so it can be used to obtain the channel value -#[derive( - Clone, - PartialEq, - Eq, - ::prost::Message, - serde::Serialize, - serde::Deserialize, - schemars::JsonSchema, - CosmwasmExt, -)] -#[proto_message(type_url = "/cosmos.bank.v1beta1.QuerySupplyOfRequest")] -#[proto_query( - path = "/cosmos.bank.v1beta1.Query/SupplyOf", - response_type = QuerySupplyOfResponse -)] -pub struct QuerySupplyOfRequest { - #[prost(string, tag = "1")] - pub denom: ::prost::alloc::string::String, -} - -#[derive( - Clone, - PartialEq, - Eq, - ::prost::Message, - serde::Serialize, - serde::Deserialize, - schemars::JsonSchema, - CosmwasmExt, -)] -#[proto_message(type_url = "/cosmos.bank.v1beta1.QuerySupplyOf")] -pub struct QuerySupplyOfResponse { - #[prost(message, optional, tag = "1")] - pub amount: ::core::option::Option, -} -// End of SupplyOf query message definition - -use std::str::FromStr; // Needed to parse the coin's String as Uint256 - -fn hash_denom(denom: &str) -> String { - let mut hasher = Sha256::new(); - hasher.update(denom.as_bytes()); - let result = hasher.finalize(); - let hash = hex::encode(result); - format!("ibc/{}", hash.to_uppercase()) -} - -impl Packet { - pub fn mock( - source_channel: String, - dest_channel: String, - denom: String, - funds: Uint256, - ) -> Packet { - Packet { - sequence: 0, - source_port: "transfer".to_string(), - source_channel, - destination_port: "transfer".to_string(), - destination_channel: dest_channel, - data: crate::packet::FungibleTokenData { - denom, - amount: funds, - sender: Addr::unchecked("sender"), - receiver: Addr::unchecked("receiver"), - }, - timeout_height: crate::packet::Height { - revision_number: None, - revision_height: None, - }, - timeout_timestamp: None, - } - } - - pub fn channel_value(&self, deps: Deps, direction: &FlowType) -> Result { - let res = QuerySupplyOfRequest { - denom: self.local_denom(direction), - } - .query(&deps.querier)?; - Uint256::from_str(&res.amount.unwrap_or_default().amount) - } - - pub fn get_funds(&self) -> Uint256 { - self.data.amount - } - - fn local_channel(&self, direction: &FlowType) -> String { - // Pick the appropriate channel depending on whether this is a send or a recv - match direction { - FlowType::In => self.destination_channel.clone(), - FlowType::Out => self.source_channel.clone(), - } - } - - fn receiver_chain_is_source(&self) -> bool { - self.data - .denom - .starts_with(&format!("transfer/{}", self.source_channel)) - } - - fn handle_denom_for_sends(&self) -> String { - if !self.data.denom.starts_with("transfer/") { - // For native tokens we just use what's on the packet - return self.data.denom.clone(); - } - // For non-native tokens, we need to generate the IBCDenom - hash_denom(&self.data.denom) - } - - fn handle_denom_for_recvs(&self) -> String { - if self.receiver_chain_is_source() { - // These are tokens that have been sent to the counterparty and are returning - let unprefixed = self - .data - .denom - .strip_prefix(&format!("transfer/{}/", self.source_channel)) - .unwrap_or_default(); - let split: Vec<&str> = unprefixed.split('/').collect(); - if split[0] == unprefixed { - // This is a native token. Return the unprefixed token - unprefixed.to_string() - } else { - // This is a non-native that was sent to the counterparty. - // We need to hash it. - // The ibc-go implementation checks that the denom has been built correctly. We - // don't need to do that here because if it hasn't, the transfer module will catch it. - hash_denom(unprefixed) - } - } else { - // Tokens that come directly from the counterparty. - // Since the sender didn't prefix them, we need to do it here. - let prefixed = format!("transfer/{}/", self.destination_channel) + &self.data.denom; - hash_denom(&prefixed) - } - } - - fn local_denom(&self, direction: &FlowType) -> String { - match direction { - FlowType::In => self.handle_denom_for_recvs(), - FlowType::Out => self.handle_denom_for_sends(), - } - } - - pub fn path_data(&self, direction: &FlowType) -> (String, String) { - (self.local_channel(direction), self.local_denom(direction)) - } -} - -// Helpers - -// Create a new packet for testing -#[cfg(test)] -#[macro_export] -macro_rules! test_msg_send { - (channel_id: $channel_id:expr, denom: $denom:expr, channel_value: $channel_value:expr, funds: $funds:expr) => { - $crate::msg::SudoMsg::SendPacket { - packet: $crate::packet::Packet::mock($channel_id, $channel_id, $denom, $funds), - channel_value_mock: Some($channel_value), - } - }; -} - -#[cfg(test)] -#[macro_export] -macro_rules! test_msg_recv { - (channel_id: $channel_id:expr, denom: $denom:expr, channel_value: $channel_value:expr, funds: $funds:expr) => { - $crate::msg::SudoMsg::RecvPacket { - packet: $crate::packet::Packet::mock( - $channel_id, - $channel_id, - format!("transfer/{}/{}", $channel_id, $denom), - $funds, - ), - channel_value_mock: Some($channel_value), - } - }; -} - -#[cfg(test)] -pub mod tests { - use crate::msg::SudoMsg; - - use super::*; - - #[test] - fn send_native() { - let packet = Packet::mock( - format!("channel-17-local"), - format!("channel-42-counterparty"), - format!("uosmo"), - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::Out), "uosmo"); - } - - #[test] - fn send_non_native() { - // The transfer module "unhashes" the denom from - // ibc/09E4864A262249507925831FBAD69DAD08F66FAAA0640714E765912A0751289A - // to port/channel/denom before passing it along to the contrace - let packet = Packet::mock( - format!("channel-17-local"), - format!("channel-42-counterparty"), - format!("transfer/channel-17-local/ujuno"), - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::Out), - "ibc/09E4864A262249507925831FBAD69DAD08F66FAAA0640714E765912A0751289A" - ); - } - - #[test] - fn receive_non_native() { - // The counterparty chain sends their own native token to us - let packet = Packet::mock( - format!("channel-42-counterparty"), // The counterparty's channel is the source here - format!("channel-17-local"), // Our channel is the dest channel - format!("ujuno"), // This is unwrapped. It is our job to wrap it - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::In), - "ibc/09E4864A262249507925831FBAD69DAD08F66FAAA0640714E765912A0751289A" - ); - } - - #[test] - fn receive_native() { - // The counterparty chain sends us back our native token that they had wrapped - let packet = Packet::mock( - format!("channel-42-counterparty"), // The counterparty's channel is the source here - format!("channel-17-local"), // Our channel is the dest channel - format!("transfer/channel-42-counterparty/uosmo"), - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::In), "uosmo"); - } - - // Let's assume we have two chains A and B (local and counterparty) connected in the following way: - // - // Chain A <---> channel-17-local <---> channel-42-counterparty <---> Chain B - // - // The following tests should pass - // - - const WRAPPED_OSMO_ON_HUB_TRACE: &str = "transfer/channel-141/uosmo"; - const WRAPPED_ATOM_ON_OSMOSIS_TRACE: &str = "transfer/channel-0/uatom"; - const WRAPPED_ATOM_ON_OSMOSIS_HASH: &str = - "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2"; - const WRAPPED_OSMO_ON_HUB_HASH: &str = - "ibc/14F9BC3E44B8A9C1BE1FB08980FAB87034C9905EF17CF2F5008FC085218811CC"; - - #[test] - fn sanity_check() { - // Examples using the official channels as of Nov 2022. - - // uatom sent to osmosis - let packet = Packet::mock( - format!("channel-141"), // from: hub - format!("channel-0"), // to: osmosis - format!("uatom"), - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::In), - WRAPPED_ATOM_ON_OSMOSIS_HASH.clone() - ); - - // uatom on osmosis sent back to the hub - let packet = Packet::mock( - format!("channel-0"), // from: osmosis - format!("channel-141"), // to: hub - WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::In), "uatom"); - - // osmo sent to the hub - let packet = Packet::mock( - format!("channel-0"), // from: osmosis - format!("channel-141"), // to: hub - format!("uosmo"), - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::Out), "uosmo"); - - // osmo on the hub sent back to osmosis - // send - let packet = Packet::mock( - format!("channel-141"), // from: hub - format!("channel-0"), // to: osmosis - WRAPPED_OSMO_ON_HUB_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::Out), WRAPPED_OSMO_ON_HUB_HASH); - - // receive - let packet = Packet::mock( - format!("channel-141"), // from: hub - format!("channel-0"), // to: osmosis - WRAPPED_OSMO_ON_HUB_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::In), "uosmo"); - - // Now let's pretend we're the hub. - // The following tests are from perspective of the the hub (i.e.: if this contract were deployed there) - // - // osmo sent to the hub - let packet = Packet::mock( - format!("channel-0"), // from: osmosis - format!("channel-141"), // to: hub - format!("uosmo"), - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::In), WRAPPED_OSMO_ON_HUB_HASH); - - // uosmo on the hub sent back to the osmosis - let packet = Packet::mock( - format!("channel-141"), // from: hub - format!("channel-0"), // to: osmosis - WRAPPED_OSMO_ON_HUB_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::In), "uosmo"); - - // uatom sent to osmosis - let packet = Packet::mock( - format!("channel-141"), // from: hub - format!("channel-0"), // to: osmosis - format!("uatom"), - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::Out), "uatom"); - - // utaom on the osmosis sent back to the hub - // send - let packet = Packet::mock( - format!("channel-0"), // from: osmosis - format!("channel-141"), // to: hub - WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::Out), - WRAPPED_ATOM_ON_OSMOSIS_HASH - ); - - // receive - let packet = Packet::mock( - format!("channel-0"), // from: osmosis - format!("channel-141"), // to: hub - WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!(packet.local_denom(&FlowType::In), "uatom"); - } - - #[test] - fn sanity_double() { - // Now let's deal with double wrapping - - let juno_wrapped_osmosis_wrapped_atom_hash = - "ibc/6CDD4663F2F09CD62285E2D45891FC149A3568E316CE3EBBE201A71A78A69388"; - - // Send uatom on stored on osmosis to juno - // send - let packet = Packet::mock( - format!("channel-42"), // from: osmosis - format!("channel-0"), // to: juno - WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::Out), - WRAPPED_ATOM_ON_OSMOSIS_HASH - ); - - // receive - let packet = Packet::mock( - format!("channel-42"), // from: osmosis - format!("channel-0"), // to: juno - WRAPPED_ATOM_ON_OSMOSIS_TRACE.to_string(), - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::In), - juno_wrapped_osmosis_wrapped_atom_hash - ); - - // Send back that multi-wrapped token to osmosis - // send - let packet = Packet::mock( - format!("channel-0"), // from: juno - format!("channel-42"), // to: osmosis - format!("{}{}", "transfer/channel-0/", WRAPPED_ATOM_ON_OSMOSIS_TRACE), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::Out), - juno_wrapped_osmosis_wrapped_atom_hash - ); - - // receive - let packet = Packet::mock( - format!("channel-0"), // from: juno - format!("channel-42"), // to: osmosis - format!("{}{}", "transfer/channel-0/", WRAPPED_ATOM_ON_OSMOSIS_TRACE), // unwrapped before reaching the contract - 0_u128.into(), - ); - assert_eq!( - packet.local_denom(&FlowType::In), - WRAPPED_ATOM_ON_OSMOSIS_HASH - ); - } - - #[test] - fn tokenfactory_packet() { - let json = r#"{"send_packet":{"packet":{"sequence":4,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-1491","data":{"denom":"transfer/channel-0/factory/osmo12smx2wdlyttvyzvzg54y2vnqwq2qjateuf7thj/czar","amount":"100000000000000000","sender":"osmo1cyyzpxplxdzkeea7kwsydadg87357qnahakaks","receiver":"osmo1c584m4lq25h83yp6ag8hh4htjr92d954vklzja"},"timeout_height":{},"timeout_timestamp":1668024476848430980}}}"#; - let parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); - //println!("{parsed:?}"); - - match parsed { - SudoMsg::SendPacket { packet, .. } => { - assert_eq!( - packet.local_denom(&FlowType::Out), - "ibc/07A1508F49D0753EDF95FA18CA38C0D6974867D793EB36F13A2AF1A5BB148B22" - ); - } - _ => panic!("parsed into wrong variant"), - } - } - - #[test] - fn packet_with_memo() { - // extra fields (like memo) get ignored. - let json = r#"{"recv_packet":{"packet":{"sequence":1,"source_port":"transfer","source_channel":"channel-0","destination_port":"transfer","destination_channel":"channel-0","data":{"denom":"stake","amount":"1","sender":"osmo177uaalkhra6wth6hc9hu79f72eq903kwcusx4r","receiver":"osmo1fj6yt4pwfea4865z763fvhwktlpe020ef93dlq","memo":"some info"},"timeout_height":{"revision_height":100}}}}"#; - let _parsed: SudoMsg = serde_json_wasm::from_str(json).unwrap(); - //println!("{parsed:?}"); - } -} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/query.rs b/x/ibcratelimit/contracts/rate-limiter/src/query.rs deleted file mode 100644 index 6431a837d..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/query.rs +++ /dev/null @@ -1,12 +0,0 @@ -use cosmwasm_std::{to_binary, Binary, Deps, StdResult}; - -use crate::state::{Path, RATE_LIMIT_TRACKERS}; - -pub fn get_quotas( - deps: Deps, - channel_id: impl Into, - denom: impl Into, -) -> StdResult { - let path = Path::new(channel_id, denom); - to_binary(&RATE_LIMIT_TRACKERS.load(deps.storage, path.into())?) -} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/state.rs b/x/ibcratelimit/contracts/rate-limiter/src/state.rs deleted file mode 100644 index e699936d8..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/state.rs +++ /dev/null @@ -1,372 +0,0 @@ -use cosmwasm_std::{Addr, Timestamp, Uint256}; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; -use std::cmp; - -use cw_storage_plus::{Item, Map}; - -use crate::{msg::QuotaMsg, ContractError}; - -/// This represents the key for our rate limiting tracker. A tuple of a denom and -/// a channel. When interactic with storage, it's preffered to use this struct -/// and call path.into() on it to convert it to the composite key of the -/// RATE_LIMIT_TRACKERS map -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct Path { - pub denom: String, - pub channel: String, -} - -impl Path { - pub fn new(channel: impl Into, denom: impl Into) -> Self { - Path { - channel: channel.into(), - denom: denom.into(), - } - } -} - -impl From for (String, String) { - fn from(path: Path) -> (String, String) { - (path.channel, path.denom) - } -} - -impl From<&Path> for (String, String) { - fn from(path: &Path) -> (String, String) { - (path.channel.to_owned(), path.denom.to_owned()) - } -} - -#[derive(Debug, Clone)] -pub enum FlowType { - In, - Out, -} - -/// A Flow represents the transfer of value for a denom through an IBC channel -/// during a time window. -/// -/// It tracks inflows (transfers into osmosis) and outflows (transfers out of -/// osmosis). -/// -/// The period_end represents the last point in time for which this Flow is -/// tracking the value transfer. -/// -/// Periods are discrete repeating windows. A period only starts when a contract -/// call to update the Flow (SendPacket/RecvPackt) is made, and not right after -/// the period ends. This means that if no calls happen after a period expires, -/// the next period will begin at the time of the next call and be valid for the -/// specified duration for the quota. -/// -/// This is a design decision to avoid the period calculations and thus reduce gas consumption -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema, Copy)] -pub struct Flow { - pub inflow: Uint256, - pub outflow: Uint256, - pub period_end: Timestamp, -} - -impl Flow { - pub fn new( - inflow: impl Into, - outflow: impl Into, - now: Timestamp, - duration: u64, - ) -> Self { - Self { - inflow: inflow.into(), - outflow: outflow.into(), - period_end: now.plus_seconds(duration), - } - } - - /// The balance of a flow is how much absolute value for the denom has moved - /// through the channel before period_end. It returns a tuple of - /// (balance_in, balance_out) where balance_in in is how much has been - /// transferred into the flow, and balance_out is how much value transferred - /// out. - pub fn balance(&self) -> (Uint256, Uint256) { - ( - self.inflow.saturating_sub(self.outflow), - self.outflow.saturating_sub(self.inflow), - ) - } - - /// checks if the flow, in the current state, has exceeded a max allowance - pub fn exceeds(&self, direction: &FlowType, max_inflow: Uint256, max_outflow: Uint256) -> bool { - let (balance_in, balance_out) = self.balance(); - match direction { - FlowType::In => balance_in > max_inflow, - FlowType::Out => balance_out > max_outflow, - } - } - - /// returns the balance in a direction. This is used for displaying cleaner errors - pub fn balance_on(&self, direction: &FlowType) -> Uint256 { - let (balance_in, balance_out) = self.balance(); - match direction { - FlowType::In => balance_in, - FlowType::Out => balance_out, - } - } - - /// If now is greater than the period_end, the Flow is considered expired. - pub fn is_expired(&self, now: Timestamp) -> bool { - self.period_end < now - } - - // Mutating methods - - /// Expire resets the Flow to start tracking the value transfer from the - /// moment this method is called. - pub fn expire(&mut self, now: Timestamp, duration: u64) { - self.inflow = Uint256::from(0_u32); - self.outflow = Uint256::from(0_u32); - self.period_end = now.plus_seconds(duration); - } - - /// Updates the current flow incrementing it by a transfer of value. - pub fn add_flow(&mut self, direction: FlowType, value: Uint256) { - match direction { - FlowType::In => self.inflow = self.inflow.saturating_add(value), - FlowType::Out => self.outflow = self.outflow.saturating_add(value), - } - } - - /// Updates the current flow reducing it by a transfer of value. - pub fn undo_flow(&mut self, direction: FlowType, value: Uint256) { - match direction { - FlowType::In => self.inflow = self.inflow.saturating_sub(value), - FlowType::Out => self.outflow = self.outflow.saturating_sub(value), - } - } - - /// Applies a transfer. If the Flow is expired (now > period_end), it will - /// reset it before applying the transfer. - fn apply_transfer( - &mut self, - direction: &FlowType, - funds: Uint256, - now: Timestamp, - quota: &Quota, - ) -> bool { - let mut expired = false; - if self.is_expired(now) { - self.expire(now, quota.duration); - expired = true; - } - self.add_flow(direction.clone(), funds); - expired - } -} - -/// A Quota is the percentage of the denom's total value that can be transferred -/// through the channel in a given period of time (duration) -/// -/// Percentages can be different for send and recv -/// -/// The name of the quota is expected to be a human-readable representation of -/// the duration (i.e.: "weekly", "daily", "every-six-months", ...) -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct Quota { - pub name: String, - pub max_percentage_send: u32, - pub max_percentage_recv: u32, - pub duration: u64, - pub channel_value: Option, -} - -impl Quota { - /// Calculates the max capacity (absolute value in the same unit as - /// total_value) in each direction based on the total value of the denom in - /// the channel. The result tuple represents the max capacity when the - /// transfer is in directions: (FlowType::In, FlowType::Out) - pub fn capacity(&self) -> (Uint256, Uint256) { - match self.channel_value { - Some(total_value) => ( - total_value * Uint256::from(self.max_percentage_recv) / Uint256::from(100_u32), - total_value * Uint256::from(self.max_percentage_send) / Uint256::from(100_u32), - ), - None => (0_u32.into(), 0_u32.into()), // This should never happen, but ig the channel value is not set, we disallow any transfer - } - } - - /// returns the capacity in a direction. This is used for displaying cleaner errors - pub fn capacity_on(&self, direction: &FlowType) -> Uint256 { - let (max_in, max_out) = self.capacity(); - match direction { - FlowType::In => max_in, - FlowType::Out => max_out, - } - } -} - -impl From<&QuotaMsg> for Quota { - fn from(msg: &QuotaMsg) -> Self { - let send_recv = ( - cmp::min(msg.send_recv.0, 100), - cmp::min(msg.send_recv.1, 100), - ); - Quota { - name: msg.name.clone(), - max_percentage_send: send_recv.0, - max_percentage_recv: send_recv.1, - duration: msg.duration, - channel_value: None, - } - } -} - -/// RateLimit is the main structure tracked for each channel/denom pair. Its quota -/// represents rate limit configuration, and the flow its -/// current state (i.e.: how much value has been transfered in the current period) -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] -pub struct RateLimit { - pub quota: Quota, - pub flow: Flow, -} - -// The channel value on send depends on the amount on escrow. The ibc transfer -// module modifies the escrow amount by "funds" on sends before calling the -// contract. This function takes that into account so that the channel value -// that we track matches the channel value at the moment when the ibc -// transaction started executing -fn calculate_channel_value( - channel_value: Uint256, - denom: &str, - funds: Uint256, - direction: &FlowType, -) -> Uint256 { - match direction { - FlowType::Out => { - if denom.contains("ibc") { - channel_value + funds // Non-Native tokens get removed from the supply on send. Add that amount back - } else { - // The commented-out code in the golang calculate channel value is what we want, but we're currently using the whole supply temporarily for efficiency. see rate_limit.go/CalculateChannelValue(..) - //channel_value - funds // Native tokens increase escrow amount on send. Remove that amount here - channel_value - } - } - FlowType::In => channel_value, - } -} - -impl RateLimit { - /// Checks if a transfer is allowed and updates the data structures - /// accordingly. - /// - /// If the transfer is not allowed, it will return a RateLimitExceeded error. - /// - /// Otherwise it will return a RateLimitResponse with the updated data structures - pub fn allow_transfer( - &mut self, - path: &Path, - direction: &FlowType, - funds: Uint256, - channel_value: Uint256, - now: Timestamp, - ) -> Result { - // Flow used before this transaction is applied. - // This is used to make error messages more informative - let initial_flow = self.flow.balance_on(direction); - - // Apply the transfer. From here on, we will updated the flow with the new transfer - // and check if it exceeds the quota at the current time - - let expired = self.flow.apply_transfer(direction, funds, now, &self.quota); - // Cache the channel value if it has never been set or it has expired. - if self.quota.channel_value.is_none() || expired { - self.quota.channel_value = Some(calculate_channel_value( - channel_value, - &path.denom, - funds, - direction, - )) - } - - let (max_in, max_out) = self.quota.capacity(); - // Return the effects of applying the transfer or an error. - match self.flow.exceeds(direction, max_in, max_out) { - true => Err(ContractError::RateLimitExceded { - channel: path.channel.to_string(), - denom: path.denom.to_string(), - amount: funds, - quota_name: self.quota.name.to_string(), - used: initial_flow, - max: self.quota.capacity_on(direction), - reset: self.flow.period_end, - }), - false => Ok(RateLimit { - quota: self.quota.clone(), // Cloning here because self.quota.name (String) does not allow us to implement Copy - flow: self.flow, // We can Copy flow, so this is slightly more efficient than cloning the whole RateLimit - }), - } - } -} - -/// Only this address can manage the contract. This will likely be the -/// governance module, but could be set to something else if needed -pub const GOVMODULE: Item = Item::new("gov_module"); -/// Only this address can execute transfers. This will likely be the -/// IBC transfer module, but could be set to something else if needed -pub const IBCMODULE: Item = Item::new("ibc_module"); - -/// RATE_LIMIT_TRACKERS is the main state for this contract. It maps a path (IBC -/// Channel + denom) to a vector of `RateLimit`s. -/// -/// The `RateLimit` struct contains the information about how much value of a -/// denom has moved through the channel during the currently active time period -/// (channel_flow.flow) and what percentage of the denom's value we are -/// allowing to flow through that channel in a specific duration (quota) -/// -/// For simplicity, the channel in the map keys refers to the "host" channel on -/// the osmosis side. This means that on PacketSend it will refer to the source -/// channel while on PacketRecv it refers to the destination channel. -/// -/// It is the responsibility of the go module to pass the appropriate channel -/// when sending the messages -/// -/// The map key (String, String) represents (channel_id, denom). We use -/// composite keys instead of a struct to avoid having to implement the -/// PrimaryKey trait -pub const RATE_LIMIT_TRACKERS: Map<(String, String), Vec> = Map::new("flow"); - -#[cfg(test)] -pub mod tests { - use super::*; - - pub const RESET_TIME_DAILY: u64 = 60 * 60 * 24; - pub const RESET_TIME_WEEKLY: u64 = 60 * 60 * 24 * 7; - pub const RESET_TIME_MONTHLY: u64 = 60 * 60 * 24 * 30; - - #[test] - fn flow() { - let epoch = Timestamp::from_seconds(0); - let mut flow = Flow::new(0_u32, 0_u32, epoch, RESET_TIME_WEEKLY); - - assert!(!flow.is_expired(epoch)); - assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_DAILY))); - assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY))); - assert!(flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY).plus_nanos(1))); - - assert_eq!(flow.balance(), (0_u32.into(), 0_u32.into())); - flow.add_flow(FlowType::In, 5_u32.into()); - assert_eq!(flow.balance(), (5_u32.into(), 0_u32.into())); - flow.add_flow(FlowType::Out, 2_u32.into()); - assert_eq!(flow.balance(), (3_u32.into(), 0_u32.into())); - // Adding flow doesn't affect expiration - assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_DAILY))); - - flow.expire(epoch.plus_seconds(RESET_TIME_WEEKLY), RESET_TIME_WEEKLY); - assert_eq!(flow.balance(), (0_u32.into(), 0_u32.into())); - assert_eq!(flow.inflow, Uint256::from(0_u32)); - assert_eq!(flow.outflow, Uint256::from(0_u32)); - assert_eq!(flow.period_end, epoch.plus_seconds(RESET_TIME_WEEKLY * 2)); - - // Expiration has moved - assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY).plus_nanos(1))); - assert!(!flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY * 2))); - assert!(flow.is_expired(epoch.plus_seconds(RESET_TIME_WEEKLY * 2).plus_nanos(1))); - } -} diff --git a/x/ibcratelimit/contracts/rate-limiter/src/sudo.rs b/x/ibcratelimit/contracts/rate-limiter/src/sudo.rs deleted file mode 100644 index 36a16f638..000000000 --- a/x/ibcratelimit/contracts/rate-limiter/src/sudo.rs +++ /dev/null @@ -1,193 +0,0 @@ -use cosmwasm_std::{DepsMut, Response, Timestamp, Uint256}; - -use crate::{ - packet::Packet, - state::{FlowType, Path, RateLimit, RATE_LIMIT_TRACKERS}, - ContractError, -}; - -// This function will process a packet and extract the paths information, funds, -// and channel value from it. This is will have to interact with the chain via grpc queries to properly -// obtain this information. -// -// For backwards compatibility, we're teporarily letting the chain override the -// denom and channel value, but these should go away in favour of the contract -// extracting these from the packet -pub fn process_packet( - deps: DepsMut, - packet: Packet, - direction: FlowType, - now: Timestamp, - #[cfg(test)] channel_value_mock: Option, -) -> Result { - let (channel_id, denom) = packet.path_data(&direction); - let path = &Path::new(&channel_id, &denom); - let funds = packet.get_funds(); - - #[cfg(test)] - // When testing we override the channel value with the mock since we can't get it from the chain - let channel_value = match channel_value_mock { - Some(channel_value) => channel_value, - None => packet.channel_value(deps.as_ref(), &direction)?, // This should almost never be used, but left for completeness in case we want to send an empty channel_value from the test - }; - - #[cfg(not(test))] - let channel_value = packet.channel_value(deps.as_ref(), &direction)?; - - try_transfer(deps, path, channel_value, funds, direction, now) -} - -/// This function checks the rate limit and, if successful, stores the updated data about the value -/// that has been transfered through the channel for a specific denom. -/// If the period for a RateLimit has ended, the Flow information is reset. -/// -/// The channel_value is the current value of the denom for the the channel as -/// calculated by the caller. This should be the total supply of a denom -pub fn try_transfer( - deps: DepsMut, - path: &Path, - channel_value: Uint256, - funds: Uint256, - direction: FlowType, - now: Timestamp, -) -> Result { - // Sudo call. Only go modules should be allowed to access this - - // Fetch potential trackers for "any" channel of the required token - let any_path = Path::new("any", path.denom.clone()); - let mut any_trackers = RATE_LIMIT_TRACKERS - .may_load(deps.storage, any_path.clone().into())? - .unwrap_or_default(); - // Fetch trackers for the requested path - let mut trackers = RATE_LIMIT_TRACKERS - .may_load(deps.storage, path.into())? - .unwrap_or_default(); - - let not_configured = trackers.is_empty() && any_trackers.is_empty(); - - if not_configured { - // No Quota configured for the current path. Allowing all messages. - return Ok(Response::new() - .add_attribute("method", "try_transfer") - .add_attribute("channel_id", path.channel.to_string()) - .add_attribute("denom", path.denom.to_string()) - .add_attribute("quota", "none")); - } - - // If any of the RateLimits fails, allow_transfer() will return - // ContractError::RateLimitExceded, which we'll propagate out - let results: Vec = trackers - .iter_mut() - .map(|limit| limit.allow_transfer(path, &direction, funds, channel_value, now)) - .collect::>()?; - - let any_results: Vec = any_trackers - .iter_mut() - .map(|limit| limit.allow_transfer(path, &direction, funds, channel_value, now)) - .collect::>()?; - - RATE_LIMIT_TRACKERS.save(deps.storage, path.into(), &results)?; - RATE_LIMIT_TRACKERS.save(deps.storage, any_path.into(), &any_results)?; - - let response = Response::new() - .add_attribute("method", "try_transfer") - .add_attribute("channel_id", path.channel.to_string()) - .add_attribute("denom", path.denom.to_string()); - - // Adds the attributes for each path to the response. In prod, the - // addtribute add_rate_limit_attributes is a noop - let response: Result = - any_results.iter().fold(Ok(response), |acc, result| { - Ok(add_rate_limit_attributes(acc?, result)) - }); - results.iter().fold(Ok(response?), |acc, result| { - Ok(add_rate_limit_attributes(acc?, result)) - }) -} - -// #[cfg(any(feature = "verbose_responses", test))] -fn add_rate_limit_attributes(response: Response, result: &RateLimit) -> Response { - let (used_in, used_out) = result.flow.balance(); - let (max_in, max_out) = result.quota.capacity(); - // These attributes are only added during testing. That way we avoid - // calculating these again on prod. - response - .add_attribute( - format!("{}_used_in", result.quota.name), - used_in.to_string(), - ) - .add_attribute( - format!("{}_used_out", result.quota.name), - used_out.to_string(), - ) - .add_attribute(format!("{}_max_in", result.quota.name), max_in.to_string()) - .add_attribute( - format!("{}_max_out", result.quota.name), - max_out.to_string(), - ) - .add_attribute( - format!("{}_period_end", result.quota.name), - result.flow.period_end.to_string(), - ) -} - -// Leaving the attributes in until we can conditionally compile the contract -// for the go tests in CI: https://github.com/mandrean/cw-optimizoor/issues/19 -// -// #[cfg(not(any(feature = "verbose_responses", test)))] -// fn add_rate_limit_attributes(response: Response, _result: &RateLimit) -> Response { -// response -// } - -// This function manually injects an inflow. This is used when reverting a -// packet that failed ack or timed-out. -pub fn undo_send(deps: DepsMut, packet: Packet) -> Result { - // Sudo call. Only go modules should be allowed to access this - let (channel_id, denom) = packet.path_data(&FlowType::Out); // Sends have direction out. - let path = &Path::new(&channel_id, &denom); - let any_path = Path::new("any", &denom); - let funds = packet.get_funds(); - - let mut any_trackers = RATE_LIMIT_TRACKERS - .may_load(deps.storage, any_path.clone().into())? - .unwrap_or_default(); - let mut trackers = RATE_LIMIT_TRACKERS - .may_load(deps.storage, path.into())? - .unwrap_or_default(); - - let not_configured = trackers.is_empty() && any_trackers.is_empty(); - - if not_configured { - // No Quota configured for the current path. Allowing all messages. - return Ok(Response::new() - .add_attribute("method", "try_transfer") - .add_attribute("channel_id", path.channel.to_string()) - .add_attribute("denom", path.denom.to_string()) - .add_attribute("quota", "none")); - } - - // We force update the flow to remove a failed send - let results: Vec = trackers - .iter_mut() - .map(|limit| { - limit.flow.undo_flow(FlowType::Out, funds); - limit.to_owned() - }) - .collect(); - let any_results: Vec = any_trackers - .iter_mut() - .map(|limit| { - limit.flow.undo_flow(FlowType::Out, funds); - limit.to_owned() - }) - .collect(); - - RATE_LIMIT_TRACKERS.save(deps.storage, path.into(), &results)?; - RATE_LIMIT_TRACKERS.save(deps.storage, any_path.into(), &any_results)?; - - Ok(Response::new() - .add_attribute("method", "undo_send") - .add_attribute("channel_id", path.channel.to_string()) - .add_attribute("denom", path.denom.to_string()) - .add_attribute("any_channel", (!any_trackers.is_empty()).to_string())) -} diff --git a/x/ibcratelimit/genesis.go b/x/ibcratelimit/genesis.go deleted file mode 100644 index 2f7bb2b2a..000000000 --- a/x/ibcratelimit/genesis.go +++ /dev/null @@ -1,20 +0,0 @@ -package ibc_rate_limit - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/comdex-official/comdex/x/ibcratelimit/types" -) - -// InitGenesis initializes the x/ibcratelimit module's state from a provided genesis -// state, which includes the parameter for the contract address. -func (i *ICS4Wrapper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { - i.SetParams(ctx, genState.Params) -} - -// ExportGenesis returns the x/ibcratelimit module's exported genesis. -func (i *ICS4Wrapper) ExportGenesis(ctx sdk.Context) *types.GenesisState { - return &types.GenesisState{ - Params: i.GetParams(ctx), - } -} diff --git a/x/ibcratelimit/genesis_test.go b/x/ibcratelimit/genesis_test.go deleted file mode 100644 index ac7766294..000000000 --- a/x/ibcratelimit/genesis_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package ibc_rate_limit_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/suite" - - "github.com/comdex-official/comdex/x/ibcratelimit/types" - // "github.com/osmosis-labs/osmosis/v16/app/apptesting" -) - -type GenesisTestSuite struct { - apptesting.KeeperTestHelper -} - -func TestGenesisTestSuite(t *testing.T) { - suite.Run(t, new(GenesisTestSuite)) -} - -func (suite *GenesisTestSuite) SetupTest() { - suite.Setup() -} - -func (suite *GenesisTestSuite) TestInitExportGenesis() { - testAddress := sdk.AccAddress([]byte("addr1_______________")).String() - suite.SetupTest() - k := suite.App.RateLimitingICS4Wrapper - - initialGenesis := types.GenesisState{ - Params: types.Params{ - ContractAddress: testAddress, - }, - } - - k.InitGenesis(suite.Ctx, initialGenesis) - - suite.Require().Equal(testAddress, k.GetParams(suite.Ctx).ContractAddress) - - exportedGenesis := k.ExportGenesis(suite.Ctx) - - suite.Require().Equal(initialGenesis, *exportedGenesis) -} diff --git a/x/ibcratelimit/ibc_middleware_test.go b/x/ibcratelimit/ibc_middleware_test.go deleted file mode 100644 index 24d876c80..000000000 --- a/x/ibcratelimit/ibc_middleware_test.go +++ /dev/null @@ -1,540 +0,0 @@ -package ibc_rate_limit_test - -import ( - "fmt" - "strconv" - "strings" - "testing" - "time" - - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - - sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/stretchr/testify/suite" - - // txfeetypes "github.com/osmosis-labs/osmosis/v16/x/txfees/types" - - "github.com/comdex-official/comdex/x/ibcratelimit/types" - // "github.com/osmosis-labs/osmosis/v16/app/apptesting" - // "github.com/osmosis-labs/osmosis/v16/tests/osmosisibctesting" -) - -type MiddlewareTestSuite struct { - apptesting.KeeperTestHelper - - coordinator *ibctesting.Coordinator - - // testing chains used for convenience and readability - chainA *osmosisibctesting.TestChain - chainB *osmosisibctesting.TestChain - path *ibctesting.Path -} - -var oldConsensusMinFee = txfeetypes.ConsensusMinFee - -// Setup -func TestMiddlewareTestSuite(t *testing.T) { - suite.Run(t, new(MiddlewareTestSuite)) -} - -func NewTransferPath(chainA, chainB *osmosisibctesting.TestChain) *ibctesting.Path { - path := ibctesting.NewPath(chainA.TestChain, chainB.TestChain) - path.EndpointA.ChannelConfig.PortID = ibctesting.TransferPort - path.EndpointB.ChannelConfig.PortID = ibctesting.TransferPort - path.EndpointA.ChannelConfig.Version = transfertypes.Version - path.EndpointB.ChannelConfig.Version = transfertypes.Version - return path -} - -func (suite *MiddlewareTestSuite) SetupTest() { - suite.SkipIfWSL() - // TODO: This needs to get removed. Waiting on https://github.com/cosmos/ibc-go/issues/3123 - txfeetypes.ConsensusMinFee = sdk.ZeroDec() - suite.Setup() - ibctesting.DefaultTestingAppInit = osmosisibctesting.SetupTestingApp - suite.coordinator = ibctesting.NewCoordinator(suite.T(), 2) - suite.chainA = &osmosisibctesting.TestChain{ - TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(1)), - } - // Remove epochs to prevent minting - err := suite.chainA.MoveEpochsToTheFuture() - suite.Require().NoError(err) - suite.chainB = &osmosisibctesting.TestChain{ - TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(2)), - } - suite.path = NewTransferPath(suite.chainA, suite.chainB) - err = suite.chainB.MoveEpochsToTheFuture() - suite.Require().NoError(err) - suite.coordinator.Setup(suite.path) -} - -// TODO: This needs to get removed. Waiting on https://github.com/cosmos/ibc-go/issues/3123 -func (suite *MiddlewareTestSuite) TearDownSuite() { - txfeetypes.ConsensusMinFee = oldConsensusMinFee -} - -// Helpers -func (suite *MiddlewareTestSuite) MessageFromAToB(denom string, amount sdk.Int) sdk.Msg { - coin := sdk.NewCoin(denom, amount) - port := suite.path.EndpointA.ChannelConfig.PortID - channel := suite.path.EndpointA.ChannelID - accountFrom := suite.chainA.SenderAccount.GetAddress().String() - accountTo := suite.chainB.SenderAccount.GetAddress().String() - timeoutHeight := clienttypes.NewHeight(0, 100) - return transfertypes.NewMsgTransfer( - port, - channel, - coin, - accountFrom, - accountTo, - timeoutHeight, - 0, - ) -} - -func (suite *MiddlewareTestSuite) MessageFromBToA(denom string, amount sdk.Int) sdk.Msg { - coin := sdk.NewCoin(denom, amount) - port := suite.path.EndpointB.ChannelConfig.PortID - channel := suite.path.EndpointB.ChannelID - accountFrom := suite.chainB.SenderAccount.GetAddress().String() - accountTo := suite.chainA.SenderAccount.GetAddress().String() - timeoutHeight := clienttypes.NewHeight(0, 100) - return transfertypes.NewMsgTransfer( - port, - channel, - coin, - accountFrom, - accountTo, - timeoutHeight, - 0, - ) -} - -func CalculateChannelValue(ctx sdk.Context, denom string, bankKeeper bankkeeper.Keeper) sdk.Int { - return bankKeeper.GetSupplyWithOffset(ctx, denom).Amount - - // ToDo: The commented-out code bellow is what we want to happen, but we're temporarily - // using the whole supply for efficiency until there's a solution for - // https://github.com/cosmos/ibc-go/issues/2664 - - // For non-native (ibc) tokens, return the supply if the token in osmosis - //if strings.HasPrefix(denom, "ibc/") { - // return bankKeeper.GetSupplyWithOffset(ctx, denom).Amount - //} - // - // For native tokens, obtain the balance held in escrow for all potential channels - //channels := channelKeeper.GetAllChannels(ctx) - //balance := sdk.NewInt(0) - //for _, channel := range channels { - // escrowAddress := transfertypes.GetEscrowAddress("transfer", channel.ChannelId) - // balance = balance.Add(bankKeeper.GetBalance(ctx, escrowAddress, denom).Amount) - // - //} - //return balance -} - -// Tests that a receiver address longer than 4096 is not accepted -func (suite *MiddlewareTestSuite) TestInvalidReceiver() { - msg := transfertypes.NewMsgTransfer( - suite.path.EndpointB.ChannelConfig.PortID, - suite.path.EndpointB.ChannelID, - sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1)), - suite.chainB.SenderAccount.GetAddress().String(), - strings.Repeat("x", 4097), - clienttypes.NewHeight(0, 100), - 0, - ) - _, ack, _ := suite.FullSendBToA(msg) - suite.Require().Contains(ack, "error", - "acknowledgment is not an error") - suite.Require().Contains(ack, fmt.Sprintf("ABCI code: %d", types.ErrBadMessage.ABCICode()), - "acknowledgment error is not of the right type") -} - -func (suite *MiddlewareTestSuite) FullSendBToA(msg sdk.Msg) (*sdk.Result, string, error) { - sendResult, err := suite.chainB.SendMsgsNoCheck(msg) - suite.Require().NoError(err) - - packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) - suite.Require().NoError(err) - - err = suite.path.EndpointA.UpdateClient() - suite.Require().NoError(err) - - res, err := suite.path.EndpointA.RecvPacketWithResult(packet) - suite.Require().NoError(err) - - ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) - suite.Require().NoError(err) - - err = suite.path.EndpointA.UpdateClient() - suite.Require().NoError(err) - err = suite.path.EndpointB.UpdateClient() - suite.Require().NoError(err) - - return sendResult, string(ack), err -} - -func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*sdk.Result, string, error) { - sendResult, err := suite.chainA.SendMsgsNoCheck(msg) - if err != nil { - return nil, "", err - } - - packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) - if err != nil { - return nil, "", err - } - - err = suite.path.EndpointB.UpdateClient() - if err != nil { - return nil, "", err - } - - res, err := suite.path.EndpointB.RecvPacketWithResult(packet) - if err != nil { - return nil, "", err - } - - ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) - if err != nil { - return nil, "", err - } - - err = suite.path.EndpointA.UpdateClient() - if err != nil { - return nil, "", err - } - err = suite.path.EndpointB.UpdateClient() - if err != nil { - return nil, "", err - } - - return sendResult, string(ack), nil -} - -func (suite *MiddlewareTestSuite) AssertReceive(success bool, msg sdk.Msg) (string, error) { - _, ack, err := suite.FullSendBToA(msg) - if success { - suite.Require().NoError(err) - suite.Require().NotContains(ack, "error", - "acknowledgment is an error") - } else { - suite.Require().Contains(ack, "error", - "acknowledgment is not an error") - suite.Require().Contains(ack, fmt.Sprintf("ABCI code: %d", types.ErrRateLimitExceeded.ABCICode()), - "acknowledgment error is not of the right type") - } - return ack, err -} - -func (suite *MiddlewareTestSuite) AssertSend(success bool, msg sdk.Msg) (*sdk.Result, error) { - r, _, err := suite.FullSendAToB(msg) - if success { - suite.Require().NoError(err, "IBC send failed. Expected success. %s", err) - } else { - suite.Require().Error(err, "IBC send succeeded. Expected failure") - suite.ErrorContains(err, types.ErrRateLimitExceeded.Error(), "Bad error type") - } - return r, err -} - -func (suite *MiddlewareTestSuite) BuildChannelQuota(name, channel, denom string, duration, send_percentage, recv_percentage uint32) string { - return fmt.Sprintf(` - {"channel_id": "%s", "denom": "%s", "quotas": [{"name":"%s", "duration": %d, "send_recv":[%d, %d]}] } - `, channel, denom, name, duration, send_percentage, recv_percentage) -} - -// Tests - -// Test that Sending IBC messages works when the middleware isn't configured -func (suite *MiddlewareTestSuite) TestSendTransferNoContract() { - one := sdk.NewInt(1) - _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, one)) - suite.Require().NoError(err) -} - -// Test that Receiving IBC messages works when the middleware isn't configured -func (suite *MiddlewareTestSuite) TestReceiveTransferNoContract() { - one := sdk.NewInt(1) - _, err := suite.AssertReceive(true, suite.MessageFromBToA(sdk.DefaultBondDenom, one)) - suite.Require().NoError(err) -} - -func (suite *MiddlewareTestSuite) initializeEscrow() (totalEscrow, expectedSed sdk.Int) { - osmosisApp := suite.chainA.GetOsmosisApp() - supply := osmosisApp.BankKeeper.GetSupplyWithOffset(suite.chainA.GetContext(), sdk.DefaultBondDenom) - - // Move some funds from chainA to chainB so that there is something in escrow - // Each user has 10% of the supply, so we send most of the funds from one user to chainA - transferAmount := supply.Amount.QuoRaw(20) - - // When sending, the amount we're sending goes into escrow before we enter the middleware and thus - // it's used as part of the channel value in the rate limiting contract - // To account for that, we subtract the amount we'll send first (2.5% of transferAmount) here - sendAmount := transferAmount.QuoRaw(40) - - // Send from A to B - _, _, err := suite.FullSendAToB(suite.MessageFromAToB(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) - suite.Require().NoError(err) - // Send from A to B - _, _, err = suite.FullSendBToA(suite.MessageFromBToA(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) - suite.Require().NoError(err) - - return transferAmount, sendAmount -} - -func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { - quotaPercentage := 5 - suite.initializeEscrow() - // Get the denom and amount to send - denom := sdk.DefaultBondDenom - channel := "channel-0" - if !native { - denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", denom)) - fmt.Println(denomTrace) - denom = denomTrace.IBCDenom() - } - - osmosisApp := suite.chainA.GetOsmosisApp() - - // This is the first one. Inside the tests. It works as expected. - channelValue := CalculateChannelValue(suite.chainA.GetContext(), denom, osmosisApp.BankKeeper) - - // The amount to be sent is send 2.5% (quota is 5%) - quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) - sendAmount := quota.QuoRaw(2) - - fmt.Printf("Testing send rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", denom, channelValue, quota, sendAmount) - - // Setup contract - suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") - quotas := suite.BuildChannelQuota("weekly", channel, denom, 604800, 5, 5) - fmt.Println(quotas) - addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) - suite.chainA.RegisterRateLimitingContract(addr) - - // send 2.5% (quota is 5%) - fmt.Printf("Sending %s from A to B. Represented in chain A as wrapped? %v\n", denom, !native) - _, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) - suite.Require().NoError(err) - - // send 2.5% (quota is 5%) - fmt.Println("trying to send ", sendAmount) - r, _ := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) - - // Calculate remaining allowance in the quota - attrs := suite.ExtractAttributes(suite.FindEvent(r.GetEvents(), "wasm")) - - used, ok := sdk.NewIntFromString(attrs["weekly_used_out"]) - suite.Require().True(ok) - - suite.Require().Equal(used, sendAmount.MulRaw(2)) - - // Sending above the quota should fail. We use 2 instead of 1 here to avoid rounding issues - _, err = suite.AssertSend(false, suite.MessageFromAToB(denom, sdk.NewInt(2))) - suite.Require().Error(err) - return attrs -} - -// Test rate limiting on sends -func (suite *MiddlewareTestSuite) TestSendTransferWithRateLimitingNative() { - // Sends denom=stake from A->B. Rate limit receives "stake" in the packet. Nothing to do in the contract - suite.fullSendTest(true) -} - -// Test rate limiting on sends -func (suite *MiddlewareTestSuite) TestSendTransferWithRateLimitingNonNative() { - // Sends denom=ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878 from A->B. - // Rate limit receives "transfer/channel-0/stake" in the packet (because transfer.relay.SendTransfer is called before the middleware) - // and should hash it before calculating the value - suite.fullSendTest(false) -} - -// Test rate limits are reset when the specified time period has passed -func (suite *MiddlewareTestSuite) TestSendTransferReset() { - // Same test as above, but the quotas get reset after time passes - attrs := suite.fullSendTest(true) - parts := strings.Split(attrs["weekly_period_end"], ".") // Splitting timestamp into secs and nanos - secs, err := strconv.ParseInt(parts[0], 10, 64) - suite.Require().NoError(err) - nanos, err := strconv.ParseInt(parts[1], 10, 64) - suite.Require().NoError(err) - resetTime := time.Unix(secs, nanos) - - // Move chainA forward one block - suite.chainA.NextBlock() - err = suite.chainA.SenderAccount.SetSequence(suite.chainA.SenderAccount.GetSequence() + 1) - suite.Require().NoError(err) - - // Reset time + one second - oneSecAfterReset := resetTime.Add(time.Second) - suite.coordinator.IncrementTimeBy(oneSecAfterReset.Sub(suite.coordinator.CurrentTime)) - - // Sending should succeed again - _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdk.NewInt(1))) - suite.Require().NoError(err) -} - -// Test rate limiting on receives -func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { - quotaPercentage := 4 - suite.initializeEscrow() - // Get the denom and amount to send - sendDenom := sdk.DefaultBondDenom - localDenom := sdk.DefaultBondDenom - channel := "channel-0" - if native { - denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", localDenom)) - localDenom = denomTrace.IBCDenom() - } else { - denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", sendDenom)) - sendDenom = denomTrace.IBCDenom() - } - - osmosisApp := suite.chainA.GetOsmosisApp() - - channelValue := CalculateChannelValue(suite.chainA.GetContext(), localDenom, osmosisApp.BankKeeper) - - // The amount to be sent is 2% (quota is 4%) - quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) - sendAmount := quota.QuoRaw(2) - - fmt.Printf("Testing recv rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", localDenom, channelValue, quota, sendAmount) - - // Setup contract - suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") - quotas := suite.BuildChannelQuota("weekly", channel, localDenom, 604800, 4, 4) - addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) - suite.chainA.RegisterRateLimitingContract(addr) - - // receive 2.5% (quota is 5%) - fmt.Printf("Sending %s from B to A. Represented in chain A as wrapped? %v\n", sendDenom, native) - _, err := suite.AssertReceive(true, suite.MessageFromBToA(sendDenom, sendAmount)) - suite.Require().NoError(err) - - // receive 2.5% (quota is 5%) - _, err = suite.AssertReceive(true, suite.MessageFromBToA(sendDenom, sendAmount)) - suite.Require().NoError(err) - - // Sending above the quota should fail. We send 2 instead of 1 to account for rounding errors - _, err = suite.AssertReceive(false, suite.MessageFromBToA(sendDenom, sdk.NewInt(2))) - suite.Require().NoError(err) -} - -func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNative() { - // Sends denom=stake from B->A. - // Rate limit receives "stake" in the packet and should wrap it before calculating the value - // types.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), data.Denom) should return false => Wrap the token - suite.fullRecvTest(true) -} - -func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNonNative() { - // Sends denom=ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878 from B->A. - // Rate limit receives "transfer/channel-0/stake" in the packet and should turn it into "stake" - // types.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), data.Denom) should return true => unprefix. If unprefixed is not local, hash. - suite.fullRecvTest(false) -} - -// Test no rate limiting occurs when the contract is set, but not quotas are condifured for the path -func (suite *MiddlewareTestSuite) TestSendTransferNoQuota() { - // Setup contract - suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") - addr := suite.chainA.InstantiateRLContract(&suite.Suite, ``) - suite.chainA.RegisterRateLimitingContract(addr) - - // send 1 token. - // If the contract doesn't have a quota for the current channel, all transfers are allowed - _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdk.NewInt(1))) - suite.Require().NoError(err) -} - -// Test rate limits are reverted if a "send" fails -func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { - suite.initializeEscrow() - // Setup contract - suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") - quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) - addr := suite.chainA.InstantiateRLContract(&suite.Suite, quotas) - suite.chainA.RegisterRateLimitingContract(addr) - - // Get the escrowed amount - osmosisApp := suite.chainA.GetOsmosisApp() - // ToDo: This is what we eventually want here, but using the full supply temporarily for performance reasons. See CalculateChannelValue - // escrowAddress := transfertypes.GetEscrowAddress("transfer", "channel-0") - // escrowed := osmosisApp.BankKeeper.GetBalance(suite.chainA.GetContext(), escrowAddress, sdk.DefaultBondDenom) - escrowed := osmosisApp.BankKeeper.GetSupplyWithOffset(suite.chainA.GetContext(), sdk.DefaultBondDenom) - quota := escrowed.Amount.QuoRaw(100) // 1% of the escrowed amount - - // Use the whole quota - coins := sdk.NewCoin(sdk.DefaultBondDenom, quota) - port := suite.path.EndpointA.ChannelConfig.PortID - channel := suite.path.EndpointA.ChannelID - accountFrom := suite.chainA.SenderAccount.GetAddress().String() - timeoutHeight := clienttypes.NewHeight(0, 100) - msg := transfertypes.NewMsgTransfer(port, channel, coins, accountFrom, "INVALID", timeoutHeight, 0) - - // Sending the message manually because AssertSend updates both clients. We need to update the clients manually - // for this test so that the failure to receive on chain B happens after the second packet is sent from chain A. - // That way we validate that chain A is blocking as expected, but the flow is reverted after the receive failure is - // acknowledged on chain A - res, err := suite.chainA.SendMsgsNoCheck(msg) - suite.Require().NoError(err) - - // Sending again fails as the quota is filled - _, err = suite.AssertSend(false, suite.MessageFromAToB(sdk.DefaultBondDenom, quota)) - suite.Require().Error(err) - - // Move forward one block - suite.chainA.NextBlock() - err = suite.chainA.SenderAccount.SetSequence(suite.chainA.SenderAccount.GetSequence() + 1) - suite.Require().NoError(err) - suite.chainA.Coordinator.IncrementTime() - - // Update both clients - err = suite.path.EndpointA.UpdateClient() - suite.Require().NoError(err) - err = suite.path.EndpointB.UpdateClient() - suite.Require().NoError(err) - - // Execute the acknowledgement from chain B in chain A - - // extract the sent packet - packet, err := ibctesting.ParsePacketFromEvents(res.GetEvents()) - suite.Require().NoError(err) - - // recv in chain b - res, err = suite.path.EndpointB.RecvPacketWithResult(packet) - suite.Require().NoError(err) - - // get the ack from the chain b's response - ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) - suite.Require().NoError(err) - - // manually relay it to chain a - err = suite.path.EndpointA.AcknowledgePacket(packet, ack) - suite.Require().NoError(err) - - // We should be able to send again because the packet that exceeded the quota failed and has been reverted - _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdk.NewInt(1))) - suite.Require().NoError(err) -} - -func (suite *MiddlewareTestSuite) TestUnsetRateLimitingContract() { - // Setup contract - suite.chainA.StoreContractCode(&suite.Suite, "./bytecode/rate_limiter.wasm") - addr := suite.chainA.InstantiateRLContract(&suite.Suite, "") - suite.chainA.RegisterRateLimitingContract(addr) - - // Unset the contract param - params, err := types.NewParams("") - suite.Require().NoError(err) - osmosisApp := suite.chainA.GetOsmosisApp() - paramSpace, ok := osmosisApp.AppKeepers.ParamsKeeper.GetSubspace(types.ModuleName) - suite.Require().True(ok) - // N.B.: this panics if validation fails. - paramSpace.SetParamSet(suite.chainA.GetContext(), ¶ms) -} diff --git a/x/ibcratelimit/ibc_module.go b/x/ibcratelimit/ibc_module.go deleted file mode 100644 index 6c3279d77..000000000 --- a/x/ibcratelimit/ibc_module.go +++ /dev/null @@ -1,245 +0,0 @@ -package ibc_rate_limit - -import ( - "encoding/json" - "strings" - - "github.com/comdex-official/comdex/osmoutils" - - errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - "github.com/cosmos/ibc-go/v7/modules/core/exported" - - "github.com/comdex-official/comdex/x/ibcratelimit/types" -) - -type IBCModule struct { - app porttypes.IBCModule - ics4Middleware *ICS4Wrapper -} - -func NewIBCModule(app porttypes.IBCModule, ics4 *ICS4Wrapper) IBCModule { - return IBCModule{ - app: app, - ics4Middleware: ics4, - } -} - -// OnChanOpenInit implements the IBCModule interface -func (im *IBCModule) OnChanOpenInit(ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID string, - channelID string, - channelCap *capabilitytypes.Capability, - counterparty channeltypes.Counterparty, - version string, -) (string, error) { - return im.app.OnChanOpenInit( - ctx, - order, - connectionHops, - portID, - channelID, - channelCap, - counterparty, - version, - ) -} - -// OnChanOpenTry implements the IBCModule interface -func (im *IBCModule) OnChanOpenTry( - ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID, - channelID string, - channelCap *capabilitytypes.Capability, - counterparty channeltypes.Counterparty, - counterpartyVersion string, -) (string, error) { - return im.app.OnChanOpenTry(ctx, order, connectionHops, portID, channelID, channelCap, counterparty, counterpartyVersion) -} - -// OnChanOpenAck implements the IBCModule interface -func (im *IBCModule) OnChanOpenAck( - ctx sdk.Context, - portID, - channelID string, - counterpartyChannelID string, - counterpartyVersion string, -) error { - // Here we can add initial limits when a new channel is open. For now, they can be added manually on the contract - return im.app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelID, counterpartyVersion) -} - -// OnChanOpenConfirm implements the IBCModule interface -func (im *IBCModule) OnChanOpenConfirm( - ctx sdk.Context, - portID, - channelID string, -) error { - // Here we can add initial limits when a new channel is open. For now, they can be added manually on the contract - return im.app.OnChanOpenConfirm(ctx, portID, channelID) -} - -// OnChanCloseInit implements the IBCModule interface -func (im *IBCModule) OnChanCloseInit( - ctx sdk.Context, - portID, - channelID string, -) error { - // Here we can remove the limits when a new channel is closed. For now, they can remove them manually on the contract - return im.app.OnChanCloseInit(ctx, portID, channelID) -} - -// OnChanCloseConfirm implements the IBCModule interface -func (im *IBCModule) OnChanCloseConfirm( - ctx sdk.Context, - portID, - channelID string, -) error { - // Here we can remove the limits when a new channel is closed. For now, they can remove them manually on the contract - return im.app.OnChanCloseConfirm(ctx, portID, channelID) -} - -func ValidateReceiverAddress(packet exported.PacketI) error { - var packetData transfertypes.FungibleTokenPacketData - if err := json.Unmarshal(packet.GetData(), &packetData); err != nil { - return err - } - if len(packetData.Receiver) >= 4096 { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "IBC Receiver address too long. Max supported length is %d", 4096) - } - return nil -} - -// OnRecvPacket implements the IBCModule interface -func (im *IBCModule) OnRecvPacket( - ctx sdk.Context, - packet channeltypes.Packet, - relayer sdk.AccAddress, -) exported.Acknowledgement { - if err := ValidateReceiverAddress(packet); err != nil { - return osmoutils.NewEmitErrorAcknowledgement(ctx, types.ErrBadMessage, err.Error()) - } - - contract := im.ics4Middleware.GetContractAddress(ctx) - if contract == "" { - // The contract has not been configured. Continue as usual - return im.app.OnRecvPacket(ctx, packet, relayer) - } - - err := CheckAndUpdateRateLimits(ctx, im.ics4Middleware.ContractKeeper, "recv_packet", contract, packet) - if err != nil { - if strings.Contains(err.Error(), "rate limit exceeded") { - return osmoutils.NewEmitErrorAcknowledgement(ctx, types.ErrRateLimitExceeded) - } - fullError := errorsmod.Wrap(types.ErrContractError, err.Error()) - return osmoutils.NewEmitErrorAcknowledgement(ctx, fullError) - } - - // if this returns an Acknowledgement that isn't successful, all state changes are discarded - return im.app.OnRecvPacket(ctx, packet, relayer) -} - -// OnAcknowledgementPacket implements the IBCModule interface -func (im *IBCModule) OnAcknowledgementPacket( - ctx sdk.Context, - packet channeltypes.Packet, - acknowledgement []byte, - relayer sdk.AccAddress, -) error { - var ack channeltypes.Acknowledgement - if err := json.Unmarshal(acknowledgement, &ack); err != nil { - return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %v", err) - } - - if osmoutils.IsAckError(acknowledgement) { - err := im.RevertSentPacket(ctx, packet) // If there is an error here we should still handle the ack - if err != nil { - ctx.EventManager().EmitEvent( - sdk.NewEvent( - types.EventBadRevert, - sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), - sdk.NewAttribute(types.AttributeKeyFailureType, "acknowledgment"), - sdk.NewAttribute(types.AttributeKeyPacket, string(packet.GetData())), - sdk.NewAttribute(types.AttributeKeyAck, string(acknowledgement)), - ), - ) - } - } - - return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) -} - -// OnTimeoutPacket implements the IBCModule interface -func (im *IBCModule) OnTimeoutPacket( - ctx sdk.Context, - packet channeltypes.Packet, - relayer sdk.AccAddress, -) error { - err := im.RevertSentPacket(ctx, packet) // If there is an error here we should still handle the timeout - if err != nil { - ctx.EventManager().EmitEvent( - sdk.NewEvent( - types.EventBadRevert, - sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), - sdk.NewAttribute(types.AttributeKeyFailureType, "timeout"), - sdk.NewAttribute(types.AttributeKeyPacket, string(packet.GetData())), - ), - ) - } - return im.app.OnTimeoutPacket(ctx, packet, relayer) -} - -// RevertSentPacket Notifies the contract that a sent packet wasn't properly received -func (im *IBCModule) RevertSentPacket( - ctx sdk.Context, - packet exported.PacketI, -) error { - contract := im.ics4Middleware.GetContractAddress(ctx) - if contract == "" { - // The contract has not been configured. Continue as usual - return nil - } - - if err := UndoSendRateLimit( - ctx, - im.ics4Middleware.ContractKeeper, - contract, - packet, - ); err != nil { - return err - } - return nil -} - -// SendPacket implements the ICS4 Wrapper interface -func (im *IBCModule) SendPacket( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - packet exported.PacketI, -) error { - return im.ics4Middleware.SendPacket(ctx, chanCap, packet) -} - -// WriteAcknowledgement implements the ICS4 Wrapper interface -func (im *IBCModule) WriteAcknowledgement( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - packet exported.PacketI, - ack exported.Acknowledgement, -) error { - return im.ics4Middleware.WriteAcknowledgement(ctx, chanCap, packet, ack) -} - -func (im *IBCModule) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { - return im.ics4Middleware.GetAppVersion(ctx, portID, channelID) -} diff --git a/x/ibcratelimit/ibcratelimitmodule/module.go b/x/ibcratelimit/ibcratelimitmodule/module.go deleted file mode 100644 index c9527ded4..000000000 --- a/x/ibcratelimit/ibcratelimitmodule/module.go +++ /dev/null @@ -1,136 +0,0 @@ -package ibcratelimitmodule - -import ( - "context" - "encoding/json" - "fmt" - - "github.com/gorilla/mux" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/spf13/cobra" - - abci "github.com/cometbft/cometbft/abci/types" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - - ibcratelimit "github.com/comdex-official/comdex/x/ibcratelimit" - ibcratelimitclient "github.com/comdex-official/comdex/x/ibcratelimit/client" - ibcratelimitcli "github.com/comdex-official/comdex/x/ibcratelimit/client/cli" - "github.com/comdex-official/comdex/x/ibcratelimit/client/grpc" - "github.com/comdex-official/comdex/x/ibcratelimit/client/queryproto" - "github.com/comdex-official/comdex/x/ibcratelimit/types" -) - -var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} -) - -type AppModuleBasic struct{} - -func (AppModuleBasic) Name() string { return types.ModuleName } - -func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { -} - -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { - return cdc.MustMarshalJSON(types.DefaultGenesis()) -} - -// ValidateGenesis performs genesis state validation for the ibcratelimit module. -func (b AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { - var genState types.GenesisState - if err := cdc.UnmarshalJSON(bz, &genState); err != nil { - return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) - } - return genState.Validate() -} - -// --------------------------------------- -// Interfaces. -func (b AppModuleBasic) RegisterRESTRoutes(ctx client.Context, r *mux.Router) { -} - -func (b AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - queryproto.RegisterQueryHandlerClient(context.Background(), mux, queryproto.NewQueryClient(clientCtx)) //nolint:errcheck -} - -func (b AppModuleBasic) GetTxCmd() *cobra.Command { - return nil -} - -func (b AppModuleBasic) GetQueryCmd() *cobra.Command { - return ibcratelimitcli.GetQueryCmd() -} - -// RegisterInterfaces registers interfaces and implementations of the ibcratelimit module. -func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { -} - -// ---------------------------------------------------------------------------- -// AppModule -// ---------------------------------------------------------------------------- - -// AppModule implements the AppModule interface for the capability module. -type AppModule struct { - AppModuleBasic - - ics4wrapper ibcratelimit.ICS4Wrapper -} - -func NewAppModule(ics4wrapper ibcratelimit.ICS4Wrapper) AppModule { - return AppModule{ - AppModuleBasic: AppModuleBasic{}, - ics4wrapper: ics4wrapper, - } -} - -// Name returns the txfees module's name. -func (am AppModule) Name() string { - return am.AppModuleBasic.Name() -} - -// QuerierRoute returns the ibcratelimit module's query routing key. -func (AppModule) QuerierRoute() string { return types.RouterKey } - -// RegisterServices registers a GRPC query service to respond to the -// module-specific GRPC queries. -func (am AppModule) RegisterServices(cfg module.Configurator) { - queryproto.RegisterQueryServer(cfg.QueryServer(), grpc.Querier{Q: ibcratelimitclient.Querier{K: am.ics4wrapper}}) -} - -// RegisterInvariants registers the txfees module's invariants. -func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} - -// InitGenesis performs the txfees module's genesis initialization It returns -// no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { - var genState types.GenesisState - // Initialize global index to index in genesis state - cdc.MustUnmarshalJSON(gs, &genState) - am.ics4wrapper.InitGenesis(ctx, genState) - - return []abci.ValidatorUpdate{} -} - -// ExportGenesis returns the txfees module's exported genesis state as raw JSON bytes. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { - genState := am.ics4wrapper.ExportGenesis(ctx) - return cdc.MustMarshalJSON(genState) -} - -// BeginBlock executes all ABCI BeginBlock logic respective to the txfees module. -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} - -// EndBlock executes all ABCI EndBlock logic respective to the txfees module. It -// returns no validator updates. -func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} - -// ConsensusVersion implements AppModule/ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 1 } diff --git a/x/ibcratelimit/ics4_wrapper.go b/x/ibcratelimit/ics4_wrapper.go deleted file mode 100644 index 542173e1e..000000000 --- a/x/ibcratelimit/ics4_wrapper.go +++ /dev/null @@ -1,109 +0,0 @@ -package ibc_rate_limit - -import ( - errorsmod "cosmossdk.io/errors" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - - authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - "github.com/cosmos/ibc-go/v7/modules/core/exported" - - "github.com/comdex-official/comdex/x/ibcratelimit/types" -) - -var ( - _ porttypes.Middleware = &IBCModule{} - _ porttypes.ICS4Wrapper = &ICS4Wrapper{} -) - -type ICS4Wrapper struct { - channel porttypes.ICS4Wrapper - accountKeeper *authkeeper.AccountKeeper - bankKeeper *bankkeeper.BaseKeeper - ContractKeeper *wasmkeeper.PermissionedKeeper - paramSpace paramtypes.Subspace -} - -func (i *ICS4Wrapper) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { - return i.channel.GetAppVersion(ctx, portID, channelID) -} - -func NewICS4Middleware( - channel porttypes.ICS4Wrapper, - accountKeeper *authkeeper.AccountKeeper, contractKeeper *wasmkeeper.PermissionedKeeper, - bankKeeper *bankkeeper.BaseKeeper, paramSpace paramtypes.Subspace, -) ICS4Wrapper { - if !paramSpace.HasKeyTable() { - paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) - } - return ICS4Wrapper{ - channel: channel, - accountKeeper: accountKeeper, - ContractKeeper: contractKeeper, - bankKeeper: bankKeeper, - paramSpace: paramSpace, - } -} - -// SendPacket implements the ICS4 interface and is called when sending packets. -// This method retrieves the contract from the middleware's parameters and checks if the limits have been exceeded for -// the current transfer, in which case it returns an error preventing the IBC send from taking place. -// If the contract param is not configured, or the contract doesn't have a configuration for the (channel+denom) being -// used, transfers are not prevented and handled by the wrapped IBC app -func (i *ICS4Wrapper) SendPacket(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet exported.PacketI) error { - contract := i.GetContractAddress(ctx) - if contract == "" { - // The contract has not been configured. Continue as usual - _, err := i.channel.SendPacket(ctx, chanCap, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetTimeoutHeight().(clienttypes.Height), packet.GetTimeoutTimestamp(), packet.GetData()) - return err - } - - // We need the full packet so the contract can process it. If it can't be cast to a channeltypes.Packet, this - // should fail. The only reason that would happen is if another middleware is modifying the packet, though. In - // that case we can modify the middleware order or change this cast so we have all the data we need. - fullPacket, ok := packet.(channeltypes.Packet) - if !ok { - return sdkerrors.ErrInvalidRequest - } - - err := CheckAndUpdateRateLimits(ctx, i.ContractKeeper, "send_packet", contract, fullPacket) - if err != nil { - return errorsmod.Wrap(err, "rate limit SendPacket failed to authorize transfer") - } - - _, err = i.channel.SendPacket(ctx, chanCap, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetTimeoutHeight().(clienttypes.Height), packet.GetTimeoutTimestamp(), packet.GetData()) - return err -} - -func (i *ICS4Wrapper) WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet exported.PacketI, ack exported.Acknowledgement) error { - return i.channel.WriteAcknowledgement(ctx, chanCap, packet, ack) -} - -func (i *ICS4Wrapper) GetContractAddress(ctx sdk.Context) (contract string) { - return i.GetParams(ctx).ContractAddress -} - -func (i *ICS4Wrapper) GetParams(ctx sdk.Context) (params types.Params) { - // This was previously done via i.paramSpace.GetParamSet(ctx, ¶ms). That will - // panic if the params don't exist. This is a workaround to avoid that panic. - // Params should be refactored to just use a raw kvstore. - empty := types.Params{} - for _, pair := range params.ParamSetPairs() { - i.paramSpace.GetIfExists(ctx, pair.Key, pair.Value) - } - if params == empty { - return types.DefaultParams() - } - return params -} - -func (i *ICS4Wrapper) SetParams(ctx sdk.Context, params types.Params) { - i.paramSpace.SetParamSet(ctx, ¶ms) -} diff --git a/x/ibcratelimit/rate_limit.go b/x/ibcratelimit/rate_limit.go deleted file mode 100644 index be4f1fb76..000000000 --- a/x/ibcratelimit/rate_limit.go +++ /dev/null @@ -1,154 +0,0 @@ -package ibc_rate_limit - -import ( - "encoding/json" - - errorsmod "cosmossdk.io/errors" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - "github.com/cosmos/ibc-go/v7/modules/core/exported" - - "github.com/comdex-official/comdex/x/ibcratelimit/types" -) - -var ( - msgSend = "send_packet" - msgRecv = "recv_packet" -) - -func CheckAndUpdateRateLimits(ctx sdk.Context, contractKeeper *wasmkeeper.PermissionedKeeper, - msgType, contract string, packet exported.PacketI, -) error { - contractAddr, err := sdk.AccAddressFromBech32(contract) - if err != nil { - return err - } - - sendPacketMsg, err := BuildWasmExecMsg( - msgType, - packet, - ) - if err != nil { - return err - } - - _, err = contractKeeper.Sudo(ctx, contractAddr, sendPacketMsg) - - if err != nil { - return errorsmod.Wrap(types.ErrRateLimitExceeded, err.Error()) - } - - return nil -} - -type UndoSendMsg struct { - UndoSend UndoPacketMsg `json:"undo_send"` -} - -type UndoPacketMsg struct { - Packet UnwrappedPacket `json:"packet"` -} - -func UndoSendRateLimit(ctx sdk.Context, contractKeeper *wasmkeeper.PermissionedKeeper, - contract string, - packet exported.PacketI, -) error { - contractAddr, err := sdk.AccAddressFromBech32(contract) - if err != nil { - return err - } - - unwrapped, err := unwrapPacket(packet) - if err != nil { - return err - } - - msg := UndoSendMsg{UndoSend: UndoPacketMsg{Packet: unwrapped}} - asJson, err := json.Marshal(msg) - if err != nil { - return err - } - - _, err = contractKeeper.Sudo(ctx, contractAddr, asJson) - if err != nil { - return errorsmod.Wrap(types.ErrContractError, err.Error()) - } - - return nil -} - -type SendPacketMsg struct { - SendPacket PacketMsg `json:"send_packet"` -} - -type RecvPacketMsg struct { - RecvPacket PacketMsg `json:"recv_packet"` -} - -type PacketMsg struct { - Packet UnwrappedPacket `json:"packet"` -} - -type UnwrappedPacket struct { - Sequence uint64 `json:"sequence"` - SourcePort string `json:"source_port"` - SourceChannel string `json:"source_channel"` - DestinationPort string `json:"destination_port"` - DestinationChannel string `json:"destination_channel"` - Data transfertypes.FungibleTokenPacketData `json:"data"` - TimeoutHeight clienttypes.Height `json:"timeout_height"` - TimeoutTimestamp uint64 `json:"timeout_timestamp,omitempty"` -} - -func unwrapPacket(packet exported.PacketI) (UnwrappedPacket, error) { - var packetData transfertypes.FungibleTokenPacketData - err := json.Unmarshal(packet.GetData(), &packetData) - if err != nil { - return UnwrappedPacket{}, err - } - height, ok := packet.GetTimeoutHeight().(clienttypes.Height) - if !ok { - return UnwrappedPacket{}, types.ErrBadMessage - } - return UnwrappedPacket{ - Sequence: packet.GetSequence(), - SourcePort: packet.GetSourcePort(), - SourceChannel: packet.GetSourceChannel(), - DestinationPort: packet.GetDestPort(), - DestinationChannel: packet.GetDestChannel(), - Data: packetData, - TimeoutHeight: height, - TimeoutTimestamp: packet.GetTimeoutTimestamp(), - }, nil -} - -func BuildWasmExecMsg(msgType string, packet exported.PacketI) ([]byte, error) { - unwrapped, err := unwrapPacket(packet) - if err != nil { - return []byte{}, err - } - - var asJson []byte - switch { - case msgType == msgSend: - msg := SendPacketMsg{SendPacket: PacketMsg{ - Packet: unwrapped, - }} - asJson, err = json.Marshal(msg) - case msgType == msgRecv: - msg := RecvPacketMsg{RecvPacket: PacketMsg{ - Packet: unwrapped, - }} - asJson, err = json.Marshal(msg) - default: - return []byte{}, types.ErrBadMessage - } - - if err != nil { - return []byte{}, err - } - - return asJson, nil -} diff --git a/x/ibcratelimit/types/errors.go b/x/ibcratelimit/types/errors.go deleted file mode 100644 index 42116a7e1..000000000 --- a/x/ibcratelimit/types/errors.go +++ /dev/null @@ -1,11 +0,0 @@ -package types - -import ( - errorsmod "cosmossdk.io/errors" -) - -var ( - ErrRateLimitExceeded = errorsmod.Register(ModuleName, 2, "rate limit exceeded") - ErrBadMessage = errorsmod.Register(ModuleName, 3, "bad message") - ErrContractError = errorsmod.Register(ModuleName, 4, "contract error") -) diff --git a/x/ibcratelimit/types/events.go b/x/ibcratelimit/types/events.go deleted file mode 100644 index 36d31181e..000000000 --- a/x/ibcratelimit/types/events.go +++ /dev/null @@ -1,8 +0,0 @@ -package types - -const ( - EventBadRevert = "bad_revert" - AttributeKeyPacket = "packet" - AttributeKeyAck = "acknowledgement" - AttributeKeyFailureType = "failure_type" -) diff --git a/x/ibcratelimit/types/genesis.go b/x/ibcratelimit/types/genesis.go deleted file mode 100644 index 9167936c6..000000000 --- a/x/ibcratelimit/types/genesis.go +++ /dev/null @@ -1,17 +0,0 @@ -package types - -// DefaultGenesis creates a default GenesisState object. -func DefaultGenesis() *GenesisState { - return &GenesisState{ - Params: DefaultParams(), - } -} - -// Validate performs basic genesis state validation returning an error upon any -// failure. -func (gs GenesisState) Validate() error { - if err := gs.Params.Validate(); err != nil { - return err - } - return nil -} diff --git a/x/ibcratelimit/types/genesis.pb.go b/x/ibcratelimit/types/genesis.pb.go deleted file mode 100644 index b1b097e0c..000000000 --- a/x/ibcratelimit/types/genesis.pb.go +++ /dev/null @@ -1,329 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: comdex/ibcratelimit/v1beta1/genesis.proto - -package types - -import ( - fmt "fmt" - _ "github.com/cosmos/cosmos-sdk/codec/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - _ "github.com/regen-network/cosmos-proto" - io "io" - math "math" - math_bits "math/bits" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -// GenesisState defines the ibcratelimit module's genesis state. -type GenesisState struct { - // params are all the parameters of the module - Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` -} - -func (m *GenesisState) Reset() { *m = GenesisState{} } -func (m *GenesisState) String() string { return proto.CompactTextString(m) } -func (*GenesisState) ProtoMessage() {} -func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_8837623744c0f206, []int{0} -} -func (m *GenesisState) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *GenesisState) XXX_Merge(src proto.Message) { - xxx_messageInfo_GenesisState.Merge(m, src) -} -func (m *GenesisState) XXX_Size() int { - return m.Size() -} -func (m *GenesisState) XXX_DiscardUnknown() { - xxx_messageInfo_GenesisState.DiscardUnknown(m) -} - -var xxx_messageInfo_GenesisState proto.InternalMessageInfo - -func (m *GenesisState) GetParams() Params { - if m != nil { - return m.Params - } - return Params{} -} - -func init() { - proto.RegisterType((*GenesisState)(nil), "comdex.ibcratelimit.v1beta1.GenesisState") -} - -func init() { - proto.RegisterFile("comdex/ibcratelimit/v1beta1/genesis.proto", fileDescriptor_8837623744c0f206) -} - -var fileDescriptor_8837623744c0f206 = []byte{ - // 241 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4c, 0xce, 0xcf, 0x4d, - 0x49, 0xad, 0xd0, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, 0xd1, - 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, - 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x86, 0x28, 0xd5, 0x43, 0x56, 0xaa, 0x07, 0x55, 0x2a, - 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa7, 0x0f, 0x62, 0x41, 0xb4, 0x48, 0x49, 0x26, 0xe7, - 0x17, 0xe7, 0xe6, 0x17, 0xc7, 0x43, 0x24, 0x20, 0x1c, 0x98, 0x54, 0x7a, 0x7e, 0x7e, 0x7a, 0x4e, - 0xaa, 0x3e, 0x98, 0x97, 0x54, 0x9a, 0xa6, 0x9f, 0x98, 0x57, 0x09, 0x95, 0xd2, 0xc0, 0xe7, 0xa6, - 0x82, 0xc4, 0xa2, 0xc4, 0x5c, 0xa8, 0x21, 0x4a, 0x81, 0x5c, 0x3c, 0xee, 0x10, 0x37, 0x06, 0x97, - 0x24, 0x96, 0xa4, 0x0a, 0x39, 0x72, 0xb1, 0x41, 0xe4, 0x25, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, - 0x94, 0xf5, 0xf0, 0xb8, 0x59, 0x2f, 0x00, 0xac, 0xd4, 0x89, 0xe5, 0xc4, 0x3d, 0x79, 0x86, 0x20, - 0xa8, 0x46, 0xa7, 0x80, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, - 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, 0x4b, - 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0x02, 0x19, 0xa9, 0x0f, 0x31, 0x56, 0x37, 0x3f, 0x2d, 0x2d, 0x33, - 0x39, 0x33, 0x31, 0x07, 0xca, 0xd7, 0x47, 0x73, 0x73, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, - 0xd8, 0xad, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x37, 0x08, 0x41, 0x6b, 0x01, 0x00, - 0x00, -} - -func (m *GenesisState) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { - offset -= sovGenesis(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *GenesisState) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovGenesis(uint64(l)) - return n -} - -func sovGenesis(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozGenesis(x uint64) (n int) { - return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *GenesisState) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenesis(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipGenesis(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenesis - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenesis - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenesis - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthGenesis - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupGenesis - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthGenesis - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") -) diff --git a/x/ibcratelimit/types/keys.go b/x/ibcratelimit/types/keys.go deleted file mode 100644 index 8a278c9f5..000000000 --- a/x/ibcratelimit/types/keys.go +++ /dev/null @@ -1,12 +0,0 @@ -package types - -import "strings" - -const ( - ModuleName = "rate-limited-ibc" // IBC at the end to avoid conflicts with the ibc prefix - -) - -// RouterKey is the message route. Can only contain -// alphanumeric characters. -var RouterKey = strings.ReplaceAll(ModuleName, "-", "") diff --git a/x/ibcratelimit/types/params.go b/x/ibcratelimit/types/params.go deleted file mode 100644 index 35b172863..000000000 --- a/x/ibcratelimit/types/params.go +++ /dev/null @@ -1,73 +0,0 @@ -package types - -import ( - "fmt" - - sdk "github.com/cosmos/cosmos-sdk/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" -) - -// Parameter store keys. -var ( - KeyContractAddress = []byte("contract") - - _ paramtypes.ParamSet = &Params{} -) - -func ParamKeyTable() paramtypes.KeyTable { - return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) -} - -func NewParams(contractAddress string) (Params, error) { - return Params{ - ContractAddress: contractAddress, - }, nil -} - -// default gamm module parameters. -func DefaultParams() Params { - return Params{ - ContractAddress: "", - } -} - -// validate params. -func (p Params) Validate() error { - if err := validateContractAddress(p.ContractAddress); err != nil { - return err - } - - return nil -} - -// Implements params.ParamSet. -func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { - return paramtypes.ParamSetPairs{ - paramtypes.NewParamSetPair(KeyContractAddress, &p.ContractAddress, validateContractAddress), - } -} - -func validateContractAddress(i interface{}) error { - v, ok := i.(string) - if !ok { - return fmt.Errorf("invalid parameter type: %T", i) - } - - // Empty strings are valid for unsetting the param - if v == "" { - return nil - } - - // Checks that the contract address is valid - bech32, err := sdk.AccAddressFromBech32(v) - if err != nil { - return err - } - - err = sdk.VerifyAddressFormat(bech32) - if err != nil { - return err - } - - return nil -} diff --git a/x/ibcratelimit/types/params.pb.go b/x/ibcratelimit/types/params.pb.go deleted file mode 100644 index b4f795439..000000000 --- a/x/ibcratelimit/types/params.pb.go +++ /dev/null @@ -1,322 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: comdex/ibcratelimit/v1beta1/params.proto - -package types - -import ( - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - io "io" - math "math" - math_bits "math/bits" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -// Params defines the parameters for the ibcratelimit module. -type Params struct { - ContractAddress string `protobuf:"bytes,1,opt,name=contract_address,json=contractAddress,proto3" json:"contract_address,omitempty" yaml:"contract_address"` -} - -func (m *Params) Reset() { *m = Params{} } -func (m *Params) String() string { return proto.CompactTextString(m) } -func (*Params) ProtoMessage() {} -func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_d45624c5d834de99, []int{0} -} -func (m *Params) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Params.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *Params) XXX_Merge(src proto.Message) { - xxx_messageInfo_Params.Merge(m, src) -} -func (m *Params) XXX_Size() int { - return m.Size() -} -func (m *Params) XXX_DiscardUnknown() { - xxx_messageInfo_Params.DiscardUnknown(m) -} - -var xxx_messageInfo_Params proto.InternalMessageInfo - -func (m *Params) GetContractAddress() string { - if m != nil { - return m.ContractAddress - } - return "" -} - -func init() { - proto.RegisterType((*Params)(nil), "comdex.ibcratelimit.v1beta1.Params") -} - -func init() { - proto.RegisterFile("comdex/ibcratelimit/v1beta1/params.proto", fileDescriptor_d45624c5d834de99) -} - -var fileDescriptor_d45624c5d834de99 = []byte{ - // 211 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x48, 0xce, 0xcf, 0x4d, - 0x49, 0xad, 0xd0, 0xcf, 0x4c, 0x4a, 0x2e, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, 0xd1, - 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, - 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x86, 0xa8, 0xd4, 0x43, 0x56, 0xa9, 0x07, 0x55, 0x29, 0x25, - 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa7, 0x0f, 0x62, 0x41, 0xb4, 0x28, 0x05, 0x70, 0xb1, 0x05, - 0x80, 0x8d, 0x10, 0x72, 0xe3, 0x12, 0x48, 0xce, 0xcf, 0x2b, 0x29, 0x4a, 0x4c, 0x2e, 0x89, 0x4f, - 0x4c, 0x49, 0x29, 0x4a, 0x2d, 0x2e, 0x96, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x74, 0x92, 0xfe, 0x74, - 0x4f, 0x5e, 0xbc, 0x32, 0x31, 0x37, 0xc7, 0x4a, 0x09, 0x5d, 0x85, 0x52, 0x10, 0x3f, 0x4c, 0xc8, - 0x11, 0x22, 0xe2, 0x14, 0x70, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, - 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0x66, - 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x10, 0x97, 0xea, 0xe6, 0xa7, - 0xa5, 0x65, 0x26, 0x67, 0x26, 0xe6, 0x40, 0xf9, 0xfa, 0x68, 0xbe, 0x2c, 0xa9, 0x2c, 0x48, 0x2d, - 0x4e, 0x62, 0x03, 0x3b, 0xd5, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x87, 0xb8, 0xe9, 0x8e, 0x09, - 0x01, 0x00, 0x00, -} - -func (m *Params) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Params) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ContractAddress) > 0 { - i -= len(m.ContractAddress) - copy(dAtA[i:], m.ContractAddress) - i = encodeVarintParams(dAtA, i, uint64(len(m.ContractAddress))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func encodeVarintParams(dAtA []byte, offset int, v uint64) int { - offset -= sovParams(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *Params) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ContractAddress) - if l > 0 { - n += 1 + l + sovParams(uint64(l)) - } - return n -} - -func sovParams(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozParams(x uint64) (n int) { - return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Params) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Params: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContractAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthParams - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthParams - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ContractAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipParams(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthParams - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipParams(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowParams - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowParams - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowParams - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthParams - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupParams - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthParams - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") -) diff --git a/x/ibcratelimit/types/params_test.go b/x/ibcratelimit/types/params_test.go deleted file mode 100644 index f37e4d886..000000000 --- a/x/ibcratelimit/types/params_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package types - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestValidateContractAddress(t *testing.T) { - testCases := map[string]struct { - addr interface{} - expected bool - }{ - // ToDo: Why do tests expect the bech32 prefix to be cosmos? - "valid_addr": { - addr: "cosmos1qm0hhug8kszhcp9f3ryuecz5yw8s3e5v0n2ckd", - expected: true, - }, - "invalid_addr": { - addr: "cosmos1234", - expected: false, - }, - "invalid parameter type": { - addr: 123456, - expected: false, - }, - } - - for name, tc := range testCases { - t.Run(name, func(t *testing.T) { - err := validateContractAddress(tc.addr) - - // Assertions. - if !tc.expected { - require.Error(t, err) - return - } - - require.NoError(t, err) - }) - } -} - -func TestValidateParams(t *testing.T) { - testCases := map[string]struct { - addr interface{} - expected bool - }{ - // ToDo: Why do tests expect the bech32 prefix to be cosmos? - "valid_addr": { - addr: "cosmos1qm0hhug8kszhcp9f3ryuecz5yw8s3e5v0n2ckd", - expected: true, - }, - "invalid_addr": { - addr: "cosmos1234", - expected: false, - }, - } - - for name, tc := range testCases { - t.Run(name, func(t *testing.T) { - addr, ok := tc.addr.(string) - require.True(t, ok, "unexpected type of address") - - params := Params{ - ContractAddress: addr, - } - - err := params.Validate() - - // Assertions. - if !tc.expected { - require.Error(t, err) - } else { - require.NoError(t, err) - } - }) - } -} diff --git a/x/ibcratelimit/types/query.pb.go b/x/ibcratelimit/types/query.pb.go deleted file mode 100644 index 54a011d76..000000000 --- a/x/ibcratelimit/types/query.pb.go +++ /dev/null @@ -1,542 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: comdex/ibcratelimit/v1beta1/query.proto - -package types - -import ( - context "context" - fmt "fmt" - _ "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" - _ "google.golang.org/genproto/googleapis/api/annotations" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - io "io" - math "math" - math_bits "math/bits" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -// ParamsRequest is the request type for the Query/Params RPC method. -type ParamsRequest struct { -} - -func (m *ParamsRequest) Reset() { *m = ParamsRequest{} } -func (m *ParamsRequest) String() string { return proto.CompactTextString(m) } -func (*ParamsRequest) ProtoMessage() {} -func (*ParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8427b621352b6b3f, []int{0} -} -func (m *ParamsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ParamsRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *ParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ParamsRequest.Merge(m, src) -} -func (m *ParamsRequest) XXX_Size() int { - return m.Size() -} -func (m *ParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ParamsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_ParamsRequest proto.InternalMessageInfo - -// aramsResponse is the response type for the Query/Params RPC method. -type ParamsResponse struct { - // params defines the parameters of the module. - Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` -} - -func (m *ParamsResponse) Reset() { *m = ParamsResponse{} } -func (m *ParamsResponse) String() string { return proto.CompactTextString(m) } -func (*ParamsResponse) ProtoMessage() {} -func (*ParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8427b621352b6b3f, []int{1} -} -func (m *ParamsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ParamsResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *ParamsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ParamsResponse.Merge(m, src) -} -func (m *ParamsResponse) XXX_Size() int { - return m.Size() -} -func (m *ParamsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ParamsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_ParamsResponse proto.InternalMessageInfo - -func (m *ParamsResponse) GetParams() Params { - if m != nil { - return m.Params - } - return Params{} -} - -func init() { - proto.RegisterType((*ParamsRequest)(nil), "comdex.ibcratelimit.v1beta1.ParamsRequest") - proto.RegisterType((*ParamsResponse)(nil), "comdex.ibcratelimit.v1beta1.ParamsResponse") -} - -func init() { - proto.RegisterFile("comdex/ibcratelimit/v1beta1/query.proto", fileDescriptor_8427b621352b6b3f) -} - -var fileDescriptor_8427b621352b6b3f = []byte{ - // 311 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0x4f, 0x4b, 0xfb, 0x30, - 0x18, 0xc7, 0x9b, 0x1f, 0x3f, 0x77, 0x88, 0xa8, 0x50, 0x3c, 0xc8, 0x94, 0x28, 0x1b, 0xe2, 0xd8, - 0xb0, 0x61, 0x13, 0xbc, 0xbb, 0x57, 0x30, 0xe7, 0xcd, 0x5b, 0x5a, 0xb3, 0x18, 0x68, 0xfb, 0x64, - 0x4d, 0x2a, 0xee, 0xea, 0x0b, 0x10, 0xc1, 0x8b, 0x2f, 0x69, 0xc7, 0x81, 0x17, 0x4f, 0x22, 0xad, - 0x2f, 0x44, 0xda, 0x64, 0x22, 0x1e, 0xe6, 0x6e, 0xf9, 0xf3, 0xf9, 0xfe, 0x79, 0x1e, 0x7c, 0x12, - 0x41, 0x72, 0xc3, 0xef, 0xa9, 0x0c, 0xa3, 0x8c, 0x19, 0x1e, 0xcb, 0x44, 0x1a, 0x7a, 0xd7, 0x0f, - 0xb9, 0x61, 0x7d, 0x3a, 0xcd, 0x79, 0x36, 0x0b, 0x54, 0x06, 0x06, 0xfc, 0x7d, 0x0b, 0x06, 0x3f, - 0xc1, 0xc0, 0x81, 0xcd, 0x5d, 0x01, 0x02, 0x6a, 0x8e, 0x56, 0x27, 0x2b, 0x69, 0x1e, 0x08, 0x00, - 0x11, 0x73, 0xca, 0x94, 0xa4, 0x2c, 0x4d, 0xc1, 0x30, 0x23, 0x21, 0xd5, 0xee, 0xb7, 0x1b, 0x81, - 0x4e, 0x40, 0xd3, 0x90, 0x69, 0x6e, 0x93, 0xbe, 0x73, 0x15, 0x13, 0x32, 0xad, 0x61, 0xc7, 0x76, - 0x56, 0xb5, 0x54, 0x2c, 0x63, 0x89, 0x73, 0x6d, 0xed, 0xe0, 0xad, 0x51, 0x7d, 0x1f, 0xf3, 0x69, - 0xce, 0xb5, 0x69, 0x5d, 0xe1, 0xed, 0xe5, 0x83, 0x56, 0x90, 0x6a, 0xee, 0x5f, 0xe0, 0x86, 0x95, - 0xec, 0xa1, 0x23, 0xd4, 0xd9, 0x1c, 0xb4, 0x83, 0x15, 0xa3, 0x05, 0x56, 0x3c, 0xfc, 0x3f, 0x7f, - 0x3f, 0xf4, 0xc6, 0x4e, 0x38, 0x78, 0x41, 0x78, 0xe3, 0xb2, 0xaa, 0xec, 0x3f, 0x22, 0xdc, 0xb0, - 0x88, 0xdf, 0x5d, 0xc3, 0xc7, 0xb5, 0x6a, 0xf6, 0xd6, 0x62, 0x6d, 0xe1, 0x56, 0xef, 0xe1, 0xf5, - 0xf3, 0xf9, 0xdf, 0xb1, 0xdf, 0xa6, 0x7f, 0xaf, 0x61, 0x38, 0x9a, 0x17, 0x04, 0x2d, 0x0a, 0x82, - 0x3e, 0x0a, 0x82, 0x9e, 0x4a, 0xe2, 0x2d, 0x4a, 0xe2, 0xbd, 0x95, 0xc4, 0xbb, 0x3e, 0x17, 0xd2, - 0xdc, 0xe6, 0x61, 0x95, 0xec, 0x8c, 0x4e, 0x61, 0x32, 0x91, 0x91, 0x64, 0xf1, 0xd2, 0xf8, 0x97, - 0xb5, 0x99, 0x29, 0xae, 0xc3, 0x46, 0xbd, 0xd9, 0xb3, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x83, - 0xa6, 0x44, 0x57, 0x2b, 0x02, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// QueryClient is the client API for Query service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type QueryClient interface { - // Params defines a gRPC query method that returns the ibcratelimit module's - // parameters. - Params(ctx context.Context, in *ParamsRequest, opts ...grpc.CallOption) (*ParamsResponse, error) -} - -type queryClient struct { - cc grpc1.ClientConn -} - -func NewQueryClient(cc grpc1.ClientConn) QueryClient { - return &queryClient{cc} -} - -func (c *queryClient) Params(ctx context.Context, in *ParamsRequest, opts ...grpc.CallOption) (*ParamsResponse, error) { - out := new(ParamsResponse) - err := c.cc.Invoke(ctx, "/comdex.ibcratelimit.v1beta1.Query/Params", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// QueryServer is the server API for Query service. -type QueryServer interface { - // Params defines a gRPC query method that returns the ibcratelimit module's - // parameters. - Params(context.Context, *ParamsRequest) (*ParamsResponse, error) -} - -// UnimplementedQueryServer can be embedded to have forward compatible implementations. -type UnimplementedQueryServer struct { -} - -func (*UnimplementedQueryServer) Params(ctx context.Context, req *ParamsRequest) (*ParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") -} - -func RegisterQueryServer(s grpc1.Server, srv QueryServer) { - s.RegisterService(&_Query_serviceDesc, srv) -} - -func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ParamsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Params(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/comdex.ibcratelimit.v1beta1.Query/Params", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*ParamsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "comdex.ibcratelimit.v1beta1.Query", - HandlerType: (*QueryServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Params", - Handler: _Query_Params_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "comdex/ibcratelimit/v1beta1/query.proto", -} - -func (m *ParamsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ParamsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *ParamsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ParamsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { - offset -= sovQuery(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *ParamsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *ParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *ParamsRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ParamsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ParamsResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ParamsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipQuery(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowQuery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowQuery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowQuery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthQuery - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupQuery - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthQuery - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") -) diff --git a/x/ibcratelimit/types/query.pb.gw.go b/x/ibcratelimit/types/query.pb.gw.go deleted file mode 100644 index cefc607fe..000000000 --- a/x/ibcratelimit/types/query.pb.gw.go +++ /dev/null @@ -1,153 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: comdex/ibcratelimit/v1beta1/query.proto - -/* -Package types is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ -package types - -import ( - "context" - "io" - "net/http" - - "github.com/golang/protobuf/descriptor" - "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage -var _ = metadata.Join - -func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ParamsRequest - var metadata runtime.ServerMetadata - - msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ParamsRequest - var metadata runtime.ServerMetadata - - msg, err := server.Params(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". -// UnaryRPC :call QueryServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. -func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { - - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterQueryHandler(ctx, mux, conn) -} - -// RegisterQueryHandler registers the http handlers for service Query to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) -} - -// RegisterQueryHandlerClient registers the http handlers for service Query -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "QueryClient" to call the correct interceptors. -func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { - - mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"comdex", "ibcratelimit", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) -) - -var ( - forward_Query_Params_0 = runtime.ForwardResponseMessage -) diff --git a/x/lend/types/codec.go b/x/lend/types/codec.go index 484ae1383..57c2bfa0d 100644 --- a/x/lend/types/codec.go +++ b/x/lend/types/codec.go @@ -81,5 +81,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/liquidation/types/codec.go b/x/liquidation/types/codec.go index db2f55517..e8238af48 100644 --- a/x/liquidation/types/codec.go +++ b/x/liquidation/types/codec.go @@ -30,5 +30,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/liquidationsV2/types/codec.go b/x/liquidationsV2/types/codec.go index 0ab980c46..4f5de70f9 100644 --- a/x/liquidationsV2/types/codec.go +++ b/x/liquidationsV2/types/codec.go @@ -39,5 +39,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/liquidity/amm/amm.go b/x/liquidity/amm/amm.go index d56bdd004..2932c290b 100644 --- a/x/liquidity/amm/amm.go +++ b/x/liquidity/amm/amm.go @@ -13,6 +13,6 @@ var ( var ( MinPoolPrice = sdk.NewDecWithPrec(1, 15) // 10^-15 - MaxPoolPrice = sdk.NewDec(sdkmath.NewIntWithDecimal(1, 20).Int64()) // 10^20 + MaxPoolPrice = sdk.NewDecFromInt(sdkmath.NewIntWithDecimal(1, 20)) // 10^20 MinRangedPoolPriceGapRatio = sdk.NewDecWithPrec(1, 3) // 0.001, 0.1% ) diff --git a/x/liquidity/client/testutil/suite.go b/x/liquidity/client/testutil/suite.go index 8d850282a..ac5761dc2 100644 --- a/x/liquidity/client/testutil/suite.go +++ b/x/liquidity/client/testutil/suite.go @@ -12,7 +12,8 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" servertypes "github.com/cosmos/cosmos-sdk/server/types" - "github.com/cosmos/cosmos-sdk/testutil/network" + networkI "github.com/cosmos/cosmos-sdk/testutil/network" + "github.com/comdex-official/comdex/testutil/network" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" pruningtypes "github.com/cosmos/cosmos-sdk/store/pruning/types" @@ -32,8 +33,8 @@ type LiquidityIntegrationTestSuite struct { msgServer types.MsgServer } -func NewAppConstructor() network.AppConstructor { - return func(val network.ValidatorI) servertypes.Application { +func NewAppConstructor() networkI.AppConstructor { + return func(val networkI.ValidatorI) servertypes.Application { return chain.New( val.GetCtx().Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.GetCtx().Config.RootDir, 0, chain.MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, chain.GetWasmEnabledProposals(), chain.EmptyWasmOpts, @@ -60,7 +61,7 @@ func (s *LiquidityIntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) + s.network= network.New(s.T(), cfg) s.val = s.network.Validators[0] diff --git a/x/liquidity/types/codec.go b/x/liquidity/types/codec.go index 37f2e6ad4..cb5c2cb05 100644 --- a/x/liquidity/types/codec.go +++ b/x/liquidity/types/codec.go @@ -71,5 +71,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/locker/types/codec.go b/x/locker/types/codec.go index 475185723..cfb468922 100644 --- a/x/locker/types/codec.go +++ b/x/locker/types/codec.go @@ -38,5 +38,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/market/expected/keeper.go b/x/market/expected/keeper.go index 9ad3798ad..be4f42dda 100644 --- a/x/market/expected/keeper.go +++ b/x/market/expected/keeper.go @@ -4,7 +4,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + // ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" assettypes "github.com/comdex-official/comdex/x/asset/types" "github.com/comdex-official/comdex/x/bandoracle/types" @@ -14,7 +14,7 @@ type ChannelKeeper interface { ChanCloseInit(ctx sdk.Context, portID, channelID string, capability *capabilitytypes.Capability) error GetChannel(ctx sdk.Context, srcPort, srcChannel string) (ibcchanneltypes.Channel, bool) GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) - SendPacket(ctx sdk.Context, cap *capabilitytypes.Capability, packet ibcexported.PacketI) error + // SendPacket(ctx sdk.Context, cap *capabilitytypes.Capability, packet ibcexported.PacketI) error } type PortKeeper interface { diff --git a/x/rewards/types/codec.go b/x/rewards/types/codec.go index e26c7167a..cc84c8490 100644 --- a/x/rewards/types/codec.go +++ b/x/rewards/types/codec.go @@ -36,5 +36,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/tokenmint/types/codec.go b/x/tokenmint/types/codec.go index d9bf5f83d..4664fe7a7 100644 --- a/x/tokenmint/types/codec.go +++ b/x/tokenmint/types/codec.go @@ -29,5 +29,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/vault/client/testutil/suite.go b/x/vault/client/testutil/suite.go index 25ed2c192..369e28987 100644 --- a/x/vault/client/testutil/suite.go +++ b/x/vault/client/testutil/suite.go @@ -15,7 +15,8 @@ import ( servertypes "github.com/cosmos/cosmos-sdk/server/types" // store "github.com/cosmos/cosmos-sdk/store/types" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/cosmos/cosmos-sdk/testutil/network" + networkI "github.com/cosmos/cosmos-sdk/testutil/network" + "github.com/comdex-official/comdex/testutil/network" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" pruningtypes "github.com/cosmos/cosmos-sdk/store/pruning/types" @@ -36,8 +37,8 @@ type VaultIntegrationTestSuite struct { msgServer types.MsgServer } -func NewAppConstructor() network.AppConstructor { - return func(val network.ValidatorI) servertypes.Application { +func NewAppConstructor() networkI.AppConstructor { + return func(val networkI.ValidatorI) servertypes.Application { return chain.New( val.GetCtx().Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.GetCtx().Config.RootDir, 0, chain.MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, chain.GetWasmEnabledProposals(), chain.EmptyWasmOpts, @@ -64,7 +65,7 @@ func (s *VaultIntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network, _ = network.New(s.T(), s.T().TempDir(), cfg) + s.network = network.New(s.T(),cfg) s.val = s.network.Validators[0] diff --git a/x/vault/types/codec.go b/x/vault/types/codec.go index 2375c26cb..66308548a 100644 --- a/x/vault/types/codec.go +++ b/x/vault/types/codec.go @@ -50,5 +50,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } From 8637a451dff3ae085a9d1dde485ccf6ccf4a1b99 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 4 Sep 2023 01:22:54 +0530 Subject: [PATCH 39/90] pb files fixed --- go.mod | 2 +- osmoutils/ibc.go | 652 ------------------ .../comdex/ibcratelimit/v1beta1/genesis.proto | 16 - .../comdex/ibcratelimit/v1beta1/params.proto | 12 - proto/comdex/ibcratelimit/v1beta1/query.proto | 27 - proto/comdex/ibcratelimit/v1beta1/query.yml | 10 - x/asset/types/extendedPairVault.pb.go | 2 +- x/auction/types/auction.pb.go | 2 +- x/auction/types/biddings.pb.go | 2 +- x/auctionsV2/types/auction.pb.go | 2 +- x/auctionsV2/types/bid.pb.go | 2 +- x/collector/types/collector.pb.go | 2 +- x/esm/types/esm.pb.go | 2 +- x/lend/types/lend.pb.go | 4 +- x/liquidation/types/locked_vault.pb.go | 2 +- x/liquidationsV2/types/liquidate.pb.go | 2 +- x/liquidity/types/liquidity.pb.go | 2 +- x/liquidity/types/params.pb.go | 2 +- x/liquidity/types/query.pb.go | 4 +- x/locker/types/locker.pb.go | 6 +- x/rewards/types/epochs.pb.go | 4 +- x/rewards/types/gauge.pb.go | 4 +- x/rewards/types/rewards.pb.go | 2 +- x/rewards/types/tx.pb.go | 4 +- x/tokenmint/types/mint.pb.go | 4 +- x/tokenmint/types/tx.pb.go | 2 +- x/vault/types/vault.pb.go | 4 +- 27 files changed, 31 insertions(+), 748 deletions(-) delete mode 100644 osmoutils/ibc.go delete mode 100644 proto/comdex/ibcratelimit/v1beta1/genesis.proto delete mode 100644 proto/comdex/ibcratelimit/v1beta1/params.proto delete mode 100644 proto/comdex/ibcratelimit/v1beta1/query.proto delete mode 100644 proto/comdex/ibcratelimit/v1beta1/query.yml diff --git a/go.mod b/go.mod index 862c313a5..6554ab6b4 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,6 @@ require ( github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 github.com/cosmos/cosmos-sdk v0.47.5 - github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.0.0-20230726182236-3a9d46a7c2a4 github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4 github.com/gogo/protobuf v1.3.3 @@ -97,6 +96,7 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect + github.com/cosmos/gogoproto v1.4.10 // indirect github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect diff --git a/osmoutils/ibc.go b/osmoutils/ibc.go deleted file mode 100644 index b672b14e7..000000000 --- a/osmoutils/ibc.go +++ /dev/null @@ -1,652 +0,0 @@ -package osmoutils - -import ( - "fmt" - "encoding/json" - "context" - "strings" - "github.com/cosmos/cosmos-sdk/client/flags" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/gogoproto/proto" - grpc1 "github.com/gogo/protobuf/grpc" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/version" - "github.com/spf13/cobra" - "github.com/spf13/pflag" - "text/template" - "reflect" - "time" - "strconv" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" -) - -type FieldReadLocation = bool - -const paginationType = "*query.PageRequest" - -var lastQueryModuleName string - -type CustomFieldParserFn = func(arg string, flags *pflag.FlagSet) (valueToSet any, usedArg FieldReadLocation, err error) - -type FlagAdvice struct { - HasPagination bool - - // Map of FieldName -> FlagName - CustomFlagOverrides map[string]string - CustomFieldParsers map[string]CustomFieldParserFn - - // Tx sender value - IsTx bool - TxSenderFieldName string - FromValue string -} - -type FlagDesc struct { - RequiredFlags []*pflag.FlagSet - OptionalFlags []*pflag.FlagSet -} - -type QueryDescriptor struct { - Use string - Short string - Long string - - HasPagination bool - - QueryFnName string - - Flags FlagDesc - // Map of FieldName -> FlagName - CustomFlagOverrides map[string]string - // Map of FieldName -> CustomParseFn - CustomFieldParsers map[string]CustomFieldParserFn - - ParseQuery func(args []string, flags *pflag.FlagSet) (proto.Message, error) - - ModuleName string - numArgs int -} - -type LongMetadata struct { - BinaryName string - CommandPrefix string - Short string - - // Newline Example: - ExampleHeader string -} - -const IbcAcknowledgementErrorType = "ibc-acknowledgement-error" - -// NewEmitErrorAcknowledgement creates a new error acknowledgement after having emitted an event with the -// details of the error. -func NewEmitErrorAcknowledgement(ctx sdk.Context, err error, errorContexts ...string) channeltypes.Acknowledgement { - logger := ctx.Logger().With("module", IbcAcknowledgementErrorType) - - attributes := make([]sdk.Attribute, len(errorContexts)+1) - attributes[0] = sdk.NewAttribute("error", err.Error()) - for i, s := range errorContexts { - attributes[i+1] = sdk.NewAttribute("error-context", s) - logger.Error(fmt.Sprintf("error-context: %v", s)) - } - - ctx.EventManager().EmitEvents(sdk.Events{ - sdk.NewEvent( - IbcAcknowledgementErrorType, - attributes..., - ), - }) - - return channeltypes.NewErrorAcknowledgement(err) -} - -// IsAckError checks an IBC acknowledgement to see if it's an error. -// This is a replacement for ack.Success() which is currently not working on some circumstances -func IsAckError(acknowledgement []byte) bool { - var ackErr channeltypes.Acknowledgement_Error - if err := json.Unmarshal(acknowledgement, &ackErr); err == nil && len(ackErr.Error) > 0 { - return true - } - return false -} - - -// Index command, but short is not set. That is left to caller. -func IndexCmd(moduleName string) *cobra.Command { - return &cobra.Command{ - Use: moduleName, - Short: fmt.Sprintf("Querying commands for the %s module", moduleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: indexRunCmd, - } -} - -func indexRunCmd(cmd *cobra.Command, args []string) error { - usageTemplate := `Usage:{{if .HasAvailableSubCommands}} - {{.CommandPath}} [command]{{end}} - -{{if .HasAvailableSubCommands}}Available Commands:{{range .Commands}}{{if .IsAvailableCommand}} - {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}} - -Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}} -` - cmd.SetUsageTemplate(usageTemplate) - return cmd.Help() -} - -func QueryIndexCmd(moduleName string) *cobra.Command { - cmd := IndexCmd(moduleName) - cmd.Short = fmt.Sprintf("Querying commands for the %s module", moduleName) - lastQueryModuleName = moduleName - return cmd -} - -func NewLongMetadata(moduleName string) *LongMetadata { - commandPrefix := fmt.Sprintf("$ %s q %s", version.AppName, moduleName) - return &LongMetadata{ - BinaryName: version.AppName, - CommandPrefix: commandPrefix, - } -} - -func ParseUint(arg string, fieldName string) (uint64, error) { - v, err := strconv.ParseUint(arg, 10, 64) - if err != nil { - return 0, fmt.Errorf("could not parse %s as uint for field %s: %w", arg, fieldName, err) - } - return v, nil -} - -func ParseFloat(arg string, fieldName string) (float64, error) { - v, err := strconv.ParseFloat(arg, 64) - if err != nil { - return 0, fmt.Errorf("could not parse %s as float for field %s: %w", arg, fieldName, err) - } - return v, nil -} - -func ParseInt(arg string, fieldName string) (int64, error) { - v, err := strconv.ParseInt(arg, 10, 64) - if err != nil { - return 0, fmt.Errorf("could not parse %s as int for field %s: %w", arg, fieldName, err) - } - return v, nil -} - -func ParseDenom(arg string, fieldName string) (string, error) { - return strings.TrimSpace(arg), nil -} - -func ParseFieldFromArg(fVal reflect.Value, fType reflect.StructField, arg string) error { - // We cant pass in a negative number due to the way pflags works... - // This is an (extraordinarily ridiculous) workaround that checks if a negative int is encapsulated in square brackets, - // and if so, trims the square brackets - if strings.HasPrefix(arg, "[") && strings.HasSuffix(arg, "]") && arg[1] == '-' { - arg = strings.TrimPrefix(arg, "[") - arg = strings.TrimSuffix(arg, "]") - } - - switch fType.Type.Kind() { - // SetUint allows anyof type u8, u16, u32, u64, and uint - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - u, err := ParseUint(arg, fType.Name) - if err != nil { - return err - } - fVal.SetUint(u) - return nil - // SetInt allows anyof type i8,i16,i32,i64 and int - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - typeStr := fType.Type.String() - var i int64 - var err error - if typeStr == "time.Duration" { - dur, err2 := time.ParseDuration(arg) - i, err = int64(dur), err2 - } else { - i, err = ParseInt(arg, fType.Name) - } - if err != nil { - return err - } - fVal.SetInt(i) - return nil - case reflect.Float32, reflect.Float64: - typeStr := fType.Type.String() - f, err := ParseFloat(arg, typeStr) - if err != nil { - return err - } - fVal.SetFloat(f) - return nil - case reflect.String: - s, err := ParseDenom(arg, fType.Name) - if err != nil { - return err - } - fVal.SetString(s) - return nil - case reflect.Ptr: - case reflect.Slice: - typeStr := fType.Type.String() - if typeStr == "[]uint64" { - // Parse comma-separated uint64 values into []uint64 slice - strValues := strings.Split(arg, ",") - values := make([]uint64, len(strValues)) - for i, strValue := range strValues { - u, err := strconv.ParseUint(strValue, 10, 64) - if err != nil { - return err - } - values[i] = u - } - fVal.Set(reflect.ValueOf(values)) - return nil - } - if typeStr == "types.Coins" { - coins, err := ParseCoins(arg, fType.Name) - if err != nil { - return err - } - fVal.Set(reflect.ValueOf(coins)) - return nil - } - case reflect.Struct: - typeStr := fType.Type.String() - var v any - var err error - if typeStr == "types.Coin" { - v, err = ParseCoin(arg, fType.Name) - } else if typeStr == "types.Int" { - v, err = ParseSdkInt(arg, fType.Name) - } else if typeStr == "time.Time" { - v, err = ParseUnixTime(arg, fType.Name) - } else if typeStr == "types.Dec" { - v, err = ParseSdkDec(arg, fType.Name) - } else { - return fmt.Errorf("struct field type not recognized. Got type %v", fType) - } - - if err != nil { - return err - } - fVal.Set(reflect.ValueOf(v)) - return nil - } - fmt.Println(fType.Type.Kind().String()) - return fmt.Errorf("field type not recognized. Got type %v", fType) -} - -func ParseSdkDec(arg, fieldName string) (sdk.Dec, error) { - i, err := sdk.NewDecFromStr(arg) - if err != nil { - return sdk.Dec{}, fmt.Errorf("could not parse %s as sdk.Dec for field %s: %w", arg, fieldName, err) - } - return i, nil -} - -func ParseUnixTime(arg string, fieldName string) (time.Time, error) { - timeUnix, err := strconv.ParseInt(arg, 10, 64) - if err != nil { - parsedTime, err := time.Parse(sdk.SortableTimeFormat, arg) - if err != nil { - return time.Time{}, fmt.Errorf("could not parse %s as time for field %s: %w", arg, fieldName, err) - } - - return parsedTime, nil - } - startTime := time.Unix(timeUnix, 0) - return startTime, nil -} - -func ParseSdkInt(arg string, fieldName string) (sdk.Int, error) { - i, ok := sdk.NewIntFromString(arg) - if !ok { - return sdk.Int{}, fmt.Errorf("could not parse %s as sdk.Int for field %s", arg, fieldName) - } - return i, nil -} - -func ParseCoin(arg string, fieldName string) (sdk.Coin, error) { - coin, err := sdk.ParseCoinNormalized(arg) - if err != nil { - return sdk.Coin{}, fmt.Errorf("could not parse %s as sdk.Coin for field %s: %w", arg, fieldName, err) - } - return coin, nil -} - -func ParseCoins(arg string, fieldName string) (sdk.Coins, error) { - coins, err := sdk.ParseCoinsNormalized(arg) - if err != nil { - return sdk.Coins{}, fmt.Errorf("could not parse %s as sdk.Coins for field %s: %w", arg, fieldName, err) - } - return coins, nil -} - -func parseFieldFromDirectlySetFlag(fVal reflect.Value, fType reflect.StructField, flagAdvice FlagAdvice, flagName string, flags *pflag.FlagSet) error { - // get string. If its a string great, run through arg parser. Otherwise try setting directly - s, err := flags.GetString(flagName) - if err != nil { - flag := flags.Lookup(flagName) - if flag == nil { - return fmt.Errorf("Programmer set the flag name wrong. Flag %s does not exist", flagName) - } - t := flag.Value.Type() - if t == "uint64" { - u, err := flags.GetUint64(flagName) - if err != nil { - return err - } - fVal.SetUint(u) - return nil - } - } - return ParseFieldFromArg(fVal, fType, s) -} - -// ParseFieldFromFlag attempts to parses the value of a field in a struct from a flag. -// The field is identified by the provided `reflect.StructField`. -// The flag advice and `pflag.FlagSet` are used to determine the flag to parse the field from. -// If the field corresponds to a value from a flag, true is returned. -// Otherwise, `false` is returned. -// In the true case, the parsed value is set on the provided `reflect.Value`. -// An error is returned if there is an issue parsing the field from the flag. -func ParseFieldFromFlag(fVal reflect.Value, fType reflect.StructField, flagAdvice FlagAdvice, flags *pflag.FlagSet) (bool, error) { - lowercaseFieldNameStr := strings.ToLower(fType.Name) - if flagName, ok := flagAdvice.CustomFlagOverrides[lowercaseFieldNameStr]; ok { - return true, parseFieldFromDirectlySetFlag(fVal, fType, flagAdvice, flagName, flags) - } - - kind := fType.Type.Kind() - switch kind { - case reflect.String: - if flagAdvice.IsTx { - // matchesFieldName is true if lowercaseFieldNameStr is the same as TxSenderFieldName, - // or if TxSenderFieldName is left blank, then matches fields named "sender" or "owner" - matchesFieldName := (flagAdvice.TxSenderFieldName == lowercaseFieldNameStr) || - (flagAdvice.TxSenderFieldName == "" && (lowercaseFieldNameStr == "sender" || lowercaseFieldNameStr == "owner")) - if matchesFieldName { - fVal.SetString(flagAdvice.FromValue) - return true, nil - } - } - case reflect.Ptr: - if flagAdvice.HasPagination { - typeStr := fType.Type.String() - if typeStr == paginationType { - pageReq, err := client.ReadPageRequest(flags) - if err != nil { - return true, err - } - fVal.Set(reflect.ValueOf(pageReq)) - return true, nil - } - } - } - return false, nil -} - -// ParseField parses field #fieldIndex from either an arg or a flag. -// Returns true if it was parsed from an argument. -// Returns error if there was an issue in parsing this field. -func ParseField(v reflect.Value, t reflect.Type, fieldIndex int, arg string, flagAdvice FlagAdvice, flags *pflag.FlagSet) (bool, error) { - fVal := v.Field(fieldIndex) - fType := t.Field(fieldIndex) - // fmt.Printf("Field %d: %s %s %s\n", fieldIndex, fType.Name, fType.Type, fType.Type.Kind()) - - lowercaseFieldNameStr := strings.ToLower(fType.Name) - if parseFn, ok := flagAdvice.CustomFieldParsers[lowercaseFieldNameStr]; ok { - v, usedArg, err := parseFn(arg, flags) - if err == nil { - fVal.Set(reflect.ValueOf(v)) - } - return usedArg, err - } - - parsedFromFlag, err := ParseFieldFromFlag(fVal, fType, flagAdvice, flags) - if err != nil { - return false, err - } - if parsedFromFlag { - return false, nil - } - return true, ParseFieldFromArg(fVal, fType, arg) -} - -func MakeNew[T any]() T { - var v T - if typ := reflect.TypeOf(v); typ.Kind() == reflect.Ptr { - elem := typ.Elem() - //nolint:forcetypeassert - return reflect.New(elem).Interface().(T) // must use reflect - } else { - return *new(T) // v is not ptr, alloc with new - } -} - -// makes an exception, where it allows Pagination to come from flags. -func ParseFieldsFromFlagsAndArgs[reqP any](flagAdvice FlagAdvice, flags *pflag.FlagSet, args []string) (reqP, error) { - req := MakeNew[reqP]() - v := reflect.ValueOf(req).Elem() - t := v.Type() - - argIndexOffset := 0 - // Iterate over the fields in the struct - for i := 0; i < t.NumField(); i++ { - arg := "" - if len(args) > i+argIndexOffset { - arg = args[i+argIndexOffset] - } - usedArg, err := ParseField(v, t, i, arg, flagAdvice, flags) - if err != nil { - return req, err - } - if !usedArg { - argIndexOffset -= 1 - } - } - return req, nil -} - -func BuildQueryCli[reqP proto.Message, querier any](desc *QueryDescriptor, newQueryClientFn func(grpc1.ClientConn) querier) *cobra.Command { - prepareDescriptor[reqP](desc) - if desc.ParseQuery == nil { - desc.ParseQuery = func(args []string, fs *pflag.FlagSet) (proto.Message, error) { - flagAdvice := FlagAdvice{ - HasPagination: desc.HasPagination, - CustomFlagOverrides: desc.CustomFlagOverrides, - CustomFieldParsers: desc.CustomFieldParsers, - }.Sanitize() - return ParseFieldsFromFlagsAndArgs[reqP](flagAdvice, fs, args) - } - } - - cmd := &cobra.Command{ - Use: desc.Use, - Short: desc.Short, - Long: desc.Long, - Args: cobra.ExactArgs(desc.numArgs), - RunE: queryLogic(desc, newQueryClientFn), - } - flags.AddQueryFlagsToCmd(cmd) - AddFlags(cmd, desc.Flags) - if desc.HasPagination { - cmdName := strings.Split(desc.Use, " ")[0] - flags.AddPaginationFlagsToCmd(cmd, cmdName) - } - - return cmd -} - -func queryLogic[querier any](desc *QueryDescriptor, - newQueryClientFn func(grpc1.ClientConn) querier, -) func(cmd *cobra.Command, args []string) error { - return func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientQueryContext(cmd) - if err != nil { - return err - } - queryClient := newQueryClientFn(clientCtx) - - req, err := desc.ParseQuery(args, cmd.Flags()) - if err != nil { - return err - } - - res, err := callQueryClientFn(cmd.Context(), desc.QueryFnName, req, queryClient) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - } -} - -func callQueryClientFn(ctx context.Context, fnName string, req proto.Message, q any) (res proto.Message, err error) { - qVal := reflect.ValueOf(q) - method := qVal.MethodByName(fnName) - if (method == reflect.Value{}) { - return nil, fmt.Errorf("Method %s does not exist on the querier."+ - " You likely need to override QueryFnName in your Query descriptor", fnName) - } - args := []reflect.Value{ - reflect.ValueOf(ctx), - reflect.ValueOf(req), - } - results := method.Call(args) - if len(results) != 2 { - panic("We got something wrong") - } - if !results[1].IsNil() { - //nolint:forcetypeassert - err = results[1].Interface().(error) - return res, err - } - //nolint:forcetypeassert - res = results[0].Interface().(proto.Message) - return res, nil -} - -func (f FlagAdvice) Sanitize() FlagAdvice { - // map CustomFlagOverrides & CustomFieldParser keys to lower-case - // initialize if uninitialized - newFlagOverrides := make(map[string]string, len(f.CustomFlagOverrides)) - for k, v := range f.CustomFlagOverrides { - newFlagOverrides[strings.ToLower(k)] = v - } - f.CustomFlagOverrides = newFlagOverrides - newFlagParsers := make(map[string]CustomFieldParserFn, len(f.CustomFieldParsers)) - for k, v := range f.CustomFieldParsers { - newFlagParsers[strings.ToLower(k)] = v - } - f.CustomFieldParsers = newFlagParsers - return f - -} - -// Required flags are marked as required. -func AddFlags(cmd *cobra.Command, desc FlagDesc) { - for i := 0; i < len(desc.OptionalFlags); i++ { - cmd.Flags().AddFlagSet(desc.OptionalFlags[i]) - } - for i := 0; i < len(desc.RequiredFlags); i++ { - fs := desc.RequiredFlags[i] - cmd.Flags().AddFlagSet(fs) - - // mark all these flags as required. - fs.VisitAll(func(flag *pflag.Flag) { - err := cmd.MarkFlagRequired(flag.Name) - if err != nil { - panic(err) - } - }) - } -} - -func ParseHasPagination[reqP any]() bool { - req := MakeNew[reqP]() - t := reflect.ValueOf(req).Elem().Type() - for i := 0; i < t.NumField(); i++ { - fType := t.Field(i) - if fType.Type.String() == paginationType { - return true - } - } - return false -} - -func prepareDescriptor[reqP proto.Message](desc *QueryDescriptor) { - if !desc.HasPagination { - desc.HasPagination = ParseHasPagination[reqP]() - } - if desc.QueryFnName == "" { - desc.QueryFnName = ParseExpectedQueryFnName[reqP]() - } - if strings.Contains(desc.Long, "{") { - if desc.ModuleName == "" { - desc.ModuleName = lastQueryModuleName - } - desc.FormatLong(desc.ModuleName) - } - - desc.numArgs = ParseNumFields[reqP]() - len(desc.CustomFlagOverrides) - if desc.HasPagination { - desc.numArgs = desc.numArgs - 1 - } -} - -func ParseNumFields[reqP any]() int { - req := MakeNew[reqP]() - v := reflect.ValueOf(req).Elem() - t := v.Type() - return t.NumField() -} - -func (desc *QueryDescriptor) FormatLong(moduleName string) { - desc.Long = FormatLongDesc(desc.Long, NewLongMetadata(moduleName).WithShort(desc.Short)) -} - -func FormatLongDesc(longString string, meta *LongMetadata) string { - template, err := template.New("long_description").Parse(longString) - if err != nil { - panic("incorrectly configured long message") - } - bld := strings.Builder{} - meta.ExampleHeader = "\n\nExample:" - err = template.Execute(&bld, meta) - if err != nil { - panic("incorrectly configured long message") - } - return strings.TrimSpace(bld.String()) -} - -func (m *LongMetadata) WithShort(short string) *LongMetadata { - m.Short = short - return m -} - -func GetParams[reqP proto.Message, querier any](moduleName string, - newQueryClientFn func(grpc1.ClientConn) querier, -) *cobra.Command { - return BuildQueryCli[reqP](&QueryDescriptor{ - Use: "params [flags]", - Short: fmt.Sprintf("Get the params for the x/%s module", moduleName), - QueryFnName: "Params", - }, newQueryClientFn) -} - -func ParseExpectedQueryFnName[reqP any]() string { - req := MakeNew[reqP]() - v := reflect.ValueOf(req).Elem() - s := v.Type().String() - // handle some non-std queries - var prefixTrimmed string - if strings.Contains(s, "Query") { - prefixTrimmed = strings.Split(s, "Query")[1] - } else { - prefixTrimmed = strings.Split(s, ".")[1] - } - suffixTrimmed := strings.TrimSuffix(prefixTrimmed, "Request") - return suffixTrimmed -} diff --git a/proto/comdex/ibcratelimit/v1beta1/genesis.proto b/proto/comdex/ibcratelimit/v1beta1/genesis.proto deleted file mode 100644 index 9b204aef4..000000000 --- a/proto/comdex/ibcratelimit/v1beta1/genesis.proto +++ /dev/null @@ -1,16 +0,0 @@ -syntax = "proto3"; - -package comdex.ibcratelimit.v1beta1; - -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; -import "google/protobuf/any.proto"; -import "comdex/ibcratelimit/v1beta1/params.proto"; - -option go_package = "github.com/comdex-official/comdex/x/ibcratelimit/types"; - -// GenesisState defines the ibcratelimit module's genesis state. -message GenesisState { - // params are all the parameters of the module - Params params = 1 [ (gogoproto.nullable) = false ]; -} diff --git a/proto/comdex/ibcratelimit/v1beta1/params.proto b/proto/comdex/ibcratelimit/v1beta1/params.proto deleted file mode 100644 index 82e32fbbf..000000000 --- a/proto/comdex/ibcratelimit/v1beta1/params.proto +++ /dev/null @@ -1,12 +0,0 @@ -syntax = "proto3"; -package comdex.ibcratelimit.v1beta1; - -import "gogoproto/gogo.proto"; - -option go_package = "github.com/comdex-official/comdex/x/ibcratelimit/types"; - -// Params defines the parameters for the ibcratelimit module. -message Params { - string contract_address = 1 - [ (gogoproto.moretags) = "yaml:\"contract_address\"" ]; -} diff --git a/proto/comdex/ibcratelimit/v1beta1/query.proto b/proto/comdex/ibcratelimit/v1beta1/query.proto deleted file mode 100644 index ac071e15d..000000000 --- a/proto/comdex/ibcratelimit/v1beta1/query.proto +++ /dev/null @@ -1,27 +0,0 @@ -syntax = "proto3"; -package comdex.ibcratelimit.v1beta1; - -import "gogoproto/gogo.proto"; -import "google/api/annotations.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; -import "comdex/ibcratelimit/v1beta1/params.proto"; - -option go_package = "github.com/comdex-official/comdex/x/ibcratelimit/types"; - -// Query defines the gRPC querier service. -service Query { - // Params defines a gRPC query method that returns the ibcratelimit module's - // parameters. - rpc Params(ParamsRequest) returns (ParamsResponse) { - option (google.api.http).get = "/comdex/ibcratelimit/v1beta1/params"; - } -} - -// ParamsRequest is the request type for the Query/Params RPC method. -message ParamsRequest {} - -// aramsResponse is the response type for the Query/Params RPC method. -message ParamsResponse { - // params defines the parameters of the module. - Params params = 1 [ (gogoproto.nullable) = false ]; -} diff --git a/proto/comdex/ibcratelimit/v1beta1/query.yml b/proto/comdex/ibcratelimit/v1beta1/query.yml deleted file mode 100644 index 53db95ab7..000000000 --- a/proto/comdex/ibcratelimit/v1beta1/query.yml +++ /dev/null @@ -1,10 +0,0 @@ -keeper: - path: "github.com/comdex-official/comdex/x/ibcratelimit" - struct: "Keeper" -client_path: "github.com/comdex-official/comdex/x/ibcratelimit/client" -queries: - Params: - proto_wrapper: - query_func: "k.GetParams" - cli: - cmd: "GetParams" \ No newline at end of file diff --git a/x/asset/types/extendedPairVault.pb.go b/x/asset/types/extendedPairVault.pb.go index 1ff9cd077..042219a1d 100644 --- a/x/asset/types/extendedPairVault.pb.go +++ b/x/asset/types/extendedPairVault.pb.go @@ -9,7 +9,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/auction/types/auction.pb.go b/x/auction/types/auction.pb.go index b3a51395e..87fddf3d9 100644 --- a/x/auction/types/auction.pb.go +++ b/x/auction/types/auction.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/auction/types/biddings.pb.go b/x/auction/types/biddings.pb.go index 2767b7031..29bceaced 100644 --- a/x/auction/types/biddings.pb.go +++ b/x/auction/types/biddings.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/auctionsV2/types/auction.pb.go b/x/auctionsV2/types/auction.pb.go index 5666c6dd9..66bac2864 100644 --- a/x/auctionsV2/types/auction.pb.go +++ b/x/auctionsV2/types/auction.pb.go @@ -11,7 +11,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/auctionsV2/types/bid.pb.go b/x/auctionsV2/types/bid.pb.go index 145869867..1f509b84a 100644 --- a/x/auctionsV2/types/bid.pb.go +++ b/x/auctionsV2/types/bid.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/collector/types/collector.pb.go b/x/collector/types/collector.pb.go index 32dc2c711..a9d25a2e7 100644 --- a/x/collector/types/collector.pb.go +++ b/x/collector/types/collector.pb.go @@ -9,7 +9,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/esm/types/esm.pb.go b/x/esm/types/esm.pb.go index cbea415d0..a3abc6f57 100644 --- a/x/esm/types/esm.pb.go +++ b/x/esm/types/esm.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/lend/types/lend.pb.go b/x/lend/types/lend.pb.go index a32d54ebc..d0696bc40 100644 --- a/x/lend/types/lend.pb.go +++ b/x/lend/types/lend.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" @@ -338,7 +338,7 @@ func (m *Pool) GetAssetData() []*AssetDataPoolMapping { type UserAssetLendBorrowMapping struct { Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty" yaml:"owner"` - //to check if poool id is needed + // to check if poool id is needed LendId uint64 `protobuf:"varint,2,opt,name=lend_id,json=lendId,proto3" json:"lend_id,omitempty" yaml:"lend_id"` PoolId uint64 `protobuf:"varint,3,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` BorrowId []uint64 `protobuf:"varint,4,rep,packed,name=borrow_id,json=borrowId,proto3" json:"borrow_id,omitempty" yaml:"borrow_id"` diff --git a/x/liquidation/types/locked_vault.pb.go b/x/liquidation/types/locked_vault.pb.go index 8d10a9254..5d36d2a92 100644 --- a/x/liquidation/types/locked_vault.pb.go +++ b/x/liquidation/types/locked_vault.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/liquidationsV2/types/liquidate.pb.go b/x/liquidationsV2/types/liquidate.pb.go index d4681b501..44e0d390e 100644 --- a/x/liquidationsV2/types/liquidate.pb.go +++ b/x/liquidationsV2/types/liquidate.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/liquidity/types/liquidity.pb.go b/x/liquidity/types/liquidity.pb.go index 4b74e687d..fb267252b 100644 --- a/x/liquidity/types/liquidity.pb.go +++ b/x/liquidity/types/liquidity.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/liquidity/types/params.pb.go b/x/liquidity/types/params.pb.go index 1ce9f40e2..b81de407b 100644 --- a/x/liquidity/types/params.pb.go +++ b/x/liquidity/types/params.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/durationpb" + _ "github.com/golang/protobuf/ptypes/duration" io "io" math "math" math_bits "math/bits" diff --git a/x/liquidity/types/query.pb.go b/x/liquidity/types/query.pb.go index c3221d8c9..819f29d5c 100644 --- a/x/liquidity/types/query.pb.go +++ b/x/liquidity/types/query.pb.go @@ -13,12 +13,12 @@ import ( grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/golang/protobuf/ptypes/duration" + _ "github.com/golang/protobuf/ptypes/timestamp" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/locker/types/locker.pb.go b/x/locker/types/locker.pb.go index 3111cbc4c..cec92c168 100644 --- a/x/locker/types/locker.pb.go +++ b/x/locker/types/locker.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" @@ -29,7 +29,7 @@ var _ = time.Kitchen // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -//locker_id will be the key which will be derived from the LockerLookUpTable +// locker_id will be the key which will be derived from the LockerLookUpTable type Locker struct { LockerId uint64 `protobuf:"varint,1,opt,name=locker_id,json=lockerId,proto3" json:"locker_id,omitempty" yaml:"locker_id"` Depositor string `protobuf:"bytes,2,opt,name=depositor,proto3" json:"depositor,omitempty" yaml:"depositor"` @@ -197,7 +197,7 @@ func (m *LockerLookupTableData) XXX_DiscardUnknown() { var xxx_messageInfo_LockerLookupTableData proto.InternalMessageInfo -//Key is app_mapping_id +// Key is app_mapping_id type LockerProductAssetMapping struct { AppId uint64 `protobuf:"varint,1,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty" yaml:"app_id"` AssetId uint64 `protobuf:"varint,2,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty" yaml:"asset_id"` diff --git a/x/rewards/types/epochs.pb.go b/x/rewards/types/epochs.pb.go index 361e58b0b..cd956efdb 100644 --- a/x/rewards/types/epochs.pb.go +++ b/x/rewards/types/epochs.pb.go @@ -8,8 +8,8 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/duration" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/rewards/types/gauge.pb.go b/x/rewards/types/gauge.pb.go index ec3c14ff3..9c03323e5 100644 --- a/x/rewards/types/gauge.pb.go +++ b/x/rewards/types/gauge.pb.go @@ -10,8 +10,8 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/duration" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/rewards/types/rewards.pb.go b/x/rewards/types/rewards.pb.go index 739c2cffa..049fd1cc1 100644 --- a/x/rewards/types/rewards.pb.go +++ b/x/rewards/types/rewards.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" diff --git a/x/rewards/types/tx.pb.go b/x/rewards/types/tx.pb.go index 14dbdaecc..1402580e1 100644 --- a/x/rewards/types/tx.pb.go +++ b/x/rewards/types/tx.pb.go @@ -12,11 +12,11 @@ import ( grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/golang/protobuf/ptypes/duration" + _ "github.com/golang/protobuf/ptypes/timestamp" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/tokenmint/types/mint.pb.go b/x/tokenmint/types/mint.pb.go index e6a0c4721..6becc9212 100644 --- a/x/tokenmint/types/mint.pb.go +++ b/x/tokenmint/types/mint.pb.go @@ -9,7 +9,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" @@ -28,7 +28,7 @@ var _ = time.Kitchen // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -//app_vault_type_id will be the key for the KVStore for this value. +// app_vault_type_id will be the key for the KVStore for this value. type TokenMint struct { AppId uint64 `protobuf:"varint,1,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty" yaml:"app_id"` MintedTokens []*MintedTokens `protobuf:"bytes,2,rep,name=minted_tokens,json=mintedTokens,proto3" json:"minted_tokens,omitempty" yaml:"minted_tokens"` diff --git a/x/tokenmint/types/tx.pb.go b/x/tokenmint/types/tx.pb.go index bd298c240..f03b52bb7 100644 --- a/x/tokenmint/types/tx.pb.go +++ b/x/tokenmint/types/tx.pb.go @@ -28,7 +28,7 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -//Will become governance proposal- will trigger token minting & sending +// Will become governance proposal- will trigger token minting & sending type MsgMintNewTokensRequest struct { From string `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty" yaml:"from"` AppId uint64 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty" yaml:"app_id"` diff --git a/x/vault/types/vault.pb.go b/x/vault/types/vault.pb.go index 5438430ab..b804abbd7 100644 --- a/x/vault/types/vault.pb.go +++ b/x/vault/types/vault.pb.go @@ -9,7 +9,7 @@ import ( _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" math_bits "math/bits" @@ -28,7 +28,7 @@ var _ = time.Kitchen // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -//app_vault_type_id will be the key for the KVStore for this value +// app_vault_type_id will be the key for the KVStore for this value type Vault struct { Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` AppId uint64 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty" yaml:"app_id"` From 53aadc4bb5d639dd73e96462c1902fb72ee7d485 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Sat, 16 Sep 2023 15:38:55 +0530 Subject: [PATCH 40/90] genutil fix --- app/app.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/app.go b/app/app.go index 8d1a51fe2..21dec2edb 100644 --- a/app/app.go +++ b/app/app.go @@ -20,6 +20,7 @@ import ( ibchookskeeper "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/keeper" ibchookstypes "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types" + consensus "github.com/cosmos/cosmos-sdk/x/consensus" consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" @@ -270,7 +271,7 @@ var ( // and genesis verification. ModuleBasics = module.NewBasicManager( auth.AppModuleBasic{}, - genutil.AppModuleBasic{}, + genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), bank.AppModuleBasic{}, capability.AppModuleBasic{}, staking.AppModuleBasic{}, @@ -285,6 +286,7 @@ var ( upgrade.AppModuleBasic{}, evidence.AppModuleBasic{}, ibctransfer.AppModuleBasic{}, + consensus.AppModuleBasic{}, vesting.AppModuleBasic{}, vault.AppModuleBasic{}, asset.AppModuleBasic{}, @@ -434,7 +436,7 @@ func New( markettypes.StoreKey, bandoraclemoduletypes.StoreKey, lockertypes.StoreKey, wasm.StoreKey, authzkeeper.StoreKey, auctiontypes.StoreKey, tokenminttypes.StoreKey, rewardstypes.StoreKey, feegrant.StoreKey, liquiditytypes.StoreKey, esmtypes.ModuleName, lendtypes.StoreKey, - liquidationsV2types.StoreKey, auctionsV2types.StoreKey, ibchookstypes.StoreKey, packetforwardtypes.StoreKey, icqtypes.StoreKey, + liquidationsV2types.StoreKey, auctionsV2types.StoreKey, ibchookstypes.StoreKey, packetforwardtypes.StoreKey, icqtypes.StoreKey, consensusparamtypes.StoreKey, crisistypes.StoreKey, ) ) From 63812e66e11ca735f9970c2da065e0b8b2c043d9 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Sun, 17 Sep 2023 00:54:03 +0530 Subject: [PATCH 41/90] root fix --- cmd/comdex/root.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/comdex/root.go b/cmd/comdex/root.go index b5485cf37..2ea1b9306 100644 --- a/cmd/comdex/root.go +++ b/cmd/comdex/root.go @@ -51,7 +51,7 @@ func NewRootCmd() (*cobra.Command, comdex.EncodingConfig) { WithLegacyAmino(encodingConfig.Amino). WithInput(os.Stdin). WithAccountRetriever(authtypes.AccountRetriever{}). - WithBroadcastMode(flags.BroadcastSync). + WithBroadcastMode(flags.FlagBroadcastMode). WithHomeDir(comdex.DefaultNodeHome). WithViper("") From 253647e268d39c6aaa217c55dc1d2294ced3dfbf Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 21 Sep 2023 01:15:52 +0530 Subject: [PATCH 42/90] codec, encoding fix --- app/encoding.go | 4 ++-- app/export.go | 4 ++-- app/test_helpers.go | 8 ++++---- cmd/comdex/root.go | 7 +++++-- go.mod | 6 ++++-- go.sum | 21 ++------------------- x/bandoracle/types/codec.go | 6 ++---- x/collector/types/codec.go | 2 +- x/esm/types/codec.go | 4 ++-- x/liquidation/types/codec.go | 2 +- x/liquidationsV2/types/codec.go | 2 +- x/rewards/types/codec.go | 2 +- x/tokenmint/types/codec.go | 2 +- 13 files changed, 28 insertions(+), 42 deletions(-) diff --git a/app/encoding.go b/app/encoding.go index 7cffee9f6..dbff1d136 100644 --- a/app/encoding.go +++ b/app/encoding.go @@ -9,10 +9,10 @@ import ( ) type EncodingConfig struct { - Amino *codec.LegacyAmino InterfaceRegistry codectypes.InterfaceRegistry - Marshaler codec.ProtoCodecMarshaler + Marshaler codec.Codec TxConfig client.TxConfig + Amino *codec.LegacyAmino } func NewEncodingConfig() EncodingConfig { diff --git a/app/export.go b/app/export.go index 153a8f388..156f53a60 100644 --- a/app/export.go +++ b/app/export.go @@ -15,7 +15,7 @@ import ( // ExportAppStateAndValidators exports the state of the application for a genesis // file. func (a *App) ExportAppStateAndValidators( - forZeroHeight bool, jailAllowedAddrs []string, + forZeroHeight bool, jailAllowedAddrs []string, modulesToExport []string, ) (servertypes.ExportedApp, error) { // as if they could withdraw from the start of the next block ctx := a.NewContext(true, tmprototypes.Header{Height: a.LastBlockHeight()}) @@ -27,7 +27,7 @@ func (a *App) ExportAppStateAndValidators( a.prepForZeroHeightGenesis(ctx, jailAllowedAddrs) } - genState := a.mm.ExportGenesis(ctx, a.cdc) + genState := a.mm.ExportGenesisForModules(ctx, a.cdc, modulesToExport) appState, err := json.MarshalIndent(genState, "", " ") if err != nil { return servertypes.ExportedApp{}, err diff --git a/app/test_helpers.go b/app/test_helpers.go index 7f0c693ad..69f7b38b8 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -3,8 +3,8 @@ package app import ( "encoding/json" "time" - simappparams "cosmossdk.io/simapp/params" - + // simappparams "cosmossdk.io/simapp/params" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/libs/log" @@ -33,8 +33,8 @@ var DefaultConsensusParams = &tmproto.ConsensusParams{ }, } -func MakeTestEncodingConfig() simappparams.EncodingConfig { - encodingConfig := simappparams.MakeTestEncodingConfig() +func MakeTestEncodingConfig() moduletestutil.TestEncodingConfig { + encodingConfig := moduletestutil.MakeTestEncodingConfig() std.RegisterLegacyAminoCodec(encodingConfig.Amino) std.RegisterInterfaces(encodingConfig.InterfaceRegistry) ModuleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino) diff --git a/cmd/comdex/root.go b/cmd/comdex/root.go index 2ea1b9306..078fe8dcf 100644 --- a/cmd/comdex/root.go +++ b/cmd/comdex/root.go @@ -51,7 +51,7 @@ func NewRootCmd() (*cobra.Command, comdex.EncodingConfig) { WithLegacyAmino(encodingConfig.Amino). WithInput(os.Stdin). WithAccountRetriever(authtypes.AccountRetriever{}). - WithBroadcastMode(flags.FlagBroadcastMode). + // WithBroadcastMode(flags.FlagBroadcastMode). WithHomeDir(comdex.DefaultNodeHome). WithViper("") @@ -95,6 +95,9 @@ func initTendermintConfig() *tmcfg.Config { } func initRootCmd(rootCmd *cobra.Command, encoding comdex.EncodingConfig) { + cfg := sdk.GetConfig() + cfg.Seal() + gentxModule := comdex.ModuleBasics[genutiltypes.ModuleName].(genutil.AppModuleBasic) rootCmd.AddCommand( genutilcli.InitCmd(comdex.ModuleBasics, comdex.DefaultNodeHome), @@ -261,5 +264,5 @@ func appExportFunc(logger log.Logger, db tmdb.DB, tracer io.Writer, height int64 app = comdex.New(logger, db, tracer, true, map[int64]bool{}, homePath, cast.ToUint(options.Get(server.FlagInvCheckPeriod)), config, options, comdex.GetWasmEnabledProposals(), emptyWasmOpts) } - return app.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs) + return app.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs, modulesToExport) } diff --git a/go.mod b/go.mod index 6554ab6b4..209a018d1 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.20 require ( cosmossdk.io/math v1.1.2 - cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff github.com/CosmWasm/wasmd v0.40.2 github.com/CosmWasm/wasmvm v1.3.0 github.com/bandprotocol/bandchain-packet v0.0.3 @@ -323,4 +322,7 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) -replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 +replace ( + github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 +) diff --git a/go.sum b/go.sum index 9b81ff29c..f7d121505 100644 --- a/go.sum +++ b/go.sum @@ -208,8 +208,6 @@ cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= cosmossdk.io/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM= cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= -cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff h1:P1ialzTepD1oxdNPYc5N8Eggq3RdejZq3cJs8YYMs9Y= -cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff/go.mod h1:AKzx6Mb544LjJ9RHmGFHjY9rEOLiUAi8I0F727TR0dY= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -632,7 +630,6 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2 github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= 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.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= @@ -686,7 +683,6 @@ github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5Nq github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-toolsmith/astcast v1.1.0 h1:+JN9xZV1A+Re+95pgnMgDboWNVnIMMQXwfBwLRPgSC8= github.com/go-toolsmith/astcast v1.1.0/go.mod h1:qdcuFWeGGS2xX5bLM/c3U9lewg7+Zu4mr+xPwZIB4ZU= @@ -844,7 +840,6 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= @@ -1247,7 +1242,6 @@ github.com/nunnatsa/ginkgolinter v0.12.1 h1:vwOqb5Nu05OikTXqhvLdHCGcx5uthIYIl0t7 github.com/nunnatsa/ginkgolinter v0.12.1/go.mod h1:AK8Ab1PypVrcGUusuKD8RDcl2KgsIwvNaaxAlyHSzso= 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/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -1260,17 +1254,12 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= 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/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo/v2 v2.9.4 h1:xR7vG4IXt5RWx6FfIjyAtsoMAtnc3C/rFXBBd2AjZwE= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= 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.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= 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= @@ -1530,7 +1519,6 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= @@ -1540,10 +1528,8 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c h1:+aPplBwWcHBo6q9xrfWdMrT9o4kltkmmvpemgIjep/8= github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c/go.mod h1:SbErYREK7xXdsRiigaQiQkI9McGRzYMvlKYaP3Nimdk= github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= @@ -1825,7 +1811,6 @@ golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -1955,7 +1940,6 @@ golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2112,7 +2096,6 @@ golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= diff --git a/x/bandoracle/types/codec.go b/x/bandoracle/types/codec.go index acac8fdab..c189264a3 100644 --- a/x/bandoracle/types/codec.go +++ b/x/bandoracle/types/codec.go @@ -11,9 +11,7 @@ func RegisterCodec(cdc *codec.LegacyAmino) { } func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { - registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgFetchPriceData{}, - ) + registry.RegisterImplementations((*sdk.Msg)(nil)) registry.RegisterImplementations( (*govtypes.Content)(nil), @@ -23,5 +21,5 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { var ( Amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) + ModuleCdc = codec.NewAminoCodec(Amino) ) diff --git a/x/collector/types/codec.go b/x/collector/types/codec.go index 204fd2571..4317dee5d 100644 --- a/x/collector/types/codec.go +++ b/x/collector/types/codec.go @@ -20,7 +20,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { var ( amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) + ModuleCdc = codec.NewAminoCodec(amino) ) func init() { diff --git a/x/esm/types/codec.go b/x/esm/types/codec.go index ca0e4486a..b507121d2 100644 --- a/x/esm/types/codec.go +++ b/x/esm/types/codec.go @@ -33,7 +33,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { var ( Amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) + ModuleCdc = codec.NewAminoCodec(Amino) ) func init() { @@ -41,4 +41,4 @@ func init() { cryptocodec.RegisterCrypto(Amino) sdk.RegisterLegacyAminoCodec(Amino) Amino.Seal() -} \ No newline at end of file +} diff --git a/x/liquidation/types/codec.go b/x/liquidation/types/codec.go index e8238af48..5c86a5da0 100644 --- a/x/liquidation/types/codec.go +++ b/x/liquidation/types/codec.go @@ -24,7 +24,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { var ( amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) + ModuleCdc = codec.NewAminoCodec(amino) ) func init() { diff --git a/x/liquidationsV2/types/codec.go b/x/liquidationsV2/types/codec.go index 4f5de70f9..eec6211cc 100644 --- a/x/liquidationsV2/types/codec.go +++ b/x/liquidationsV2/types/codec.go @@ -33,7 +33,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { var ( amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) + ModuleCdc = codec.NewAminoCodec(amino) ) func init() { diff --git a/x/rewards/types/codec.go b/x/rewards/types/codec.go index cc84c8490..799b8e876 100644 --- a/x/rewards/types/codec.go +++ b/x/rewards/types/codec.go @@ -30,7 +30,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { var ( amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) + ModuleCdc = codec.NewAminoCodec(amino) ) func init() { diff --git a/x/tokenmint/types/codec.go b/x/tokenmint/types/codec.go index 4664fe7a7..dfa0456c4 100644 --- a/x/tokenmint/types/codec.go +++ b/x/tokenmint/types/codec.go @@ -23,7 +23,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { var ( amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) + ModuleCdc = codec.NewAminoCodec(amino) ) func init() { From fb0351a689f243073253dcf09f991276f9a4b8b3 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 21 Sep 2023 18:30:09 +0530 Subject: [PATCH 43/90] consensus module added --- app/app.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/app.go b/app/app.go index 21dec2edb..088a9e08a 100644 --- a/app/app.go +++ b/app/app.go @@ -1050,6 +1050,7 @@ func New( ibchookstypes.ModuleName, icqtypes.ModuleName, packetforwardtypes.ModuleName, + consensusparamtypes.ModuleName, ) app.mm.SetOrderEndBlockers( @@ -1092,6 +1093,7 @@ func New( ibchookstypes.ModuleName, icqtypes.ModuleName, packetforwardtypes.ModuleName, + consensusparamtypes.ModuleName, ) // NOTE: The genutils module must occur after staking so that pools are @@ -1138,6 +1140,7 @@ func New( ibchookstypes.ModuleName, icqtypes.ModuleName, packetforwardtypes.ModuleName, + consensusparamtypes.ModuleName, ) app.mm.RegisterInvariants(app.CrisisKeeper) From f4967bf37e8f7acc4414213465347401cf020fad Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 25 Sep 2023 20:16:04 +0530 Subject: [PATCH 44/90] proto type fix in pb files --- app/app.go | 2 +- go.mod | 4 ++-- go.sum | 4 ++-- x/asset/types/app.pb.go | 2 +- x/asset/types/asset.pb.go | 2 +- x/asset/types/codec.go | 2 +- x/asset/types/events.pb.go | 2 +- x/asset/types/extendedPairVault.pb.go | 2 +- x/asset/types/genesis.pb.go | 2 +- x/asset/types/gov.pb.go | 2 +- x/asset/types/pair.pb.go | 2 +- x/asset/types/params.pb.go | 2 +- x/asset/types/query.pb.go | 2 +- x/asset/types/tx.pb.go | 2 +- x/auction/types/auction.pb.go | 2 +- x/auction/types/biddings.pb.go | 2 +- x/auction/types/codec.go | 2 +- x/auction/types/genesis.pb.go | 2 +- x/auction/types/params.pb.go | 2 +- x/auction/types/query.pb.go | 2 +- x/auction/types/tx.pb.go | 2 +- x/auctionsV2/types/auction.pb.go | 2 +- x/auctionsV2/types/bid.pb.go | 2 +- x/auctionsV2/types/codec.go | 2 +- x/auctionsV2/types/genesis.pb.go | 2 +- x/auctionsV2/types/gov.pb.go | 2 +- x/auctionsV2/types/params.pb.go | 2 +- x/auctionsV2/types/query.pb.go | 2 +- x/auctionsV2/types/tx.pb.go | 2 +- x/bandoracle/types/fetch_price.pb.go | 2 +- x/bandoracle/types/genesis.pb.go | 2 +- x/bandoracle/types/gov.pb.go | 2 +- x/bandoracle/types/packet.pb.go | 2 +- x/bandoracle/types/params.pb.go | 2 +- x/bandoracle/types/query.pb.go | 2 +- x/bandoracle/types/tx.pb.go | 2 +- x/collector/types/collector.pb.go | 2 +- x/collector/types/genesis.pb.go | 2 +- x/collector/types/params.pb.go | 2 +- x/collector/types/query.pb.go | 2 +- x/collector/types/tx.pb.go | 2 +- x/esm/types/codec.go | 2 +- x/esm/types/esm.pb.go | 2 +- x/esm/types/genesis.pb.go | 2 +- x/esm/types/params.pb.go | 2 +- x/esm/types/query.pb.go | 2 +- x/esm/types/tx.pb.go | 2 +- x/lend/migrations/v2/types/lend.pb.go | 9 +++++---- x/lend/types/codec.go | 2 +- x/lend/types/genesis.pb.go | 2 +- x/lend/types/gov.pb.go | 2 +- x/lend/types/lend.pb.go | 2 +- x/lend/types/params.pb.go | 2 +- x/lend/types/query.pb.go | 2 +- x/lend/types/tx.pb.go | 2 +- x/liquidation/types/codec.go | 2 +- x/liquidation/types/genesis.pb.go | 2 +- x/liquidation/types/liquidations.pb.go | 2 +- x/liquidation/types/locked_vault.pb.go | 2 +- x/liquidation/types/params.pb.go | 2 +- x/liquidation/types/querier.pb.go | 2 +- x/liquidation/types/tx.pb.go | 2 +- x/liquidationsV2/types/codec.go | 2 +- x/liquidationsV2/types/genesis.pb.go | 2 +- x/liquidationsV2/types/gov.pb.go | 2 +- x/liquidationsV2/types/liquidate.pb.go | 2 +- x/liquidationsV2/types/params.pb.go | 2 +- x/liquidationsV2/types/query.pb.go | 2 +- x/liquidationsV2/types/tx.pb.go | 2 +- x/liquidity/legacy/v1/liquidity.pb.go | 2 +- x/liquidity/legacy/v1/params.pb.go | 2 +- x/liquidity/types/codec.go | 2 +- x/liquidity/types/genesis.pb.go | 2 +- x/liquidity/types/gov.pb.go | 2 +- x/liquidity/types/liquidity.pb.go | 2 +- x/liquidity/types/params.pb.go | 2 +- x/liquidity/types/query.pb.go | 2 +- x/liquidity/types/tx.pb.go | 2 +- x/locker/types/codec.go | 2 +- x/locker/types/events.pb.go | 2 +- x/locker/types/genesis.pb.go | 2 +- x/locker/types/locker.pb.go | 2 +- x/locker/types/params.pb.go | 2 +- x/locker/types/query.pb.go | 2 +- x/locker/types/tx.pb.go | 2 +- x/market/types/genesis.pb.go | 2 +- x/market/types/gov.pb.go | 2 +- x/market/types/market.pb.go | 2 +- x/market/types/packet.pb.go | 2 +- x/market/types/params.pb.go | 2 +- x/market/types/query.pb.go | 2 +- x/rewards/types/codec.go | 2 +- x/rewards/types/epochs.pb.go | 2 +- x/rewards/types/gauge.pb.go | 2 +- x/rewards/types/genesis.pb.go | 2 +- x/rewards/types/params.pb.go | 2 +- x/rewards/types/query.pb.go | 2 +- x/rewards/types/rewards.pb.go | 2 +- x/rewards/types/tx.pb.go | 2 +- x/tokenmint/types/codec.go | 2 +- x/tokenmint/types/genesis.pb.go | 2 +- x/tokenmint/types/mint.pb.go | 2 +- x/tokenmint/types/params.pb.go | 2 +- x/tokenmint/types/query.pb.go | 2 +- x/tokenmint/types/tx.pb.go | 2 +- x/vault/types/codec.go | 2 +- x/vault/types/events.pb.go | 2 +- x/vault/types/genesis.pb.go | 2 +- x/vault/types/query.pb.go | 2 +- x/vault/types/tx.pb.go | 2 +- x/vault/types/vault.pb.go | 2 +- 111 files changed, 117 insertions(+), 116 deletions(-) diff --git a/app/app.go b/app/app.go index 088a9e08a..8a719471a 100644 --- a/app/app.go +++ b/app/app.go @@ -1005,6 +1005,7 @@ func New( icq.NewAppModule(*app.ICQKeeper), packetforward.NewAppModule(app.PacketForwardKeeper), ) + app.mm.RegisterServices(app.configurator) // During begin block slashing happens after distr.BeginBlocker so that // there is nothing left over in the validator fee pool, so as to keep the @@ -1145,7 +1146,6 @@ func New( app.mm.RegisterInvariants(app.CrisisKeeper) app.configurator = module.NewConfigurator(app.cdc, app.MsgServiceRouter(), app.GRPCQueryRouter()) - app.mm.RegisterServices(app.configurator) app.registerUpgradeHandlers() // initialize stores app.MountKVStores(app.keys) diff --git a/go.mod b/go.mod index 209a018d1..28ce5cca8 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,8 @@ require ( github.com/bandprotocol/bandchain-packet v0.0.3 github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 - github.com/cosmos/cosmos-sdk v0.47.5 + github.com/cosmos/cosmos-sdk v0.47.4 + github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.0.0-20230726182236-3a9d46a7c2a4 github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4 github.com/gogo/protobuf v1.3.3 @@ -95,7 +96,6 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/gogoproto v1.4.10 // indirect github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect diff --git a/go.sum b/go.sum index f7d121505..fdd70a6ce 100644 --- a/go.sum +++ b/go.sum @@ -480,8 +480,8 @@ github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= github.com/cosmos/cosmos-sdk v0.43.0/go.mod h1:ctcrTEAhei9s8O3KSNvL0dxe+fVQGp07QyRb/7H9JYE= -github.com/cosmos/cosmos-sdk v0.47.5 h1:n1+WjP/VM/gAEOx3TqU2/Ny734rj/MX1kpUnn7zVJP8= -github.com/cosmos/cosmos-sdk v0.47.5/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c= +github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= +github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= diff --git a/x/asset/types/app.pb.go b/x/asset/types/app.pb.go index 401221d82..3ab8218d8 100644 --- a/x/asset/types/app.pb.go +++ b/x/asset/types/app.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/asset/types/asset.pb.go b/x/asset/types/asset.pb.go index 417f4bb3c..f92106ede 100644 --- a/x/asset/types/asset.pb.go +++ b/x/asset/types/asset.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/asset/types/codec.go b/x/asset/types/codec.go index f933f78a6..229a17992 100644 --- a/x/asset/types/codec.go +++ b/x/asset/types/codec.go @@ -54,6 +54,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) - sdk.RegisterLegacyAminoCodec(amino) + // sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/asset/types/events.pb.go b/x/asset/types/events.pb.go index f11a9bd0f..5c23689e0 100644 --- a/x/asset/types/events.pb.go +++ b/x/asset/types/events.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/asset/types/extendedPairVault.pb.go b/x/asset/types/extendedPairVault.pb.go index 042219a1d..50c8f2f81 100644 --- a/x/asset/types/extendedPairVault.pb.go +++ b/x/asset/types/extendedPairVault.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/asset/types/genesis.pb.go b/x/asset/types/genesis.pb.go index 3490746b6..def97155e 100644 --- a/x/asset/types/genesis.pb.go +++ b/x/asset/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/asset/types/gov.pb.go b/x/asset/types/gov.pb.go index bb7b38fa5..d59a20399 100644 --- a/x/asset/types/gov.pb.go +++ b/x/asset/types/gov.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/asset/types/pair.pb.go b/x/asset/types/pair.pb.go index 45c132d80..4381e467c 100644 --- a/x/asset/types/pair.pb.go +++ b/x/asset/types/pair.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/asset/types/params.pb.go b/x/asset/types/params.pb.go index 0ce4bcfd7..b2e60e971 100644 --- a/x/asset/types/params.pb.go +++ b/x/asset/types/params.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/asset/types/query.pb.go b/x/asset/types/query.pb.go index 8b263e4cd..1c9f1c2f2 100644 --- a/x/asset/types/query.pb.go +++ b/x/asset/types/query.pb.go @@ -9,7 +9,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/asset/types/tx.pb.go b/x/asset/types/tx.pb.go index 8bab4ccc3..17edd56ce 100644 --- a/x/asset/types/tx.pb.go +++ b/x/asset/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/auction/types/auction.pb.go b/x/auction/types/auction.pb.go index 87fddf3d9..02f548110 100644 --- a/x/auction/types/auction.pb.go +++ b/x/auction/types/auction.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/auction/types/biddings.pb.go b/x/auction/types/biddings.pb.go index 29bceaced..d1bf86f1a 100644 --- a/x/auction/types/biddings.pb.go +++ b/x/auction/types/biddings.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/auction/types/codec.go b/x/auction/types/codec.go index f3a3eacb6..79d67cc61 100644 --- a/x/auction/types/codec.go +++ b/x/auction/types/codec.go @@ -34,6 +34,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) - sdk.RegisterLegacyAminoCodec(amino) + // sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/auction/types/genesis.pb.go b/x/auction/types/genesis.pb.go index 99082bc32..eb2b9ced5 100644 --- a/x/auction/types/genesis.pb.go +++ b/x/auction/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/auction/types/params.pb.go b/x/auction/types/params.pb.go index e1c743254..28075dcae 100644 --- a/x/auction/types/params.pb.go +++ b/x/auction/types/params.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/auction/types/query.pb.go b/x/auction/types/query.pb.go index 4017bc744..5c6d1f092 100644 --- a/x/auction/types/query.pb.go +++ b/x/auction/types/query.pb.go @@ -9,7 +9,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/auction/types/tx.pb.go b/x/auction/types/tx.pb.go index 7a3389403..edccdb9b3 100644 --- a/x/auction/types/tx.pb.go +++ b/x/auction/types/tx.pb.go @@ -9,7 +9,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/auctionsV2/types/auction.pb.go b/x/auctionsV2/types/auction.pb.go index 66bac2864..9c7ac4418 100644 --- a/x/auctionsV2/types/auction.pb.go +++ b/x/auctionsV2/types/auction.pb.go @@ -9,7 +9,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/auctionsV2/types/bid.pb.go b/x/auctionsV2/types/bid.pb.go index 1f509b84a..4c159cedb 100644 --- a/x/auctionsV2/types/bid.pb.go +++ b/x/auctionsV2/types/bid.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/auctionsV2/types/codec.go b/x/auctionsV2/types/codec.go index 58d916b77..3b77a28f0 100644 --- a/x/auctionsV2/types/codec.go +++ b/x/auctionsV2/types/codec.go @@ -40,6 +40,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) - sdk.RegisterLegacyAminoCodec(amino) + // sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/auctionsV2/types/genesis.pb.go b/x/auctionsV2/types/genesis.pb.go index f7757d334..ef24cbc2d 100644 --- a/x/auctionsV2/types/genesis.pb.go +++ b/x/auctionsV2/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/auctionsV2/types/gov.pb.go b/x/auctionsV2/types/gov.pb.go index febe11e3e..cdabd475e 100644 --- a/x/auctionsV2/types/gov.pb.go +++ b/x/auctionsV2/types/gov.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/auctionsV2/types/params.pb.go b/x/auctionsV2/types/params.pb.go index 64e5f8ff0..3105a81e7 100644 --- a/x/auctionsV2/types/params.pb.go +++ b/x/auctionsV2/types/params.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/auctionsV2/types/query.pb.go b/x/auctionsV2/types/query.pb.go index 90249ce88..ef6e576b9 100644 --- a/x/auctionsV2/types/query.pb.go +++ b/x/auctionsV2/types/query.pb.go @@ -10,7 +10,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/auctionsV2/types/tx.pb.go b/x/auctionsV2/types/tx.pb.go index 206ec8877..090d1999d 100644 --- a/x/auctionsV2/types/tx.pb.go +++ b/x/auctionsV2/types/tx.pb.go @@ -10,7 +10,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/bandoracle/types/fetch_price.pb.go b/x/bandoracle/types/fetch_price.pb.go index f19d8c2ae..ca1280baf 100644 --- a/x/bandoracle/types/fetch_price.pb.go +++ b/x/bandoracle/types/fetch_price.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/bandoracle/types/genesis.pb.go b/x/bandoracle/types/genesis.pb.go index 12bd4bca1..9c33e2b73 100644 --- a/x/bandoracle/types/genesis.pb.go +++ b/x/bandoracle/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/bandoracle/types/gov.pb.go b/x/bandoracle/types/gov.pb.go index 1bff7d70f..f60667811 100644 --- a/x/bandoracle/types/gov.pb.go +++ b/x/bandoracle/types/gov.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/bandoracle/types/packet.pb.go b/x/bandoracle/types/packet.pb.go index 2928e14d4..ea52d293a 100644 --- a/x/bandoracle/types/packet.pb.go +++ b/x/bandoracle/types/packet.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/bandoracle/types/params.pb.go b/x/bandoracle/types/params.pb.go index ecb6af5d8..431a93744 100644 --- a/x/bandoracle/types/params.pb.go +++ b/x/bandoracle/types/params.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/bandoracle/types/query.pb.go b/x/bandoracle/types/query.pb.go index 1b3230533..d509b1cb4 100644 --- a/x/bandoracle/types/query.pb.go +++ b/x/bandoracle/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/bandoracle/types/tx.pb.go b/x/bandoracle/types/tx.pb.go index c65eeab6b..53749c32b 100644 --- a/x/bandoracle/types/tx.pb.go +++ b/x/bandoracle/types/tx.pb.go @@ -8,7 +8,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/collector/types/collector.pb.go b/x/collector/types/collector.pb.go index a9d25a2e7..054b9d76b 100644 --- a/x/collector/types/collector.pb.go +++ b/x/collector/types/collector.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/collector/types/genesis.pb.go b/x/collector/types/genesis.pb.go index 498a3fa0e..3d9eb4ecc 100644 --- a/x/collector/types/genesis.pb.go +++ b/x/collector/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/collector/types/params.pb.go b/x/collector/types/params.pb.go index af4082426..9fedfccf7 100644 --- a/x/collector/types/params.pb.go +++ b/x/collector/types/params.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/collector/types/query.pb.go b/x/collector/types/query.pb.go index cd798a5dc..186d1aed5 100644 --- a/x/collector/types/query.pb.go +++ b/x/collector/types/query.pb.go @@ -9,7 +9,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/collector/types/tx.pb.go b/x/collector/types/tx.pb.go index d18345d24..04013684d 100644 --- a/x/collector/types/tx.pb.go +++ b/x/collector/types/tx.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" math "math" ) diff --git a/x/esm/types/codec.go b/x/esm/types/codec.go index b507121d2..8940e911a 100644 --- a/x/esm/types/codec.go +++ b/x/esm/types/codec.go @@ -39,6 +39,6 @@ var ( func init() { RegisterCodec(Amino) cryptocodec.RegisterCrypto(Amino) - sdk.RegisterLegacyAminoCodec(Amino) + // sdk.RegisterLegacyAminoCodec(Amino) Amino.Seal() } diff --git a/x/esm/types/esm.pb.go b/x/esm/types/esm.pb.go index a3abc6f57..e2006b63e 100644 --- a/x/esm/types/esm.pb.go +++ b/x/esm/types/esm.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/esm/types/genesis.pb.go b/x/esm/types/genesis.pb.go index b3b0bd5b5..28d2ed59d 100644 --- a/x/esm/types/genesis.pb.go +++ b/x/esm/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/esm/types/params.pb.go b/x/esm/types/params.pb.go index eeee7469d..6a7709089 100644 --- a/x/esm/types/params.pb.go +++ b/x/esm/types/params.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/esm/types/query.pb.go b/x/esm/types/query.pb.go index f13be0e8e..764e343da 100644 --- a/x/esm/types/query.pb.go +++ b/x/esm/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/esm/types/tx.pb.go b/x/esm/types/tx.pb.go index 96f525405..7000ad627 100644 --- a/x/esm/types/tx.pb.go +++ b/x/esm/types/tx.pb.go @@ -9,7 +9,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/lend/migrations/v2/types/lend.pb.go b/x/lend/migrations/v2/types/lend.pb.go index 9a6e8e617..1b19ef9f1 100644 --- a/x/lend/migrations/v2/types/lend.pb.go +++ b/x/lend/migrations/v2/types/lend.pb.go @@ -2,14 +2,15 @@ package types import ( fmt "fmt" + io "io" + math "math" + math_bits "math/bits" + _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + proto "github.com/cosmos/gogoproto/proto" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" _ "google.golang.org/protobuf/types/known/timestamppb" - io "io" - math "math" - math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/lend/types/codec.go b/x/lend/types/codec.go index 57c2bfa0d..b70c00e9f 100644 --- a/x/lend/types/codec.go +++ b/x/lend/types/codec.go @@ -81,6 +81,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) - sdk.RegisterLegacyAminoCodec(amino) + // sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/lend/types/genesis.pb.go b/x/lend/types/genesis.pb.go index f640d5410..c8b115470 100644 --- a/x/lend/types/genesis.pb.go +++ b/x/lend/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/lend/types/gov.pb.go b/x/lend/types/gov.pb.go index 21410c846..7d41407a8 100644 --- a/x/lend/types/gov.pb.go +++ b/x/lend/types/gov.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/lend/types/lend.pb.go b/x/lend/types/lend.pb.go index d0696bc40..348fb03af 100644 --- a/x/lend/types/lend.pb.go +++ b/x/lend/types/lend.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/lend/types/params.pb.go b/x/lend/types/params.pb.go index 0372d493a..ffd30753d 100644 --- a/x/lend/types/params.pb.go +++ b/x/lend/types/params.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/lend/types/query.pb.go b/x/lend/types/query.pb.go index f0c53dcc4..300440eb6 100644 --- a/x/lend/types/query.pb.go +++ b/x/lend/types/query.pb.go @@ -11,7 +11,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/lend/types/tx.pb.go b/x/lend/types/tx.pb.go index 2dd5f4111..d151eb418 100644 --- a/x/lend/types/tx.pb.go +++ b/x/lend/types/tx.pb.go @@ -9,7 +9,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/liquidation/types/codec.go b/x/liquidation/types/codec.go index 5c86a5da0..c20d7f0ab 100644 --- a/x/liquidation/types/codec.go +++ b/x/liquidation/types/codec.go @@ -30,6 +30,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) - sdk.RegisterLegacyAminoCodec(amino) + // sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/liquidation/types/genesis.pb.go b/x/liquidation/types/genesis.pb.go index 3a3d8adb5..16cba99cc 100644 --- a/x/liquidation/types/genesis.pb.go +++ b/x/liquidation/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/liquidation/types/liquidations.pb.go b/x/liquidation/types/liquidations.pb.go index d09063c61..0e1b40c3e 100644 --- a/x/liquidation/types/liquidations.pb.go +++ b/x/liquidation/types/liquidations.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/liquidation/types/locked_vault.pb.go b/x/liquidation/types/locked_vault.pb.go index 5d36d2a92..3b3621a6a 100644 --- a/x/liquidation/types/locked_vault.pb.go +++ b/x/liquidation/types/locked_vault.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/liquidation/types/params.pb.go b/x/liquidation/types/params.pb.go index 5858b1e27..ac8a1d156 100644 --- a/x/liquidation/types/params.pb.go +++ b/x/liquidation/types/params.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/liquidation/types/querier.pb.go b/x/liquidation/types/querier.pb.go index 14578cdf1..d424aac3f 100644 --- a/x/liquidation/types/querier.pb.go +++ b/x/liquidation/types/querier.pb.go @@ -9,7 +9,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/liquidation/types/tx.pb.go b/x/liquidation/types/tx.pb.go index fd05a5443..dd23f1e80 100644 --- a/x/liquidation/types/tx.pb.go +++ b/x/liquidation/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/liquidationsV2/types/codec.go b/x/liquidationsV2/types/codec.go index eec6211cc..b9480ac39 100644 --- a/x/liquidationsV2/types/codec.go +++ b/x/liquidationsV2/types/codec.go @@ -39,6 +39,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) - sdk.RegisterLegacyAminoCodec(amino) + // sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/liquidationsV2/types/genesis.pb.go b/x/liquidationsV2/types/genesis.pb.go index 73aef3044..f96d5642c 100644 --- a/x/liquidationsV2/types/genesis.pb.go +++ b/x/liquidationsV2/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/liquidationsV2/types/gov.pb.go b/x/liquidationsV2/types/gov.pb.go index f8f83d14c..9fe28b226 100644 --- a/x/liquidationsV2/types/gov.pb.go +++ b/x/liquidationsV2/types/gov.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/liquidationsV2/types/liquidate.pb.go b/x/liquidationsV2/types/liquidate.pb.go index 44e0d390e..7e28ccd85 100644 --- a/x/liquidationsV2/types/liquidate.pb.go +++ b/x/liquidationsV2/types/liquidate.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/liquidationsV2/types/params.pb.go b/x/liquidationsV2/types/params.pb.go index 0fb2eb101..a534094ae 100644 --- a/x/liquidationsV2/types/params.pb.go +++ b/x/liquidationsV2/types/params.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/liquidationsV2/types/query.pb.go b/x/liquidationsV2/types/query.pb.go index 7873ee24e..8d4a3964a 100644 --- a/x/liquidationsV2/types/query.pb.go +++ b/x/liquidationsV2/types/query.pb.go @@ -9,7 +9,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/liquidationsV2/types/tx.pb.go b/x/liquidationsV2/types/tx.pb.go index ac7e78b61..d3bf5ff5e 100644 --- a/x/liquidationsV2/types/tx.pb.go +++ b/x/liquidationsV2/types/tx.pb.go @@ -10,7 +10,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/liquidity/legacy/v1/liquidity.pb.go b/x/liquidity/legacy/v1/liquidity.pb.go index 7118b695f..7c3d58cf7 100644 --- a/x/liquidity/legacy/v1/liquidity.pb.go +++ b/x/liquidity/legacy/v1/liquidity.pb.go @@ -8,7 +8,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/liquidity/legacy/v1/params.pb.go b/x/liquidity/legacy/v1/params.pb.go index 1d125a7b5..91165f390 100644 --- a/x/liquidity/legacy/v1/params.pb.go +++ b/x/liquidity/legacy/v1/params.pb.go @@ -8,7 +8,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/duration" io "io" diff --git a/x/liquidity/types/codec.go b/x/liquidity/types/codec.go index cb5c2cb05..accfe9c00 100644 --- a/x/liquidity/types/codec.go +++ b/x/liquidity/types/codec.go @@ -71,6 +71,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) - sdk.RegisterLegacyAminoCodec(amino) + // sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/liquidity/types/genesis.pb.go b/x/liquidity/types/genesis.pb.go index 7571b2d76..46587a93f 100644 --- a/x/liquidity/types/genesis.pb.go +++ b/x/liquidity/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/liquidity/types/gov.pb.go b/x/liquidity/types/gov.pb.go index 4a35e7789..92b5825bb 100644 --- a/x/liquidity/types/gov.pb.go +++ b/x/liquidity/types/gov.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/liquidity/types/liquidity.pb.go b/x/liquidity/types/liquidity.pb.go index fb267252b..45dd3bfad 100644 --- a/x/liquidity/types/liquidity.pb.go +++ b/x/liquidity/types/liquidity.pb.go @@ -8,7 +8,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/liquidity/types/params.pb.go b/x/liquidity/types/params.pb.go index b81de407b..430378aae 100644 --- a/x/liquidity/types/params.pb.go +++ b/x/liquidity/types/params.pb.go @@ -8,7 +8,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/duration" io "io" diff --git a/x/liquidity/types/query.pb.go b/x/liquidity/types/query.pb.go index 819f29d5c..6ae25ac05 100644 --- a/x/liquidity/types/query.pb.go +++ b/x/liquidity/types/query.pb.go @@ -11,7 +11,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/duration" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/liquidity/types/tx.pb.go b/x/liquidity/types/tx.pb.go index c31d79d1d..f439dfa93 100644 --- a/x/liquidity/types/tx.pb.go +++ b/x/liquidity/types/tx.pb.go @@ -10,7 +10,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/duration" grpc "google.golang.org/grpc" diff --git a/x/locker/types/codec.go b/x/locker/types/codec.go index cfb468922..daca08c7c 100644 --- a/x/locker/types/codec.go +++ b/x/locker/types/codec.go @@ -38,6 +38,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) - sdk.RegisterLegacyAminoCodec(amino) + // sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/locker/types/events.pb.go b/x/locker/types/events.pb.go index 46af8e43c..40abab732 100644 --- a/x/locker/types/events.pb.go +++ b/x/locker/types/events.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" math "math" ) diff --git a/x/locker/types/genesis.pb.go b/x/locker/types/genesis.pb.go index f9102635f..af35dd56a 100644 --- a/x/locker/types/genesis.pb.go +++ b/x/locker/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/locker/types/locker.pb.go b/x/locker/types/locker.pb.go index cec92c168..3cadc7ea7 100644 --- a/x/locker/types/locker.pb.go +++ b/x/locker/types/locker.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/locker/types/params.pb.go b/x/locker/types/params.pb.go index 238974230..ecaa336e2 100644 --- a/x/locker/types/params.pb.go +++ b/x/locker/types/params.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/locker/types/query.pb.go b/x/locker/types/query.pb.go index abdb531d8..03d22f810 100644 --- a/x/locker/types/query.pb.go +++ b/x/locker/types/query.pb.go @@ -10,7 +10,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/locker/types/tx.pb.go b/x/locker/types/tx.pb.go index 8e6cb2206..9a1143ffa 100644 --- a/x/locker/types/tx.pb.go +++ b/x/locker/types/tx.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/market/types/genesis.pb.go b/x/market/types/genesis.pb.go index 8d021c418..960b629ce 100644 --- a/x/market/types/genesis.pb.go +++ b/x/market/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/market/types/gov.pb.go b/x/market/types/gov.pb.go index 6f6a3d9c5..80cade318 100644 --- a/x/market/types/gov.pb.go +++ b/x/market/types/gov.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" math "math" ) diff --git a/x/market/types/market.pb.go b/x/market/types/market.pb.go index 4db082de3..f29ea2a09 100644 --- a/x/market/types/market.pb.go +++ b/x/market/types/market.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/market/types/packet.pb.go b/x/market/types/packet.pb.go index 60982042b..87bf7478a 100644 --- a/x/market/types/packet.pb.go +++ b/x/market/types/packet.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/market/types/params.pb.go b/x/market/types/params.pb.go index 484478cce..2e4bdb046 100644 --- a/x/market/types/params.pb.go +++ b/x/market/types/params.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/market/types/query.pb.go b/x/market/types/query.pb.go index 1f9305f92..6b88004d5 100644 --- a/x/market/types/query.pb.go +++ b/x/market/types/query.pb.go @@ -9,7 +9,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/rewards/types/codec.go b/x/rewards/types/codec.go index 799b8e876..9382b7138 100644 --- a/x/rewards/types/codec.go +++ b/x/rewards/types/codec.go @@ -36,6 +36,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) - sdk.RegisterLegacyAminoCodec(amino) + // sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/rewards/types/epochs.pb.go b/x/rewards/types/epochs.pb.go index cd956efdb..6a110a704 100644 --- a/x/rewards/types/epochs.pb.go +++ b/x/rewards/types/epochs.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/duration" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/rewards/types/gauge.pb.go b/x/rewards/types/gauge.pb.go index 9c03323e5..c8ced198b 100644 --- a/x/rewards/types/gauge.pb.go +++ b/x/rewards/types/gauge.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/duration" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/rewards/types/genesis.pb.go b/x/rewards/types/genesis.pb.go index 1b5ba5d23..f4b00031e 100644 --- a/x/rewards/types/genesis.pb.go +++ b/x/rewards/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/rewards/types/params.pb.go b/x/rewards/types/params.pb.go index f41aa4f63..0a3435690 100644 --- a/x/rewards/types/params.pb.go +++ b/x/rewards/types/params.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/rewards/types/query.pb.go b/x/rewards/types/query.pb.go index 7c99520bb..c65446a36 100644 --- a/x/rewards/types/query.pb.go +++ b/x/rewards/types/query.pb.go @@ -10,7 +10,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/rewards/types/rewards.pb.go b/x/rewards/types/rewards.pb.go index 049fd1cc1..6b947a0f4 100644 --- a/x/rewards/types/rewards.pb.go +++ b/x/rewards/types/rewards.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/rewards/types/tx.pb.go b/x/rewards/types/tx.pb.go index 1402580e1..602a1ffdb 100644 --- a/x/rewards/types/tx.pb.go +++ b/x/rewards/types/tx.pb.go @@ -10,7 +10,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/duration" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/tokenmint/types/codec.go b/x/tokenmint/types/codec.go index dfa0456c4..707f44761 100644 --- a/x/tokenmint/types/codec.go +++ b/x/tokenmint/types/codec.go @@ -29,6 +29,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) - sdk.RegisterLegacyAminoCodec(amino) + // sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/tokenmint/types/genesis.pb.go b/x/tokenmint/types/genesis.pb.go index 0966b8b29..4b27c557e 100644 --- a/x/tokenmint/types/genesis.pb.go +++ b/x/tokenmint/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/tokenmint/types/mint.pb.go b/x/tokenmint/types/mint.pb.go index 6becc9212..39dc1c9a5 100644 --- a/x/tokenmint/types/mint.pb.go +++ b/x/tokenmint/types/mint.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/tokenmint/types/params.pb.go b/x/tokenmint/types/params.pb.go index 4cb593af1..2d6797c60 100644 --- a/x/tokenmint/types/params.pb.go +++ b/x/tokenmint/types/params.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/tokenmint/types/query.pb.go b/x/tokenmint/types/query.pb.go index 2cd1a5cec..4dad46b2e 100644 --- a/x/tokenmint/types/query.pb.go +++ b/x/tokenmint/types/query.pb.go @@ -9,7 +9,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/tokenmint/types/tx.pb.go b/x/tokenmint/types/tx.pb.go index f03b52bb7..f09992561 100644 --- a/x/tokenmint/types/tx.pb.go +++ b/x/tokenmint/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/vault/types/codec.go b/x/vault/types/codec.go index 66308548a..73c162e50 100644 --- a/x/vault/types/codec.go +++ b/x/vault/types/codec.go @@ -50,6 +50,6 @@ var ( func init() { RegisterLegacyAminoCodec(amino) cryptocodec.RegisterCrypto(amino) - sdk.RegisterLegacyAminoCodec(amino) + // sdk.RegisterLegacyAminoCodec(amino) amino.Seal() } diff --git a/x/vault/types/events.pb.go b/x/vault/types/events.pb.go index a673d6c99..5b6c3e37a 100644 --- a/x/vault/types/events.pb.go +++ b/x/vault/types/events.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/vault/types/genesis.pb.go b/x/vault/types/genesis.pb.go index b409b5df8..fc6ea001c 100644 --- a/x/vault/types/genesis.pb.go +++ b/x/vault/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/vault/types/query.pb.go b/x/vault/types/query.pb.go index 9beee496c..52de58962 100644 --- a/x/vault/types/query.pb.go +++ b/x/vault/types/query.pb.go @@ -10,7 +10,7 @@ import ( query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/vault/types/tx.pb.go b/x/vault/types/tx.pb.go index 846478ccc..6b6aa7759 100644 --- a/x/vault/types/tx.pb.go +++ b/x/vault/types/tx.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/vault/types/vault.pb.go b/x/vault/types/vault.pb.go index b804abbd7..e92ca80ba 100644 --- a/x/vault/types/vault.pb.go +++ b/x/vault/types/vault.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" From bbc225bdc9d54bd403de736ea24eb029d6f6eb8b Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 25 Sep 2023 20:43:48 +0530 Subject: [PATCH 45/90] register services fix --- app/app.go | 2 +- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/app.go b/app/app.go index 8a719471a..088a9e08a 100644 --- a/app/app.go +++ b/app/app.go @@ -1005,7 +1005,6 @@ func New( icq.NewAppModule(*app.ICQKeeper), packetforward.NewAppModule(app.PacketForwardKeeper), ) - app.mm.RegisterServices(app.configurator) // During begin block slashing happens after distr.BeginBlocker so that // there is nothing left over in the validator fee pool, so as to keep the @@ -1146,6 +1145,7 @@ func New( app.mm.RegisterInvariants(app.CrisisKeeper) app.configurator = module.NewConfigurator(app.cdc, app.MsgServiceRouter(), app.GRPCQueryRouter()) + app.mm.RegisterServices(app.configurator) app.registerUpgradeHandlers() // initialize stores app.MountKVStores(app.keys) diff --git a/go.mod b/go.mod index 28ce5cca8..e06d672e7 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/bandprotocol/bandchain-packet v0.0.3 github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 - github.com/cosmos/cosmos-sdk v0.47.4 + github.com/cosmos/cosmos-sdk v0.47.5 github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.0.0-20230726182236-3a9d46a7c2a4 github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4 diff --git a/go.sum b/go.sum index fdd70a6ce..f7d121505 100644 --- a/go.sum +++ b/go.sum @@ -480,8 +480,8 @@ github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= github.com/cosmos/cosmos-sdk v0.43.0/go.mod h1:ctcrTEAhei9s8O3KSNvL0dxe+fVQGp07QyRb/7H9JYE= -github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= -github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= +github.com/cosmos/cosmos-sdk v0.47.5 h1:n1+WjP/VM/gAEOx3TqU2/Ny734rj/MX1kpUnn7zVJP8= +github.com/cosmos/cosmos-sdk v0.47.5/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= From e364158070233328a94328419397e0200d7f4001 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Tue, 26 Sep 2023 01:58:22 +0530 Subject: [PATCH 46/90] upgrade code added --- app/app.go | 7 +- app/upgrades/testnet/v12_1/upgrades.go | 113 +++++++++++++++++++++++-- go.mod | 2 + go.sum | 12 +-- 4 files changed, 117 insertions(+), 17 deletions(-) diff --git a/app/app.go b/app/app.go index 088a9e08a..fe2738352 100644 --- a/app/app.go +++ b/app/app.go @@ -1497,7 +1497,7 @@ func (a *App) registerUpgradeHandlers() { case upgradeInfo.Name == tv12_1.UpgradeName: a.UpgradeKeeper.SetUpgradeHandler( tv12_1.UpgradeName, - tv12_1.CreateUpgradeHandlerV121(a.mm, a.configurator, a.WasmKeeper), + tv12_1.CreateUpgradeHandlerV121(a.mm, a.configurator, a.WasmKeeper, a.ParamsKeeper, a.ConsensusParamsKeeper, *a.IbcKeeper, a.GovKeeper, *a.StakingKeeper), ) } @@ -1524,7 +1524,10 @@ func upgradeHandlers(upgradeInfo upgradetypes.Plan, a *App, storeUpgrades *store } case upgradeInfo.Name == tv12_1.UpgradeName && !a.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height): storeUpgrades = &storetypes.StoreUpgrades{ - Added: []string{}, + Added: []string{ + crisistypes.StoreKey, + consensusparamtypes.StoreKey, + }, } } return storeUpgrades diff --git a/app/upgrades/testnet/v12_1/upgrades.go b/app/upgrades/testnet/v12_1/upgrades.go index e2b8e97b6..dc303bd04 100644 --- a/app/upgrades/testnet/v12_1/upgrades.go +++ b/app/upgrades/testnet/v12_1/upgrades.go @@ -1,31 +1,130 @@ package v12_1 import ( + "fmt" + "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" + icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + // SDK v47 modules wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" + crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" + distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" + paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" + slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + exported "github.com/cosmos/ibc-go/v7/modules/core/exported" + govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" + stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" ) -// An error occurred during the creation of the CMST/STJUNO pair, as it was mistakenly created in the Harbor app (ID-2) instead of the cSwap app (ID-1). -// As a result, the transaction fee was charged to the creator of the pair, who is entitled to a refund. -// The provided code is designed to initiate the refund process. -// The transaction hash for the pair creation is EF408AD53B8BB0469C2A593E4792CB45552BD6495753CC2C810A1E4D82F3982F. -// MintScan - https://www.mintscan.io/comdex/txs/EF408AD53B8BB0469C2A593E4792CB45552BD6495753CC2C810A1E4D82F3982F - func CreateUpgradeHandlerV121( mm *module.Manager, configurator module.Configurator, wasmKeeper wasmkeeper.Keeper, + paramsKeeper paramskeeper.Keeper, + consensusParamsKeeper consensusparamkeeper.Keeper, + IBCKeeper ibckeeper.Keeper, + GovKeeper govkeeper.Keeper, + StakingKeeper stakingkeeper.Keeper, ) upgradetypes.UpgradeHandler { return func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { ctx.Logger().Info("Applying test net upgrade - v.12.1.0") + logger := ctx.Logger().With("upgrade", UpgradeName) + + // https://github.com/cosmos/cosmos-sdk/pull/12363/files + // Set param key table for params module migration + for _, subspace := range paramsKeeper.GetSubspaces() { + subspace := subspace + + var keyTable paramstypes.KeyTable + switch subspace.Name() { + case authtypes.ModuleName: + keyTable = authtypes.ParamKeyTable() //nolint:staticcheck + case banktypes.ModuleName: + keyTable = banktypes.ParamKeyTable() //nolint:staticcheck + case stakingtypes.ModuleName: + keyTable = stakingtypes.ParamKeyTable() //nolint:staticcheck + + // case minttypes.ModuleName: + // keyTable = minttypes.ParamKeyTable() //nolint:staticcheck + case distrtypes.ModuleName: + keyTable = distrtypes.ParamKeyTable() //nolint:staticcheck + case slashingtypes.ModuleName: + keyTable = slashingtypes.ParamKeyTable() //nolint:staticcheck + case govtypes.ModuleName: + keyTable = govv1.ParamKeyTable() //nolint:staticcheck + case crisistypes.ModuleName: + keyTable = crisistypes.ParamKeyTable() //nolint:staticcheck + + // ibc types + case ibctransfertypes.ModuleName: + keyTable = ibctransfertypes.ParamKeyTable() + case icahosttypes.SubModuleName: + keyTable = icahosttypes.ParamKeyTable() + case icacontrollertypes.SubModuleName: + keyTable = icacontrollertypes.ParamKeyTable() + + // wasm + case wasmtypes.ModuleName: + keyTable = wasmtypes.ParamKeyTable() //nolint:staticcheck + + // TODO: comdex modules + + } + + if !subspace.HasKeyTable() { + subspace.WithKeyTable(keyTable) + } + } + + // Migrate Tendermint consensus parameters from x/params module to a deprecated x/consensus module. + // The old params module is required to still be imported in your app.go in order to handle this migration. + ctx.Logger().Info("Migrating tendermint consensus params from x/params to x/consensus...") + legacyParamSubspace := paramsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable()) + baseapp.MigrateParams(ctx, legacyParamSubspace, &consensusParamsKeeper) + // Run migrations + logger.Info(fmt.Sprintf("pre migrate version map: %v", fromVM)) vm, err := mm.RunMigrations(ctx, configurator, fromVM) if err != nil { return nil, err } + logger.Info(fmt.Sprintf("post migrate version map: %v", vm)) + + // https://github.com/cosmos/ibc-go/blob/v7.1.0/docs/migrations/v7-to-v7_1.md + // explicitly update the IBC 02-client params, adding the localhost client type + params := IBCKeeper.ClientKeeper.GetParams(ctx) + params.AllowedClients = append(params.AllowedClients, exported.Localhost) + IBCKeeper.ClientKeeper.SetParams(ctx, params) + + //TODO: confirm the initial deposit + // update gov params to use a 20% initial deposit ratio, allowing us to remote the ante handler + govParams := GovKeeper.GetParams(ctx) + govParams.MinInitialDepositRatio = sdk.NewDec(20).Quo(sdk.NewDec(100)).String() + if err := GovKeeper.SetParams(ctx, govParams); err != nil { + return nil, err + } + + //TODO: confirm the minimum commission + // x/Staking - set minimum commission to 0.050000000000000000 + stakingParams := StakingKeeper.GetParams(ctx) + stakingParams.MinCommissionRate = sdk.NewDecWithPrec(5, 2) + err = StakingKeeper.SetParams(ctx, stakingParams) + if err != nil { + return nil, err + } // update wasm to permissionless wasmParams := wasmKeeper.GetParams(ctx) diff --git a/go.mod b/go.mod index e06d672e7..d78dea8d6 100644 --- a/go.mod +++ b/go.mod @@ -323,6 +323,8 @@ require ( ) replace ( + // use cosmos fork of keyring + github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) diff --git a/go.sum b/go.sum index f7d121505..2c10df44f 100644 --- a/go.sum +++ b/go.sum @@ -219,9 +219,6 @@ git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFN git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= 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/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= -github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= -github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= github.com/Abirdcfly/dupword v0.0.9 h1:MxprGjKq3yDBICXDgEEsyGirIXfMYXkLNT/agPsE1tk= github.com/Abirdcfly/dupword v0.0.9/go.mod h1:PzmHVLLZ27MvHSzV7eFmMXSFArWXZPZmfuuziuUrf2g= github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= @@ -505,6 +502,8 @@ github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRR github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= +github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= +github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= @@ -524,7 +523,6 @@ github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT8 github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/daixiang0/gci v0.10.1 h1:eheNA3ljF6SxnPD/vE4lCBusVHmV3Rs3dkKvFrJ7MR0= github.com/daixiang0/gci v0.10.1/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI= -github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= @@ -576,7 +574,6 @@ github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:Htrtb github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= @@ -1054,7 +1051,6 @@ github.com/junk1tm/musttag v0.4.5/go.mod h1:XkcL/9O6RmD88JBXb+I15nYRl9W4ExhgQeCB github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8= github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= @@ -1506,7 +1502,7 @@ github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3 github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -1898,7 +1894,6 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1975,6 +1970,7 @@ golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= From 51ce2b1d6eeb249574e1d00320d3cca1afc84b85 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 27 Sep 2023 00:50:30 +0530 Subject: [PATCH 47/90] migration code for testnet --- app/app.go | 10 +++--- .../testnet/{v12_1 => v13}/constants.go | 4 +-- .../testnet/{v12_1 => v13}/upgrades.go | 36 +++++++++++++++---- 3 files changed, 36 insertions(+), 14 deletions(-) rename app/upgrades/testnet/{v12_1 => v13}/constants.go (82%) rename app/upgrades/testnet/{v12_1 => v13}/upgrades.go (84%) diff --git a/app/app.go b/app/app.go index fe2738352..fa6673649 100644 --- a/app/app.go +++ b/app/app.go @@ -201,7 +201,7 @@ import ( cwasm "github.com/comdex-official/comdex/app/wasm" mv12 "github.com/comdex-official/comdex/app/upgrades/mainnet/v12" - tv12_1 "github.com/comdex-official/comdex/app/upgrades/testnet/v12_1" + tv13 "github.com/comdex-official/comdex/app/upgrades/testnet/v13" ) const ( @@ -1494,10 +1494,10 @@ func (a *App) registerUpgradeHandlers() { mv12.UpgradeName, mv12.CreateUpgradeHandlerV12(a.mm, a.configurator, a.ICQKeeper, a.NewliqKeeper, a.NewaucKeeper, a.BankKeeper, a.CollectorKeeper, a.LendKeeper, a.AuctionKeeper, a.LiquidationKeeper, a.AssetKeeper), ) - case upgradeInfo.Name == tv12_1.UpgradeName: + case upgradeInfo.Name == tv13.UpgradeName: a.UpgradeKeeper.SetUpgradeHandler( - tv12_1.UpgradeName, - tv12_1.CreateUpgradeHandlerV121(a.mm, a.configurator, a.WasmKeeper, a.ParamsKeeper, a.ConsensusParamsKeeper, *a.IbcKeeper, a.GovKeeper, *a.StakingKeeper), + tv13.UpgradeName, + tv13.CreateUpgradeHandlerV13(a.mm, a.configurator, a.WasmKeeper, a.ParamsKeeper, a.ConsensusParamsKeeper, *a.IbcKeeper, a.GovKeeper, *a.StakingKeeper, a.MintKeeper, a.SlashingKeeper), ) } @@ -1522,7 +1522,7 @@ func upgradeHandlers(upgradeInfo upgradetypes.Plan, a *App, storeUpgrades *store auctionsV2types.ModuleName, }, } - case upgradeInfo.Name == tv12_1.UpgradeName && !a.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height): + case upgradeInfo.Name == tv13.UpgradeName && !a.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height): storeUpgrades = &storetypes.StoreUpgrades{ Added: []string{ crisistypes.StoreKey, diff --git a/app/upgrades/testnet/v12_1/constants.go b/app/upgrades/testnet/v13/constants.go similarity index 82% rename from app/upgrades/testnet/v12_1/constants.go rename to app/upgrades/testnet/v13/constants.go index 681585830..58c139077 100644 --- a/app/upgrades/testnet/v12_1/constants.go +++ b/app/upgrades/testnet/v13/constants.go @@ -1,7 +1,7 @@ -package v12_1 +package v13 const ( - UpgradeName = "v12.1.0" + UpgradeName = "v13.0.0" UpgradeHeight = "" UpgradeInfo = `'{ "binaries": { diff --git a/app/upgrades/testnet/v12_1/upgrades.go b/app/upgrades/testnet/v13/upgrades.go similarity index 84% rename from app/upgrades/testnet/v12_1/upgrades.go rename to app/upgrades/testnet/v13/upgrades.go index dc303bd04..6158df289 100644 --- a/app/upgrades/testnet/v12_1/upgrades.go +++ b/app/upgrades/testnet/v13/upgrades.go @@ -1,4 +1,4 @@ -package v12_1 +package v13 import ( "fmt" @@ -17,19 +17,21 @@ import ( consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" + slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" + stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" exported "github.com/cosmos/ibc-go/v7/modules/core/exported" - govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" - stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" ) -func CreateUpgradeHandlerV121( +func CreateUpgradeHandlerV13( mm *module.Manager, configurator module.Configurator, wasmKeeper wasmkeeper.Keeper, @@ -38,9 +40,11 @@ func CreateUpgradeHandlerV121( IBCKeeper ibckeeper.Keeper, GovKeeper govkeeper.Keeper, StakingKeeper stakingkeeper.Keeper, + MintKeeper mintkeeper.Keeper, + SlashingKeeper slashingkeeper.Keeper, ) upgradetypes.UpgradeHandler { return func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - ctx.Logger().Info("Applying test net upgrade - v.12.1.0") + ctx.Logger().Info("Applying test net upgrade - v.13.0.0") logger := ctx.Logger().With("upgrade", UpgradeName) // https://github.com/cosmos/cosmos-sdk/pull/12363/files @@ -80,8 +84,8 @@ func CreateUpgradeHandlerV121( case wasmtypes.ModuleName: keyTable = wasmtypes.ParamKeyTable() //nolint:staticcheck - // TODO: comdex modules - + // TODO: comdex modules + } if !subspace.HasKeyTable() { @@ -126,6 +130,24 @@ func CreateUpgradeHandlerV121( return nil, err } + // x/Mint + // Double blocks per year (from 6 seconds to 3 = 2x blocks per year) + mintParams := MintKeeper.GetParams(ctx) + mintParams.BlocksPerYear *= 2 + if err = MintKeeper.SetParams(ctx, mintParams); err != nil { + return nil, err + } + logger.Info(fmt.Sprintf("updated minted blocks per year logic to %v", mintParams)) + + // x/Slashing + // Double slashing window due to double blocks per year + slashingParams := SlashingKeeper.GetParams(ctx) + slashingParams.SignedBlocksWindow *= 2 + if err := SlashingKeeper.SetParams(ctx, slashingParams); err != nil { + return nil, err + } + logger.Info(fmt.Sprintf("updated slashing params to %v", slashingParams)) + // update wasm to permissionless wasmParams := wasmKeeper.GetParams(ctx) wasmParams.CodeUploadAccess = wasmtypes.AllowEverybody From e98662250d198ed3a9cae0c35fbeac6d0078b61e Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 27 Sep 2023 01:19:43 +0530 Subject: [PATCH 48/90] cosmos proto added --- x/asset/keeper/app.go | 2 +- x/asset/keeper/asset.go | 2 +- x/asset/keeper/pair.go | 2 +- x/asset/keeper/pairs_vault.go | 2 +- x/asset/types/extendedPairVault.pb.go | 2 +- x/asset/types/query.pb.go | 2 +- x/asset/types/tx.pb.go | 2 +- x/auction/keeper/store.go | 2 +- x/auction/types/auction.pb.go | 2 +- x/auction/types/biddings.pb.go | 2 +- x/auction/types/query.pb.go | 2 +- x/auction/types/tx.pb.go | 2 +- x/auctionsV2/keeper/bid.go | 2 +- x/auctionsV2/keeper/utils.go | 2 +- x/auctionsV2/types/auction.pb.go | 2 +- x/auctionsV2/types/bid.pb.go | 2 +- x/auctionsV2/types/query.pb.go | 2 +- x/auctionsV2/types/tx.pb.go | 2 +- x/bandoracle/keeper/oracle.go | 13 +++++++------ x/bandoracle/types/query.pb.go | 2 +- x/collector/types/collector.pb.go | 2 +- x/collector/types/query.pb.go | 2 +- x/collector/types/tx.pb.go | 2 +- x/esm/keeper/esm.go | 2 +- x/esm/types/esm.pb.go | 2 +- x/esm/types/query.pb.go | 2 +- x/esm/types/tx.pb.go | 2 +- x/lend/keeper/borrow.go | 2 +- x/lend/keeper/lend.go | 2 +- x/lend/keeper/pair.go | 2 +- x/lend/types/lend.pb.go | 2 +- x/lend/types/query.pb.go | 2 +- x/lend/types/tx.pb.go | 2 +- x/liquidation/keeper/liquidate_vaults.go | 2 +- x/liquidation/types/locked_vault.pb.go | 2 +- x/liquidation/types/querier.pb.go | 2 +- x/liquidation/types/tx.pb.go | 2 +- x/liquidationsV2/keeper/liquidations.go | 2 +- x/liquidationsV2/types/liquidate.pb.go | 2 +- x/liquidationsV2/types/query.pb.go | 2 +- x/liquidationsV2/types/tx.pb.go | 2 +- x/liquidity/keeper/store.go | 2 +- x/liquidity/legacy/v1/liquidity.pb.go | 2 +- x/liquidity/legacy/v1/params.pb.go | 2 +- x/liquidity/types/liquidity.pb.go | 2 +- x/liquidity/types/params.pb.go | 2 +- x/liquidity/types/query.pb.go | 4 ++-- x/liquidity/types/tx.pb.go | 4 ++-- x/locker/keeper/locker.go | 2 +- x/locker/types/locker.pb.go | 2 +- x/locker/types/query.pb.go | 2 +- x/locker/types/tx.pb.go | 2 +- x/market/types/query.pb.go | 2 +- x/rewards/keeper/rewards.go | 2 +- x/rewards/keeper/store.go | 2 +- x/rewards/types/epochs.pb.go | 2 +- x/rewards/types/gauge.pb.go | 2 +- x/rewards/types/query.pb.go | 2 +- x/rewards/types/rewards.pb.go | 2 +- x/rewards/types/tx.pb.go | 4 ++-- x/tokenmint/types/mint.pb.go | 2 +- x/tokenmint/types/query.pb.go | 2 +- x/tokenmint/types/tx.pb.go | 2 +- x/vault/keeper/vault.go | 2 +- x/vault/types/query.pb.go | 2 +- x/vault/types/tx.pb.go | 2 +- x/vault/types/vault.pb.go | 2 +- 67 files changed, 76 insertions(+), 75 deletions(-) diff --git a/x/asset/keeper/app.go b/x/asset/keeper/app.go index ffb509e79..d482b7f85 100644 --- a/x/asset/keeper/app.go +++ b/x/asset/keeper/app.go @@ -5,7 +5,7 @@ import ( "strings" sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" "github.com/comdex-official/comdex/x/asset/types" ) diff --git a/x/asset/keeper/asset.go b/x/asset/keeper/asset.go index d87819f62..befc6ffcb 100644 --- a/x/asset/keeper/asset.go +++ b/x/asset/keeper/asset.go @@ -4,7 +4,7 @@ import ( "regexp" sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" "github.com/comdex-official/comdex/x/asset/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" diff --git a/x/asset/keeper/pair.go b/x/asset/keeper/pair.go index 5f6ea843d..e94d592ce 100644 --- a/x/asset/keeper/pair.go +++ b/x/asset/keeper/pair.go @@ -2,7 +2,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" "github.com/comdex-official/comdex/x/asset/types" ) diff --git a/x/asset/keeper/pairs_vault.go b/x/asset/keeper/pairs_vault.go index 24dc19c7a..a46730717 100644 --- a/x/asset/keeper/pairs_vault.go +++ b/x/asset/keeper/pairs_vault.go @@ -4,7 +4,7 @@ import ( "regexp" sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" "github.com/comdex-official/comdex/app/wasm/bindings" rewardstypes "github.com/comdex-official/comdex/x/rewards/types" diff --git a/x/asset/types/extendedPairVault.pb.go b/x/asset/types/extendedPairVault.pb.go index 50c8f2f81..84804d907 100644 --- a/x/asset/types/extendedPairVault.pb.go +++ b/x/asset/types/extendedPairVault.pb.go @@ -8,7 +8,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/asset/types/query.pb.go b/x/asset/types/query.pb.go index 1c9f1c2f2..b8b43f939 100644 --- a/x/asset/types/query.pb.go +++ b/x/asset/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/asset/types/tx.pb.go b/x/asset/types/tx.pb.go index 17edd56ce..a9bf7b65a 100644 --- a/x/asset/types/tx.pb.go +++ b/x/asset/types/tx.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/auction/keeper/store.go b/x/auction/keeper/store.go index c688a2562..624315159 100644 --- a/x/auction/keeper/store.go +++ b/x/auction/keeper/store.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" auctiontypes "github.com/comdex-official/comdex/x/auction/types" ) diff --git a/x/auction/types/auction.pb.go b/x/auction/types/auction.pb.go index 02f548110..71659e4f8 100644 --- a/x/auction/types/auction.pb.go +++ b/x/auction/types/auction.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/auction/types/biddings.pb.go b/x/auction/types/biddings.pb.go index d1bf86f1a..8bb91fd4d 100644 --- a/x/auction/types/biddings.pb.go +++ b/x/auction/types/biddings.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/auction/types/query.pb.go b/x/auction/types/query.pb.go index 5c6d1f092..9ceed74fd 100644 --- a/x/auction/types/query.pb.go +++ b/x/auction/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/auction/types/tx.pb.go b/x/auction/types/tx.pb.go index edccdb9b3..d183b0617 100644 --- a/x/auction/types/tx.pb.go +++ b/x/auction/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/auctionsV2/keeper/bid.go b/x/auctionsV2/keeper/bid.go index 1fdcecd58..ac1fc3139 100644 --- a/x/auctionsV2/keeper/bid.go +++ b/x/auctionsV2/keeper/bid.go @@ -8,7 +8,7 @@ import ( collectortypes "github.com/comdex-official/comdex/x/collector/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" ) func (k Keeper) PlaceDutchAuctionBid(ctx sdk.Context, auctionID uint64, bidder string, bid sdk.Coin, auctionData types.Auction, isAutoBid bool) (bidId uint64, err error) { diff --git a/x/auctionsV2/keeper/utils.go b/x/auctionsV2/keeper/utils.go index f01b5e630..a4f3bca69 100644 --- a/x/auctionsV2/keeper/utils.go +++ b/x/auctionsV2/keeper/utils.go @@ -4,7 +4,7 @@ import ( "github.com/comdex-official/comdex/x/auctionsV2/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" ) func (k Keeper) SetAuctionID(ctx sdk.Context, id uint64) { diff --git a/x/auctionsV2/types/auction.pb.go b/x/auctionsV2/types/auction.pb.go index 9c7ac4418..1cf8802b6 100644 --- a/x/auctionsV2/types/auction.pb.go +++ b/x/auctionsV2/types/auction.pb.go @@ -10,7 +10,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/auctionsV2/types/bid.pb.go b/x/auctionsV2/types/bid.pb.go index 4c159cedb..aa176730d 100644 --- a/x/auctionsV2/types/bid.pb.go +++ b/x/auctionsV2/types/bid.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/auctionsV2/types/query.pb.go b/x/auctionsV2/types/query.pb.go index ef6e576b9..0af8127ef 100644 --- a/x/auctionsV2/types/query.pb.go +++ b/x/auctionsV2/types/query.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/auctionsV2/types/tx.pb.go b/x/auctionsV2/types/tx.pb.go index 090d1999d..bd8e4527b 100644 --- a/x/auctionsV2/types/tx.pb.go +++ b/x/auctionsV2/types/tx.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/bandoracle/keeper/oracle.go b/x/bandoracle/keeper/oracle.go index 95192bc72..a04e3b666 100644 --- a/x/bandoracle/keeper/oracle.go +++ b/x/bandoracle/keeper/oracle.go @@ -8,9 +8,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + // channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + protobuftypes "github.com/cosmos/gogoproto/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - protobuftypes "github.com/gogo/protobuf/types" "github.com/comdex-official/comdex/x/bandoracle/types" ) @@ -98,11 +99,11 @@ func (k Keeper) FetchPrice(ctx sdk.Context, msg types.MsgFetchPriceData) (*types // clienttypes.NewHeight(0, 0), // uint64(ctx.BlockTime().UnixNano()+int64(10*time.Minute)), // Arbitrary timestamp timeout for now // )) - _, err := k.channelKeeper.SendPacket(ctx, - channelCap, - sourcePort, - msg.SourceChannel, - clienttypes.NewHeight(0, 0), + _, err := k.channelKeeper.SendPacket(ctx, + channelCap, + sourcePort, + msg.SourceChannel, + clienttypes.NewHeight(0, 0), uint64(ctx.BlockTime().UnixNano()+int64(10*time.Minute)), // Arbitrary timestamp timeout for now packetData.GetBytes(), ) diff --git a/x/bandoracle/types/query.pb.go b/x/bandoracle/types/query.pb.go index d509b1cb4..b14bcb873 100644 --- a/x/bandoracle/types/query.pb.go +++ b/x/bandoracle/types/query.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/collector/types/collector.pb.go b/x/collector/types/collector.pb.go index 054b9d76b..beba323cd 100644 --- a/x/collector/types/collector.pb.go +++ b/x/collector/types/collector.pb.go @@ -8,7 +8,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/collector/types/query.pb.go b/x/collector/types/query.pb.go index 186d1aed5..462c656f6 100644 --- a/x/collector/types/query.pb.go +++ b/x/collector/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/collector/types/tx.pb.go b/x/collector/types/tx.pb.go index 04013684d..a245f6e62 100644 --- a/x/collector/types/tx.pb.go +++ b/x/collector/types/tx.pb.go @@ -6,7 +6,7 @@ package types import ( context "context" fmt "fmt" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" math "math" diff --git a/x/esm/keeper/esm.go b/x/esm/keeper/esm.go index 44859e746..099fe250d 100644 --- a/x/esm/keeper/esm.go +++ b/x/esm/keeper/esm.go @@ -2,7 +2,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" "github.com/comdex-official/comdex/app/wasm/bindings" assettypes "github.com/comdex-official/comdex/x/asset/types" diff --git a/x/esm/types/esm.pb.go b/x/esm/types/esm.pb.go index e2006b63e..bf8067b20 100644 --- a/x/esm/types/esm.pb.go +++ b/x/esm/types/esm.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/esm/types/query.pb.go b/x/esm/types/query.pb.go index 764e343da..a3d38b340 100644 --- a/x/esm/types/query.pb.go +++ b/x/esm/types/query.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/esm/types/tx.pb.go b/x/esm/types/tx.pb.go index 7000ad627..1f15f9d45 100644 --- a/x/esm/types/tx.pb.go +++ b/x/esm/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/lend/keeper/borrow.go b/x/lend/keeper/borrow.go index 14288e855..c9b6ab97e 100644 --- a/x/lend/keeper/borrow.go +++ b/x/lend/keeper/borrow.go @@ -2,7 +2,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" "github.com/comdex-official/comdex/x/lend/types" ) diff --git a/x/lend/keeper/lend.go b/x/lend/keeper/lend.go index 3fe59ab8d..f8af87eb7 100644 --- a/x/lend/keeper/lend.go +++ b/x/lend/keeper/lend.go @@ -4,7 +4,7 @@ import ( "sort" sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" "github.com/comdex-official/comdex/x/lend/types" ) diff --git a/x/lend/keeper/pair.go b/x/lend/keeper/pair.go index 0849d27ad..b5dedbdde 100644 --- a/x/lend/keeper/pair.go +++ b/x/lend/keeper/pair.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" "github.com/comdex-official/comdex/x/lend/types" ) diff --git a/x/lend/types/lend.pb.go b/x/lend/types/lend.pb.go index 348fb03af..d88f59e6f 100644 --- a/x/lend/types/lend.pb.go +++ b/x/lend/types/lend.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/lend/types/query.pb.go b/x/lend/types/query.pb.go index 300440eb6..0ce682da1 100644 --- a/x/lend/types/query.pb.go +++ b/x/lend/types/query.pb.go @@ -10,7 +10,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/lend/types/tx.pb.go b/x/lend/types/tx.pb.go index d151eb418..fc783cc99 100644 --- a/x/lend/types/tx.pb.go +++ b/x/lend/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/liquidation/keeper/liquidate_vaults.go b/x/liquidation/keeper/liquidate_vaults.go index 1a128c7b1..0469dbcee 100644 --- a/x/liquidation/keeper/liquidate_vaults.go +++ b/x/liquidation/keeper/liquidate_vaults.go @@ -4,7 +4,7 @@ import ( "fmt" sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" utils "github.com/comdex-official/comdex/types" "github.com/comdex-official/comdex/x/liquidation/types" diff --git a/x/liquidation/types/locked_vault.pb.go b/x/liquidation/types/locked_vault.pb.go index 3b3621a6a..76332666e 100644 --- a/x/liquidation/types/locked_vault.pb.go +++ b/x/liquidation/types/locked_vault.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/liquidation/types/querier.pb.go b/x/liquidation/types/querier.pb.go index d424aac3f..aa5de2df3 100644 --- a/x/liquidation/types/querier.pb.go +++ b/x/liquidation/types/querier.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/liquidation/types/tx.pb.go b/x/liquidation/types/tx.pb.go index dd23f1e80..e08178733 100644 --- a/x/liquidation/types/tx.pb.go +++ b/x/liquidation/types/tx.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/liquidationsV2/keeper/liquidations.go b/x/liquidationsV2/keeper/liquidations.go index 2af4e76d7..bba2dd07e 100644 --- a/x/liquidationsV2/keeper/liquidations.go +++ b/x/liquidationsV2/keeper/liquidations.go @@ -3,7 +3,7 @@ package keeper import ( "github.com/comdex-official/comdex/x/liquidationsV2/types" sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" ) // locked vaults kvs diff --git a/x/liquidationsV2/types/liquidate.pb.go b/x/liquidationsV2/types/liquidate.pb.go index 7e28ccd85..9f257ec32 100644 --- a/x/liquidationsV2/types/liquidate.pb.go +++ b/x/liquidationsV2/types/liquidate.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/liquidationsV2/types/query.pb.go b/x/liquidationsV2/types/query.pb.go index 8d4a3964a..0a866992b 100644 --- a/x/liquidationsV2/types/query.pb.go +++ b/x/liquidationsV2/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/liquidationsV2/types/tx.pb.go b/x/liquidationsV2/types/tx.pb.go index d3bf5ff5e..52df0f6f9 100644 --- a/x/liquidationsV2/types/tx.pb.go +++ b/x/liquidationsV2/types/tx.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/liquidity/keeper/store.go b/x/liquidity/keeper/store.go index cae6f3dba..bff881a8f 100644 --- a/x/liquidity/keeper/store.go +++ b/x/liquidity/keeper/store.go @@ -1,7 +1,7 @@ package keeper import ( - gogotypes "github.com/gogo/protobuf/types" + gogotypes "github.com/cosmos/gogoproto/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/liquidity/legacy/v1/liquidity.pb.go b/x/liquidity/legacy/v1/liquidity.pb.go index 7c3d58cf7..047ff332e 100644 --- a/x/liquidity/legacy/v1/liquidity.pb.go +++ b/x/liquidity/legacy/v1/liquidity.pb.go @@ -9,7 +9,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/liquidity/legacy/v1/params.pb.go b/x/liquidity/legacy/v1/params.pb.go index 91165f390..e412d3094 100644 --- a/x/liquidity/legacy/v1/params.pb.go +++ b/x/liquidity/legacy/v1/params.pb.go @@ -9,7 +9,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/duration" io "io" math "math" diff --git a/x/liquidity/types/liquidity.pb.go b/x/liquidity/types/liquidity.pb.go index 45dd3bfad..94af5bd6c 100644 --- a/x/liquidity/types/liquidity.pb.go +++ b/x/liquidity/types/liquidity.pb.go @@ -9,7 +9,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/liquidity/types/params.pb.go b/x/liquidity/types/params.pb.go index 430378aae..bad0b05ef 100644 --- a/x/liquidity/types/params.pb.go +++ b/x/liquidity/types/params.pb.go @@ -9,7 +9,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/duration" io "io" math "math" diff --git a/x/liquidity/types/query.pb.go b/x/liquidity/types/query.pb.go index 6ae25ac05..faef1f1b1 100644 --- a/x/liquidity/types/query.pb.go +++ b/x/liquidity/types/query.pb.go @@ -10,9 +10,9 @@ import ( types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/duration" _ "github.com/golang/protobuf/ptypes/timestamp" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/liquidity/types/tx.pb.go b/x/liquidity/types/tx.pb.go index f439dfa93..4e64d6b98 100644 --- a/x/liquidity/types/tx.pb.go +++ b/x/liquidity/types/tx.pb.go @@ -9,9 +9,9 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/duration" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/locker/keeper/locker.go b/x/locker/keeper/locker.go index deef83381..2fea6e84f 100644 --- a/x/locker/keeper/locker.go +++ b/x/locker/keeper/locker.go @@ -2,7 +2,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" esmtypes "github.com/comdex-official/comdex/x/esm/types" diff --git a/x/locker/types/locker.pb.go b/x/locker/types/locker.pb.go index 3cadc7ea7..b978d6190 100644 --- a/x/locker/types/locker.pb.go +++ b/x/locker/types/locker.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/locker/types/query.pb.go b/x/locker/types/query.pb.go index 03d22f810..41f7a22f0 100644 --- a/x/locker/types/query.pb.go +++ b/x/locker/types/query.pb.go @@ -9,7 +9,7 @@ import ( types "github.com/comdex-official/comdex/x/asset/types" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/locker/types/tx.pb.go b/x/locker/types/tx.pb.go index 9a1143ffa..10567eb2c 100644 --- a/x/locker/types/tx.pb.go +++ b/x/locker/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/market/types/query.pb.go b/x/market/types/query.pb.go index 6b88004d5..0ccd2da47 100644 --- a/x/market/types/query.pb.go +++ b/x/market/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/rewards/keeper/rewards.go b/x/rewards/keeper/rewards.go index 1a88eccdd..d1f38b341 100644 --- a/x/rewards/keeper/rewards.go +++ b/x/rewards/keeper/rewards.go @@ -2,7 +2,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" assettypes "github.com/comdex-official/comdex/x/asset/types" collectortypes "github.com/comdex-official/comdex/x/collector/types" diff --git a/x/rewards/keeper/store.go b/x/rewards/keeper/store.go index 80daab2f6..2872e23b1 100644 --- a/x/rewards/keeper/store.go +++ b/x/rewards/keeper/store.go @@ -4,7 +4,7 @@ import ( "time" sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" "github.com/comdex-official/comdex/x/rewards/types" ) diff --git a/x/rewards/types/epochs.pb.go b/x/rewards/types/epochs.pb.go index 6a110a704..6837ef9ff 100644 --- a/x/rewards/types/epochs.pb.go +++ b/x/rewards/types/epochs.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/duration" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/rewards/types/gauge.pb.go b/x/rewards/types/gauge.pb.go index c8ced198b..30f730d16 100644 --- a/x/rewards/types/gauge.pb.go +++ b/x/rewards/types/gauge.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/duration" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" diff --git a/x/rewards/types/query.pb.go b/x/rewards/types/query.pb.go index c65446a36..3bb05184f 100644 --- a/x/rewards/types/query.pb.go +++ b/x/rewards/types/query.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/rewards/types/rewards.pb.go b/x/rewards/types/rewards.pb.go index 6b947a0f4..9329ae8e0 100644 --- a/x/rewards/types/rewards.pb.go +++ b/x/rewards/types/rewards.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/rewards/types/tx.pb.go b/x/rewards/types/tx.pb.go index 602a1ffdb..e83a19154 100644 --- a/x/rewards/types/tx.pb.go +++ b/x/rewards/types/tx.pb.go @@ -9,9 +9,9 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/duration" _ "github.com/golang/protobuf/ptypes/timestamp" grpc "google.golang.org/grpc" diff --git a/x/tokenmint/types/mint.pb.go b/x/tokenmint/types/mint.pb.go index 39dc1c9a5..118eb4646 100644 --- a/x/tokenmint/types/mint.pb.go +++ b/x/tokenmint/types/mint.pb.go @@ -8,7 +8,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" diff --git a/x/tokenmint/types/query.pb.go b/x/tokenmint/types/query.pb.go index 4dad46b2e..a20d1dae5 100644 --- a/x/tokenmint/types/query.pb.go +++ b/x/tokenmint/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/tokenmint/types/tx.pb.go b/x/tokenmint/types/tx.pb.go index f09992561..6ea3caee0 100644 --- a/x/tokenmint/types/tx.pb.go +++ b/x/tokenmint/types/tx.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/vault/keeper/vault.go b/x/vault/keeper/vault.go index 3cbd5611d..002cf130b 100644 --- a/x/vault/keeper/vault.go +++ b/x/vault/keeper/vault.go @@ -5,7 +5,7 @@ import ( assettypes "github.com/comdex-official/comdex/x/asset/types" sdk "github.com/cosmos/cosmos-sdk/types" - protobuftypes "github.com/gogo/protobuf/types" + protobuftypes "github.com/cosmos/gogoproto/types" tokenminttypes "github.com/comdex-official/comdex/x/tokenmint/types" "github.com/comdex-official/comdex/x/vault/types" diff --git a/x/vault/types/query.pb.go b/x/vault/types/query.pb.go index 52de58962..965fac1fc 100644 --- a/x/vault/types/query.pb.go +++ b/x/vault/types/query.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" diff --git a/x/vault/types/tx.pb.go b/x/vault/types/tx.pb.go index 6b6aa7759..64ff3b2a3 100644 --- a/x/vault/types/tx.pb.go +++ b/x/vault/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" + grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/vault/types/vault.pb.go b/x/vault/types/vault.pb.go index e92ca80ba..2ac13488c 100644 --- a/x/vault/types/vault.pb.go +++ b/x/vault/types/vault.pb.go @@ -8,7 +8,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" io "io" math "math" From 471f35922e5f835ac2b47944227ed975c0cb6f95 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 27 Sep 2023 01:34:12 +0530 Subject: [PATCH 49/90] cosmos proto added --- go.mod | 2 +- x/asset/types/app.pb.go | 2 +- x/asset/types/asset.pb.go | 2 +- x/asset/types/extendedPairVault.pb.go | 2 +- x/asset/types/genesis.pb.go | 2 +- x/asset/types/gov.pb.go | 2 +- x/asset/types/pair.pb.go | 2 +- x/asset/types/params.pb.go | 2 +- x/asset/types/query.pb.go | 2 +- x/asset/types/tx.pb.go | 2 +- x/auction/types/auction.pb.go | 2 +- x/auction/types/biddings.pb.go | 2 +- x/auction/types/genesis.pb.go | 2 +- x/auction/types/query.pb.go | 2 +- x/auction/types/tx.pb.go | 2 +- x/auctionsV2/types/auction.pb.go | 2 +- x/auctionsV2/types/bid.pb.go | 2 +- x/auctionsV2/types/genesis.pb.go | 2 +- x/auctionsV2/types/gov.pb.go | 2 +- x/auctionsV2/types/params.pb.go | 2 +- x/auctionsV2/types/query.pb.go | 2 +- x/auctionsV2/types/tx.pb.go | 2 +- x/bandoracle/types/fetch_price.pb.go | 2 +- x/bandoracle/types/genesis.pb.go | 2 +- x/bandoracle/types/gov.pb.go | 2 +- x/bandoracle/types/query.pb.go | 2 +- x/bandoracle/types/tx.pb.go | 2 +- x/collector/types/collector.pb.go | 2 +- x/collector/types/genesis.pb.go | 2 +- x/collector/types/params.pb.go | 2 +- x/collector/types/query.pb.go | 2 +- x/esm/types/esm.pb.go | 2 +- x/esm/types/genesis.pb.go | 2 +- x/esm/types/params.pb.go | 2 +- x/esm/types/query.pb.go | 2 +- x/esm/types/tx.pb.go | 2 +- x/lend/migrations/v2/types/lend.pb.go | 2 +- x/lend/types/genesis.pb.go | 2 +- x/lend/types/gov.pb.go | 2 +- x/lend/types/lend.pb.go | 2 +- x/lend/types/params.pb.go | 2 +- x/lend/types/query.pb.go | 2 +- x/lend/types/tx.pb.go | 2 +- x/liquidation/types/genesis.pb.go | 2 +- x/liquidation/types/liquidations.pb.go | 2 +- x/liquidation/types/locked_vault.pb.go | 2 +- x/liquidation/types/querier.pb.go | 2 +- x/liquidation/types/tx.pb.go | 2 +- x/liquidationsV2/types/genesis.pb.go | 2 +- x/liquidationsV2/types/gov.pb.go | 2 +- x/liquidationsV2/types/liquidate.pb.go | 2 +- x/liquidationsV2/types/query.pb.go | 2 +- x/liquidationsV2/types/tx.pb.go | 2 +- x/liquidity/legacy/v1/liquidity.pb.go | 2 +- x/liquidity/legacy/v1/params.pb.go | 2 +- x/liquidity/types/genesis.pb.go | 2 +- x/liquidity/types/gov.pb.go | 2 +- x/liquidity/types/liquidity.pb.go | 2 +- x/liquidity/types/params.pb.go | 2 +- x/liquidity/types/query.pb.go | 2 +- x/liquidity/types/tx.pb.go | 2 +- x/locker/types/genesis.pb.go | 2 +- x/locker/types/locker.pb.go | 2 +- x/locker/types/query.pb.go | 2 +- x/locker/types/tx.pb.go | 2 +- x/market/types/genesis.pb.go | 2 +- x/market/types/gov.pb.go | 2 +- x/market/types/market.pb.go | 2 +- x/market/types/params.pb.go | 2 +- x/market/types/query.pb.go | 2 +- x/rewards/types/epochs.pb.go | 2 +- x/rewards/types/gauge.pb.go | 2 +- x/rewards/types/genesis.pb.go | 2 +- x/rewards/types/query.pb.go | 2 +- x/rewards/types/rewards.pb.go | 2 +- x/rewards/types/tx.pb.go | 2 +- x/tokenmint/types/genesis.pb.go | 2 +- x/tokenmint/types/mint.pb.go | 2 +- x/tokenmint/types/params.pb.go | 2 +- x/tokenmint/types/query.pb.go | 2 +- x/tokenmint/types/tx.pb.go | 2 +- x/vault/types/events.pb.go | 2 +- x/vault/types/genesis.pb.go | 2 +- x/vault/types/query.pb.go | 2 +- x/vault/types/tx.pb.go | 2 +- x/vault/types/vault.pb.go | 2 +- 86 files changed, 86 insertions(+), 86 deletions(-) diff --git a/go.mod b/go.mod index d78dea8d6..d4b342f56 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,6 @@ require ( github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.0.0-20230726182236-3a9d46a7c2a4 github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4 - github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.3 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 @@ -139,6 +138,7 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/googleapis v1.4.1 // indirect + github.com/gogo/protobuf v1.3.3 // indirect github.com/golang/glog v1.1.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect diff --git a/x/asset/types/app.pb.go b/x/asset/types/app.pb.go index 3ab8218d8..721e616b4 100644 --- a/x/asset/types/app.pb.go +++ b/x/asset/types/app.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/asset/types/asset.pb.go b/x/asset/types/asset.pb.go index f92106ede..2188b3963 100644 --- a/x/asset/types/asset.pb.go +++ b/x/asset/types/asset.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/asset/types/extendedPairVault.pb.go b/x/asset/types/extendedPairVault.pb.go index 84804d907..90cbc2db3 100644 --- a/x/asset/types/extendedPairVault.pb.go +++ b/x/asset/types/extendedPairVault.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/asset/types/genesis.pb.go b/x/asset/types/genesis.pb.go index def97155e..1f4bc3a99 100644 --- a/x/asset/types/genesis.pb.go +++ b/x/asset/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/asset/types/gov.pb.go b/x/asset/types/gov.pb.go index d59a20399..79c591060 100644 --- a/x/asset/types/gov.pb.go +++ b/x/asset/types/gov.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/asset/types/pair.pb.go b/x/asset/types/pair.pb.go index 4381e467c..4d4a60c1a 100644 --- a/x/asset/types/pair.pb.go +++ b/x/asset/types/pair.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/asset/types/params.pb.go b/x/asset/types/params.pb.go index b2e60e971..cf53f0690 100644 --- a/x/asset/types/params.pb.go +++ b/x/asset/types/params.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/asset/types/query.pb.go b/x/asset/types/query.pb.go index b8b43f939..8f7805152 100644 --- a/x/asset/types/query.pb.go +++ b/x/asset/types/query.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/asset/types/tx.pb.go b/x/asset/types/tx.pb.go index a9bf7b65a..ed0fc05a6 100644 --- a/x/asset/types/tx.pb.go +++ b/x/asset/types/tx.pb.go @@ -6,7 +6,7 @@ package types import ( context "context" fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" diff --git a/x/auction/types/auction.pb.go b/x/auction/types/auction.pb.go index 71659e4f8..4c95cef04 100644 --- a/x/auction/types/auction.pb.go +++ b/x/auction/types/auction.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/auction/types/biddings.pb.go b/x/auction/types/biddings.pb.go index 8bb91fd4d..413dfabbc 100644 --- a/x/auction/types/biddings.pb.go +++ b/x/auction/types/biddings.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/auction/types/genesis.pb.go b/x/auction/types/genesis.pb.go index eb2b9ced5..b36f2176b 100644 --- a/x/auction/types/genesis.pb.go +++ b/x/auction/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/auction/types/query.pb.go b/x/auction/types/query.pb.go index 9ceed74fd..94ff53c34 100644 --- a/x/auction/types/query.pb.go +++ b/x/auction/types/query.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/auction/types/tx.pb.go b/x/auction/types/tx.pb.go index d183b0617..cbb696b7b 100644 --- a/x/auction/types/tx.pb.go +++ b/x/auction/types/tx.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" diff --git a/x/auctionsV2/types/auction.pb.go b/x/auctionsV2/types/auction.pb.go index 1cf8802b6..021903749 100644 --- a/x/auctionsV2/types/auction.pb.go +++ b/x/auctionsV2/types/auction.pb.go @@ -8,7 +8,7 @@ import ( types "github.com/comdex-official/comdex/x/liquidationsV2/types" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/auctionsV2/types/bid.pb.go b/x/auctionsV2/types/bid.pb.go index aa176730d..f0876fa4d 100644 --- a/x/auctionsV2/types/bid.pb.go +++ b/x/auctionsV2/types/bid.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/auctionsV2/types/genesis.pb.go b/x/auctionsV2/types/genesis.pb.go index ef24cbc2d..9bb68929c 100644 --- a/x/auctionsV2/types/genesis.pb.go +++ b/x/auctionsV2/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/auctionsV2/types/gov.pb.go b/x/auctionsV2/types/gov.pb.go index cdabd475e..79e9357ea 100644 --- a/x/auctionsV2/types/gov.pb.go +++ b/x/auctionsV2/types/gov.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/auctionsV2/types/params.pb.go b/x/auctionsV2/types/params.pb.go index 3105a81e7..7e55af0bf 100644 --- a/x/auctionsV2/types/params.pb.go +++ b/x/auctionsV2/types/params.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/auctionsV2/types/query.pb.go b/x/auctionsV2/types/query.pb.go index 0af8127ef..9cc3cb233 100644 --- a/x/auctionsV2/types/query.pb.go +++ b/x/auctionsV2/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/auctionsV2/types/tx.pb.go b/x/auctionsV2/types/tx.pb.go index bd8e4527b..b2d9b7ac0 100644 --- a/x/auctionsV2/types/tx.pb.go +++ b/x/auctionsV2/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" diff --git a/x/bandoracle/types/fetch_price.pb.go b/x/bandoracle/types/fetch_price.pb.go index ca1280baf..c0c274af6 100644 --- a/x/bandoracle/types/fetch_price.pb.go +++ b/x/bandoracle/types/fetch_price.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/bandoracle/types/genesis.pb.go b/x/bandoracle/types/genesis.pb.go index 9c33e2b73..92b2a4aa8 100644 --- a/x/bandoracle/types/genesis.pb.go +++ b/x/bandoracle/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/bandoracle/types/gov.pb.go b/x/bandoracle/types/gov.pb.go index f60667811..f6eee9e83 100644 --- a/x/bandoracle/types/gov.pb.go +++ b/x/bandoracle/types/gov.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/bandoracle/types/query.pb.go b/x/bandoracle/types/query.pb.go index b14bcb873..96eb7e09a 100644 --- a/x/bandoracle/types/query.pb.go +++ b/x/bandoracle/types/query.pb.go @@ -6,7 +6,7 @@ package types import ( context "context" fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/bandoracle/types/tx.pb.go b/x/bandoracle/types/tx.pb.go index 53749c32b..a9906969c 100644 --- a/x/bandoracle/types/tx.pb.go +++ b/x/bandoracle/types/tx.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/collector/types/collector.pb.go b/x/collector/types/collector.pb.go index beba323cd..5c31870a6 100644 --- a/x/collector/types/collector.pb.go +++ b/x/collector/types/collector.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/collector/types/genesis.pb.go b/x/collector/types/genesis.pb.go index 3d9eb4ecc..8ec83e518 100644 --- a/x/collector/types/genesis.pb.go +++ b/x/collector/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/collector/types/params.pb.go b/x/collector/types/params.pb.go index 9fedfccf7..4d31331b0 100644 --- a/x/collector/types/params.pb.go +++ b/x/collector/types/params.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/collector/types/query.pb.go b/x/collector/types/query.pb.go index 462c656f6..d511084be 100644 --- a/x/collector/types/query.pb.go +++ b/x/collector/types/query.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/esm/types/esm.pb.go b/x/esm/types/esm.pb.go index bf8067b20..944e62ddb 100644 --- a/x/esm/types/esm.pb.go +++ b/x/esm/types/esm.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/esm/types/genesis.pb.go b/x/esm/types/genesis.pb.go index 28d2ed59d..290c077d4 100644 --- a/x/esm/types/genesis.pb.go +++ b/x/esm/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/esm/types/params.pb.go b/x/esm/types/params.pb.go index 6a7709089..6e25f6e65 100644 --- a/x/esm/types/params.pb.go +++ b/x/esm/types/params.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/esm/types/query.pb.go b/x/esm/types/query.pb.go index a3d38b340..e362150ae 100644 --- a/x/esm/types/query.pb.go +++ b/x/esm/types/query.pb.go @@ -6,7 +6,7 @@ package types import ( context "context" fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/esm/types/tx.pb.go b/x/esm/types/tx.pb.go index 1f15f9d45..78b26763e 100644 --- a/x/esm/types/tx.pb.go +++ b/x/esm/types/tx.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" diff --git a/x/lend/migrations/v2/types/lend.pb.go b/x/lend/migrations/v2/types/lend.pb.go index 1b19ef9f1..7e686c635 100644 --- a/x/lend/migrations/v2/types/lend.pb.go +++ b/x/lend/migrations/v2/types/lend.pb.go @@ -8,8 +8,8 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - _ "github.com/gogo/protobuf/gogoproto" _ "google.golang.org/protobuf/types/known/timestamppb" ) diff --git a/x/lend/types/genesis.pb.go b/x/lend/types/genesis.pb.go index c8b115470..edaddc804 100644 --- a/x/lend/types/genesis.pb.go +++ b/x/lend/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/lend/types/gov.pb.go b/x/lend/types/gov.pb.go index 7d41407a8..55f9d5c03 100644 --- a/x/lend/types/gov.pb.go +++ b/x/lend/types/gov.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/lend/types/lend.pb.go b/x/lend/types/lend.pb.go index d88f59e6f..0635016fa 100644 --- a/x/lend/types/lend.pb.go +++ b/x/lend/types/lend.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/lend/types/params.pb.go b/x/lend/types/params.pb.go index ffd30753d..fa0c13f1b 100644 --- a/x/lend/types/params.pb.go +++ b/x/lend/types/params.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/lend/types/query.pb.go b/x/lend/types/query.pb.go index 0ce682da1..88f3d9cea 100644 --- a/x/lend/types/query.pb.go +++ b/x/lend/types/query.pb.go @@ -9,7 +9,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/lend/types/tx.pb.go b/x/lend/types/tx.pb.go index fc783cc99..80eed8f03 100644 --- a/x/lend/types/tx.pb.go +++ b/x/lend/types/tx.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" diff --git a/x/liquidation/types/genesis.pb.go b/x/liquidation/types/genesis.pb.go index 16cba99cc..558d84e57 100644 --- a/x/liquidation/types/genesis.pb.go +++ b/x/liquidation/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/liquidation/types/liquidations.pb.go b/x/liquidation/types/liquidations.pb.go index 0e1b40c3e..9554890af 100644 --- a/x/liquidation/types/liquidations.pb.go +++ b/x/liquidation/types/liquidations.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/liquidation/types/locked_vault.pb.go b/x/liquidation/types/locked_vault.pb.go index 76332666e..b62d52f4f 100644 --- a/x/liquidation/types/locked_vault.pb.go +++ b/x/liquidation/types/locked_vault.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/liquidation/types/querier.pb.go b/x/liquidation/types/querier.pb.go index aa5de2df3..eaf8f5839 100644 --- a/x/liquidation/types/querier.pb.go +++ b/x/liquidation/types/querier.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/liquidation/types/tx.pb.go b/x/liquidation/types/tx.pb.go index e08178733..315be0096 100644 --- a/x/liquidation/types/tx.pb.go +++ b/x/liquidation/types/tx.pb.go @@ -6,7 +6,7 @@ package types import ( context "context" fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" diff --git a/x/liquidationsV2/types/genesis.pb.go b/x/liquidationsV2/types/genesis.pb.go index f96d5642c..bf44cc4db 100644 --- a/x/liquidationsV2/types/genesis.pb.go +++ b/x/liquidationsV2/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/liquidationsV2/types/gov.pb.go b/x/liquidationsV2/types/gov.pb.go index 9fe28b226..9bb5db8d6 100644 --- a/x/liquidationsV2/types/gov.pb.go +++ b/x/liquidationsV2/types/gov.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/liquidationsV2/types/liquidate.pb.go b/x/liquidationsV2/types/liquidate.pb.go index 9f257ec32..3132496bd 100644 --- a/x/liquidationsV2/types/liquidate.pb.go +++ b/x/liquidationsV2/types/liquidate.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/liquidationsV2/types/query.pb.go b/x/liquidationsV2/types/query.pb.go index 0a866992b..8f4e6ab9d 100644 --- a/x/liquidationsV2/types/query.pb.go +++ b/x/liquidationsV2/types/query.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/liquidationsV2/types/tx.pb.go b/x/liquidationsV2/types/tx.pb.go index 52df0f6f9..61eb1d844 100644 --- a/x/liquidationsV2/types/tx.pb.go +++ b/x/liquidationsV2/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" diff --git a/x/liquidity/legacy/v1/liquidity.pb.go b/x/liquidity/legacy/v1/liquidity.pb.go index 047ff332e..b85a4b6d5 100644 --- a/x/liquidity/legacy/v1/liquidity.pb.go +++ b/x/liquidity/legacy/v1/liquidity.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/liquidity/legacy/v1/params.pb.go b/x/liquidity/legacy/v1/params.pb.go index e412d3094..d502aa06b 100644 --- a/x/liquidity/legacy/v1/params.pb.go +++ b/x/liquidity/legacy/v1/params.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/duration" diff --git a/x/liquidity/types/genesis.pb.go b/x/liquidity/types/genesis.pb.go index 46587a93f..732260113 100644 --- a/x/liquidity/types/genesis.pb.go +++ b/x/liquidity/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/liquidity/types/gov.pb.go b/x/liquidity/types/gov.pb.go index 92b5825bb..1db281bd2 100644 --- a/x/liquidity/types/gov.pb.go +++ b/x/liquidity/types/gov.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/liquidity/types/liquidity.pb.go b/x/liquidity/types/liquidity.pb.go index 94af5bd6c..d3ee1e4ae 100644 --- a/x/liquidity/types/liquidity.pb.go +++ b/x/liquidity/types/liquidity.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/liquidity/types/params.pb.go b/x/liquidity/types/params.pb.go index bad0b05ef..7a5b0d02a 100644 --- a/x/liquidity/types/params.pb.go +++ b/x/liquidity/types/params.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/duration" diff --git a/x/liquidity/types/query.pb.go b/x/liquidity/types/query.pb.go index faef1f1b1..87ddb0ae1 100644 --- a/x/liquidity/types/query.pb.go +++ b/x/liquidity/types/query.pb.go @@ -9,7 +9,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" diff --git a/x/liquidity/types/tx.pb.go b/x/liquidity/types/tx.pb.go index 4e64d6b98..67dd9b961 100644 --- a/x/liquidity/types/tx.pb.go +++ b/x/liquidity/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" diff --git a/x/locker/types/genesis.pb.go b/x/locker/types/genesis.pb.go index af35dd56a..cb276d942 100644 --- a/x/locker/types/genesis.pb.go +++ b/x/locker/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/locker/types/locker.pb.go b/x/locker/types/locker.pb.go index b978d6190..a96af8aae 100644 --- a/x/locker/types/locker.pb.go +++ b/x/locker/types/locker.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/locker/types/query.pb.go b/x/locker/types/query.pb.go index 41f7a22f0..522aaf55e 100644 --- a/x/locker/types/query.pb.go +++ b/x/locker/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" types "github.com/comdex-official/comdex/x/asset/types" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/locker/types/tx.pb.go b/x/locker/types/tx.pb.go index 10567eb2c..ecfa3f9e4 100644 --- a/x/locker/types/tx.pb.go +++ b/x/locker/types/tx.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" diff --git a/x/market/types/genesis.pb.go b/x/market/types/genesis.pb.go index 960b629ce..9f34ac5f8 100644 --- a/x/market/types/genesis.pb.go +++ b/x/market/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/market/types/gov.pb.go b/x/market/types/gov.pb.go index 80cade318..969000dca 100644 --- a/x/market/types/gov.pb.go +++ b/x/market/types/gov.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" math "math" ) diff --git a/x/market/types/market.pb.go b/x/market/types/market.pb.go index f29ea2a09..656151384 100644 --- a/x/market/types/market.pb.go +++ b/x/market/types/market.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/market/types/params.pb.go b/x/market/types/params.pb.go index 2e4bdb046..a65e6cc34 100644 --- a/x/market/types/params.pb.go +++ b/x/market/types/params.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/market/types/query.pb.go b/x/market/types/query.pb.go index 0ccd2da47..28ee9070d 100644 --- a/x/market/types/query.pb.go +++ b/x/market/types/query.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/rewards/types/epochs.pb.go b/x/rewards/types/epochs.pb.go index 6837ef9ff..bbd907628 100644 --- a/x/rewards/types/epochs.pb.go +++ b/x/rewards/types/epochs.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/duration" diff --git a/x/rewards/types/gauge.pb.go b/x/rewards/types/gauge.pb.go index 30f730d16..5c95841b4 100644 --- a/x/rewards/types/gauge.pb.go +++ b/x/rewards/types/gauge.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/duration" diff --git a/x/rewards/types/genesis.pb.go b/x/rewards/types/genesis.pb.go index f4b00031e..872c83f8d 100644 --- a/x/rewards/types/genesis.pb.go +++ b/x/rewards/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/rewards/types/query.pb.go b/x/rewards/types/query.pb.go index 3bb05184f..18fbf34b4 100644 --- a/x/rewards/types/query.pb.go +++ b/x/rewards/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/rewards/types/rewards.pb.go b/x/rewards/types/rewards.pb.go index 9329ae8e0..c524f27c6 100644 --- a/x/rewards/types/rewards.pb.go +++ b/x/rewards/types/rewards.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/rewards/types/tx.pb.go b/x/rewards/types/tx.pb.go index e83a19154..d4459018a 100644 --- a/x/rewards/types/tx.pb.go +++ b/x/rewards/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" diff --git a/x/tokenmint/types/genesis.pb.go b/x/tokenmint/types/genesis.pb.go index 4b27c557e..c95fe3af4 100644 --- a/x/tokenmint/types/genesis.pb.go +++ b/x/tokenmint/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/tokenmint/types/mint.pb.go b/x/tokenmint/types/mint.pb.go index 118eb4646..e4ad904ee 100644 --- a/x/tokenmint/types/mint.pb.go +++ b/x/tokenmint/types/mint.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" diff --git a/x/tokenmint/types/params.pb.go b/x/tokenmint/types/params.pb.go index 2d6797c60..a84d5a95b 100644 --- a/x/tokenmint/types/params.pb.go +++ b/x/tokenmint/types/params.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/tokenmint/types/query.pb.go b/x/tokenmint/types/query.pb.go index a20d1dae5..ffa830915 100644 --- a/x/tokenmint/types/query.pb.go +++ b/x/tokenmint/types/query.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/tokenmint/types/tx.pb.go b/x/tokenmint/types/tx.pb.go index 6ea3caee0..097c83ea4 100644 --- a/x/tokenmint/types/tx.pb.go +++ b/x/tokenmint/types/tx.pb.go @@ -6,7 +6,7 @@ package types import ( context "context" fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" diff --git a/x/vault/types/events.pb.go b/x/vault/types/events.pb.go index 5b6c3e37a..459ae8c4b 100644 --- a/x/vault/types/events.pb.go +++ b/x/vault/types/events.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/vault/types/genesis.pb.go b/x/vault/types/genesis.pb.go index fc6ea001c..3953d53b9 100644 --- a/x/vault/types/genesis.pb.go +++ b/x/vault/types/genesis.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" diff --git a/x/vault/types/query.pb.go b/x/vault/types/query.pb.go index 965fac1fc..1f7c33531 100644 --- a/x/vault/types/query.pb.go +++ b/x/vault/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/vault/types/tx.pb.go b/x/vault/types/tx.pb.go index 64ff3b2a3..81222ee83 100644 --- a/x/vault/types/tx.pb.go +++ b/x/vault/types/tx.pb.go @@ -7,7 +7,7 @@ import ( context "context" fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" diff --git a/x/vault/types/vault.pb.go b/x/vault/types/vault.pb.go index 2ac13488c..36a5a5c59 100644 --- a/x/vault/types/vault.pb.go +++ b/x/vault/types/vault.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" _ "github.com/golang/protobuf/ptypes/timestamp" From 783cda1e96163a319c0ee1926b7ff646a5b107de Mon Sep 17 00:00:00 2001 From: Pratik Date: Thu, 28 Sep 2023 10:57:04 +0530 Subject: [PATCH 50/90] adding deposit cmd for collector module --- app/upgrades/mainnet/v12/refund.go | 133 ------ app/upgrades/mainnet/v12/upgrades.go | 2 +- proto/comdex/collector/v1beta1/tx.proto | 10 +- x/collector/client/cli/tx.go | 40 ++ x/collector/handler.go | 10 +- x/collector/keeper/msg_server.go | 16 +- x/collector/keeper/refund.go | 201 +++++++++ x/collector/types/codec.go | 9 +- x/collector/types/errors.go | 2 + x/collector/types/keys.go | 2 + x/collector/types/tx.go | 43 ++ x/collector/types/tx.pb.go | 561 +++++++++++++++++++++++- 12 files changed, 876 insertions(+), 153 deletions(-) create mode 100644 x/collector/keeper/refund.go create mode 100644 x/collector/types/tx.go diff --git a/app/upgrades/mainnet/v12/refund.go b/app/upgrades/mainnet/v12/refund.go index 16e7368fc..bad195837 100644 --- a/app/upgrades/mainnet/v12/refund.go +++ b/app/upgrades/mainnet/v12/refund.go @@ -1,134 +1 @@ package v12 - -import ( - "fmt" - sdk "github.com/cosmos/cosmos-sdk/types" - collectortypes "github.com/comdex-official/comdex/x/collector/types" - collectorkeeper "github.com/comdex-official/comdex/x/collector/keeper" - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - -) - -func Refund ( - ctx sdk.Context, - bankKeeper bankkeeper.Keeper, - collectorKeeper collectorkeeper.Keeper, -) { - ////// refund CMST to vault owner//////// - - type refundStruct struct { - vaultOwner string - amount int64 - } - - refundData := []refundStruct{ - { - vaultOwner: "comdex1x22fak2s8a6m9gysx7y4d5794dgds0jy6jch3t", - amount: 27380000, - }, - { - vaultOwner: "comdex12jhse8d8uxgkqgrvfcv5j46wqu08yru7z3ze8z", - amount: 1142650000, - }, - { - vaultOwner: "comdex1w5lep3d53p5dtkg37gerq6qxdlagykyryta989", - amount: 4363010000, - }, - { - vaultOwner: "comdex122esu76xehp8sq9t88kcn666ejjum5g5ynxu0k", - amount: 32460000, - }, - { - vaultOwner: "comdex1reeycz4d4pu4fddzqafzsyh6vvjp3nflp84xpp", - amount: 44960000, - }, - { - vaultOwner: "comdex12q0708jnrd6d5ud7ap5lz4tgu3yshppfwd9x28", - amount: 808240000, - }, - { - vaultOwner: "comdex120t6ntph3za6a7trw3zegseefkyf5u8gu3q4yu", - amount: 29310000, - }, - { - vaultOwner: "comdex1qmklnue6z90vlljx04ll2v0elqjnzr3fswxm2u", - amount: 10249670000, - }, - { - vaultOwner: "comdex13mm0ua6c20f8jup3q2g0uuw2k5n54cgkrw3lqs", - amount: 664440000, - }, - { - vaultOwner: "comdex1wk25umx7ldgnca290dlg09yssusujhfek3l38l", - amount: 2520920000, - }, - { - vaultOwner: "comdex1z2cmdk7atwfefl4a3had7a2tsamxrwgucmhutx", - amount: 24300000, - }, - { - vaultOwner: "comdex1snezfskvsvdav5z9rsg5pgdrwnrg77kfjrc25f", - amount: 23090000, - }, - { - vaultOwner: "comdex15xvnvwffhmy5wx8y7a9rchxe4zys9pa4gv8k8r", - amount: 23650000, - }, - { - vaultOwner: "comdex1dwhhjyl6luv949ekpkplwc0zhqxa2jmhv6yl2w", - amount: 19930000, - }, - { - vaultOwner: "comdex1nwtwhhs3d8rjl6c3clmcxlf3qdpv8n6rc9u9uy", - amount: 18550000, - }, - { - vaultOwner: "comdex15gp4hjqf79zeggxteewzu2n0qde2zzfkkgec3z", - amount: 79060000, - }, - { - vaultOwner: "comdex1v3truxzuz0j7896tumz77unla4sltqlgxwzhxy", - amount: 45560000, - }, - { - vaultOwner: "comdex1850jsqvx54zl0urkav9tvee20j8r5fqj98zq9p", - amount: 21940000, - }, - { - vaultOwner: "comdex1qx46s5gen6c88yaauh9jfttmfgdxnxxshzhahu", - amount: 24400000, - }, - - } - - // check if collector module account has enough balance to refund - macc := collectorKeeper.ModuleBalance(ctx, collectortypes.ModuleName, "ucmst") - // Check if sufficient balance exists - - if macc.Int64() < 20163520000 { - fmt.Println("collector module account does not have enough balance to refund") - return - } else { - for i:=0; i 0 { + i -= len(m.Addr) + copy(dAtA[i:], m.Addr) + i = encodeVarintTx(dAtA, i, uint64(len(m.Addr))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgDepositResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgDepositResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDepositResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil } + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgDeposit) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Addr) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + if m.AppId != 0 { + n += 1 + sovTx(uint64(m.AppId)) + } + return n +} + +func (m *MsgDepositResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgDeposit) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgDeposit: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgDeposit: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Addr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AppId", wireType) + } + m.AppId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.AppId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgDepositResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgDepositResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgDepositResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) From 4e7ac4446fcd2360446d719a45711eb0c3c185d6 Mon Sep 17 00:00:00 2001 From: Pratik Date: Thu, 28 Sep 2023 12:11:03 +0530 Subject: [PATCH 51/90] updating test_helpers & refactoring app.go - fixing testcases --- app/app.go | 14 +-- app/mock.go | 50 ++++++++ app/test_helpers.go | 164 +++++++++++++++++++++---- x/asset/keeper/keeper_test.go | 2 +- x/auction/keeper/keeper_test.go | 2 +- x/auctionsV2/keeper/keeper_test.go | 4 +- x/collector/keeper/keeper_test.go | 2 +- x/esm/keeper/keeper_test.go | 2 +- x/lend/keeper/keeper_test.go | 2 +- x/liquidation/keeper/keeper_test.go | 2 +- x/liquidationsV2/keeper/keeper_test.go | 4 +- x/liquidity/keeper/keeper_test.go | 2 +- x/locker/keeper/keeper_test.go | 2 +- x/rewards/keeper/keeper_test.go | 2 +- x/tokenmint/keeper/keeper_test.go | 2 +- x/vault/keeper/keeper_test.go | 2 +- 16 files changed, 213 insertions(+), 45 deletions(-) create mode 100644 app/mock.go diff --git a/app/app.go b/app/app.go index fa6673649..ca16c5d2b 100644 --- a/app/app.go +++ b/app/app.go @@ -392,11 +392,11 @@ type App struct { // transfer module RawIcs20TransferAppModule ibctransfer.AppModule // RateLimitingICS4Wrapper *ibcratelimit.ICS4Wrapper - TransferStack *ibchooks.IBCMiddleware - Ics20WasmHooks *ibchooks.WasmHooks - HooksICS4Wrapper ibchooks.ICS4Middleware - PacketForwardKeeper *packetforwardkeeper.Keeper - ICQKeeper *icqkeeper.Keeper + TransferStack *ibchooks.IBCMiddleware + Ics20WasmHooks *ibchooks.WasmHooks + HooksICS4Wrapper ibchooks.ICS4Middleware + PacketForwardKeeper *packetforwardkeeper.Keeper + ICQKeeper *icqkeeper.Keeper ConsensusParamsKeeper consensusparamkeeper.Keeper @@ -1320,7 +1320,7 @@ func (a *App) InitChainer(ctx sdk.Context, req abcitypes.RequestInitChain) abcit panic(err) } a.UpgradeKeeper.SetModuleVersionMap(ctx, a.mm.GetVersionMap()) - return a.mm.InitGenesis(ctx, a.cdc, state) + return a.mm.InitGenesis(ctx, a.AppCodec(), state) } // LoadHeight loads a particular height. @@ -1356,7 +1356,7 @@ func (a *App) LegacyAmino() *codec.LegacyAmino { // // NOTE: This is solely to be used for testing purposes as it may be desirable // for modules to register their own custom testing types. -func (a *App) AppCodec() codec.BinaryCodec { +func (a *App) AppCodec() codec.Codec { return a.cdc } diff --git a/app/mock.go b/app/mock.go new file mode 100644 index 000000000..41eab28fd --- /dev/null +++ b/app/mock.go @@ -0,0 +1,50 @@ +package app + +import ( + "github.com/cometbft/cometbft/crypto" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + tmtypes "github.com/cometbft/cometbft/types" + + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" +) + +var _ tmtypes.PrivValidator = PV{} + +// PV implements PrivValidator without any safety or persistence. +// Only use it for testing. +type PV struct { + PrivKey cryptotypes.PrivKey +} + +func NewPV() PV { + return PV{ed25519.GenPrivKey()} +} + +// GetPubKey implements PrivValidator interface +func (pv PV) GetPubKey() (crypto.PubKey, error) { + return cryptocodec.ToTmPubKeyInterface(pv.PrivKey.PubKey()) +} + +// SignVote implements PrivValidator interface +func (pv PV) SignVote(chainID string, vote *tmproto.Vote) error { + signBytes := tmtypes.VoteSignBytes(chainID, vote) + sig, err := pv.PrivKey.Sign(signBytes) + if err != nil { + return err + } + vote.Signature = sig + return nil +} + +// SignProposal implements PrivValidator interface +func (pv PV) SignProposal(chainID string, proposal *tmproto.Proposal) error { + signBytes := tmtypes.ProposalSignBytes(chainID, proposal) + sig, err := pv.PrivKey.Sign(signBytes) + if err != nil { + return err + } + proposal.Signature = sig + return nil +} diff --git a/app/test_helpers.go b/app/test_helpers.go index 69f7b38b8..9e4f2cf00 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -1,17 +1,27 @@ package app import ( + "cosmossdk.io/math" "encoding/json" - "time" - // simappparams "cosmossdk.io/simapp/params" - moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/libs/log" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" tmtypes "github.com/cometbft/cometbft/types" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/cosmos/cosmos-sdk/std" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + 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" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/stretchr/testify/require" + "testing" + "time" + // simappparams "cosmossdk.io/simapp/params" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" ) // DefaultConsensusParams defines the default Tendermint consensus params used in @@ -42,38 +52,146 @@ func MakeTestEncodingConfig() moduletestutil.TestEncodingConfig { return encodingConfig } -func setup(withGenesis bool, invCheckPeriod uint) (*App, GenesisState) { +func setup(t *testing.T, withGenesis bool) (*App, GenesisState) { db := dbm.NewMemDB() - encCdc := MakeTestEncodingConfig() - app := New(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, invCheckPeriod, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, GetWasmEnabledProposals(), EmptyWasmOpts) + //encCdc := MakeTestEncodingConfig() + app := New(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, 5, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, GetWasmEnabledProposals(), EmptyWasmOpts) if withGenesis { - return app, NewDefaultGenesisState(encCdc.Codec) + return app, NewDefaultGenesisState(app.AppCodec()) } return app, GenesisState{} } // Setup initializes a new App. A Nop logger is set in App. -func Setup(isCheckTx bool) *App { - app, genesisState := setup(!isCheckTx, 5) - if !isCheckTx { - // init chain must be called to stop deliverState from being nil - stateBytes, err := json.MarshalIndent(genesisState, "", " ") - if err != nil { - panic(err) - } +func Setup(t *testing.T, isCheckTx bool) *App { + t.Helper() + + privVal := NewPV() + pubKey, err := privVal.GetPubKey() + require.NoError(t, err) + + // create validator set with single validator + validator := tmtypes.NewValidator(pubKey, 1) + valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) - // Initialize the chain - app.InitChain( - abci.RequestInitChain{ - Validators: []abci.ValidatorUpdate{}, - ConsensusParams: DefaultConsensusParams, - AppStateBytes: stateBytes, - }, - ) + // generate genesis account + senderPrivKey := secp256k1.GenPrivKey() + acc := authtypes.NewBaseAccount(senderPrivKey.PubKey().Address().Bytes(), senderPrivKey.PubKey(), 0, 0) + balance := banktypes.Balance{ + Address: acc.GetAddress().String(), + Coins: sdk.NewCoins(sdk.NewCoin("ucmdx", sdk.NewInt(100000000000000))), } + app := SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, balance) + return app } +func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *App { + t.Helper() + + app, genesisState := setup(t, true) + genesisState = genesisStateWithValSet(t, app, genesisState, valSet, genAccs, balances...) + + stateBytes, err := json.MarshalIndent(genesisState, "", " ") + require.NoError(t, err) + + // init chain will set the validator set and initialize the genesis accounts + app.InitChain( + abci.RequestInitChain{ + Validators: []abci.ValidatorUpdate{}, + ConsensusParams: DefaultConsensusParams, + AppStateBytes: stateBytes, + Time: time.Now().UTC(), + InitialHeight: 1, + }, + ) + + // commit genesis changes + app.Commit() + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{ + Height: app.LastBlockHeight() + 1, + AppHash: app.LastCommitID().Hash, + ValidatorsHash: valSet.Hash(), + NextValidatorsHash: valSet.Hash(), + Time: time.Now().UTC(), + }}) + + return app +} + +func genesisStateWithValSet(t *testing.T, + app *App, genesisState GenesisState, + valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, + balances ...banktypes.Balance, +) GenesisState { + codec := app.AppCodec() + + // set genesis accounts + authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs) + genesisState[authtypes.ModuleName] = codec.MustMarshalJSON(authGenesis) + + validators := make([]stakingtypes.Validator, 0, len(valSet.Validators)) + delegations := make([]stakingtypes.Delegation, 0, len(valSet.Validators)) + + bondAmt := sdk.DefaultPowerReduction + + for _, val := range valSet.Validators { + pk, err := cryptocodec.FromTmPubKeyInterface(val.PubKey) + require.NoError(t, err) + pkAny, err := codectypes.NewAnyWithValue(pk) + require.NoError(t, err) + validator := stakingtypes.Validator{ + OperatorAddress: sdk.ValAddress(val.Address).String(), + ConsensusPubkey: pkAny, + Jailed: false, + Status: stakingtypes.Bonded, + Tokens: bondAmt, + DelegatorShares: math.LegacyOneDec(), + Description: stakingtypes.Description{}, + UnbondingHeight: int64(0), + UnbondingTime: time.Unix(0, 0).UTC(), + Commission: stakingtypes.NewCommission(math.LegacyZeroDec(), math.LegacyZeroDec(), math.LegacyZeroDec()), + MinSelfDelegation: math.ZeroInt(), + } + validators = append(validators, validator) + delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), math.LegacyOneDec())) + + } + + defaultStParams := stakingtypes.DefaultParams() + stParams := stakingtypes.NewParams( + defaultStParams.UnbondingTime, + defaultStParams.MaxValidators, + defaultStParams.MaxEntries, + defaultStParams.HistoricalEntries, + "ucmdx", + defaultStParams.MinCommissionRate, // 5% + ) + + // set validators and delegations + stakingGenesis := stakingtypes.NewGenesisState(stParams, validators, delegations) + genesisState[stakingtypes.ModuleName] = codec.MustMarshalJSON(stakingGenesis) + + // add bonded amount to bonded pool module account + balances = append(balances, banktypes.Balance{ + Address: authtypes.NewModuleAddress(stakingtypes.BondedPoolName).String(), + Coins: sdk.Coins{sdk.NewCoin("ucmdx", bondAmt.MulRaw(int64(len(valSet.Validators))))}, + }) + + totalSupply := sdk.NewCoins() + for _, b := range balances { + // add genesis acc tokens to total supply + totalSupply = totalSupply.Add(b.Coins...) + } + + // update total supply + bankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, totalSupply, []banktypes.Metadata{}, []banktypes.SendEnabled{}) + genesisState[banktypes.ModuleName] = codec.MustMarshalJSON(bankGenesis) + // println("genesisStateWithValSet bankState:", string(genesisState[banktypes.ModuleName])) + + return genesisState +} + // EmptyAppOptions is a stub implementing AppOptions type EmptyAppOptions struct{} diff --git a/x/asset/keeper/keeper_test.go b/x/asset/keeper/keeper_test.go index 0fef2f260..0cd4b3b1e 100644 --- a/x/asset/keeper/keeper_test.go +++ b/x/asset/keeper/keeper_test.go @@ -39,7 +39,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.vaultKeeper = s.app.VaultKeeper s.liquidationKeeper = s.app.LiquidationKeeper diff --git a/x/auction/keeper/keeper_test.go b/x/auction/keeper/keeper_test.go index a56a3d5c7..542197c91 100644 --- a/x/auction/keeper/keeper_test.go +++ b/x/auction/keeper/keeper_test.go @@ -50,7 +50,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.vaultKeeper = s.app.VaultKeeper s.liquidationKeeper = s.app.LiquidationKeeper diff --git a/x/auctionsV2/keeper/keeper_test.go b/x/auctionsV2/keeper/keeper_test.go index 9146b83ee..15e4978c9 100644 --- a/x/auctionsV2/keeper/keeper_test.go +++ b/x/auctionsV2/keeper/keeper_test.go @@ -17,9 +17,9 @@ import ( tokenmintKeeper "github.com/comdex-official/comdex/x/tokenmint/keeper" vaultKeeper "github.com/comdex-official/comdex/x/vault/keeper" vaultTypes "github.com/comdex-official/comdex/x/vault/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/suite" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "testing" ) @@ -49,7 +49,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.vaultKeeper = s.app.VaultKeeper s.liquidationKeeper = s.app.NewliqKeeper diff --git a/x/collector/keeper/keeper_test.go b/x/collector/keeper/keeper_test.go index 6f73fb616..6513b371a 100644 --- a/x/collector/keeper/keeper_test.go +++ b/x/collector/keeper/keeper_test.go @@ -33,7 +33,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.collectorKeeper = s.app.CollectorKeeper s.assetKeeper = s.app.AssetKeeper diff --git a/x/esm/keeper/keeper_test.go b/x/esm/keeper/keeper_test.go index 99ea0165a..b3e5346f9 100644 --- a/x/esm/keeper/keeper_test.go +++ b/x/esm/keeper/keeper_test.go @@ -28,7 +28,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.keeper = s.app.EsmKeeper s.querier = keeper.QueryServer{Keeper: s.keeper} diff --git a/x/lend/keeper/keeper_test.go b/x/lend/keeper/keeper_test.go index 14ba28cc2..4501279d0 100644 --- a/x/lend/keeper/keeper_test.go +++ b/x/lend/keeper/keeper_test.go @@ -33,7 +33,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.keeper = s.app.LendKeeper s.querier = keeper.QueryServer{Keeper: s.keeper} diff --git a/x/liquidation/keeper/keeper_test.go b/x/liquidation/keeper/keeper_test.go index 8fe1d0116..32e15a725 100644 --- a/x/liquidation/keeper/keeper_test.go +++ b/x/liquidation/keeper/keeper_test.go @@ -44,7 +44,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.vaultKeeper = s.app.VaultKeeper s.liquidationKeeper = s.app.LiquidationKeeper diff --git a/x/liquidationsV2/keeper/keeper_test.go b/x/liquidationsV2/keeper/keeper_test.go index 069eebb4d..b8f6acb00 100644 --- a/x/liquidationsV2/keeper/keeper_test.go +++ b/x/liquidationsV2/keeper/keeper_test.go @@ -15,9 +15,9 @@ import ( markettypes "github.com/comdex-official/comdex/x/market/types" vaultKeeper "github.com/comdex-official/comdex/x/vault/keeper" vaultTypes "github.com/comdex-official/comdex/x/vault/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/suite" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "testing" ) @@ -46,7 +46,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.vaultKeeper = s.app.VaultKeeper s.liquidationKeeper = s.app.NewliqKeeper diff --git a/x/liquidity/keeper/keeper_test.go b/x/liquidity/keeper/keeper_test.go index 08535a15d..224f58bff 100644 --- a/x/liquidity/keeper/keeper_test.go +++ b/x/liquidity/keeper/keeper_test.go @@ -37,7 +37,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.keeper = s.app.LiquidityKeeper s.querier = keeper.Querier{Keeper: s.keeper} diff --git a/x/locker/keeper/keeper_test.go b/x/locker/keeper/keeper_test.go index 8a34ea0f8..23b87c364 100644 --- a/x/locker/keeper/keeper_test.go +++ b/x/locker/keeper/keeper_test.go @@ -37,7 +37,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.lockerKeeper = s.app.LockerKeeper s.assetKeeper = s.app.AssetKeeper diff --git a/x/rewards/keeper/keeper_test.go b/x/rewards/keeper/keeper_test.go index 90cbcf4fb..25105b063 100644 --- a/x/rewards/keeper/keeper_test.go +++ b/x/rewards/keeper/keeper_test.go @@ -48,7 +48,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.assetKeeper = s.app.AssetKeeper s.lockerKeeper = s.app.LockerKeeper diff --git a/x/tokenmint/keeper/keeper_test.go b/x/tokenmint/keeper/keeper_test.go index 0bb794a64..015e66562 100644 --- a/x/tokenmint/keeper/keeper_test.go +++ b/x/tokenmint/keeper/keeper_test.go @@ -41,7 +41,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.collectorKeeper = s.app.CollectorKeeper s.assetKeeper = s.app.AssetKeeper diff --git a/x/vault/keeper/keeper_test.go b/x/vault/keeper/keeper_test.go index 6939fc1c7..eb09966e6 100644 --- a/x/vault/keeper/keeper_test.go +++ b/x/vault/keeper/keeper_test.go @@ -36,7 +36,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.keeper = s.app.VaultKeeper s.querier = keeper.QueryServer{Keeper: s.keeper} From 34ced8f74a3f24a6f41893b9fd1f61ab8d838d70 Mon Sep 17 00:00:00 2001 From: Pratik Date: Thu, 28 Sep 2023 12:27:23 +0530 Subject: [PATCH 52/90] updating helpers_test for wasm - fixing testcases --- app/wasm/test/helpers_test.go | 8 ++++---- app/wasm/test/messages_test.go | 22 +++++++++++----------- x/collector/genesis_test.go | 2 +- x/liquidity/client/testutil/suite.go | 8 ++++---- x/liquidity/handler_test.go | 2 +- x/liquidity/module_test.go | 2 +- x/rewards/genesis_test.go | 2 +- x/rewards/keeper/grpc_query_params_test.go | 2 +- x/tokenmint/genesis_test.go | 2 +- x/tokenmint/handler_test.go | 2 +- x/vault/client/testutil/suite.go | 8 ++++---- x/vault/genesis_test.go | 2 +- x/vault/handler_test.go | 2 +- x/vault/module_test.go | 2 +- 14 files changed, 33 insertions(+), 33 deletions(-) diff --git a/app/wasm/test/helpers_test.go b/app/wasm/test/helpers_test.go index 8a718309e..5beec95ad 100644 --- a/app/wasm/test/helpers_test.go +++ b/app/wasm/test/helpers_test.go @@ -23,13 +23,13 @@ import ( "github.com/comdex-official/comdex/x/tokenmint/keeper" ) -func SetupCustomApp() (*app.App, *sdk.Context) { - comdex, ctx := CreateTestInput() +func SetupCustomApp(t *testing.T) (*app.App, *sdk.Context) { + comdex, ctx := CreateTestInput(t) return comdex, ctx } -func CreateTestInput() (*app.App, *sdk.Context) { - comdex := app.Setup(false) +func CreateTestInput(t *testing.T) (*app.App, *sdk.Context) { + comdex := app.Setup(t, false) ctx := comdex.BaseApp.NewContext(false, tmproto.Header{Height: 1, ChainID: "comdex-1", Time: time.Now().UTC()}) return comdex, &ctx } diff --git a/app/wasm/test/messages_test.go b/app/wasm/test/messages_test.go index bc6e1c5a7..dcc1e2f8b 100644 --- a/app/wasm/test/messages_test.go +++ b/app/wasm/test/messages_test.go @@ -11,7 +11,7 @@ import ( func TestWhitelistAssetLocker(t *testing.T) { actor := RandomAccountAddress() - comdex, ctx := SetupCustomApp() + comdex, ctx := SetupCustomApp(t) AddAppAsset(comdex, *ctx) querier := wasm.NewQueryPlugin(&comdex.AssetKeeper, &comdex.LockerKeeper, @@ -23,7 +23,7 @@ func TestWhitelistAssetLocker(t *testing.T) { &comdex.VaultKeeper, &comdex.LendKeeper, &comdex.LiquidityKeeper, - &comdex.MarketKeeper) + &comdex.MarketKeeper) for _, tc := range []struct { name string msg *bindings.MsgWhiteListAssetLocker @@ -55,7 +55,7 @@ func TestWhitelistAssetLocker(t *testing.T) { func TestAddMsgAddExtendedPairsVault(t *testing.T) { actor := RandomAccountAddress() - comdex, ctx := SetupCustomApp() + comdex, ctx := SetupCustomApp(t) AddPair(comdex, *ctx) querier := wasm.NewQueryPlugin(&comdex.AssetKeeper, &comdex.LockerKeeper, @@ -113,7 +113,7 @@ func TestAddMsgAddExtendedPairsVault(t *testing.T) { func TestMsgSetCollectorLookupTable(t *testing.T) { actor := RandomAccountAddress() - comdex, ctx := SetupCustomApp() + comdex, ctx := SetupCustomApp(t) AddPair(comdex, *ctx) querier := wasm.NewQueryPlugin(&comdex.AssetKeeper, &comdex.LockerKeeper, @@ -165,7 +165,7 @@ func TestMsgSetCollectorLookupTable(t *testing.T) { func TestMsgSetAuctionMappingForApp(t *testing.T) { actor := RandomAccountAddress() - comdex, ctx := SetupCustomApp() + comdex, ctx := SetupCustomApp(t) AddPair(comdex, *ctx) querier := wasm.NewQueryPlugin(&comdex.AssetKeeper, &comdex.LockerKeeper, @@ -215,7 +215,7 @@ func TestMsgSetAuctionMappingForApp(t *testing.T) { func TestMsgUpdateCollectorLookupTable(t *testing.T) { actor := RandomAccountAddress() - comdex, ctx := SetupCustomApp() + comdex, ctx := SetupCustomApp(t) AddPair(comdex, *ctx) AddCollectorLookuptable(comdex, *ctx) querier := wasm.NewQueryPlugin(&comdex.AssetKeeper, @@ -267,7 +267,7 @@ func TestMsgUpdateCollectorLookupTable(t *testing.T) { func TestMsgUpdatePairsVault(t *testing.T) { actor := RandomAccountAddress() - comdex, ctx := SetupCustomApp() + comdex, ctx := SetupCustomApp(t) AddPair(comdex, *ctx) AddExtendedPairVault(comdex, *ctx) querier := wasm.NewQueryPlugin(&comdex.AssetKeeper, @@ -324,7 +324,7 @@ func TestMsgUpdatePairsVault(t *testing.T) { func TestMsgWhitelistAppIDLiquidation(t *testing.T) { actor := RandomAccountAddress() - comdex, ctx := SetupCustomApp() + comdex, ctx := SetupCustomApp(t) AddPair(comdex, *ctx) querier := wasm.NewQueryPlugin(&comdex.AssetKeeper, &comdex.LockerKeeper, @@ -371,7 +371,7 @@ func TestMsgWhitelistAppIDLiquidation(t *testing.T) { func TestMsgRemoveWhitelistAppIDLiquidation(t *testing.T) { actor := RandomAccountAddress() - comdex, ctx := SetupCustomApp() + comdex, ctx := SetupCustomApp(t) AddPair(comdex, *ctx) WhitelistAppIDLiquidation(comdex, *ctx) querier := wasm.NewQueryPlugin(&comdex.AssetKeeper, @@ -416,7 +416,7 @@ func TestMsgRemoveWhitelistAppIDLiquidation(t *testing.T) { func TestMsgAddAuctionParams(t *testing.T) { actor := RandomAccountAddress() - comdex, ctx := SetupCustomApp() + comdex, ctx := SetupCustomApp(t) AddPair(comdex, *ctx) querier := wasm.NewQueryPlugin(&comdex.AssetKeeper, &comdex.LockerKeeper, @@ -474,7 +474,7 @@ func TestMsgBurnGovTokensForApp(t *testing.T) { actor := RandomAccountAddress() userAddress := "cosmos1q7q90qsl9g0gl2zz0njxwv2a649yqrtyxtnv3v" addr, _ := sdk.AccAddressFromBech32(userAddress) - comdex, ctx := SetupCustomApp() + comdex, ctx := SetupCustomApp(t) MsgMintNewTokens(comdex, *ctx) for _, tc := range []struct { diff --git a/x/collector/genesis_test.go b/x/collector/genesis_test.go index 6561d84b9..6126c75cd 100644 --- a/x/collector/genesis_test.go +++ b/x/collector/genesis_test.go @@ -12,7 +12,7 @@ import ( ) func TestGenesis(t *testing.T) { - comdexApp := app.Setup(false) + comdexApp := app.Setup(t, false) ctx := comdexApp.BaseApp.NewContext(false, tmproto.Header{}) genesisState := types.GenesisState{ Params: types.DefaultParams(), diff --git a/x/liquidity/client/testutil/suite.go b/x/liquidity/client/testutil/suite.go index ac5761dc2..db6526e71 100644 --- a/x/liquidity/client/testutil/suite.go +++ b/x/liquidity/client/testutil/suite.go @@ -10,13 +10,13 @@ import ( liquidityKeeper "github.com/comdex-official/comdex/x/liquidity/keeper" "github.com/comdex-official/comdex/x/liquidity/types" + "github.com/comdex-official/comdex/testutil/network" "github.com/cosmos/cosmos-sdk/baseapp" servertypes "github.com/cosmos/cosmos-sdk/server/types" + pruningtypes "github.com/cosmos/cosmos-sdk/store/pruning/types" networkI "github.com/cosmos/cosmos-sdk/testutil/network" - "github.com/comdex-official/comdex/testutil/network" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - pruningtypes "github.com/cosmos/cosmos-sdk/store/pruning/types" dbm "github.com/cometbft/cometbft-db" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" @@ -51,7 +51,7 @@ func (s *LiquidityIntegrationTestSuite) SetupSuite() { s.T().Skip("skipping test in unit-tests mode.") } - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.msgServer = liquidityKeeper.NewMsgServerImpl(s.app.LiquidityKeeper) @@ -61,7 +61,7 @@ func (s *LiquidityIntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network= network.New(s.T(), cfg) + s.network = network.New(s.T(), cfg) s.val = s.network.Validators[0] diff --git a/x/liquidity/handler_test.go b/x/liquidity/handler_test.go index 7aa610922..15ae335e5 100644 --- a/x/liquidity/handler_test.go +++ b/x/liquidity/handler_test.go @@ -20,7 +20,7 @@ import ( ) func TestInvalidMsg(t *testing.T) { - app := app.Setup(false) + app := app.Setup(t, false) app.LiquidityKeeper = keeper.NewKeeper( app.AppCodec(), diff --git a/x/liquidity/module_test.go b/x/liquidity/module_test.go index 761ac171f..a35ee2a48 100644 --- a/x/liquidity/module_test.go +++ b/x/liquidity/module_test.go @@ -35,7 +35,7 @@ func TestModuleTestSuite(t *testing.T) { } func (suite *ModuleTestSuite) SetupTest() { - app := chain.Setup(false) + app := chain.Setup(suite.T(), false) ctx := app.BaseApp.NewContext(false, tmproto.Header{}) suite.app = app diff --git a/x/rewards/genesis_test.go b/x/rewards/genesis_test.go index af8c778e0..20546d6dc 100644 --- a/x/rewards/genesis_test.go +++ b/x/rewards/genesis_test.go @@ -12,7 +12,7 @@ import ( ) func TestGenesis(t *testing.T) { - comdexApp := app.Setup(false) + comdexApp := app.Setup(t, false) ctx := comdexApp.BaseApp.NewContext(false, tmproto.Header{}) genesisState := types.GenesisState{ diff --git a/x/rewards/keeper/grpc_query_params_test.go b/x/rewards/keeper/grpc_query_params_test.go index dd28e4dcf..fe4b324ab 100644 --- a/x/rewards/keeper/grpc_query_params_test.go +++ b/x/rewards/keeper/grpc_query_params_test.go @@ -12,7 +12,7 @@ import ( ) func TestParamsQuery(t *testing.T) { - comdexApp := app.Setup(false) + comdexApp := app.Setup(t, false) ctx := comdexApp.BaseApp.NewContext(false, tmproto.Header{}) wctx := sdk.WrapSDKContext(ctx) diff --git a/x/tokenmint/genesis_test.go b/x/tokenmint/genesis_test.go index 12ef20356..9616f7598 100644 --- a/x/tokenmint/genesis_test.go +++ b/x/tokenmint/genesis_test.go @@ -12,7 +12,7 @@ import ( ) func TestGenesis(t *testing.T) { - comdexApp := app.Setup(false) + comdexApp := app.Setup(t, false) ctx := comdexApp.BaseApp.NewContext(false, tmproto.Header{}) genesisState := types.GenesisState{ diff --git a/x/tokenmint/handler_test.go b/x/tokenmint/handler_test.go index 4c82c4d29..f956bd70a 100644 --- a/x/tokenmint/handler_test.go +++ b/x/tokenmint/handler_test.go @@ -16,7 +16,7 @@ import ( ) func TestInvalidMsg(t *testing.T) { - app1 := app.Setup(false) + app1 := app.Setup(t, false) app1.TokenmintKeeper = keeper.NewKeeper( app1.AppCodec(), app1.GetKey(types.StoreKey), app1.BankKeeper, &app1.AssetKeeper) diff --git a/x/vault/client/testutil/suite.go b/x/vault/client/testutil/suite.go index 369e28987..2a0a5b7c6 100644 --- a/x/vault/client/testutil/suite.go +++ b/x/vault/client/testutil/suite.go @@ -11,15 +11,15 @@ import ( vaultKeeper "github.com/comdex-official/comdex/x/vault/keeper" "github.com/comdex-official/comdex/x/vault/types" + "github.com/comdex-official/comdex/testutil/network" "github.com/cosmos/cosmos-sdk/baseapp" servertypes "github.com/cosmos/cosmos-sdk/server/types" + pruningtypes "github.com/cosmos/cosmos-sdk/store/pruning/types" // store "github.com/cosmos/cosmos-sdk/store/types" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" networkI "github.com/cosmos/cosmos-sdk/testutil/network" - "github.com/comdex-official/comdex/testutil/network" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - pruningtypes "github.com/cosmos/cosmos-sdk/store/pruning/types" dbm "github.com/cometbft/cometbft-db" tmcli "github.com/cometbft/cometbft/libs/cli" @@ -55,7 +55,7 @@ func (s *VaultIntegrationTestSuite) SetupSuite() { s.T().Skip("skipping test in unit-tests mode.") } - s.app = chain.Setup(false) + s.app = chain.Setup(s.T(), false) s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) s.msgServer = vaultKeeper.NewMsgServer(s.app.VaultKeeper) @@ -65,7 +65,7 @@ func (s *VaultIntegrationTestSuite) SetupSuite() { cfg.NumValidators = 1 s.cfg = cfg - s.network = network.New(s.T(),cfg) + s.network = network.New(s.T(), cfg) s.val = s.network.Validators[0] diff --git a/x/vault/genesis_test.go b/x/vault/genesis_test.go index 64ebc12fd..88d22185e 100644 --- a/x/vault/genesis_test.go +++ b/x/vault/genesis_test.go @@ -11,7 +11,7 @@ import ( ) func TestGenesis(t *testing.T) { - comdexApp := app.Setup(false) + comdexApp := app.Setup(t, false) ctx := comdexApp.BaseApp.NewContext(false, tmproto.Header{}) genesisState := types.GenesisState{ diff --git a/x/vault/handler_test.go b/x/vault/handler_test.go index 7a926f2e1..ea38d42a5 100644 --- a/x/vault/handler_test.go +++ b/x/vault/handler_test.go @@ -18,7 +18,7 @@ import ( ) func TestInvalidMsg(t *testing.T) { - app1 := app.Setup(false) + app1 := app.Setup(t, false) app1.VaultKeeper = keeper.NewKeeper( app1.AppCodec(), app1.GetKey(types.StoreKey), app1.BankKeeper, &app1.AssetKeeper, &app1.MarketKeeper, &app1.CollectorKeeper, &app1.EsmKeeper, diff --git a/x/vault/module_test.go b/x/vault/module_test.go index cdd18577b..f566f6f9e 100644 --- a/x/vault/module_test.go +++ b/x/vault/module_test.go @@ -32,7 +32,7 @@ func TestModuleTestSuite(t *testing.T) { } func (suite *ModuleTestSuite) SetupTest() { - app := chain.Setup(false) + app := chain.Setup(suite.T(), false) ctx := app.BaseApp.NewContext(false, tmproto.Header{}) suite.app = app From aa87619fe81615310e090af4e8f1ce55aaba4049 Mon Sep 17 00:00:00 2001 From: Pratik Date: Thu, 28 Sep 2023 12:39:39 +0530 Subject: [PATCH 53/90] minor refactor --- x/collector/keeper/grpc_query_params_test.go | 2 +- x/rewards/keeper/params_test.go | 2 +- x/tokenmint/module_test.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/x/collector/keeper/grpc_query_params_test.go b/x/collector/keeper/grpc_query_params_test.go index 24b4c5091..12a4b8ea1 100644 --- a/x/collector/keeper/grpc_query_params_test.go +++ b/x/collector/keeper/grpc_query_params_test.go @@ -12,7 +12,7 @@ import ( ) func TestParamsQuery(t *testing.T) { - comdexApp := app.Setup(false) + comdexApp := app.Setup(t, false) ctx := comdexApp.BaseApp.NewContext(false, tmproto.Header{}) wctx := sdk.WrapSDKContext(ctx) diff --git a/x/rewards/keeper/params_test.go b/x/rewards/keeper/params_test.go index f0fdaec5f..ecc84f5a5 100644 --- a/x/rewards/keeper/params_test.go +++ b/x/rewards/keeper/params_test.go @@ -11,7 +11,7 @@ import ( ) func TestGetParams(t *testing.T) { - comdexApp := app.Setup(false) + comdexApp := app.Setup(t, false) ctx := comdexApp.BaseApp.NewContext(false, tmproto.Header{}) params := types.DefaultParams() diff --git a/x/tokenmint/module_test.go b/x/tokenmint/module_test.go index b7055a99b..9ad35f5bf 100644 --- a/x/tokenmint/module_test.go +++ b/x/tokenmint/module_test.go @@ -30,7 +30,7 @@ func TestModuleTestSuite(t *testing.T) { } func (suite *ModuleTestSuite) SetupTest() { - app := chain.Setup(false) + app := chain.Setup(suite.T(), false) ctx := app.BaseApp.NewContext(false, tmproto.Header{}) suite.app = app From 5aa681700198309827a9a5b2acd8e61493e241b2 Mon Sep 17 00:00:00 2001 From: Pratik Date: Thu, 28 Sep 2023 13:16:06 +0530 Subject: [PATCH 54/90] updating testcases- vault & liquidity module --- x/liquidity/keeper/pair_test.go | 2 +- x/liquidity/keeper/pool_test.go | 12 ++++++------ x/liquidity/keeper/rewards_test.go | 2 +- x/vault/keeper/msg_server_test.go | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/x/liquidity/keeper/pair_test.go b/x/liquidity/keeper/pair_test.go index abaa11884..59757a868 100644 --- a/x/liquidity/keeper/pair_test.go +++ b/x/liquidity/keeper/pair_test.go @@ -73,7 +73,7 @@ func (s *KeeperTestSuite) TestCreatePair() { Msg: *types.NewMsgCreatePair( appID1, addr1, asset1.Denom, asset2.Denom, ), - ExpErr: sdkerrors.Wrap(sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "0ucmdx is smaller than 2000000000ucmdx"), "insufficient pair creation fee"), + ExpErr: sdkerrors.Wrap(sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance is smaller than 2000000000ucmdx"), "insufficient pair creation fee"), ExpResp: &types.Pair{}, QueryResponseIndex: 0, QueryResponse: nil, diff --git a/x/liquidity/keeper/pool_test.go b/x/liquidity/keeper/pool_test.go index 36494ef90..573e8081a 100644 --- a/x/liquidity/keeper/pool_test.go +++ b/x/liquidity/keeper/pool_test.go @@ -122,7 +122,7 @@ func (s *KeeperTestSuite) TestCreatePool() { Msg: *types.NewMsgCreatePool( appID1, addr1, dummyPair1.Id, sdk.NewCoins(sdk.NewCoin(dummyPair1.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(dummyPair1.QuoteCoinDenom, sdk.NewInt(1000000000000))), ), - ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "0%s is smaller than 1000000000000%s", dummyPair1.QuoteCoinDenom, dummyPair1.QuoteCoinDenom), + ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance is smaller than 1000000000000%s", dummyPair1.QuoteCoinDenom), ExpResp: &types.Pool{}, QueryResponseIndex: 0, QueryResponse: nil, @@ -135,7 +135,7 @@ func (s *KeeperTestSuite) TestCreatePool() { Msg: *types.NewMsgCreatePool( appID1, addr1, dummyPair2.Id, sdk.NewCoins(sdk.NewCoin(dummyPair2.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(dummyPair2.QuoteCoinDenom, sdk.NewInt(1000000000000))), ), - ExpErr: sdkerrors.Wrap(sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "0%s is smaller than %s", params.PoolCreationFee[0].Denom, params.PoolCreationFee[0].String()), "insufficient pool creation fee"), + ExpErr: sdkerrors.Wrap(sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance is smaller than %s", params.PoolCreationFee[0].String()), "insufficient pool creation fee"), ExpResp: &types.Pool{}, QueryResponseIndex: 0, QueryResponse: nil, @@ -450,7 +450,7 @@ func (s *KeeperTestSuite) TestDeposit() { Msg: *types.NewMsgDeposit( appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdk.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdk.NewInt(100000000))), ), - ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "0%s is smaller than 100000000%s", app1Pair.BaseCoinDenom, app1Pair.BaseCoinDenom), + ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance is smaller than 100000000%s", app1Pair.BaseCoinDenom), ExpResp: &types.DepositRequest{}, QueryResponseIndex: 0, QueryResponse: nil, @@ -734,7 +734,7 @@ func (s *KeeperTestSuite) TestWithdraw() { Msg: *types.NewMsgWithdraw( appID1, addr1, pool.Id, availablePoolBalance.Add(sdk.NewCoin(availablePoolBalance.Denom, availablePoolBalance.Amount.Add(newInt(1000)))), ), - ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "%s is smaller than %s", availablePoolBalance.String(), availablePoolBalance.Add(sdk.NewCoin(availablePoolBalance.Denom, availablePoolBalance.Amount.Add(newInt(1000)))).String()), + ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance %s is smaller than %s", availablePoolBalance.String(), availablePoolBalance.Add(sdk.NewCoin(availablePoolBalance.Denom, availablePoolBalance.Amount.Add(newInt(1000)))).String()), ExpResp: &types.WithdrawRequest{}, AvailableBalance: sdk.NewCoins(), }, @@ -1055,7 +1055,7 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { appID1, addr1, dummyPair1.Id, sdk.NewCoins(sdk.NewCoin(dummyPair1.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(dummyPair1.QuoteCoinDenom, sdk.NewInt(1000000000000))), sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), ), - ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "0%s is smaller than 1000000000000%s", dummyPair1.QuoteCoinDenom, dummyPair1.QuoteCoinDenom), + ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance is smaller than 1000000000000%s", dummyPair1.QuoteCoinDenom), ExpResp: &types.Pool{}, QueryResponseIndex: 0, QueryResponse: nil, @@ -1069,7 +1069,7 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { appID1, addr1, dummyPair2.Id, sdk.NewCoins(sdk.NewCoin(dummyPair2.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(dummyPair2.QuoteCoinDenom, sdk.NewInt(1000000000000))), sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), ), - ExpErr: sdkerrors.Wrap(sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "0%s is smaller than %s", params.PoolCreationFee[0].Denom, params.PoolCreationFee[0].String()), "insufficient pool creation fee"), + ExpErr: sdkerrors.Wrap(sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance is smaller than %s", params.PoolCreationFee[0].String()), "insufficient pool creation fee"), ExpResp: &types.Pool{}, QueryResponseIndex: 0, QueryResponse: nil, diff --git a/x/liquidity/keeper/rewards_test.go b/x/liquidity/keeper/rewards_test.go index 526a01e3a..9a2f711dd 100644 --- a/x/liquidity/keeper/rewards_test.go +++ b/x/liquidity/keeper/rewards_test.go @@ -77,7 +77,7 @@ func (s *KeeperTestSuite) TestFarm() { { Name: "error insufficient pool denoms", Msg: *types.NewMsgFarm(appID1, pool.Id, liquidityProvider1, utils.ParseCoin("100000000000pool1-1")), - ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "10000000000pool1-1 is smaller than 100000000000pool1-1"), + ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance 10000000000pool1-1 is smaller than 100000000000pool1-1"), AvailableBalance: utils.ParseCoins("10000000000pool1-1,10000000000pool2-1"), }, { diff --git a/x/vault/keeper/msg_server_test.go b/x/vault/keeper/msg_server_test.go index 681dd8736..7a9356730 100644 --- a/x/vault/keeper/msg_server_test.go +++ b/x/vault/keeper/msg_server_test.go @@ -138,7 +138,7 @@ func (s *KeeperTestSuite) TestMsgCreate() { Msg: *types.NewMsgCreateRequest( addr1, appID1, extendedVaultPairID1, newInt(1000000000), newInt(200000000), ), - ExpErr: fmt.Errorf(fmt.Sprintf("0uasset1 is smaller than %duasset1: insufficient funds", 1000000000)), + ExpErr: fmt.Errorf(fmt.Sprintf("spendable balance is smaller than %duasset1: insufficient funds", 1000000000)), ExpResp: nil, QueryResponseIndex: 0, QueryResponse: nil, @@ -399,7 +399,7 @@ func (s *KeeperTestSuite) TestMsgDeposit() { Msg: *types.NewMsgDepositRequest( addr1, appID1, extendedVaultPairID1, 1, newInt(69000000), ), - ExpErr: fmt.Errorf(fmt.Sprintf("0uasset1 is smaller than %duasset1: insufficient funds", 69000000)), + ExpErr: fmt.Errorf(fmt.Sprintf("spendable balance is smaller than %duasset1: insufficient funds", 69000000)), ExpResp: nil, QueryResponseIndex: 0, QueryResponse: nil, From 637f151e3fa50689b0563ab7ce4df3c9cf678fe7 Mon Sep 17 00:00:00 2001 From: Pratik Date: Fri, 29 Sep 2023 19:19:40 +0530 Subject: [PATCH 55/90] fix- resolve wrong denom in debt auction --- x/liquidationsV2/keeper/liquidate.go | 2 +- x/liquidationsV2/keeper/msg_server_test.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/x/liquidationsV2/keeper/liquidate.go b/x/liquidationsV2/keeper/liquidate.go index 68e5bf800..bc1fbf687 100644 --- a/x/liquidationsV2/keeper/liquidate.go +++ b/x/liquidationsV2/keeper/liquidate.go @@ -527,7 +527,7 @@ func (k Keeper) CheckStatsForSurplusAndDebt(ctx sdk.Context, appID, assetID uint // // --Collateral cmst harbor // debt harbor cmst -func (k Keeper) DebtTokenAmount(ctx sdk.Context, CollateralAssetId, DebtAssetID uint64, lotSize, debtLotSize sdk.Int) (collateralToken, debtToken sdk.Coin) { +func (k Keeper) DebtTokenAmount(ctx sdk.Context, DebtAssetID, CollateralAssetId uint64, lotSize, debtLotSize sdk.Int) (collateralToken, debtToken sdk.Coin) { collateralAsset, found1 := k.asset.GetAsset(ctx, CollateralAssetId) debtAsset, found2 := k.asset.GetAsset(ctx, DebtAssetID) if !found1 || !found2 { diff --git a/x/liquidationsV2/keeper/msg_server_test.go b/x/liquidationsV2/keeper/msg_server_test.go index 33046f327..d58600d3f 100644 --- a/x/liquidationsV2/keeper/msg_server_test.go +++ b/x/liquidationsV2/keeper/msg_server_test.go @@ -775,12 +775,12 @@ func (s *KeeperTestSuite) WasmSetCollectorLookupTableAndAuctionControlForDebt() AppID: 2, CollectorAssetID: 2, SecondaryAssetID: 3, - SurplusThreshold: sdk.NewInt(10000000), - DebtThreshold: sdk.NewInt(5000000), + SurplusThreshold: sdk.NewInt(1000000000000000000), + DebtThreshold: sdk.NewInt(282078000000), LockerSavingRate: sdk.MustNewDecFromStr("0.1"), - LotSize: sdk.NewInt(200000), + LotSize: sdk.NewInt(25000000000), BidFactor: sdk.MustNewDecFromStr("0.01"), - DebtLotSize: sdk.NewInt(2000000), + DebtLotSize: sdk.NewInt(13157894000000), }, }, } { From bb7d57bf162a2628b60ae4cae880d6e1c9cd8621 Mon Sep 17 00:00:00 2001 From: Pratik Date: Wed, 4 Oct 2023 13:25:15 +0530 Subject: [PATCH 56/90] minor refactor --- x/auctionsV2/keeper/auctions.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/auctionsV2/keeper/auctions.go b/x/auctionsV2/keeper/auctions.go index 6eedb19db..c835f0be9 100644 --- a/x/auctionsV2/keeper/auctions.go +++ b/x/auctionsV2/keeper/auctions.go @@ -411,12 +411,12 @@ func (k Keeper) CloseEnglishAuction(ctx sdk.Context, englishAuction types.Auctio //send newly minted token((collateral)) to the user // send debt to collector to get added //set net fees data - err = k.tokenMint.MintNewTokensForApp(ctx, englishAuction.AppId, englishAuction.DebtAssetId, bidding.BidderAddress, englishAuction.DebtToken.Amount) + err = k.tokenMint.MintNewTokensForApp(ctx, englishAuction.AppId, englishAuction.DebtAssetId, bidding.BidderAddress, englishAuction.CollateralToken.Amount) if err != nil { return err } - err = k.bankKeeper.SendCoinsFromModuleToModule(ctx, auctionsV2types.ModuleName, collectortypes.ModuleName, sdk.NewCoins(englishAuction.CollateralToken)) + err = k.bankKeeper.SendCoinsFromModuleToModule(ctx, auctionsV2types.ModuleName, collectortypes.ModuleName, sdk.NewCoins(englishAuction.DebtToken)) if err != nil { return err } From 8c3b1569123ec36aff073d8693b78a2a3c4dc267 Mon Sep 17 00:00:00 2001 From: vishnukumavat Date: Sun, 8 Oct 2023 00:02:48 +0530 Subject: [PATCH 57/90] amm pool mathematics refactored --- x/liquidity/amm/pool.go | 199 ++++++++++++++++++++-------------------- 1 file changed, 100 insertions(+), 99 deletions(-) diff --git a/x/liquidity/amm/pool.go b/x/liquidity/amm/pool.go index 8ea69fb3e..0642fede9 100644 --- a/x/liquidity/amm/pool.go +++ b/x/liquidity/amm/pool.go @@ -4,7 +4,8 @@ import ( "fmt" "math/big" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" + // sdk "github.com/cosmos/cosmos-sdk/types" utils "github.com/comdex-official/comdex/types" ) @@ -16,18 +17,18 @@ var ( // Pool is the interface of a pool. type Pool interface { - Balances() (rx, ry sdk.Int) - SetBalances(rx, ry sdk.Int, derive bool) - PoolCoinSupply() sdk.Int - Price() sdk.Dec + Balances() (rx, ry sdkmath.Int) + SetBalances(rx, ry sdkmath.Int, derive bool) + PoolCoinSupply() sdkmath.Int + Price() sdkmath.LegacyDec IsDepleted() bool - HighestBuyPrice() (sdk.Dec, bool) - LowestSellPrice() (sdk.Dec, bool) - BuyAmountOver(price sdk.Dec, inclusive bool) sdk.Int - SellAmountUnder(price sdk.Dec, inclusive bool) sdk.Int - BuyAmountTo(price sdk.Dec) sdk.Int - SellAmountTo(price sdk.Dec) sdk.Int + HighestBuyPrice() (sdkmath.LegacyDec, bool) + LowestSellPrice() (sdkmath.LegacyDec, bool) + BuyAmountOver(price sdkmath.LegacyDec, inclusive bool) sdkmath.Int + SellAmountUnder(price sdkmath.LegacyDec, inclusive bool) sdkmath.Int + BuyAmountTo(price sdkmath.LegacyDec) sdkmath.Int + SellAmountTo(price sdkmath.LegacyDec) sdkmath.Int Clone() Pool } @@ -37,14 +38,14 @@ type BasicPool struct { // rx and ry are the pool's reserve balance of each x/y coin. // In perspective of a pair, x coin is the quote coin and // y coin is the base coin. - rx, ry sdk.Int + rx, ry sdkmath.Int // ps is the pool's pool coin supply. - ps sdk.Int + ps sdkmath.Int } // NewBasicPool returns a new BasicPool. -// It is OK to pass an empty sdk.Int to ps when ps is not going to be used. -func NewBasicPool(rx, ry, ps sdk.Int) *BasicPool { +// It is OK to pass an empty sdkmath.Int to ps when ps is not going to be used. +func NewBasicPool(rx, ry, ps sdkmath.Int) *BasicPool { return &BasicPool{ rx: rx, ry: ry, @@ -52,11 +53,11 @@ func NewBasicPool(rx, ry, ps sdk.Int) *BasicPool { } } -func CreateBasicPool(rx, ry sdk.Int) (*BasicPool, error) { +func CreateBasicPool(rx, ry sdkmath.Int) (*BasicPool, error) { if rx.IsZero() || ry.IsZero() { return nil, fmt.Errorf("cannot create basic pool with zero reserve amount") } - p := sdk.NewDec(rx.Int64()).Quo(sdk.NewDec(ry.Int64())) + p := rx.ToLegacyDec().Quo(ry.ToLegacyDec()) if p.LT(MinPoolPrice) { return nil, fmt.Errorf("pool price is lower than min price %s", MinPoolPrice) } @@ -67,26 +68,26 @@ func CreateBasicPool(rx, ry sdk.Int) (*BasicPool, error) { } // Balances returns the balances of the pool. -func (pool *BasicPool) Balances() (rx, ry sdk.Int) { +func (pool *BasicPool) Balances() (rx, ry sdkmath.Int) { return pool.rx, pool.ry } -func (pool *BasicPool) SetBalances(rx, ry sdk.Int, _ bool) { +func (pool *BasicPool) SetBalances(rx, ry sdkmath.Int, _ bool) { pool.rx = rx pool.ry = ry } // PoolCoinSupply returns the pool coin supply. -func (pool *BasicPool) PoolCoinSupply() sdk.Int { +func (pool *BasicPool) PoolCoinSupply() sdkmath.Int { return pool.ps } // Price returns the pool price. -func (pool *BasicPool) Price() sdk.Dec { +func (pool *BasicPool) Price() sdkmath.LegacyDec { if pool.rx.IsZero() || pool.ry.IsZero() { panic("pool price is not defined for a depleted pool") } - return sdk.NewDec(pool.rx.Int64()).Quo(sdk.NewDec(pool.ry.Int64())) + return pool.rx.ToLegacyDec().Quo(pool.ry.ToLegacyDec()) } // IsDepleted returns whether the pool is depleted or not. @@ -95,14 +96,14 @@ func (pool *BasicPool) IsDepleted() bool { } // HighestBuyPrice returns the highest buy price of the pool. -func (pool *BasicPool) HighestBuyPrice() (price sdk.Dec, found bool) { +func (pool *BasicPool) HighestBuyPrice() (price sdkmath.LegacyDec, found bool) { // The highest buy price is actually a bit lower than pool price, // but it's not important for our matching logic. return pool.Price(), true } // LowestSellPrice returns the lowest sell price of the pool. -func (pool *BasicPool) LowestSellPrice() (price sdk.Dec, found bool) { +func (pool *BasicPool) LowestSellPrice() (price sdkmath.LegacyDec, found bool) { // The lowest sell price is actually a bit higher than the pool price, // but it's not important for our matching logic. return pool.Price(), true @@ -111,7 +112,7 @@ func (pool *BasicPool) LowestSellPrice() (price sdk.Dec, found bool) { // BuyAmountOver returns the amount of buy orders for price greater than // or equal to given price. // amt = (X - P*Y)/P -func (pool *BasicPool) BuyAmountOver(price sdk.Dec, _ bool) (amt sdk.Int) { +func (pool *BasicPool) BuyAmountOver(price sdkmath.LegacyDec, _ bool) (amt sdkmath.Int) { origPrice := price if price.LT(MinPoolPrice) { price = MinPoolPrice @@ -119,7 +120,7 @@ func (pool *BasicPool) BuyAmountOver(price sdk.Dec, _ bool) (amt sdk.Int) { if price.GTE(pool.Price()) { return zeroInt } - dx := sdk.NewDec(pool.rx.Int64()).Sub(price.MulInt(pool.ry)) + dx := pool.rx.ToLegacyDec().Sub(price.MulInt(pool.ry)) if !dx.IsPositive() { return zeroInt } @@ -134,14 +135,14 @@ func (pool *BasicPool) BuyAmountOver(price sdk.Dec, _ bool) (amt sdk.Int) { return } -func (pool *BasicPool) SellAmountUnder(price sdk.Dec, _ bool) (amt sdk.Int) { +func (pool *BasicPool) SellAmountUnder(price sdkmath.LegacyDec, _ bool) (amt sdkmath.Int) { if price.GT(MaxPoolPrice) { price = MaxPoolPrice } if price.LTE(pool.Price()) { return zeroInt } - amt = sdk.NewDec(pool.ry.Int64()).Sub(sdk.NewDec(pool.rx.Int64()).QuoRoundUp(price)).TruncateInt() + amt = pool.ry.ToLegacyDec().Sub(pool.rx.ToLegacyDec().QuoRoundUp(price)).TruncateInt() if !amt.IsPositive() { return zeroInt } @@ -151,7 +152,7 @@ func (pool *BasicPool) SellAmountUnder(price sdk.Dec, _ bool) (amt sdk.Int) { // BuyAmountTo returns the amount of buy orders of the pool for price, // where BuyAmountTo is used when the pool price is higher than the highest // price of the order book. -func (pool *BasicPool) BuyAmountTo(price sdk.Dec) (amt sdk.Int) { +func (pool *BasicPool) BuyAmountTo(price sdkmath.LegacyDec) (amt sdkmath.Int) { origPrice := price if price.LT(MinPoolPrice) { price = MinPoolPrice @@ -159,10 +160,10 @@ func (pool *BasicPool) BuyAmountTo(price sdk.Dec) (amt sdk.Int) { if price.GTE(pool.Price()) { return zeroInt } - sqrtRx := utils.DecApproxSqrt(sdk.NewDec(pool.rx.Int64())) - sqrtRy := utils.DecApproxSqrt(sdk.NewDec(pool.ry.Int64())) + sqrtRx := utils.DecApproxSqrt(pool.rx.ToLegacyDec()) + sqrtRy := utils.DecApproxSqrt(pool.ry.ToLegacyDec()) sqrtPrice := utils.DecApproxSqrt(price) - dx := sdk.NewDec(pool.rx.Int64()).Sub(sqrtPrice.Mul(sqrtRx.Mul(sqrtRy))) // dx = rx - sqrt(P * rx * ry) + dx := pool.rx.ToLegacyDec().Sub(sqrtPrice.Mul(sqrtRx.Mul(sqrtRy))) // dx = rx - sqrt(P * rx * ry) if !dx.IsPositive() { return zeroInt } @@ -180,18 +181,18 @@ func (pool *BasicPool) BuyAmountTo(price sdk.Dec) (amt sdk.Int) { // SellAmountTo returns the amount of sell orders of the pool for price, // where SellAmountTo is used when the pool price is lower than the lowest // price of the order book. -func (pool *BasicPool) SellAmountTo(price sdk.Dec) (amt sdk.Int) { +func (pool *BasicPool) SellAmountTo(price sdkmath.LegacyDec) (amt sdkmath.Int) { if price.GT(MaxPoolPrice) { price = MaxPoolPrice } if price.LTE(pool.Price()) { return zeroInt } - sqrtRx := utils.DecApproxSqrt(sdk.NewDec(pool.rx.Int64())) - sqrtRy := utils.DecApproxSqrt(sdk.NewDec(pool.ry.Int64())) + sqrtRx := utils.DecApproxSqrt(pool.rx.ToLegacyDec()) + sqrtRy := utils.DecApproxSqrt(pool.ry.ToLegacyDec()) sqrtPrice := utils.DecApproxSqrt(price) // dy = ry - sqrt(rx * ry / P) - amt = sdk.NewDec(pool.ry.Int64()).Sub(sqrtRx.Mul(sqrtRy).Quo(sqrtPrice)).TruncateInt() + amt = pool.ry.ToLegacyDec().Sub(sqrtRx.Mul(sqrtRy).Quo(sqrtPrice)).TruncateInt() if !amt.IsPositive() { return zeroInt } @@ -203,15 +204,15 @@ func (pool *BasicPool) Clone() Pool { } type RangedPool struct { - rx, ry sdk.Int - ps sdk.Int - minPrice, maxPrice sdk.Dec - transX, transY sdk.Dec - xComp, yComp sdk.Dec + rx, ry sdkmath.Int + ps sdkmath.Int + minPrice, maxPrice sdkmath.LegacyDec + transX, transY sdkmath.LegacyDec + xComp, yComp sdkmath.LegacyDec } // NewRangedPool returns a new RangedPool. -func NewRangedPool(rx, ry, ps sdk.Int, minPrice, maxPrice sdk.Dec) *RangedPool { +func NewRangedPool(rx, ry, ps sdkmath.Int, minPrice, maxPrice sdkmath.LegacyDec) *RangedPool { transX, transY := DeriveTranslation(rx, ry, minPrice, maxPrice) return &RangedPool{ rx: rx, @@ -221,14 +222,14 @@ func NewRangedPool(rx, ry, ps sdk.Int, minPrice, maxPrice sdk.Dec) *RangedPool { maxPrice: maxPrice, transX: transX, transY: transY, - xComp: sdk.NewDec(rx.Int64()).Add(transX), - yComp: sdk.NewDec(ry.Int64()).Add(transY), + xComp: rx.ToLegacyDec().Add(transX), + yComp: ry.ToLegacyDec().Add(transY), } } // CreateRangedPool creates new RangedPool from given inputs, while validating // the inputs and using only needed amount of x/y coins(the rest should be refunded). -func CreateRangedPool(x, y sdk.Int, minPrice, maxPrice, initialPrice sdk.Dec) (pool *RangedPool, err error) { +func CreateRangedPool(x, y sdkmath.Int, minPrice, maxPrice, initialPrice sdkmath.LegacyDec) (pool *RangedPool, err error) { if !x.IsPositive() && !y.IsPositive() { return nil, fmt.Errorf("either x or y must be positive") } @@ -237,7 +238,7 @@ func CreateRangedPool(x, y sdk.Int, minPrice, maxPrice, initialPrice sdk.Dec) (p } // P = initialPrice, M = minPrice, L = maxPrice - var ax, ay sdk.Int + var ax, ay sdkmath.Int switch { case initialPrice.Equal(minPrice): // single y asset pool ax = zeroInt @@ -247,7 +248,7 @@ func CreateRangedPool(x, y sdk.Int, minPrice, maxPrice, initialPrice sdk.Dec) (p ay = zeroInt default: // normal pool sqrt := utils.DecApproxSqrt - xDec, yDec := sdk.NewDec(x.Int64()), sdk.NewDec(y.Int64()) + xDec, yDec := x.ToLegacyDec(), y.ToLegacyDec() sqrtP := sqrt(initialPrice) // sqrt(P) sqrtM := sqrt(minPrice) // sqrt(M) sqrtL := sqrt(maxPrice) // sqrt(L) @@ -265,7 +266,7 @@ func CreateRangedPool(x, y sdk.Int, minPrice, maxPrice, initialPrice sdk.Dec) (p return NewRangedPool(ax, ay, InitialPoolCoinSupply(ax, ay), minPrice, maxPrice), nil } -func ValidateRangedPoolParams(minPrice, maxPrice, initialPrice sdk.Dec) error { +func ValidateRangedPoolParams(minPrice, maxPrice, initialPrice sdkmath.LegacyDec) error { if !initialPrice.IsPositive() { return fmt.Errorf("initial price must be positive: %s", initialPrice) } @@ -294,41 +295,41 @@ func ValidateRangedPoolParams(minPrice, maxPrice, initialPrice sdk.Dec) error { } // Balances returns the balances of the pool. -func (pool *RangedPool) Balances() (rx, ry sdk.Int) { +func (pool *RangedPool) Balances() (rx, ry sdkmath.Int) { return pool.rx, pool.ry } // SetBalances sets RangedPool's balances without recalculating // transX and transY. -func (pool *RangedPool) SetBalances(rx, ry sdk.Int, derive bool) { +func (pool *RangedPool) SetBalances(rx, ry sdkmath.Int, derive bool) { if derive { pool.transX, pool.transY = DeriveTranslation(rx, ry, pool.minPrice, pool.maxPrice) } pool.rx = rx pool.ry = ry - pool.xComp = sdk.NewDec(pool.rx.Int64()).Add(pool.transX) - pool.yComp = sdk.NewDec(pool.ry.Int64()).Add(pool.transY) + pool.xComp = pool.rx.ToLegacyDec().Add(pool.transX) + pool.yComp = pool.ry.ToLegacyDec().Add(pool.transY) } // PoolCoinSupply returns the pool coin supply. -func (pool *RangedPool) PoolCoinSupply() sdk.Int { +func (pool *RangedPool) PoolCoinSupply() sdkmath.Int { return pool.ps } -func (pool *RangedPool) Translation() (transX, transY sdk.Dec) { +func (pool *RangedPool) Translation() (transX, transY sdkmath.LegacyDec) { return pool.transX, pool.transY } -func (pool *RangedPool) MinPrice() sdk.Dec { +func (pool *RangedPool) MinPrice() sdkmath.LegacyDec { return pool.minPrice } -func (pool *RangedPool) MaxPrice() sdk.Dec { +func (pool *RangedPool) MaxPrice() sdkmath.LegacyDec { return pool.maxPrice } // Price returns the pool price. -func (pool *RangedPool) Price() sdk.Dec { +func (pool *RangedPool) Price() sdkmath.LegacyDec { if pool.rx.IsZero() && pool.ry.IsZero() { panic("pool price is not defined for a depleted pool") } @@ -341,14 +342,14 @@ func (pool *RangedPool) IsDepleted() bool { } // HighestBuyPrice returns the highest buy price of the pool. -func (pool *RangedPool) HighestBuyPrice() (price sdk.Dec, found bool) { +func (pool *RangedPool) HighestBuyPrice() (price sdkmath.LegacyDec, found bool) { // The highest buy price is actually a bit lower than pool price, // but it's not important for our matching logic. return pool.Price(), true } // LowestSellPrice returns the lowest sell price of the pool. -func (pool *RangedPool) LowestSellPrice() (price sdk.Dec, found bool) { +func (pool *RangedPool) LowestSellPrice() (price sdkmath.LegacyDec, found bool) { // The lowest sell price is actually a bit higher than the pool price, // but it's not important for our matching logic. return pool.Price(), true @@ -356,7 +357,7 @@ func (pool *RangedPool) LowestSellPrice() (price sdk.Dec, found bool) { // BuyAmountOver returns the amount of buy orders for price greater than // or equal to given price. -func (pool *RangedPool) BuyAmountOver(price sdk.Dec, _ bool) (amt sdk.Int) { +func (pool *RangedPool) BuyAmountOver(price sdkmath.LegacyDec, _ bool) (amt sdkmath.Int) { origPrice := price if price.LT(pool.minPrice) { price = pool.minPrice @@ -368,8 +369,8 @@ func (pool *RangedPool) BuyAmountOver(price sdk.Dec, _ bool) (amt sdk.Int) { dx := pool.xComp.Sub(price.Mul(pool.yComp)) if !dx.IsPositive() { return zeroInt - } else if dx.GT(sdk.NewDec(pool.rx.Int64())) { - dx = sdk.NewDec(pool.rx.Int64()) + } else if dx.GT(pool.rx.ToLegacyDec()) { + dx = pool.rx.ToLegacyDec() } utils.SafeMath(func() { amt = dx.QuoTruncate(origPrice).TruncateInt() // dy = dx / P @@ -384,7 +385,7 @@ func (pool *RangedPool) BuyAmountOver(price sdk.Dec, _ bool) (amt sdk.Int) { // SellAmountUnder returns the amount of sell orders for price less than // or equal to given price. -func (pool *RangedPool) SellAmountUnder(price sdk.Dec, _ bool) (amt sdk.Int) { +func (pool *RangedPool) SellAmountUnder(price sdkmath.LegacyDec, _ bool) (amt sdkmath.Int) { if price.GT(pool.maxPrice) { price = pool.maxPrice } @@ -405,7 +406,7 @@ func (pool *RangedPool) SellAmountUnder(price sdk.Dec, _ bool) (amt sdk.Int) { // BuyAmountTo returns the amount of buy orders of the pool for price, // where BuyAmountTo is used when the pool price is higher than the highest // price of the order book. -func (pool *RangedPool) BuyAmountTo(price sdk.Dec) (amt sdk.Int) { +func (pool *RangedPool) BuyAmountTo(price sdkmath.LegacyDec) (amt sdkmath.Int) { origPrice := price if price.LT(pool.minPrice) { price = pool.minPrice @@ -417,11 +418,11 @@ func (pool *RangedPool) BuyAmountTo(price sdk.Dec) (amt sdk.Int) { sqrtYComp := utils.DecApproxSqrt(pool.yComp) sqrtPrice := utils.DecApproxSqrt(price) // dx = rx - (sqrt(P * (rx + transX) * (ry + transY)) - transX) - dx := sdk.NewDec(pool.rx.Int64()).Sub(sqrtPrice.Mul(sqrtXComp.Mul(sqrtYComp)).Sub(pool.transX)) + dx := pool.rx.ToLegacyDec().Sub(sqrtPrice.Mul(sqrtXComp.Mul(sqrtYComp)).Sub(pool.transX)) if !dx.IsPositive() { return zeroInt - } else if dx.GT(sdk.NewDec(pool.rx.Int64())) { - dx = sdk.NewDec(pool.rx.Int64()) + } else if dx.GT(pool.rx.ToLegacyDec()) { + dx = pool.rx.ToLegacyDec() } utils.SafeMath(func() { amt = dx.QuoTruncate(origPrice).TruncateInt() // dy = dx / P @@ -437,7 +438,7 @@ func (pool *RangedPool) BuyAmountTo(price sdk.Dec) (amt sdk.Int) { // SellAmountTo returns the amount of sell orders of the pool for price, // where SellAmountTo is used when the pool price is lower than the lowest // price of the order book. -func (pool *RangedPool) SellAmountTo(price sdk.Dec) (amt sdk.Int) { +func (pool *RangedPool) SellAmountTo(price sdkmath.LegacyDec) (amt sdkmath.Int) { if price.GT(pool.maxPrice) { price = pool.maxPrice } @@ -448,7 +449,7 @@ func (pool *RangedPool) SellAmountTo(price sdk.Dec) (amt sdk.Int) { sqrtYComp := utils.DecApproxSqrt(pool.yComp) sqrtPrice := utils.DecApproxSqrt(price) // dy = ry - (sqrt((x + transX) * (y + transY) / P) - b) - amt = sdk.NewDec(pool.ry.Int64()).Sub(sqrtXComp.Mul(sqrtYComp).QuoRoundUp(sqrtPrice).Sub(pool.transY)).TruncateInt() + amt = pool.ry.ToLegacyDec().Sub(sqrtXComp.Mul(sqrtYComp).QuoRoundUp(sqrtPrice).Sub(pool.transY)).TruncateInt() if amt.GT(pool.ry) { amt = pool.ry } @@ -474,35 +475,35 @@ func (pool *RangedPool) Clone() Pool { // Deposit returns accepted x and y coin amount and minted pool coin amount // when someone deposits x and y coins. -func Deposit(rx, ry, ps, x, y sdk.Int) (ax, ay, pc sdk.Int) { +func Deposit(rx, ry, ps, x, y sdkmath.Int) (ax, ay, pc sdkmath.Int) { // Calculate accepted amount and minting amount. // Note that we take as many coins as possible(by ceiling numbers) // from depositor and mint as little coins as possible. utils.SafeMath(func() { - rx, ry := sdk.NewDec(rx.Int64()), sdk.NewDec(ry.Int64()) - ps := sdk.NewDec(ps.Int64()) + rx, ry := rx.ToLegacyDec(), ry.ToLegacyDec() + ps := ps.ToLegacyDec() // pc = floor(ps * min(x / rx, y / ry)) - var ratio sdk.Dec + var ratio sdkmath.LegacyDec switch { case rx.IsZero(): - ratio = sdk.NewDec(y.Int64()).QuoTruncate(ry) + ratio = y.ToLegacyDec().QuoTruncate(ry) case ry.IsZero(): - ratio = sdk.NewDec(x.Int64()).QuoTruncate(rx) + ratio = x.ToLegacyDec().QuoTruncate(rx) default: - ratio = sdk.MinDec( - sdk.NewDec(x.Int64()).QuoTruncate(rx), - sdk.NewDec(y.Int64()).QuoTruncate(ry), + ratio = sdkmath.LegacyMinDec( + x.ToLegacyDec().QuoTruncate(rx), + y.ToLegacyDec().QuoTruncate(ry), ) } pc = ps.MulTruncate(ratio).TruncateInt() - mintProportion := sdk.NewDec(pc.Int64()).Quo(ps) // pc / ps + mintProportion := pc.ToLegacyDec().Quo(ps) // pc / ps ax = rx.Mul(mintProportion).Ceil().TruncateInt() // ceil(rx * mintProportion) ay = ry.Mul(mintProportion).Ceil().TruncateInt() // ceil(ry * mintProportion) }, func() { - ax, ay, pc = sdk.ZeroInt(), sdk.ZeroInt(), sdk.ZeroInt() + ax, ay, pc = sdkmath.ZeroInt(), sdkmath.ZeroInt(), sdkmath.ZeroInt() }) return @@ -511,7 +512,7 @@ func Deposit(rx, ry, ps, x, y sdk.Int) (ax, ay, pc sdk.Int) { // Withdraw returns withdrawn x and y coin amount when someone withdraws // pc pool coin. // Withdraw also takes care of the fee rate. -func Withdraw(rx, ry, ps, pc sdk.Int, feeRate sdk.Dec) (x, y sdk.Int) { +func Withdraw(rx, ry, ps, pc sdkmath.Int, feeRate sdkmath.LegacyDec) (x, y sdkmath.Int) { if pc.Equal(ps) { // Redeeming the last pool coin - give all remaining rx and ry. x = rx @@ -520,26 +521,26 @@ func Withdraw(rx, ry, ps, pc sdk.Int, feeRate sdk.Dec) (x, y sdk.Int) { } utils.SafeMath(func() { - proportion := sdk.NewDec(pc.Int64()).QuoTruncate(sdk.NewDec(ps.Int64())) // pc / ps - multiplier := sdk.OneDec().Sub(feeRate) // 1 - feeRate - x = sdk.NewDec(rx.Int64()).MulTruncate(proportion).MulTruncate(multiplier).TruncateInt() // floor(rx * proportion * multiplier) - y = sdk.NewDec(ry.Int64()).MulTruncate(proportion).MulTruncate(multiplier).TruncateInt() // floor(ry * proportion * multiplier) + proportion := pc.ToLegacyDec().QuoTruncate(ps.ToLegacyDec()) // pc / ps + multiplier := sdkmath.LegacyOneDec().Sub(feeRate) // 1 - feeRate + x = rx.ToLegacyDec().MulTruncate(proportion).MulTruncate(multiplier).TruncateInt() // floor(rx * proportion * multiplier) + y = ry.ToLegacyDec().MulTruncate(proportion).MulTruncate(multiplier).TruncateInt() // floor(ry * proportion * multiplier) }, func() { - x, y = sdk.ZeroInt(), sdk.ZeroInt() + x, y = sdkmath.ZeroInt(), sdkmath.ZeroInt() }) return } -func DeriveTranslation(rx, ry sdk.Int, minPrice, maxPrice sdk.Dec) (transX, transY sdk.Dec) { +func DeriveTranslation(rx, ry sdkmath.Int, minPrice, maxPrice sdkmath.LegacyDec) (transX, transY sdkmath.LegacyDec) { sqrt := utils.DecApproxSqrt // M = minPrice, L = maxPrice - rxDec, ryDec := sdk.NewDec(rx.Int64()), sdk.NewDec(ry.Int64()) + rxDec, ryDec := rx.ToLegacyDec(), ry.ToLegacyDec() sqrtM := sqrt(minPrice) sqrtL := sqrt(maxPrice) - var sqrtP sdk.Dec + var sqrtP sdkmath.LegacyDec switch { case rxDec.IsZero(): // y asset single pool sqrtP = sqrtM @@ -558,7 +559,7 @@ func DeriveTranslation(rx, ry sdk.Int, minPrice, maxPrice sdk.Dec) (transX, tran sqrtP = alpha.Add(sqrt(alpha.Power(2).Add(fourDec))).QuoInt64(2).Mul(sqrtXOverY) } - var sqrtK sdk.Dec + var sqrtK sdkmath.LegacyDec if !sqrtP.Equal(sqrtM) { // sqrtK = sqrt(K) = rx / (sqrt(P) - sqrt(M)) sqrtK = rxDec.Quo(sqrtP.Sub(sqrtM)) @@ -583,13 +584,13 @@ func DeriveTranslation(rx, ry sdk.Int, minPrice, maxPrice sdk.Dec) (transX, tran return } -func PoolOrders(pool Pool, orderer Orderer, lowestPrice, highestPrice sdk.Dec, tickPrec int) []Order { +func PoolOrders(pool Pool, orderer Orderer, lowestPrice, highestPrice sdkmath.LegacyDec, tickPrec int) []Order { return append( PoolBuyOrders(pool, orderer, lowestPrice, highestPrice, tickPrec), PoolSellOrders(pool, orderer, lowestPrice, highestPrice, tickPrec)...) } -func PoolBuyOrders(pool Pool, orderer Orderer, lowestPrice, highestPrice sdk.Dec, tickPrec int) (orders []Order) { +func PoolBuyOrders(pool Pool, orderer Orderer, lowestPrice, highestPrice sdkmath.LegacyDec, tickPrec int) (orders []Order) { defer func() { if r := recover(); r != nil { orders = nil @@ -600,7 +601,7 @@ func PoolBuyOrders(pool Pool, orderer Orderer, lowestPrice, highestPrice sdk.Dec return nil } tmpPool := pool.Clone() - placeOrder := func(price sdk.Dec, amt sdk.Int, derive bool) { + placeOrder := func(price sdkmath.LegacyDec, amt sdkmath.Int, derive bool) { orders = append(orders, orderer.Order(Buy, price, amt)) rx, ry := tmpPool.Balances() rx = rx.Sub(price.MulInt(amt).Ceil().TruncateInt()) // quote coin ceiling @@ -613,7 +614,7 @@ func PoolBuyOrders(pool Pool, orderer Orderer, lowestPrice, highestPrice sdk.Dec placeOrder(highestPrice, amt, true) } } - tick := PriceToDownTick(sdk.MinDec(highestPrice, tmpPool.Price()), tickPrec) + tick := PriceToDownTick(sdkmath.LegacyMinDec(highestPrice, tmpPool.Price()), tickPrec) for tick.GTE(lowestPrice) { amt := tmpPool.BuyAmountOver(tick, true) if amt.LT(MinCoinAmount) { @@ -630,7 +631,7 @@ func PoolBuyOrders(pool Pool, orderer Orderer, lowestPrice, highestPrice sdk.Dec return orders } -func PoolSellOrders(pool Pool, orderer Orderer, lowestPrice, highestPrice sdk.Dec, tickPrec int) (orders []Order) { +func PoolSellOrders(pool Pool, orderer Orderer, lowestPrice, highestPrice sdkmath.LegacyDec, tickPrec int) (orders []Order) { defer func() { if r := recover(); r != nil { orders = nil @@ -641,7 +642,7 @@ func PoolSellOrders(pool Pool, orderer Orderer, lowestPrice, highestPrice sdk.De return nil } tmpPool := pool.Clone() - placeOrder := func(price sdk.Dec, amt sdk.Int, derive bool) { + placeOrder := func(price sdkmath.LegacyDec, amt sdkmath.Int, derive bool) { orders = append(orders, orderer.Order(Sell, price, amt)) rx, ry := tmpPool.Balances() rx = rx.Add(price.MulInt(amt).TruncateInt()) // quote coin truncation @@ -654,7 +655,7 @@ func PoolSellOrders(pool Pool, orderer Orderer, lowestPrice, highestPrice sdk.De placeOrder(lowestPrice, amt, true) } } - tick := PriceToUpTick(sdk.MaxDec(lowestPrice, tmpPool.Price()), tickPrec) + tick := PriceToUpTick(sdkmath.LegacyMaxDec(lowestPrice, tmpPool.Price()), tickPrec) for tick.LTE(highestPrice) { amt := tmpPool.SellAmountUnder(tick, true) if amt.LT(MinCoinAmount) || tick.MulInt(amt).TruncateInt().IsZero() { @@ -672,11 +673,11 @@ func PoolSellOrders(pool Pool, orderer Orderer, lowestPrice, highestPrice sdk.De } // InitialPoolCoinSupply returns ideal initial pool coin minting amount. -func InitialPoolCoinSupply(x, y sdk.Int) sdk.Int { +func InitialPoolCoinSupply(x, y sdkmath.Int) sdkmath.Int { cx := len(x.BigInt().Text(10)) - 1 // characteristic of x cy := len(y.BigInt().Text(10)) - 1 // characteristic of y c := ((cx + 1) + (cy + 1) + 1) / 2 // ceil(((cx + 1) + (cy + 1)) / 2) res := big.NewInt(10) res.Exp(res, big.NewInt(int64(c)), nil) // 10^c - return sdk.NewIntFromBigInt(res) + return sdkmath.NewIntFromBigInt(res) } From 4269ec8864edffadf719bb8fc68aca7ca64a70c3 Mon Sep 17 00:00:00 2001 From: vishnukumavat Date: Mon, 9 Oct 2023 16:56:34 +0530 Subject: [PATCH 58/90] legacy sdk types replacement for liquidity amm --- x/liquidity/amm/amm.go | 9 ++-- x/liquidity/amm/match.go | 90 +++++++++++++++++------------------ x/liquidity/amm/match_test.go | 4 +- x/liquidity/amm/order.go | 60 +++++++++++------------ x/liquidity/amm/orderbook.go | 40 ++++++++-------- x/liquidity/amm/pool.go | 1 - x/liquidity/amm/tick.go | 64 ++++++++++++------------- x/liquidity/amm/util.go | 30 ++++++------ x/liquidity/amm/view.go | 62 ++++++++++++------------ 9 files changed, 179 insertions(+), 181 deletions(-) diff --git a/x/liquidity/amm/amm.go b/x/liquidity/amm/amm.go index 2932c290b..e29578010 100644 --- a/x/liquidity/amm/amm.go +++ b/x/liquidity/amm/amm.go @@ -2,17 +2,16 @@ package amm import ( sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" ) // The minimum and maximum coin amount used in the amm package. var ( - MinCoinAmount = sdk.NewInt(100) + MinCoinAmount = sdkmath.NewInt(100) MaxCoinAmount = sdkmath.NewIntWithDecimal(1, 40) ) var ( - MinPoolPrice = sdk.NewDecWithPrec(1, 15) // 10^-15 - MaxPoolPrice = sdk.NewDecFromInt(sdkmath.NewIntWithDecimal(1, 20)) // 10^20 - MinRangedPoolPriceGapRatio = sdk.NewDecWithPrec(1, 3) // 0.001, 0.1% + MinPoolPrice = sdkmath.LegacyNewDecWithPrec(1, 15) // 10^-15 + MaxPoolPrice = sdkmath.LegacyNewDecFromInt(sdkmath.NewIntWithDecimal(1, 20)) // 10^20 + MinRangedPoolPriceGapRatio = sdkmath.LegacyNewDecWithPrec(1, 3) // 0.001, 0.1% ) diff --git a/x/liquidity/amm/match.go b/x/liquidity/amm/match.go index 9e91e1924..2d645674e 100644 --- a/x/liquidity/amm/match.go +++ b/x/liquidity/amm/match.go @@ -3,7 +3,7 @@ package amm import ( "fmt" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" ) // PriceDirection specifies estimated price direction within this batch. @@ -29,12 +29,12 @@ func (dir PriceDirection) String() string { } // FillOrder fills the order by given amount and price. -func FillOrder(order Order, amt sdk.Int, price sdk.Dec) (quoteCoinDiff sdk.Int) { +func FillOrder(order Order, amt sdkmath.Int, price sdkmath.LegacyDec) (quoteCoinDiff sdkmath.Int) { matchableAmt := MatchableAmount(order, price) if amt.GT(matchableAmt) { panic(fmt.Errorf("cannot match more than open amount; %s > %s", amt, matchableAmt)) } - var paid, received sdk.Int + var paid, received sdkmath.Int switch order.GetDirection() { case Buy: paid = price.MulInt(amt).Ceil().TruncateInt() @@ -52,8 +52,8 @@ func FillOrder(order Order, amt sdk.Int, price sdk.Dec) (quoteCoinDiff sdk.Int) } // FulfillOrder fills the order by its remaining open amount at given price. -func FulfillOrder(order Order, price sdk.Dec) (quoteCoinDiff sdk.Int) { - quoteCoinDiff = sdk.ZeroInt() +func FulfillOrder(order Order, price sdkmath.LegacyDec) (quoteCoinDiff sdkmath.Int) { + quoteCoinDiff = sdkmath.ZeroInt() matchableAmt := MatchableAmount(order, price) if matchableAmt.IsPositive() { quoteCoinDiff = quoteCoinDiff.Add(FillOrder(order, matchableAmt, price)) @@ -63,25 +63,25 @@ func FulfillOrder(order Order, price sdk.Dec) (quoteCoinDiff sdk.Int) { // FulfillOrders fills multiple orders by their remaining open amount // at given price. -func FulfillOrders(orders []Order, price sdk.Dec) (quoteCoinDiff sdk.Int) { - quoteCoinDiff = sdk.ZeroInt() +func FulfillOrders(orders []Order, price sdkmath.LegacyDec) (quoteCoinDiff sdkmath.Int) { + quoteCoinDiff = sdkmath.ZeroInt() for _, order := range orders { quoteCoinDiff = quoteCoinDiff.Add(FulfillOrder(order, price)) } return } -func FindMatchPrice(ov OrderView, tickPrec int) (matchPrice sdk.Dec, found bool) { +func FindMatchPrice(ov OrderView, tickPrec int) (matchPrice sdkmath.LegacyDec, found bool) { highestBuyPrice, found := ov.HighestBuyPrice() if !found { - return sdk.Dec{}, false + return sdkmath.LegacyDec{}, false } lowestSellPrice, found := ov.LowestSellPrice() if !found { - return sdk.Dec{}, false + return sdkmath.LegacyDec{}, false } if highestBuyPrice.LT(lowestSellPrice) { - return sdk.Dec{}, false + return sdkmath.LegacyDec{}, false } prec := TickPrecision(tickPrec) @@ -93,14 +93,14 @@ func FindMatchPrice(ov OrderView, tickPrec int) (matchPrice sdk.Dec, found bool) return sellAmt.IsPositive() && ov.BuyAmountOver(prec.TickFromIndex(i+1), true).LTE(sellAmt) }) if !found { - return sdk.Dec{}, false + return sdkmath.LegacyDec{}, false } j, found = findFirstTrueCondition(highestTickIdx, lowestTickIdx, func(i int) bool { buyAmt := ov.BuyAmountOver(prec.TickFromIndex(i), true) return buyAmt.IsPositive() && buyAmt.GTE(ov.SellAmountUnder(prec.TickFromIndex(i-1), true)) }) if !found { - return sdk.Dec{}, false + return sdkmath.LegacyDec{}, false } midTick := TickFromIndex(i, tickPrec).Add(TickFromIndex(j, tickPrec)).QuoInt64(2) return RoundPrice(midTick, tickPrec), true @@ -108,12 +108,12 @@ func FindMatchPrice(ov OrderView, tickPrec int) (matchPrice sdk.Dec, found bool) // FindMatchableAmountAtSinglePrice returns the largest matchable amount of orders // when matching orders at single price(batch auction). -func (ob *OrderBook) FindMatchableAmountAtSinglePrice(matchPrice sdk.Dec) (matchableAmt sdk.Int, found bool) { +func (ob *OrderBook) FindMatchableAmountAtSinglePrice(matchPrice sdkmath.LegacyDec) (matchableAmt sdkmath.Int, found bool) { type Side struct { ticks []*orderBookTick - totalMatchableAmt sdk.Int + totalMatchableAmt sdkmath.Int i int - partialMatchAmt sdk.Int + partialMatchAmt sdkmath.Int } buildSide := func(ticks []*orderBookTick, priceIncreasing bool) (side *Side) { side = &Side{totalMatchableAmt: zeroInt} @@ -130,11 +130,11 @@ func (ob *OrderBook) FindMatchableAmountAtSinglePrice(matchPrice sdk.Dec) (match } buySide := buildSide(ob.buys.ticks, ob.buys.priceIncreasing) if len(buySide.ticks) == 0 { - return sdk.Int{}, false + return sdkmath.Int{}, false } sellSide := buildSide(ob.sells.ticks, ob.sells.priceIncreasing) if len(sellSide.ticks) == 0 { - return sdk.Int{}, false + return sdkmath.Int{}, false } sides := map[OrderDirection]*Side{ Buy: buySide, @@ -153,13 +153,13 @@ func (ob *OrderBook) FindMatchableAmountAtSinglePrice(matchPrice sdk.Dec) (match // FindMatchableAmountAtSinglePrice won't return a negative amount because // the if-block below would set ok = false if otherTicksAmt >= matchAmt // and the loop would be continued. - matchableAmt = sdk.MinInt(buySide.totalMatchableAmt, sellSide.totalMatchableAmt) + matchableAmt = sdkmath.MinInt(buySide.totalMatchableAmt, sellSide.totalMatchableAmt) otherTicksAmt := side.totalMatchableAmt.Sub(tickAmt) side.partialMatchAmt = matchableAmt.Sub(otherTicksAmt) if otherTicksAmt.GTE(matchableAmt) || (dir == Sell && matchPrice.MulInt(side.partialMatchAmt).TruncateInt().IsZero()) { if i == 0 { // There's no orders left, which means orders are not matchable. - return sdk.Int{}, false + return sdkmath.Int{}, false } side.totalMatchableAmt = side.totalMatchableAmt.Sub(tickAmt) side.i-- @@ -175,12 +175,12 @@ func (ob *OrderBook) FindMatchableAmountAtSinglePrice(matchPrice sdk.Dec) (match // MatchAtSinglePrice matches all matchable orders(buy orders with higher(or equal) price // than the price and sell orders with lower(or equal) price than the price) // at the price. -func (ob *OrderBook) MatchAtSinglePrice(matchPrice sdk.Dec) (quoteCoinDiff sdk.Int, matched bool) { +func (ob *OrderBook) MatchAtSinglePrice(matchPrice sdkmath.LegacyDec) (quoteCoinDiff sdkmath.Int, matched bool) { matchableAmt, found := ob.FindMatchableAmountAtSinglePrice(matchPrice) if !found { - return sdk.Int{}, false + return sdkmath.Int{}, false } - quoteCoinDiff = sdk.ZeroInt() + quoteCoinDiff = sdkmath.ZeroInt() distributeToTicks := func(ticks []*orderBookTick) { remainingAmt := matchableAmt for _, tick := range ticks { @@ -205,10 +205,10 @@ func (ob *OrderBook) MatchAtSinglePrice(matchPrice sdk.Dec) (quoteCoinDiff sdk.I // PriceDirection returns the estimated price direction within this batch // considering the last price. -func (ob *OrderBook) PriceDirection(lastPrice sdk.Dec) PriceDirection { +func (ob *OrderBook) PriceDirection(lastPrice sdkmath.LegacyDec) PriceDirection { // TODO: use OrderBookView - buyAmtOverLastPrice := sdk.ZeroInt() - buyAmtAtLastPrice := sdk.ZeroInt() + buyAmtOverLastPrice := sdkmath.ZeroInt() + buyAmtAtLastPrice := sdkmath.ZeroInt() for _, tick := range ob.buys.ticks { if tick.price.LT(lastPrice) { break @@ -220,8 +220,8 @@ func (ob *OrderBook) PriceDirection(lastPrice sdk.Dec) PriceDirection { } buyAmtOverLastPrice = buyAmtOverLastPrice.Add(amt) } - sellAmtUnderLastPrice := sdk.ZeroInt() - sellAmtAtLastPrice := sdk.ZeroInt() + sellAmtUnderLastPrice := sdkmath.ZeroInt() + sellAmtAtLastPrice := sdkmath.ZeroInt() for _, tick := range ob.sells.ticks { if tick.price.GT(lastPrice) { break @@ -246,9 +246,9 @@ func (ob *OrderBook) PriceDirection(lastPrice sdk.Dec) PriceDirection { // Match matches orders sequentially, starting from buy orders with the highest price // and sell orders with the lowest price. // The matching continues until there's no more matchable orders. -func (ob *OrderBook) Match(lastPrice sdk.Dec) (matchPrice sdk.Dec, quoteCoinDiff sdk.Int, matched bool) { +func (ob *OrderBook) Match(lastPrice sdkmath.LegacyDec) (matchPrice sdkmath.LegacyDec, quoteCoinDiff sdkmath.Int, matched bool) { if len(ob.buys.ticks) == 0 || len(ob.sells.ticks) == 0 { - return sdk.Dec{}, sdk.Int{}, false + return sdkmath.LegacyDec{}, sdkmath.Int{}, false } matchPrice = lastPrice dir := ob.PriceDirection(lastPrice) @@ -257,13 +257,13 @@ func (ob *OrderBook) Match(lastPrice sdk.Dec) (matchPrice sdk.Dec, quoteCoinDiff return matchPrice, quoteCoinDiff, matched } if !matched { - quoteCoinDiff = sdk.ZeroInt() + quoteCoinDiff = sdkmath.ZeroInt() } bi, si := 0, 0 for bi < len(ob.buys.ticks) && si < len(ob.sells.ticks) && ob.buys.ticks[bi].price.GTE(ob.sells.ticks[si].price) { buyTick := ob.buys.ticks[bi] sellTick := ob.sells.ticks[si] - var p sdk.Dec + var p sdkmath.LegacyDec switch dir { case PriceIncreasing: p = sellTick.price @@ -302,9 +302,9 @@ func (ob *OrderBook) Match(lastPrice sdk.Dec) (matchPrice sdk.Dec, quoteCoinDiff // at the tick. // Orders with higher priority(have lower batch id) get matched first, // then the remaining amount is distributed to the remaining orders. -func DistributeOrderAmountToTick(tick *orderBookTick, amt sdk.Int, price sdk.Dec) (quoteCoinDiff sdk.Int) { +func DistributeOrderAmountToTick(tick *orderBookTick, amt sdkmath.Int, price sdkmath.LegacyDec) (quoteCoinDiff sdkmath.Int) { remainingAmt := amt - quoteCoinDiff = sdk.ZeroInt() + quoteCoinDiff = sdkmath.ZeroInt() groups := GroupOrdersByBatchID(tick.orders) for _, group := range groups { openAmt := TotalMatchableAmount(group.Orders, price) @@ -317,7 +317,7 @@ func DistributeOrderAmountToTick(tick *orderBookTick, amt sdk.Int, price sdk.Dec } else { SortOrders(group.Orders) quoteCoinDiff = quoteCoinDiff.Add(DistributeOrderAmountToOrders(group.Orders, remainingAmt, price)) - remainingAmt = sdk.ZeroInt() + remainingAmt = sdkmath.ZeroInt() } if remainingAmt.IsZero() { break @@ -334,19 +334,19 @@ func DistributeOrderAmountToTick(tick *orderBookTick, amt sdk.Int, price sdk.Dec // to the orders again, by priority. // This time, the proportion is not considered and each order takes up // the amount as much as possible. -func DistributeOrderAmountToOrders(orders []Order, amt sdk.Int, price sdk.Dec) (quoteCoinDiff sdk.Int) { +func DistributeOrderAmountToOrders(orders []Order, amt sdkmath.Int, price sdkmath.LegacyDec) (quoteCoinDiff sdkmath.Int) { totalAmt := TotalAmount(orders) - totalMatchedAmt := sdk.ZeroInt() - matchedAmtByOrder := map[Order]sdk.Int{} + totalMatchedAmt := sdkmath.ZeroInt() + matchedAmtByOrder := map[Order]sdkmath.Int{} for _, order := range orders { matchableAmt := MatchableAmount(order, price) if matchableAmt.IsZero() { continue } - orderAmt := sdk.NewDec(order.GetAmount().Int64()) - proportion := orderAmt.QuoTruncate(sdk.NewDec(totalAmt.Int64())) - matchedAmt := sdk.MinInt(matchableAmt, proportion.MulInt(amt).TruncateInt()) + orderAmt := sdkmath.LegacyNewDec(order.GetAmount().Int64()) + proportion := orderAmt.QuoTruncate(sdkmath.LegacyNewDec(totalAmt.Int64())) + matchedAmt := sdkmath.MinInt(matchableAmt, proportion.MulInt(amt).TruncateInt()) if matchedAmt.IsPositive() { matchedAmtByOrder[order] = matchedAmt totalMatchedAmt = totalMatchedAmt.Add(matchedAmt) @@ -360,10 +360,10 @@ func DistributeOrderAmountToOrders(orders []Order, amt sdk.Int, price sdk.Dec) ( } prevMatchedAmt, ok := matchedAmtByOrder[order] if !ok { // TODO: is it possible? - prevMatchedAmt = sdk.ZeroInt() + prevMatchedAmt = sdkmath.ZeroInt() } matchableAmt := MatchableAmount(order, price) - matchedAmt := sdk.MinInt(remainingAmt, matchableAmt.Sub(prevMatchedAmt)) + matchedAmt := sdkmath.MinInt(remainingAmt, matchableAmt.Sub(prevMatchedAmt)) matchedAmtByOrder[order] = prevMatchedAmt.Add(matchedAmt) remainingAmt = remainingAmt.Sub(matchedAmt) } @@ -372,7 +372,7 @@ func DistributeOrderAmountToOrders(orders []Order, amt sdk.Int, price sdk.Dec) ( for _, order := range orders { matchedAmt, ok := matchedAmtByOrder[order] if !ok { - matchedAmt = sdk.ZeroInt() + matchedAmt = sdkmath.ZeroInt() } if !matchedAmt.IsZero() && (order.GetDirection() == Buy || price.MulInt(matchedAmt).TruncateInt().IsPositive()) { matchedOrders = append(matchedOrders, order) @@ -388,7 +388,7 @@ func DistributeOrderAmountToOrders(orders []Order, amt sdk.Int, price sdk.Dec) ( return DistributeOrderAmountToOrders(matchedOrders, amt, price) } - quoteCoinDiff = sdk.ZeroInt() + quoteCoinDiff = sdkmath.ZeroInt() for order, matchedAmt := range matchedAmtByOrder { quoteCoinDiff = quoteCoinDiff.Add(FillOrder(order, matchedAmt, price)) } diff --git a/x/liquidity/amm/match_test.go b/x/liquidity/amm/match_test.go index b75e452fb..68581b4ea 100644 --- a/x/liquidity/amm/match_test.go +++ b/x/liquidity/amm/match_test.go @@ -148,9 +148,9 @@ func TestMatchOrders(t *testing.T) { var effPrice sdk.Dec // Effective swap price switch order.GetDirection() { case amm.Buy: - effPrice = sdk.NewDec(paid.Int64()).QuoInt(received) + effPrice = paid.ToLegacyDec().QuoInt(received) case amm.Sell: - effPrice = sdk.NewDec(received.Int64()).QuoInt(paid) + effPrice = received.ToLegacyDec().QuoInt(paid) } require.True(t, utils.DecApproxEqual(tc.lastPrice, effPrice)) } diff --git a/x/liquidity/amm/order.go b/x/liquidity/amm/order.go index f84a57ce9..5862d98d4 100644 --- a/x/liquidity/amm/order.go +++ b/x/liquidity/amm/order.go @@ -3,7 +3,7 @@ package amm import ( "fmt" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" ) var ( @@ -34,14 +34,14 @@ func (dir OrderDirection) String() string { } type Orderer interface { - Order(dir OrderDirection, price sdk.Dec, amt sdk.Int) Order + Order(dir OrderDirection, price sdkmath.LegacyDec, amt sdkmath.Int) Order } // BaseOrderer creates new BaseOrder with sufficient offer coin amount // considering price and amount. type BaseOrderer struct{} -func (orderer BaseOrderer) Order(dir OrderDirection, price sdk.Dec, amt sdk.Int) Order { +func (orderer BaseOrderer) Order(dir OrderDirection, price sdkmath.LegacyDec, amt sdkmath.Int) Order { return NewBaseOrder(dir, price, amt, OfferCoinAmount(dir, price, amt)) } @@ -51,15 +51,15 @@ type Order interface { // GetBatchId returns the batch id where the order was created. // Batch id of 0 means the current batch. GetBatchID() uint64 - GetPrice() sdk.Dec - GetAmount() sdk.Int // The original order amount - GetOfferCoinAmount() sdk.Int - GetPaidOfferCoinAmount() sdk.Int - SetPaidOfferCoinAmount(amt sdk.Int) - GetReceivedDemandCoinAmount() sdk.Int - SetReceivedDemandCoinAmount(amt sdk.Int) - GetOpenAmount() sdk.Int - SetOpenAmount(amt sdk.Int) + GetPrice() sdkmath.LegacyDec + GetAmount() sdkmath.Int // The original order amount + GetOfferCoinAmount() sdkmath.Int + GetPaidOfferCoinAmount() sdkmath.Int + SetPaidOfferCoinAmount(amt sdkmath.Int) + GetReceivedDemandCoinAmount() sdkmath.Int + SetReceivedDemandCoinAmount(amt sdkmath.Int) + GetOpenAmount() sdkmath.Int + SetOpenAmount(amt sdkmath.Int) IsMatched() bool // HasPriority returns true if the order has higher priority // than the other order. @@ -70,26 +70,26 @@ type Order interface { // BaseOrder is the base struct for an Order. type BaseOrder struct { Direction OrderDirection - Price sdk.Dec - Amount sdk.Int - OfferCoinAmount sdk.Int + Price sdkmath.LegacyDec + Amount sdkmath.Int + OfferCoinAmount sdkmath.Int // Match info - OpenAmount sdk.Int - PaidOfferCoinAmount sdk.Int - ReceivedDemandCoinAmount sdk.Int + OpenAmount sdkmath.Int + PaidOfferCoinAmount sdkmath.Int + ReceivedDemandCoinAmount sdkmath.Int } // NewBaseOrder returns a new BaseOrder. -func NewBaseOrder(dir OrderDirection, price sdk.Dec, amt, offerCoinAmt sdk.Int) *BaseOrder { +func NewBaseOrder(dir OrderDirection, price sdkmath.LegacyDec, amt, offerCoinAmt sdkmath.Int) *BaseOrder { return &BaseOrder{ Direction: dir, Price: price, Amount: amt, OfferCoinAmount: offerCoinAmt, OpenAmount: amt, - PaidOfferCoinAmount: sdk.ZeroInt(), - ReceivedDemandCoinAmount: sdk.ZeroInt(), + PaidOfferCoinAmount: sdkmath.ZeroInt(), + ReceivedDemandCoinAmount: sdkmath.ZeroInt(), } } @@ -103,40 +103,40 @@ func (order *BaseOrder) GetBatchID() uint64 { } // GetPrice returns the order price. -func (order *BaseOrder) GetPrice() sdk.Dec { +func (order *BaseOrder) GetPrice() sdkmath.LegacyDec { return order.Price } // GetAmount returns the order amount. -func (order *BaseOrder) GetAmount() sdk.Int { +func (order *BaseOrder) GetAmount() sdkmath.Int { return order.Amount } -func (order *BaseOrder) GetOfferCoinAmount() sdk.Int { +func (order *BaseOrder) GetOfferCoinAmount() sdkmath.Int { return order.OfferCoinAmount } -func (order *BaseOrder) GetPaidOfferCoinAmount() sdk.Int { +func (order *BaseOrder) GetPaidOfferCoinAmount() sdkmath.Int { return order.PaidOfferCoinAmount } -func (order *BaseOrder) SetPaidOfferCoinAmount(amt sdk.Int) { +func (order *BaseOrder) SetPaidOfferCoinAmount(amt sdkmath.Int) { order.PaidOfferCoinAmount = amt } -func (order *BaseOrder) GetReceivedDemandCoinAmount() sdk.Int { +func (order *BaseOrder) GetReceivedDemandCoinAmount() sdkmath.Int { return order.ReceivedDemandCoinAmount } -func (order *BaseOrder) SetReceivedDemandCoinAmount(amt sdk.Int) { +func (order *BaseOrder) SetReceivedDemandCoinAmount(amt sdkmath.Int) { order.ReceivedDemandCoinAmount = amt } -func (order *BaseOrder) GetOpenAmount() sdk.Int { +func (order *BaseOrder) GetOpenAmount() sdkmath.Int { return order.OpenAmount } -func (order *BaseOrder) SetOpenAmount(amt sdk.Int) { +func (order *BaseOrder) SetOpenAmount(amt sdkmath.Int) { order.OpenAmount = amt } diff --git a/x/liquidity/amm/orderbook.go b/x/liquidity/amm/orderbook.go index 3366bd20c..fddb6725b 100644 --- a/x/liquidity/amm/orderbook.go +++ b/x/liquidity/amm/orderbook.go @@ -5,7 +5,7 @@ import ( "sort" "strings" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" ) // OrderBook is an order book. @@ -48,47 +48,47 @@ func (ob *OrderBook) Orders() []Order { // BuyOrdersAt returns buy orders at given price in the order book. // Note that the orders are not sorted. -func (ob *OrderBook) BuyOrdersAt(price sdk.Dec) []Order { +func (ob *OrderBook) BuyOrdersAt(price sdkmath.LegacyDec) []Order { return ob.buys.ordersAt(price) } // SellOrdersAt returns sell orders at given price in the order book. // Note that the orders are not sorted. -func (ob *OrderBook) SellOrdersAt(price sdk.Dec) []Order { +func (ob *OrderBook) SellOrdersAt(price sdkmath.LegacyDec) []Order { return ob.sells.ordersAt(price) } -func (ob *OrderBook) HighestPrice() (sdk.Dec, bool) { +func (ob *OrderBook) HighestPrice() (sdkmath.LegacyDec, bool) { highestBuyPrice, _, foundBuy := ob.buys.highestPrice() highestSellPrice, _, foundSell := ob.sells.highestPrice() switch { case foundBuy && foundSell: - return sdk.MaxDec(highestBuyPrice, highestSellPrice), true + return sdkmath.LegacyMaxDec(highestBuyPrice, highestSellPrice), true case foundBuy: return highestBuyPrice, true case foundSell: return highestSellPrice, true default: - return sdk.Dec{}, false + return sdkmath.LegacyDec{}, false } } -func (ob *OrderBook) LowestPrice() (sdk.Dec, bool) { +func (ob *OrderBook) LowestPrice() (sdkmath.LegacyDec, bool) { lowestBuyPrice, _, foundBuy := ob.buys.lowestPrice() lowestSellPrice, _, foundSell := ob.sells.lowestPrice() switch { case foundBuy && foundSell: - return sdk.MinDec(lowestBuyPrice, lowestSellPrice), true + return sdkmath.LegacyMinDec(lowestBuyPrice, lowestSellPrice), true case foundBuy: return lowestBuyPrice, true case foundSell: return lowestSellPrice, true default: - return sdk.Dec{}, false + return sdkmath.LegacyDec{}, false } } -func (ob *OrderBook) stringRepresentation(prices []sdk.Dec) string { +func (ob *OrderBook) stringRepresentation(prices []sdkmath.LegacyDec) string { if len(prices) == 0 { return "" } @@ -110,7 +110,7 @@ func (ob *OrderBook) stringRepresentation(prices []sdk.Dec) string { // FullString includes all possible price ticks from the order book's // highest price to the lowest price. func (ob *OrderBook) FullString(tickPrec int) string { - var prices []sdk.Dec + var prices []sdkmath.LegacyDec highest, found := ob.HighestPrice() if !found { return "" @@ -125,11 +125,11 @@ func (ob *OrderBook) FullString(tickPrec int) string { // String returns a compact string representation of the order book. // String includes a tick only when there is at least one order on it. func (ob *OrderBook) String() string { - priceSet := map[string]sdk.Dec{} + priceSet := map[string]sdkmath.LegacyDec{} for _, tick := range append(ob.buys.ticks, ob.sells.ticks...) { priceSet[tick.price.String()] = tick.price } - prices := make([]sdk.Dec, 0, len(priceSet)) + prices := make([]sdkmath.LegacyDec, 0, len(priceSet)) for _, price := range priceSet { prices = append(prices, price) } @@ -155,7 +155,7 @@ func newOrderBookSellTicks() *orderBookTicks { } } -func (ticks *orderBookTicks) findPrice(price sdk.Dec) (i int, exact bool) { +func (ticks *orderBookTicks) findPrice(price sdkmath.LegacyDec) (i int, exact bool) { i = sort.Search(len(ticks.ticks), func(i int) bool { if ticks.priceIncreasing { return ticks.ticks[i].price.GTE(price) @@ -183,7 +183,7 @@ func (ticks *orderBookTicks) addOrder(order Order) { } } -func (ticks *orderBookTicks) ordersAt(price sdk.Dec) []Order { +func (ticks *orderBookTicks) ordersAt(price sdkmath.LegacyDec) []Order { i, exact := ticks.findPrice(price) if !exact { return nil @@ -191,9 +191,9 @@ func (ticks *orderBookTicks) ordersAt(price sdk.Dec) []Order { return ticks.ticks[i].orders } -func (ticks *orderBookTicks) highestPrice() (sdk.Dec, int, bool) { +func (ticks *orderBookTicks) highestPrice() (sdkmath.LegacyDec, int, bool) { if len(ticks.ticks) == 0 { - return sdk.Dec{}, 0, false + return sdkmath.LegacyDec{}, 0, false } if ticks.priceIncreasing { return ticks.ticks[len(ticks.ticks)-1].price, len(ticks.ticks) - 1, true @@ -201,9 +201,9 @@ func (ticks *orderBookTicks) highestPrice() (sdk.Dec, int, bool) { return ticks.ticks[0].price, 0, true } -func (ticks *orderBookTicks) lowestPrice() (sdk.Dec, int, bool) { +func (ticks *orderBookTicks) lowestPrice() (sdkmath.LegacyDec, int, bool) { if len(ticks.ticks) == 0 { - return sdk.Dec{}, 0, false + return sdkmath.LegacyDec{}, 0, false } if ticks.priceIncreasing { return ticks.ticks[0].price, 0, true @@ -213,7 +213,7 @@ func (ticks *orderBookTicks) lowestPrice() (sdk.Dec, int, bool) { // orderBookTick represents a tick in OrderBook. type orderBookTick struct { - price sdk.Dec + price sdkmath.LegacyDec orders []Order } diff --git a/x/liquidity/amm/pool.go b/x/liquidity/amm/pool.go index 0642fede9..3b1efd2d4 100644 --- a/x/liquidity/amm/pool.go +++ b/x/liquidity/amm/pool.go @@ -5,7 +5,6 @@ import ( "math/big" sdkmath "cosmossdk.io/math" - // sdk "github.com/cosmos/cosmos-sdk/types" utils "github.com/comdex-official/comdex/types" ) diff --git a/x/liquidity/amm/tick.go b/x/liquidity/amm/tick.go index db5d53d0a..faf6a0d70 100644 --- a/x/liquidity/amm/tick.go +++ b/x/liquidity/amm/tick.go @@ -5,59 +5,59 @@ import ( "math/big" "math/rand" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" ) // TickPrecision represents a tick precision. type TickPrecision int -func (prec TickPrecision) PriceToDownTick(price sdk.Dec) sdk.Dec { +func (prec TickPrecision) PriceToDownTick(price sdkmath.LegacyDec) sdkmath.LegacyDec { return PriceToDownTick(price, int(prec)) } -func (prec TickPrecision) PriceToUpTick(price sdk.Dec) sdk.Dec { +func (prec TickPrecision) PriceToUpTick(price sdkmath.LegacyDec) sdkmath.LegacyDec { return PriceToUpTick(price, int(prec)) } -func (prec TickPrecision) UpTick(price sdk.Dec) sdk.Dec { +func (prec TickPrecision) UpTick(price sdkmath.LegacyDec) sdkmath.LegacyDec { return UpTick(price, int(prec)) } -func (prec TickPrecision) DownTick(price sdk.Dec) sdk.Dec { +func (prec TickPrecision) DownTick(price sdkmath.LegacyDec) sdkmath.LegacyDec { return DownTick(price, int(prec)) } -func (prec TickPrecision) HighestTick() sdk.Dec { +func (prec TickPrecision) HighestTick() sdkmath.LegacyDec { return HighestTick(int(prec)) } -func (prec TickPrecision) LowestTick() sdk.Dec { +func (prec TickPrecision) LowestTick() sdkmath.LegacyDec { return LowestTick(int(prec)) } -func (prec TickPrecision) TickToIndex(tick sdk.Dec) int { +func (prec TickPrecision) TickToIndex(tick sdkmath.LegacyDec) int { return TickToIndex(tick, int(prec)) } -func (prec TickPrecision) TickFromIndex(i int) sdk.Dec { +func (prec TickPrecision) TickFromIndex(i int) sdkmath.LegacyDec { return TickFromIndex(i, int(prec)) } -func (prec TickPrecision) RoundPrice(price sdk.Dec) sdk.Dec { +func (prec TickPrecision) RoundPrice(price sdkmath.LegacyDec) sdkmath.LegacyDec { return RoundPrice(price, int(prec)) } -func (prec TickPrecision) TickGap(price sdk.Dec) sdk.Dec { +func (prec TickPrecision) TickGap(price sdkmath.LegacyDec) sdkmath.LegacyDec { return TickGap(price, int(prec)) } -func (prec TickPrecision) RandomTick(r *rand.Rand, minPrice, maxPrice sdk.Dec) sdk.Dec { +func (prec TickPrecision) RandomTick(r *rand.Rand, minPrice, maxPrice sdkmath.LegacyDec) sdkmath.LegacyDec { return RandomTick(r, minPrice, maxPrice, int(prec)) } // char returns the characteristic(integral part) of // log10(x * pow(10, sdk.Precision)). -func char(x sdk.Dec) int { +func char(x sdkmath.LegacyDec) int { if x.IsZero() { panic("cannot calculate log10 for 0") } @@ -65,14 +65,14 @@ func char(x sdk.Dec) int { } // pow10 returns pow(10, n - sdk.Precision). -func pow10(n int) sdk.Dec { +func pow10(n int) sdkmath.LegacyDec { x := big.NewInt(10) x.Exp(x, big.NewInt(int64(n)), nil) - return sdk.NewDecFromBigIntWithPrec(x, sdk.Precision) + return sdkmath.LegacyNewDecFromBigIntWithPrec(x, sdkmath.LegacyPrecision) } // isPow10 returns whether x is a power of 10 or not. -func isPow10(x sdk.Dec) bool { +func isPow10(x sdkmath.LegacyDec) bool { b := x.BigInt() if b.Sign() <= 0 { return false @@ -93,7 +93,7 @@ func isPow10(x sdk.Dec) bool { } // PriceToDownTick returns the highest price tick under(or equal to) the price. -func PriceToDownTick(price sdk.Dec, prec int) sdk.Dec { +func PriceToDownTick(price sdkmath.LegacyDec, prec int) sdkmath.LegacyDec { b := price.BigInt() l := char(price) d := int64(l - prec) @@ -102,12 +102,12 @@ func PriceToDownTick(price sdk.Dec, prec int) sdk.Dec { p.Exp(p, big.NewInt(d), nil) b.Quo(b, p).Mul(b, p) } - return sdk.NewDecFromBigIntWithPrec(b, sdk.Precision) + return sdkmath.LegacyNewDecFromBigIntWithPrec(b, sdkmath.LegacyPrecision) } // PriceToUpTick returns the lowest price tick greater or equal than // the price. -func PriceToUpTick(price sdk.Dec, prec int) sdk.Dec { +func PriceToUpTick(price sdkmath.LegacyDec, prec int) sdkmath.LegacyDec { tick := PriceToDownTick(price, prec) if !tick.Equal(price) { return UpTick(tick, prec) @@ -116,7 +116,7 @@ func PriceToUpTick(price sdk.Dec, prec int) sdk.Dec { } // UpTick returns the next lowest price tick above the price. -func UpTick(price sdk.Dec, prec int) sdk.Dec { +func UpTick(price sdkmath.LegacyDec, prec int) sdkmath.LegacyDec { tick := PriceToDownTick(price, prec) if tick.Equal(price) { l := char(price) @@ -128,11 +128,11 @@ func UpTick(price sdk.Dec, prec int) sdk.Dec { // DownTick returns the next highest price tick under the price. // DownTick doesn't check if the price is the lowest price tick. -func DownTick(price sdk.Dec, prec int) sdk.Dec { +func DownTick(price sdkmath.LegacyDec, prec int) sdkmath.LegacyDec { tick := PriceToDownTick(price, prec) if tick.Equal(price) { l := char(price) - var d sdk.Dec + var d sdkmath.LegacyDec if isPow10(price) { d = pow10(l - prec - 1) } else { @@ -144,21 +144,21 @@ func DownTick(price sdk.Dec, prec int) sdk.Dec { } // HighestTick returns the highest possible price tick. -func HighestTick(prec int) sdk.Dec { +func HighestTick(prec int) sdkmath.LegacyDec { i := big.NewInt(2) // Maximum 315 bits possible, but take slightly less value for safety. i.Exp(i, big.NewInt(300), nil).Sub(i, big.NewInt(1)) - return PriceToDownTick(sdk.NewDecFromBigIntWithPrec(i, sdk.Precision), prec) + return PriceToDownTick(sdkmath.LegacyNewDecFromBigIntWithPrec(i, sdkmath.LegacyPrecision), prec) } // LowestTick returns the lowest possible price tick. -func LowestTick(prec int) sdk.Dec { - return sdk.NewDecWithPrec(1, int64(sdk.Precision-prec)) +func LowestTick(prec int) sdkmath.LegacyDec { + return sdkmath.LegacyNewDecWithPrec(1, int64(sdkmath.LegacyPrecision-prec)) } // TickToIndex returns a tick index for given price. // Tick index 0 means the lowest possible price fit in ticks. -func TickToIndex(price sdk.Dec, prec int) int { +func TickToIndex(price sdkmath.LegacyDec, prec int) int { b := price.BigInt() l := len(b.Text(10)) - 1 d := int64(l - prec) @@ -174,7 +174,7 @@ func TickToIndex(price sdk.Dec, prec int) int { // TickFromIndex returns a price for given tick index. // See TickToIndex for more details about tick indices. -func TickFromIndex(i, prec int) sdk.Dec { +func TickFromIndex(i, prec int) sdkmath.LegacyDec { p := int(math.Pow10(prec)) l := i/(9*p) + prec t := big.NewInt(int64(p + i%(p*9))) @@ -183,7 +183,7 @@ func TickFromIndex(i, prec int) sdk.Dec { m.Exp(m, big.NewInt(int64(l-prec)), nil) t.Mul(t, m) } - return sdk.NewDecFromBigIntWithPrec(t, sdk.Precision) + return sdkmath.LegacyNewDecFromBigIntWithPrec(t, sdkmath.LegacyPrecision) } // RoundTickIndex returns rounded tick index using banker's rounding. @@ -192,7 +192,7 @@ func RoundTickIndex(i int) int { } // RoundPrice returns rounded price using banker's rounding. -func RoundPrice(price sdk.Dec, prec int) sdk.Dec { +func RoundPrice(price sdkmath.LegacyDec, prec int) sdkmath.LegacyDec { tick := PriceToDownTick(price, prec) if price.Equal(tick) { return price @@ -201,7 +201,7 @@ func RoundPrice(price sdk.Dec, prec int) sdk.Dec { } // TickGap returns tick gap at given price. -func TickGap(price sdk.Dec, prec int) sdk.Dec { +func TickGap(price sdkmath.LegacyDec, prec int) sdkmath.LegacyDec { tick := PriceToDownTick(price, prec) l := char(tick) return pow10(l - prec) @@ -210,7 +210,7 @@ func TickGap(price sdk.Dec, prec int) sdk.Dec { // RandomTick returns a random tick within range [minPrice, maxPrice]. // If prices are not on ticks, then prices are adjusted to the nearest // ticks. -func RandomTick(r *rand.Rand, minPrice, maxPrice sdk.Dec, prec int) sdk.Dec { +func RandomTick(r *rand.Rand, minPrice, maxPrice sdkmath.LegacyDec, prec int) sdkmath.LegacyDec { minPrice = PriceToUpTick(minPrice, prec) maxPrice = PriceToDownTick(maxPrice, prec) minPriceIdx := TickToIndex(minPrice, prec) diff --git a/x/liquidity/amm/util.go b/x/liquidity/amm/util.go index 44f69d460..958308903 100644 --- a/x/liquidity/amm/util.go +++ b/x/liquidity/amm/util.go @@ -4,20 +4,20 @@ import ( "fmt" "sort" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" utils "github.com/comdex-official/comdex/types" ) var ( - zeroInt = sdk.ZeroInt() - oneDec = sdk.OneDec() - fourDec = sdk.NewDec(4) + zeroInt = sdkmath.ZeroInt() + oneDec = sdkmath.LegacyOneDec() + fourDec = sdkmath.LegacyNewDec(4) ) // OfferCoinAmount returns the minimum offer coin amount for // given order direction, price and order amount. -func OfferCoinAmount(dir OrderDirection, price sdk.Dec, amt sdk.Int) sdk.Int { +func OfferCoinAmount(dir OrderDirection, price sdkmath.LegacyDec, amt sdkmath.Int) sdkmath.Int { switch dir { case Buy: return price.MulInt(amt).Ceil().TruncateInt() @@ -30,13 +30,13 @@ func OfferCoinAmount(dir OrderDirection, price sdk.Dec, amt sdk.Int) sdk.Int { // MatchableAmount returns matchable amount of an order considering // remaining offer coin and price. -func MatchableAmount(order Order, price sdk.Dec) (matchableAmt sdk.Int) { +func MatchableAmount(order Order, price sdkmath.LegacyDec) (matchableAmt sdkmath.Int) { switch order.GetDirection() { case Buy: remainingOfferCoinAmt := order.GetOfferCoinAmount().Sub(order.GetPaidOfferCoinAmount()) - matchableAmt = sdk.MinInt( + matchableAmt = sdkmath.MinInt( order.GetOpenAmount(), - sdk.NewDec(remainingOfferCoinAmt.Int64()).QuoTruncate(price).TruncateInt(), + sdkmath.LegacyNewDec(remainingOfferCoinAmt.Int64()).QuoTruncate(price).TruncateInt(), ) case Sell: matchableAmt = order.GetOpenAmount() @@ -48,8 +48,8 @@ func MatchableAmount(order Order, price sdk.Dec) (matchableAmt sdk.Int) { } // TotalAmount returns total amount of orders. -func TotalAmount(orders []Order) sdk.Int { - amt := sdk.ZeroInt() +func TotalAmount(orders []Order) sdkmath.Int { + amt := sdkmath.ZeroInt() for _, order := range orders { amt = amt.Add(order.GetAmount()) } @@ -57,8 +57,8 @@ func TotalAmount(orders []Order) sdk.Int { } // TotalMatchableAmount returns total matchable amount of orders. -func TotalMatchableAmount(orders []Order, price sdk.Dec) (amt sdk.Int) { - amt = sdk.ZeroInt() +func TotalMatchableAmount(orders []Order, price sdkmath.LegacyDec) (amt sdkmath.Int) { + amt = sdkmath.ZeroInt() for _, order := range orders { amt = amt.Add(MatchableAmount(order, price)) } @@ -127,7 +127,7 @@ func findFirstTrueCondition(start, end int, f func(i int) bool) (i int, found bo } // inv returns the inverse of x. -func inv(x sdk.Dec) (r sdk.Dec) { +func inv(x sdkmath.LegacyDec) (r sdkmath.LegacyDec) { r = oneDec.Quo(x) return } @@ -145,9 +145,9 @@ var ( b4 = utils.ParseDec("0.005") ) -func poolOrderPriceGapRatio(poolPrice, currentPrice sdk.Dec) (r sdk.Dec) { +func poolOrderPriceGapRatio(poolPrice, currentPrice sdkmath.LegacyDec) (r sdkmath.LegacyDec) { if poolPrice.IsZero() { - poolPrice = sdk.NewDecWithPrec(1, sdk.Precision) // lowest possible sdk.Dec + poolPrice = sdkmath.LegacyNewDecWithPrec(1, sdkmath.LegacyPrecision) // lowest possible sdkmath.LegacyDec } x := currentPrice.Sub(poolPrice).Abs().Quo(poolPrice) switch { diff --git a/x/liquidity/amm/view.go b/x/liquidity/amm/view.go index 92b238585..a333c7624 100644 --- a/x/liquidity/amm/view.go +++ b/x/liquidity/amm/view.go @@ -3,7 +3,7 @@ package amm import ( "sort" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" ) var ( @@ -13,10 +13,10 @@ var ( ) type OrderView interface { - HighestBuyPrice() (sdk.Dec, bool) - LowestSellPrice() (sdk.Dec, bool) - BuyAmountOver(price sdk.Dec, inclusive bool) sdk.Int - SellAmountUnder(price sdk.Dec, inclusive bool) sdk.Int + HighestBuyPrice() (sdkmath.LegacyDec, bool) + LowestSellPrice() (sdkmath.LegacyDec, bool) + BuyAmountOver(price sdkmath.LegacyDec, inclusive bool) sdkmath.Int + SellAmountUnder(price sdkmath.LegacyDec, inclusive bool) sdkmath.Int } type OrderBookView struct { @@ -29,9 +29,9 @@ func (ob *OrderBook) MakeView() *OrderBookView { sellAmtAccSums: make([]amtAccSum, len(ob.sells.ticks)), } for i, tick := range ob.buys.ticks { - var prevSum sdk.Int + var prevSum sdkmath.Int if i == 0 { - prevSum = sdk.ZeroInt() + prevSum = sdkmath.ZeroInt() } else { prevSum = view.buyAmtAccSums[i-1].sum } @@ -41,9 +41,9 @@ func (ob *OrderBook) MakeView() *OrderBookView { } } for i, tick := range ob.sells.ticks { - var prevSum sdk.Int + var prevSum sdkmath.Int if i == 0 { - prevSum = sdk.ZeroInt() + prevSum = sdkmath.ZeroInt() } else { prevSum = view.sellAmtAccSums[i-1].sum } @@ -70,12 +70,12 @@ func (view *OrderBookView) Match() { if buyIdx == len(view.buyAmtAccSums) && sellIdx == len(view.sellAmtAccSums) { return } - matchAmt := sdk.ZeroInt() + matchAmt := sdkmath.ZeroInt() if buyIdx > 0 { matchAmt = view.buyAmtAccSums[buyIdx-1].sum } if sellIdx > 0 { - matchAmt = sdk.MaxInt(matchAmt, view.sellAmtAccSums[sellIdx-1].sum) + matchAmt = sdkmath.MaxInt(matchAmt, view.sellAmtAccSums[sellIdx-1].sum) } for i, accSum := range view.buyAmtAccSums { if i < buyIdx { @@ -93,33 +93,33 @@ func (view *OrderBookView) Match() { } } -func (view *OrderBookView) HighestBuyPrice() (sdk.Dec, bool) { +func (view *OrderBookView) HighestBuyPrice() (sdkmath.LegacyDec, bool) { if len(view.buyAmtAccSums) == 0 { - return sdk.Dec{}, false + return sdkmath.LegacyDec{}, false } i := sort.Search(len(view.buyAmtAccSums), func(i int) bool { return view.buyAmtAccSums[i].sum.IsPositive() }) if i >= len(view.buyAmtAccSums) { - return sdk.Dec{}, false + return sdkmath.LegacyDec{}, false } return view.buyAmtAccSums[i].price, true } -func (view *OrderBookView) LowestSellPrice() (sdk.Dec, bool) { +func (view *OrderBookView) LowestSellPrice() (sdkmath.LegacyDec, bool) { if len(view.sellAmtAccSums) == 0 { - return sdk.Dec{}, false + return sdkmath.LegacyDec{}, false } i := sort.Search(len(view.sellAmtAccSums), func(i int) bool { return view.sellAmtAccSums[i].sum.IsPositive() }) if i >= len(view.sellAmtAccSums) { - return sdk.Dec{}, false + return sdkmath.LegacyDec{}, false } return view.sellAmtAccSums[i].price, true } -func (view *OrderBookView) BuyAmountOver(price sdk.Dec, inclusive bool) sdk.Int { +func (view *OrderBookView) BuyAmountOver(price sdkmath.LegacyDec, inclusive bool) sdkmath.Int { i := sort.Search(len(view.buyAmtAccSums), func(i int) bool { if inclusive { return view.buyAmtAccSums[i].price.LT(price) @@ -127,12 +127,12 @@ func (view *OrderBookView) BuyAmountOver(price sdk.Dec, inclusive bool) sdk.Int return view.buyAmtAccSums[i].price.LTE(price) }) if i == 0 { - return sdk.ZeroInt() + return sdkmath.ZeroInt() } return view.buyAmtAccSums[i-1].sum } -func (view *OrderBookView) BuyAmountUnder(price sdk.Dec, inclusive bool) sdk.Int { +func (view *OrderBookView) BuyAmountUnder(price sdkmath.LegacyDec, inclusive bool) sdkmath.Int { i := sort.Search(len(view.buyAmtAccSums), func(i int) bool { if inclusive { return view.buyAmtAccSums[i].price.LTE(price) @@ -145,7 +145,7 @@ func (view *OrderBookView) BuyAmountUnder(price sdk.Dec, inclusive bool) sdk.Int return view.buyAmtAccSums[len(view.buyAmtAccSums)-1].sum.Sub(view.buyAmtAccSums[i-1].sum) } -func (view *OrderBookView) SellAmountUnder(price sdk.Dec, inclusive bool) sdk.Int { +func (view *OrderBookView) SellAmountUnder(price sdkmath.LegacyDec, inclusive bool) sdkmath.Int { i := sort.Search(len(view.sellAmtAccSums), func(i int) bool { if inclusive { return view.sellAmtAccSums[i].price.GT(price) @@ -153,12 +153,12 @@ func (view *OrderBookView) SellAmountUnder(price sdk.Dec, inclusive bool) sdk.In return view.sellAmtAccSums[i].price.GTE(price) }) if i == 0 { - return sdk.ZeroInt() + return sdkmath.ZeroInt() } return view.sellAmtAccSums[i-1].sum } -func (view *OrderBookView) SellAmountOver(price sdk.Dec, inclusive bool) sdk.Int { +func (view *OrderBookView) SellAmountOver(price sdkmath.LegacyDec, inclusive bool) sdkmath.Int { i := sort.Search(len(view.sellAmtAccSums), func(i int) bool { if inclusive { return view.sellAmtAccSums[i].price.GTE(price) @@ -172,13 +172,13 @@ func (view *OrderBookView) SellAmountOver(price sdk.Dec, inclusive bool) sdk.Int } type amtAccSum struct { - price sdk.Dec - sum sdk.Int + price sdkmath.LegacyDec + sum sdkmath.Int } type MultipleOrderViews []OrderView -func (views MultipleOrderViews) HighestBuyPrice() (price sdk.Dec, found bool) { +func (views MultipleOrderViews) HighestBuyPrice() (price sdkmath.LegacyDec, found bool) { for _, view := range views { p, f := view.HighestBuyPrice() if f && (price.IsNil() || p.GT(price)) { @@ -189,7 +189,7 @@ func (views MultipleOrderViews) HighestBuyPrice() (price sdk.Dec, found bool) { return } -func (views MultipleOrderViews) LowestSellPrice() (price sdk.Dec, found bool) { +func (views MultipleOrderViews) LowestSellPrice() (price sdkmath.LegacyDec, found bool) { for _, view := range views { p, f := view.LowestSellPrice() if f && (price.IsNil() || p.LT(price)) { @@ -200,16 +200,16 @@ func (views MultipleOrderViews) LowestSellPrice() (price sdk.Dec, found bool) { return } -func (views MultipleOrderViews) BuyAmountOver(price sdk.Dec, inclusive bool) sdk.Int { - amt := sdk.ZeroInt() +func (views MultipleOrderViews) BuyAmountOver(price sdkmath.LegacyDec, inclusive bool) sdkmath.Int { + amt := sdkmath.ZeroInt() for _, view := range views { amt = amt.Add(view.BuyAmountOver(price, inclusive)) } return amt } -func (views MultipleOrderViews) SellAmountUnder(price sdk.Dec, inclusive bool) sdk.Int { - amt := sdk.ZeroInt() +func (views MultipleOrderViews) SellAmountUnder(price sdkmath.LegacyDec, inclusive bool) sdkmath.Int { + amt := sdkmath.ZeroInt() for _, view := range views { amt = amt.Add(view.SellAmountUnder(price, inclusive)) } From b66adcb74af7a67fde3ddd0b2abb8e470f6ba8ca Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 9 Oct 2023 23:58:28 +0530 Subject: [PATCH 59/90] proto-gen script modified --- Dockerfile | 31 ++++++++++++++++++++++--------- Makefile | 16 +++++++++++++--- buf.gen.yaml | 8 ++++++++ buf.work.yaml | 3 +++ docker/run_comdex.sh | 2 +- docker/setup_comdex.sh | 1 - proto/buf.gen.gogo.yaml | 8 ++++++++ proto/buf.yaml | 22 ++++++++++++++++++++++ scripts/proto-gen.sh | 32 ++++++++++++++------------------ 9 files changed, 91 insertions(+), 32 deletions(-) create mode 100644 buf.gen.yaml create mode 100644 buf.work.yaml create mode 100644 proto/buf.gen.gogo.yaml create mode 100644 proto/buf.yaml diff --git a/Dockerfile b/Dockerfile index 0fcfc9e06..52d0f5f94 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,16 +14,29 @@ RUN apk add --no-cache ca-certificates build-base git # RUN apk add libusb-dev linux-headers WORKDIR /code + +# Download dependencies and CosmWasm libwasmvm if found. +ADD go.mod go.sum ./ +RUN set -eux; \ + export ARCH=$(uname -m); \ + WASM_VERSION=$(go list -m all | grep github.com/CosmWasm/wasmvm | awk '{print $2}'); \ + if [ ! -z "${WASM_VERSION}" ]; then \ + wget -O /lib/libwasmvm_muslc.a https://github.com/CosmWasm/wasmvm/releases/download/${WASM_VERSION}/libwasmvm_muslc.${ARCH}.a; \ + fi; \ + go mod download; + +# Copy over code + COPY . /code/ # See https://github.com/CosmWasm/wasmvm/releases -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.1.1/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.1.1/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a -RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 9ecb037336bd56076573dc18c26631a9d2099a7f2b40dc04b6cae31ffb4c8f9a -RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep 6e4de7ba9bad4ae9679c7f9ecf7e283dd0160e71567c6a7be6ae47c81ebe7f32 +# ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.1.1/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a +# ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.1.1/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a +# RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 9ecb037336bd56076573dc18c26631a9d2099a7f2b40dc04b6cae31ffb4c8f9a +# RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep 6e4de7ba9bad4ae9679c7f9ecf7e283dd0160e71567c6a7be6ae47c81ebe7f32 -# Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` -RUN cp "/lib/libwasmvm_muslc.$(uname -m).a" /lib/libwasmvm_muslc.a +# # Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` +# RUN cp "/lib/libwasmvm_muslc.$(uname -m).a" /lib/libwasmvm_muslc.a # force it to use static lib (from above) not standard libgo_cosmwasm.so file # then log output of file /code/bin/comdex @@ -34,11 +47,11 @@ RUN LEDGER_ENABLED=false BUILD_TAGS=muslc LINK_STATICALLY=true make build \ && (file /code/bin/comdex | grep "statically linked") # -------------------------------------------------------- -#FROM alpine:3.16 -FROM golang +FROM alpine:3.16 +# FROM golang COPY --from=go-builder /code/bin/comdex /usr/bin/comdex -RUN apt update && apt install -y python3 protobuf-compiler +# RUN apt update && apt install -y python3 protobuf-compiler COPY docker/* /opt/ RUN chmod +x /opt/*.sh diff --git a/Makefile b/Makefile index a919992d0..f3d62d217 100644 --- a/Makefile +++ b/Makefile @@ -186,8 +186,19 @@ endif .PHONY: run-tests test test-all $(TEST_TARGETS) -protoVer=v0.1 -containerProtoGenSwagger=comdex-proto-gen-swagger-$(protoVer) +############################################################################### +### Protobuf ### +############################################################################### + +protoVer=v0.13.1 +containerProtoGenSwagger=ghcr.io/cosmos/proto-builder:$(protoVer) +protoImage=$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(containerProtoGenSwagger) + +proto-gen: + @echo "============ Generating Protobuf files ============" + @$(protoImage) sh ./scripts/proto-gen.sh + @echo "============ Generating Protobuf files complete ============" +.PHONY: proto-gen proto-swagger-gen: @echo @@ -204,7 +215,6 @@ proto-swagger-gen: @echo @echo "=========== Docs Generation Complete ============" @echo -.PHONY: docs test-sim-nondeterminism: @echo "Running non-determinism test..." diff --git a/buf.gen.yaml b/buf.gen.yaml new file mode 100644 index 000000000..aaa7db84b --- /dev/null +++ b/buf.gen.yaml @@ -0,0 +1,8 @@ +version: v1 +plugins: + - name: gocosmos + out: . + opt: plugins=interfacetype+grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types + - name: grpc-gateway + out: . + opt: logtostderr=true,allow_colon_final_segments=true \ No newline at end of file diff --git a/buf.work.yaml b/buf.work.yaml new file mode 100644 index 000000000..7a18eb025 --- /dev/null +++ b/buf.work.yaml @@ -0,0 +1,3 @@ +version: v1 +directories: + - proto \ No newline at end of file diff --git a/docker/run_comdex.sh b/docker/run_comdex.sh index f405b8eff..7e49a0bca 100755 --- a/docker/run_comdex.sh +++ b/docker/run_comdex.sh @@ -6,4 +6,4 @@ if test -n "$1"; then fi mkdir -p /root/log -comdex start --rpc.laddr tcp://0.0.0.0:26657 --trace \ No newline at end of file +comdex start --rpc.laddr tcp://0.0.0.0:26657 --minimum-gas-prices 0.0001ucmdx --trace \ No newline at end of file diff --git a/docker/setup_comdex.sh b/docker/setup_comdex.sh index d99817834..afbb75ff5 100755 --- a/docker/setup_comdex.sh +++ b/docker/setup_comdex.sh @@ -14,7 +14,6 @@ echo "Configured Block Gas Limit: $BLOCK_GAS_LIMIT" # check the genesis file GENESIS_FILE="$HOME"/.comdex/config/genesis.json -GENESIS_FILE="$HOME"/.comdex/config/genesis.json if [ -f "$GENESIS_FILE" ]; then echo "$GENESIS_FILE exists..." else diff --git a/proto/buf.gen.gogo.yaml b/proto/buf.gen.gogo.yaml new file mode 100644 index 000000000..1e35cc88e --- /dev/null +++ b/proto/buf.gen.gogo.yaml @@ -0,0 +1,8 @@ +version: v1 +plugins: + - name: gocosmos + out: .. + opt: plugins=grpc,Mgoogle/protobuf/duration.proto=github.com/cosmos/gogoproto/types,Mgoogle/protobuf/struct.proto=github.com/cosmos/gogoproto/types,Mgoogle/protobuf/timestamp.proto=github.com/cosmos/gogoproto/types,Mgoogle/protobuf/wrappers.proto=github.com/cosmos/gogoproto/types,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types,Mcosmos/orm/v1alpha1/orm.proto=github.com/cosmos/cosmos-sdk/api/cosmos/orm/v1alpha1 + - name: grpc-gateway + out: .. + opt: logtostderr=true,allow_colon_final_segments=true diff --git a/proto/buf.yaml b/proto/buf.yaml new file mode 100644 index 000000000..e2576c2cc --- /dev/null +++ b/proto/buf.yaml @@ -0,0 +1,22 @@ +version: v1 +deps: + - buf.build/cosmos/cosmos-sdk:v0.47.0 + - buf.build/cosmos/cosmos-proto:1935555c206d4afb9e94615dfd0fad31 + - buf.build/cosmos/gogo-proto:a14993478f40695898ed8a86931094b6656e8a5d + - buf.build/googleapis/googleapis:8d7204855ec14631a499bd7393ce1970 +breaking: + use: + - FILE +lint: + use: + - DEFAULT + - COMMENTS + - FILE_LOWER_SNAKE_CASE + except: + - UNARY_RPC + - COMMENT_FIELD + - SERVICE_SUFFIX + - PACKAGE_VERSION_SUFFIX + - RPC_REQUEST_STANDARD_NAME + ignore: + - tendermint diff --git a/scripts/proto-gen.sh b/scripts/proto-gen.sh index 9ee0ef43c..cefc38af3 100755 --- a/scripts/proto-gen.sh +++ b/scripts/proto-gen.sh @@ -2,28 +2,24 @@ set -eo pipefail -protoc_gen_gocosmos() { - if ! grep "github.com/gogo/protobuf => github.com/regen-network/protobuf" go.mod &>/dev/null ; then - echo -e "\tPlease run this command from somewhere inside the cosmos-sdk folder." - return 1 - fi - - go install github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@latest 2>/dev/null +generate_protos() { + package="$1" + proto_dirs=$(find $package -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) + for dir in $proto_dirs; do + for file in $(find "${dir}" -maxdepth 1 -name '*.proto'); do + if grep go_package "$file" &>/dev/null; then + buf generate --template buf.gen.gogo.yaml "$file" + fi + done + done } -# protoc_gen_gocosmos +echo "Generating gogo proto code" +cd proto -proto_dirs=$(find ./proto -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) -for dir in $proto_dirs; do - buf protoc \ - -I "proto" \ - -I "third_party/proto" \ - --gocosmos_out=plugins=interfacetype+grpc,\ -Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types:. \ - --grpc-gateway_out=logtostderr=true,allow_colon_final_segments=true:. \ - $(find "${dir}" -maxdepth 1 -name '*.proto') +generate_protos "./comdex" -done +cd .. # move proto files to the right places cp -r github.com/comdex-official/comdex/* ./ From 90b0c10ea2240e35ebf788f6012eb309ac5e2999 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Tue, 10 Oct 2023 00:47:14 +0530 Subject: [PATCH 60/90] proto gen script corrected --- Makefile | 6 +-- proto/buf.gen.gogo.yaml | 2 +- proto/buf.lock | 15 ++++++++ proto/buf.yaml | 9 +++-- scripts/proto-gen.sh | 32 ++++++++-------- x/asset/types/extendedPairVault.pb.go | 10 ++--- x/auction/types/auction.pb.go | 40 ++++++++++---------- x/auction/types/biddings.pb.go | 22 +++++------ x/auctionsV2/types/auction.pb.go | 16 ++++---- x/auctionsV2/types/bid.pb.go | 12 +++--- x/bandoracle/types/packet.pb.go | 1 + x/collector/types/collector.pb.go | 10 ++--- x/collector/types/tx.pb.go | 1 + x/esm/types/esm.pb.go | 16 ++++---- x/lend/types/lend.pb.go | 40 ++++++++++---------- x/liquidation/types/locked_vault.pb.go | 10 ++--- x/liquidationsV2/types/liquidate.pb.go | 10 ++--- x/liquidity/types/liquidity.pb.go | 16 ++++---- x/liquidity/types/params.pb.go | 10 ++--- x/liquidity/types/query.pb.go | 24 ++++++------ x/liquidity/types/tx.pb.go | 22 +++++------ x/locker/types/locker.pb.go | 22 +++++------ x/rewards/types/epochs.pb.go | 24 ++++++------ x/rewards/types/gauge.pb.go | 31 +++++++-------- x/rewards/types/rewards.pb.go | 52 +++++++++++++------------- x/rewards/types/tx.pb.go | 18 ++++----- x/tokenmint/types/mint.pb.go | 10 ++--- x/vault/types/vault.pb.go | 22 +++++------ 28 files changed, 262 insertions(+), 241 deletions(-) create mode 100644 proto/buf.lock diff --git a/Makefile b/Makefile index f3d62d217..0b5f24011 100644 --- a/Makefile +++ b/Makefile @@ -190,9 +190,9 @@ endif ### Protobuf ### ############################################################################### -protoVer=v0.13.1 -containerProtoGenSwagger=ghcr.io/cosmos/proto-builder:$(protoVer) -protoImage=$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(containerProtoGenSwagger) +protoVer=0.13.0 +protoImageName=ghcr.io/cosmos/proto-builder:$(protoVer) +protoImage=$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(protoImageName) proto-gen: @echo "============ Generating Protobuf files ============" diff --git a/proto/buf.gen.gogo.yaml b/proto/buf.gen.gogo.yaml index 1e35cc88e..9c8ba0a4b 100644 --- a/proto/buf.gen.gogo.yaml +++ b/proto/buf.gen.gogo.yaml @@ -2,7 +2,7 @@ version: v1 plugins: - name: gocosmos out: .. - opt: plugins=grpc,Mgoogle/protobuf/duration.proto=github.com/cosmos/gogoproto/types,Mgoogle/protobuf/struct.proto=github.com/cosmos/gogoproto/types,Mgoogle/protobuf/timestamp.proto=github.com/cosmos/gogoproto/types,Mgoogle/protobuf/wrappers.proto=github.com/cosmos/gogoproto/types,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types,Mcosmos/orm/v1alpha1/orm.proto=github.com/cosmos/cosmos-sdk/api/cosmos/orm/v1alpha1 + opt: plugins=grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types - name: grpc-gateway out: .. opt: logtostderr=true,allow_colon_final_segments=true diff --git a/proto/buf.lock b/proto/buf.lock new file mode 100644 index 000000000..78c5a2713 --- /dev/null +++ b/proto/buf.lock @@ -0,0 +1,15 @@ +# Generated by buf. DO NOT EDIT. +version: v1 +deps: + - remote: buf.build + owner: cosmos + repository: cosmos-proto + commit: 1935555c206d4afb9e94615dfd0fad31 + - remote: buf.build + owner: cosmos + repository: gogo-proto + commit: 34d970b699f84aa382f3c29773a60836 + - remote: buf.build + owner: googleapis + repository: googleapis + commit: 75b4300737fb4efca0831636be94e517 diff --git a/proto/buf.yaml b/proto/buf.yaml index e2576c2cc..082a8587f 100644 --- a/proto/buf.yaml +++ b/proto/buf.yaml @@ -1,9 +1,10 @@ +# This module represents buf.build/cosmos/cosmos-sdk version: v1 +name: buf.build/cosmos/cosmos-sdk deps: - - buf.build/cosmos/cosmos-sdk:v0.47.0 - - buf.build/cosmos/cosmos-proto:1935555c206d4afb9e94615dfd0fad31 - - buf.build/cosmos/gogo-proto:a14993478f40695898ed8a86931094b6656e8a5d - - buf.build/googleapis/googleapis:8d7204855ec14631a499bd7393ce1970 + - buf.build/cosmos/cosmos-proto + - buf.build/cosmos/gogo-proto + - buf.build/googleapis/googleapis breaking: use: - FILE diff --git a/scripts/proto-gen.sh b/scripts/proto-gen.sh index cefc38af3..e689bba3c 100755 --- a/scripts/proto-gen.sh +++ b/scripts/proto-gen.sh @@ -1,26 +1,28 @@ #!/usr/bin/env bash -set -eo pipefail +# How to run manually: +# docker build --pull --rm -f "contrib/devtools/Dockerfile" -t cosmossdk-proto:latest "contrib/devtools" +# docker run --rm -v $(pwd):/workspace --workdir /workspace cosmossdk-proto sh ./scripts/protocgen.sh -generate_protos() { - package="$1" - proto_dirs=$(find $package -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) - for dir in $proto_dirs; do - for file in $(find "${dir}" -maxdepth 1 -name '*.proto'); do - if grep go_package "$file" &>/dev/null; then - buf generate --template buf.gen.gogo.yaml "$file" - fi - done - done -} +set -e echo "Generating gogo proto code" cd proto - -generate_protos "./comdex" +proto_dirs=$(find ./comdex -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) +for dir in $proto_dirs; do + for file in $(find "${dir}" -maxdepth 1 -name '*.proto'); do + # this regex checks if a proto file has its go_package set to cosmossdk.io/api/... + # gogo proto files SHOULD ONLY be generated if this is false + # we don't want gogo proto to run for proto files which are natively built for google.golang.org/protobuf + if grep -q "option go_package" "$file" && grep -H -o -c 'option go_package.*cosmossdk.io/api' "$file" | grep -q ':0$'; then + buf generate --template buf.gen.gogo.yaml $file + fi + done +done cd .. # move proto files to the right places cp -r github.com/comdex-official/comdex/* ./ -rm -rf github.com \ No newline at end of file +rm -rf github.com +go mod tidy \ No newline at end of file diff --git a/x/asset/types/extendedPairVault.pb.go b/x/asset/types/extendedPairVault.pb.go index 90cbc2db3..031e27fe1 100644 --- a/x/asset/types/extendedPairVault.pb.go +++ b/x/asset/types/extendedPairVault.pb.go @@ -8,8 +8,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -166,7 +166,7 @@ func (m *ExtendedPairVault) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BlockTime):]) if err1 != nil { return 0, err1 } @@ -382,7 +382,7 @@ func (m *ExtendedPairVault) Size() (n int) { if m.BlockHeight != 0 { n += 2 + sovExtendedPairVault(uint64(m.BlockHeight)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BlockTime) n += 2 + l + sovExtendedPairVault(uint64(l)) return n } @@ -895,7 +895,7 @@ func (m *ExtendedPairVault) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BlockTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BlockTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/auction/types/auction.pb.go b/x/auction/types/auction.pb.go index 4c95cef04..982fc72cc 100644 --- a/x/auction/types/auction.pb.go +++ b/x/auction/types/auction.pb.go @@ -9,8 +9,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -456,7 +456,7 @@ func (m *SurplusAuction) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BidEndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BidEndTime):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BidEndTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BidEndTime):]) if err1 != nil { return 0, err1 } @@ -520,7 +520,7 @@ func (m *SurplusAuction) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x42 - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTime):]) if err2 != nil { return 0, err2 } @@ -598,7 +598,7 @@ func (m *DebtAuction) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n6, err6 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BidEndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BidEndTime):]) + n6, err6 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BidEndTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BidEndTime):]) if err6 != nil { return 0, err6 } @@ -686,7 +686,7 @@ func (m *DebtAuction) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x30 } - n8, err8 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) + n8, err8 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTime):]) if err8 != nil { return 0, err8 } @@ -818,7 +818,7 @@ func (m *DutchAuction) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x6a } } - n12, err12 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + n12, err12 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime):]) if err12 != nil { return 0, err12 } @@ -831,7 +831,7 @@ func (m *DutchAuction) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x58 } - n13, err13 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) + n13, err13 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTime):]) if err13 != nil { return 0, err13 } @@ -1126,7 +1126,7 @@ func (m *SurplusAuction) Size() (n int) { } l = m.Bid.Size() n += 1 + l + sovAuction(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTime) n += 1 + l + sovAuction(uint64(l)) l = m.BidFactor.Size() n += 1 + l + sovAuction(uint64(l)) @@ -1154,7 +1154,7 @@ func (m *SurplusAuction) Size() (n int) { if m.AssetOutId != 0 { n += 1 + sovAuction(uint64(m.AssetOutId)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BidEndTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BidEndTime) n += 2 + l + sovAuction(uint64(l)) return n } @@ -1174,7 +1174,7 @@ func (m *DebtAuction) Size() (n int) { n += 1 + l + sovAuction(uint64(l)) l = m.ExpectedMintedToken.Size() n += 1 + l + sovAuction(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTime) n += 1 + l + sovAuction(uint64(l)) if m.ActiveBiddingId != 0 { n += 1 + sovAuction(uint64(m.ActiveBiddingId)) @@ -1211,7 +1211,7 @@ func (m *DebtAuction) Size() (n int) { if m.AssetOutId != 0 { n += 2 + sovAuction(uint64(m.AssetOutId)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BidEndTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BidEndTime) n += 2 + l + sovAuction(uint64(l)) return n } @@ -1241,12 +1241,12 @@ func (m *DutchAuction) Size() (n int) { n += 1 + l + sovAuction(uint64(l)) l = m.InflowTokenCurrentPrice.Size() n += 1 + l + sovAuction(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTime) n += 1 + l + sovAuction(uint64(l)) if m.AuctionStatus != 0 { n += 1 + sovAuction(uint64(m.AuctionStatus)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime) n += 1 + l + sovAuction(uint64(l)) if len(m.BiddingIds) > 0 { for _, e := range m.BiddingIds { @@ -1580,7 +1580,7 @@ func (m *SurplusAuction) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.EndTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.EndTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1795,7 +1795,7 @@ func (m *SurplusAuction) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BidEndTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BidEndTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1996,7 +1996,7 @@ func (m *DebtAuction) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.EndTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.EndTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2295,7 +2295,7 @@ func (m *DebtAuction) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BidEndTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BidEndTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2665,7 +2665,7 @@ func (m *DutchAuction) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.EndTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.EndTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2717,7 +2717,7 @@ func (m *DutchAuction) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/auction/types/biddings.pb.go b/x/auction/types/biddings.pb.go index 413dfabbc..dbbab8d38 100644 --- a/x/auction/types/biddings.pb.go +++ b/x/auction/types/biddings.pb.go @@ -9,8 +9,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -261,7 +261,7 @@ func (m *SurplusBiddings) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x42 } - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BiddingTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BiddingTimestamp):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BiddingTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BiddingTimestamp):]) if err1 != nil { return 0, err1 } @@ -353,7 +353,7 @@ func (m *DebtBiddings) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x42 } - n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BiddingTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BiddingTimestamp):]) + n4, err4 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BiddingTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BiddingTimestamp):]) if err4 != nil { return 0, err4 } @@ -445,7 +445,7 @@ func (m *DutchBiddings) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x42 } - n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BiddingTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BiddingTimestamp):]) + n7, err7 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BiddingTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BiddingTimestamp):]) if err7 != nil { return 0, err7 } @@ -535,7 +535,7 @@ func (m *SurplusBiddings) Size() (n int) { } l = m.Bid.Size() n += 1 + l + sovBiddings(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BiddingTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BiddingTimestamp) n += 1 + l + sovBiddings(uint64(l)) l = len(m.BiddingStatus) if l > 0 { @@ -574,7 +574,7 @@ func (m *DebtBiddings) Size() (n int) { } l = m.Bid.Size() n += 1 + l + sovBiddings(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BiddingTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BiddingTimestamp) n += 1 + l + sovBiddings(uint64(l)) l = len(m.BiddingStatus) if l > 0 { @@ -613,7 +613,7 @@ func (m *DutchBiddings) Size() (n int) { if l > 0 { n += 1 + l + sovBiddings(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BiddingTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BiddingTimestamp) n += 1 + l + sovBiddings(uint64(l)) l = len(m.BiddingStatus) if l > 0 { @@ -860,7 +860,7 @@ func (m *SurplusBiddings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BiddingTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BiddingTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1181,7 +1181,7 @@ func (m *DebtBiddings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BiddingTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BiddingTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1502,7 +1502,7 @@ func (m *DutchBiddings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BiddingTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BiddingTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/auctionsV2/types/auction.pb.go b/x/auctionsV2/types/auction.pb.go index 021903749..8e172c909 100644 --- a/x/auctionsV2/types/auction.pb.go +++ b/x/auctionsV2/types/auction.pb.go @@ -10,8 +10,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -689,7 +689,7 @@ func (m *Auction) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x68 } - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) + n3, err3 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTime):]) if err3 != nil { return 0, err3 } @@ -697,7 +697,7 @@ func (m *Auction) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintAuction(dAtA, i, uint64(n3)) i-- dAtA[i] = 0x62 - n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + n4, err4 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime):]) if err4 != nil { return 0, err4 } @@ -1081,9 +1081,9 @@ func (m *Auction) Size() (n int) { if m.LockedVaultId != 0 { n += 1 + sovAuction(uint64(m.LockedVaultId)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime) n += 1 + l + sovAuction(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTime) n += 1 + l + sovAuction(uint64(l)) if m.AppId != 0 { n += 1 + sovAuction(uint64(m.AppId)) @@ -1659,7 +1659,7 @@ func (m *Auction) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1692,7 +1692,7 @@ func (m *Auction) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.EndTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.EndTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/auctionsV2/types/bid.pb.go b/x/auctionsV2/types/bid.pb.go index f0876fa4d..35fa4a2a4 100644 --- a/x/auctionsV2/types/bid.pb.go +++ b/x/auctionsV2/types/bid.pb.go @@ -9,8 +9,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -221,7 +221,7 @@ type AuctionParams struct { ClosingFee github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,4,opt,name=closing_fee,json=closingFee,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"closing_fee" yaml:"closing_fee"` MinUsdValueLeft uint64 `protobuf:"varint,5,opt,name=min_usd_value_left,json=minUsdValueLeft,proto3" json:"min_usd_value_left,omitempty" yaml:"min_usd_value_left"` BidFactor github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,6,opt,name=bid_factor,json=bidFactor,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"bid_factor" yaml:"bid_factor"` - //For external apps + // For external apps LiquidationPenalty github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,7,opt,name=liquidation_penalty,json=liquidationPenalty,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"liquidation_penalty" yaml:"liquidation_penalty"` AuctionBonus github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,8,opt,name=auction_bonus,json=auctionBonus,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"auction_bonus" yaml:"auction_bonus"` } @@ -550,7 +550,7 @@ func (m *Bid) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x38 } - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BiddingTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BiddingTimestamp):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BiddingTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BiddingTimestamp):]) if err1 != nil { return 0, err1 } @@ -935,7 +935,7 @@ func (m *Bid) Size() (n int) { if l > 0 { n += 1 + l + sovBid(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BiddingTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BiddingTimestamp) n += 1 + l + sovBid(uint64(l)) if m.AppId != 0 { n += 1 + sovBid(uint64(m.AppId)) @@ -1260,7 +1260,7 @@ func (m *Bid) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BiddingTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BiddingTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/bandoracle/types/packet.pb.go b/x/bandoracle/types/packet.pb.go index ea52d293a..dd7539059 100644 --- a/x/bandoracle/types/packet.pb.go +++ b/x/bandoracle/types/packet.pb.go @@ -24,6 +24,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type BandoraclePacketData struct { // Types that are valid to be assigned to Packet: + // // *BandoraclePacketData_NoData Packet isBandoraclePacketData_Packet `protobuf_oneof:"packet"` } diff --git a/x/collector/types/collector.pb.go b/x/collector/types/collector.pb.go index 5c31870a6..109021a32 100644 --- a/x/collector/types/collector.pb.go +++ b/x/collector/types/collector.pb.go @@ -8,8 +8,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -669,7 +669,7 @@ func (m *CollectorLookupTableData) MarshalToSizedBuffer(dAtA []byte) (int, error _ = i var l int _ = l - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime):]) + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BlockTime):]) if err2 != nil { return 0, err2 } @@ -988,7 +988,7 @@ func (m *CollectorLookupTableData) Size() (n int) { if m.BlockHeight != 0 { n += 1 + sovCollector(uint64(m.BlockHeight)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BlockTime) n += 1 + l + sovCollector(uint64(l)) return n } @@ -1821,7 +1821,7 @@ func (m *CollectorLookupTableData) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BlockTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BlockTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/collector/types/tx.pb.go b/x/collector/types/tx.pb.go index 7b7fd8c4a..41ae3d053 100644 --- a/x/collector/types/tx.pb.go +++ b/x/collector/types/tx.pb.go @@ -7,6 +7,7 @@ import ( context "context" fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" diff --git a/x/esm/types/esm.pb.go b/x/esm/types/esm.pb.go index 944e62ddb..f18472c8b 100644 --- a/x/esm/types/esm.pb.go +++ b/x/esm/types/esm.pb.go @@ -9,8 +9,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -791,7 +791,7 @@ func (m *ESMStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x30 } - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) + n3, err3 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTime):]) if err3 != nil { return 0, err3 } @@ -799,7 +799,7 @@ func (m *ESMStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintEsm(dAtA, i, uint64(n3)) i-- dAtA[i] = 0x2a - n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + n4, err4 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime):]) if err4 != nil { return 0, err4 } @@ -1133,9 +1133,9 @@ func (m *ESMStatus) Size() (n int) { if m.Status { n += 2 } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime) n += 1 + l + sovEsm(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTime) n += 1 + l + sovEsm(uint64(l)) if m.VaultRedemptionStatus { n += 2 @@ -1635,7 +1635,7 @@ func (m *ESMStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1668,7 +1668,7 @@ func (m *ESMStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.EndTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.EndTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/lend/types/lend.pb.go b/x/lend/types/lend.pb.go index 0635016fa..8e515e71d 100644 --- a/x/lend/types/lend.pb.go +++ b/x/lend/types/lend.pb.go @@ -9,8 +9,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -2282,7 +2282,7 @@ func (m *LendAsset) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x5a } - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastInteractionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastInteractionTime):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.LastInteractionTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LastInteractionTime):]) if err1 != nil { return 0, err1 } @@ -2315,7 +2315,7 @@ func (m *LendAsset) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x3a - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LendingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LendingTime):]) + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.LendingTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LendingTime):]) if err2 != nil { return 0, err2 } @@ -2395,7 +2395,7 @@ func (m *BorrowAsset) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x72 } - n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastInteractionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastInteractionTime):]) + n4, err4 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.LastInteractionTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LastInteractionTime):]) if err4 != nil { return 0, err4 } @@ -2443,7 +2443,7 @@ func (m *BorrowAsset) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x4a - n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BorrowingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BorrowingTime):]) + n5, err5 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BorrowingTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BorrowingTime):]) if err5 != nil { return 0, err5 } @@ -3528,7 +3528,7 @@ func (m *FundModBal) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n18, err18 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.DepositTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.DepositTime):]) + n18, err18 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.DepositTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.DepositTime):]) if err18 != nil { return 0, err18 } @@ -3586,7 +3586,7 @@ func (m *FundReserveBal) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x22 } - n20, err20 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.DepositTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.DepositTime):]) + n20, err20 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.DepositTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.DepositTime):]) if err20 != nil { return 0, err20 } @@ -4367,7 +4367,7 @@ func (m *LendAsset) Size() (n int) { } l = m.AmountIn.Size() n += 1 + l + sovLend(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.LendingTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LendingTime) n += 1 + l + sovLend(uint64(l)) l = m.AvailableToBorrow.Size() n += 1 + l + sovLend(uint64(l)) @@ -4376,7 +4376,7 @@ func (m *LendAsset) Size() (n int) { } l = m.GlobalIndex.Size() n += 1 + l + sovLend(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.LastInteractionTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LastInteractionTime) n += 1 + l + sovLend(uint64(l)) l = len(m.CPoolName) if l > 0 { @@ -4411,7 +4411,7 @@ func (m *BorrowAsset) Size() (n int) { n += 1 + l + sovLend(uint64(l)) l = m.BridgedAssetAmount.Size() n += 1 + l + sovLend(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BorrowingTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BorrowingTime) n += 1 + l + sovLend(uint64(l)) l = m.StableBorrowRate.Size() n += 1 + l + sovLend(uint64(l)) @@ -4421,7 +4421,7 @@ func (m *BorrowAsset) Size() (n int) { n += 1 + l + sovLend(uint64(l)) l = m.ReserveGlobalIndex.Size() n += 1 + l + sovLend(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.LastInteractionTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LastInteractionTime) n += 1 + l + sovLend(uint64(l)) l = len(m.CPoolName) if l > 0 { @@ -4800,7 +4800,7 @@ func (m *FundModBal) Size() (n int) { } l = m.AmountIn.Size() n += 1 + l + sovLend(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.DepositTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.DepositTime) n += 1 + l + sovLend(uint64(l)) l = len(m.Funder) if l > 0 { @@ -4820,7 +4820,7 @@ func (m *FundReserveBal) Size() (n int) { } l = m.AmountIn.Size() n += 1 + l + sovLend(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.DepositTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.DepositTime) n += 1 + l + sovLend(uint64(l)) l = len(m.Funder) if l > 0 { @@ -5273,7 +5273,7 @@ func (m *LendAsset) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.LendingTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.LendingTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5393,7 +5393,7 @@ func (m *LendAsset) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.LastInteractionTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.LastInteractionTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5718,7 +5718,7 @@ func (m *BorrowAsset) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BorrowingTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BorrowingTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5887,7 +5887,7 @@ func (m *BorrowAsset) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.LastInteractionTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.LastInteractionTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -9040,7 +9040,7 @@ func (m *FundModBal) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.DepositTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.DepositTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -9207,7 +9207,7 @@ func (m *FundReserveBal) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.DepositTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.DepositTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/liquidation/types/locked_vault.pb.go b/x/liquidation/types/locked_vault.pb.go index b62d52f4f..61c76493c 100644 --- a/x/liquidation/types/locked_vault.pb.go +++ b/x/liquidation/types/locked_vault.pb.go @@ -9,8 +9,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -295,7 +295,7 @@ func (m *LockedVault) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x82 } } - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LiquidationTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LiquidationTimestamp):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.LiquidationTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LiquidationTimestamp):]) if err1 != nil { return 0, err1 } @@ -556,7 +556,7 @@ func (m *LockedVault) Size() (n int) { n += 1 + l + sovLockedVault(uint64(l)) l = m.CollateralToBeAuctioned.Size() n += 1 + l + sovLockedVault(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.LiquidationTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LiquidationTimestamp) n += 1 + l + sovLockedVault(uint64(l)) if len(m.SellOffHistory) > 0 { for _, s := range m.SellOffHistory { @@ -1051,7 +1051,7 @@ func (m *LockedVault) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.LiquidationTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.LiquidationTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/liquidationsV2/types/liquidate.pb.go b/x/liquidationsV2/types/liquidate.pb.go index 3132496bd..aa8e0717e 100644 --- a/x/liquidationsV2/types/liquidate.pb.go +++ b/x/liquidationsV2/types/liquidate.pb.go @@ -9,8 +9,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -947,7 +947,7 @@ func (m *LockedVault) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x60 } - n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LiquidationTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LiquidationTimestamp):]) + n5, err5 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.LiquidationTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LiquidationTimestamp):]) if err5 != nil { return 0, err5 } @@ -1203,7 +1203,7 @@ func (m *LockedVault) Size() (n int) { n += 1 + l + sovLiquidate(uint64(l)) l = m.TargetDebt.Size() n += 1 + l + sovLiquidate(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.LiquidationTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LiquidationTimestamp) n += 1 + l + sovLiquidate(uint64(l)) if m.IsInternalKeeper { n += 2 @@ -2494,7 +2494,7 @@ func (m *LockedVault) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.LiquidationTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.LiquidationTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/liquidity/types/liquidity.pb.go b/x/liquidity/types/liquidity.pb.go index d3ee1e4ae..d9e2a7d3f 100644 --- a/x/liquidity/types/liquidity.pb.go +++ b/x/liquidity/types/liquidity.pb.go @@ -9,8 +9,8 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -1204,7 +1204,7 @@ func (m *Order) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x70 } - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExpireAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpireAt):]) + n3, err3 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.ExpireAt, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ExpireAt):]) if err3 != nil { return 0, err3 } @@ -1435,7 +1435,7 @@ func (m *QueuedCoin) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n10, err10 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt):]) + n10, err10 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedAt):]) if err10 != nil { return 0, err10 } @@ -1727,7 +1727,7 @@ func (m *Order) Size() (n int) { if m.BatchId != 0 { n += 1 + sovLiquidity(uint64(m.BatchId)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpireAt) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ExpireAt) n += 1 + l + sovLiquidity(uint64(l)) if m.Status != 0 { n += 1 + sovLiquidity(uint64(m.Status)) @@ -1796,7 +1796,7 @@ func (m *QueuedCoin) Size() (n int) { _ = l l = m.FarmedPoolCoin.Size() n += 1 + l + sovLiquidity(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedAt) n += 1 + l + sovLiquidity(uint64(l)) return n } @@ -3382,7 +3382,7 @@ func (m *Order) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.ExpireAt, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.ExpireAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3904,7 +3904,7 @@ func (m *QueuedCoin) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/liquidity/types/params.pb.go b/x/liquidity/types/params.pb.go index 7a5b0d02a..163c8e635 100644 --- a/x/liquidity/types/params.pb.go +++ b/x/liquidity/types/params.pb.go @@ -9,8 +9,8 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/duration" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" @@ -308,7 +308,7 @@ func (m *GenericParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x5a - n1, err1 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.MaxOrderLifespan, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxOrderLifespan):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdDurationMarshalTo(m.MaxOrderLifespan, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.MaxOrderLifespan):]) if err1 != nil { return 0, err1 } @@ -459,7 +459,7 @@ func (m *GenericParams) Size() (n int) { n += 1 + l + sovParams(uint64(l)) l = m.MaxPriceLimitRatio.Size() n += 1 + l + sovParams(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxOrderLifespan) + l = github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.MaxOrderLifespan) n += 1 + l + sovParams(uint64(l)) l = m.SwapFeeRate.Size() n += 1 + l + sovParams(uint64(l)) @@ -878,7 +878,7 @@ func (m *GenericParams) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.MaxOrderLifespan, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdDurationUnmarshal(&m.MaxOrderLifespan, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/liquidity/types/query.pb.go b/x/liquidity/types/query.pb.go index 87ddb0ae1..462baab10 100644 --- a/x/liquidity/types/query.pb.go +++ b/x/liquidity/types/query.pb.go @@ -12,13 +12,13 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/duration" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + _ "google.golang.org/protobuf/types/known/durationpb" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -5032,7 +5032,7 @@ func (m *QueuedPoolCoin) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n22, err22 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.DequeAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.DequeAt):]) + n22, err22 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.DequeAt, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.DequeAt):]) if err22 != nil { return 0, err22 } @@ -5238,7 +5238,7 @@ func (m *PoolIncentive) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x50 } - n25, err25 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.NextDistribution, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.NextDistribution):]) + n25, err25 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.NextDistribution, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.NextDistribution):]) if err25 != nil { return 0, err25 } @@ -5246,7 +5246,7 @@ func (m *PoolIncentive) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintQuery(dAtA, i, uint64(n25)) i-- dAtA[i] = 0x4a - n26, err26 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.EpochDuration, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.EpochDuration):]) + n26, err26 := github_com_cosmos_gogoproto_types.StdDurationMarshalTo(m.EpochDuration, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.EpochDuration):]) if err26 != nil { return 0, err26 } @@ -6356,7 +6356,7 @@ func (m *QueuedPoolCoin) Size() (n int) { _ = l l = m.PoolCoin.Size() n += 1 + l + sovQuery(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.DequeAt) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.DequeAt) n += 1 + l + sovQuery(uint64(l)) return n } @@ -6452,9 +6452,9 @@ func (m *PoolIncentive) Size() (n int) { if m.FilledEpochs != 0 { n += 1 + sovQuery(uint64(m.FilledEpochs)) } - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.EpochDuration) + l = github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.EpochDuration) n += 1 + l + sovQuery(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.NextDistribution) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.NextDistribution) n += 1 + l + sovQuery(uint64(l)) if m.IsSwapFee { n += 2 @@ -10262,7 +10262,7 @@ func (m *QueuedPoolCoin) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.DequeAt, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.DequeAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -10941,7 +10941,7 @@ func (m *PoolIncentive) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.EpochDuration, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdDurationUnmarshal(&m.EpochDuration, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -10974,7 +10974,7 @@ func (m *PoolIncentive) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.NextDistribution, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.NextDistribution, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/liquidity/types/tx.pb.go b/x/liquidity/types/tx.pb.go index 67dd9b961..e85abd7d2 100644 --- a/x/liquidity/types/tx.pb.go +++ b/x/liquidity/types/tx.pb.go @@ -11,11 +11,11 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/duration" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" @@ -2440,7 +2440,7 @@ func (m *MsgLimitOrder) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x48 } - n2, err2 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.OrderLifespan, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.OrderLifespan):]) + n2, err2 := github_com_cosmos_gogoproto_types.StdDurationMarshalTo(m.OrderLifespan, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.OrderLifespan):]) if err2 != nil { return 0, err2 } @@ -2553,7 +2553,7 @@ func (m *MsgMarketOrder) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x40 } - n4, err4 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.OrderLifespan, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.OrderLifespan):]) + n4, err4 := github_com_cosmos_gogoproto_types.StdDurationMarshalTo(m.OrderLifespan, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.OrderLifespan):]) if err4 != nil { return 0, err4 } @@ -2651,7 +2651,7 @@ func (m *MsgMMOrder) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n6, err6 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.OrderLifespan, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.OrderLifespan):]) + n6, err6 := github_com_cosmos_gogoproto_types.StdDurationMarshalTo(m.OrderLifespan, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.OrderLifespan):]) if err6 != nil { return 0, err6 } @@ -3473,7 +3473,7 @@ func (m *MsgLimitOrder) Size() (n int) { n += 1 + l + sovTx(uint64(l)) l = m.Amount.Size() n += 1 + l + sovTx(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.OrderLifespan) + l = github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.OrderLifespan) n += 1 + l + sovTx(uint64(l)) if m.AppId != 0 { n += 1 + sovTx(uint64(m.AppId)) @@ -3514,7 +3514,7 @@ func (m *MsgMarketOrder) Size() (n int) { } l = m.Amount.Size() n += 1 + l + sovTx(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.OrderLifespan) + l = github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.OrderLifespan) n += 1 + l + sovTx(uint64(l)) if m.AppId != 0 { n += 1 + sovTx(uint64(m.AppId)) @@ -3559,7 +3559,7 @@ func (m *MsgMMOrder) Size() (n int) { n += 1 + l + sovTx(uint64(l)) l = m.BuyAmount.Size() n += 1 + l + sovTx(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.OrderLifespan) + l = github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.OrderLifespan) n += 1 + l + sovTx(uint64(l)) return n } @@ -5187,7 +5187,7 @@ func (m *MsgLimitOrder) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.OrderLifespan, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdDurationUnmarshal(&m.OrderLifespan, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5508,7 +5508,7 @@ func (m *MsgMarketOrder) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.OrderLifespan, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdDurationUnmarshal(&m.OrderLifespan, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5934,7 +5934,7 @@ func (m *MsgMMOrder) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.OrderLifespan, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdDurationUnmarshal(&m.OrderLifespan, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/locker/types/locker.pb.go b/x/locker/types/locker.pb.go index a96af8aae..3004734cc 100644 --- a/x/locker/types/locker.pb.go +++ b/x/locker/types/locker.pb.go @@ -9,8 +9,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -410,7 +410,7 @@ func (m *Locker) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BlockTime):]) if err1 != nil { return 0, err1 } @@ -443,7 +443,7 @@ func (m *Locker) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x30 } - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt):]) + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedAt):]) if err2 != nil { return 0, err2 } @@ -565,7 +565,7 @@ func (m *UserTxData) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.TxTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.TxTime):]) + n3, err3 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.TxTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.TxTime):]) if err3 != nil { return 0, err3 } @@ -806,7 +806,7 @@ func (m *Locker) Size() (n int) { n += 1 + l + sovLocker(uint64(l)) l = m.NetBalance.Size() n += 1 + l + sovLocker(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedAt) n += 1 + l + sovLocker(uint64(l)) if m.AssetDepositId != 0 { n += 1 + sovLocker(uint64(m.AssetDepositId)) @@ -820,7 +820,7 @@ func (m *Locker) Size() (n int) { if m.BlockHeight != 0 { n += 1 + sovLocker(uint64(m.BlockHeight)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BlockTime) n += 1 + l + sovLocker(uint64(l)) return n } @@ -867,7 +867,7 @@ func (m *UserTxData) Size() (n int) { n += 1 + l + sovLocker(uint64(l)) l = m.Balance.Size() n += 1 + l + sovLocker(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.TxTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.TxTime) n += 1 + l + sovLocker(uint64(l)) return n } @@ -1125,7 +1125,7 @@ func (m *Locker) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1235,7 +1235,7 @@ func (m *Locker) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BlockTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BlockTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1591,7 +1591,7 @@ func (m *UserTxData) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.TxTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.TxTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/rewards/types/epochs.pb.go b/x/rewards/types/epochs.pb.go index bbd907628..bbf2e46db 100644 --- a/x/rewards/types/epochs.pb.go +++ b/x/rewards/types/epochs.pb.go @@ -7,9 +7,9 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/duration" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/durationpb" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -166,7 +166,7 @@ func (m *EpochInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x30 } - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CurrentEpochStartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CurrentEpochStartTime):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CurrentEpochStartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CurrentEpochStartTime):]) if err1 != nil { return 0, err1 } @@ -179,7 +179,7 @@ func (m *EpochInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x20 } - n2, err2 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Duration, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration):]) + n2, err2 := github_com_cosmos_gogoproto_types.StdDurationMarshalTo(m.Duration, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.Duration):]) if err2 != nil { return 0, err2 } @@ -187,7 +187,7 @@ func (m *EpochInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintEpochs(dAtA, i, uint64(n2)) i-- dAtA[i] = 0x1a - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + n3, err3 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime):]) if err3 != nil { return 0, err3 } @@ -215,14 +215,14 @@ func (m *EpochInfo) Size() (n int) { } var l int _ = l - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime) n += 1 + l + sovEpochs(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration) + l = github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.Duration) n += 1 + l + sovEpochs(uint64(l)) if m.CurrentEpoch != 0 { n += 1 + sovEpochs(uint64(m.CurrentEpoch)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CurrentEpochStartTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CurrentEpochStartTime) n += 1 + l + sovEpochs(uint64(l)) if m.CurrentEpochStartHeight != 0 { n += 1 + sovEpochs(uint64(m.CurrentEpochStartHeight)) @@ -294,7 +294,7 @@ func (m *EpochInfo) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -327,7 +327,7 @@ func (m *EpochInfo) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.Duration, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdDurationUnmarshal(&m.Duration, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -379,7 +379,7 @@ func (m *EpochInfo) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CurrentEpochStartTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CurrentEpochStartTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/rewards/types/gauge.pb.go b/x/rewards/types/gauge.pb.go index 5c95841b4..78ba884df 100644 --- a/x/rewards/types/gauge.pb.go +++ b/x/rewards/types/gauge.pb.go @@ -9,9 +9,9 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/duration" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/durationpb" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -104,6 +104,7 @@ type Gauge struct { IsActive bool `protobuf:"varint,11,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` ForSwapFee bool `protobuf:"varint,12,opt,name=for_swap_fee,json=forSwapFee,proto3" json:"for_swap_fee,omitempty"` // Types that are valid to be assigned to Kind: + // // *Gauge_LiquidityMetaData Kind isGauge_Kind `protobuf_oneof:"kind"` AppId uint64 `protobuf:"varint,14,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` @@ -519,7 +520,7 @@ func (m *Gauge) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x3a - n5, err5 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TriggerDuration, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TriggerDuration):]) + n5, err5 := github_com_cosmos_gogoproto_types.StdDurationMarshalTo(m.TriggerDuration, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.TriggerDuration):]) if err5 != nil { return 0, err5 } @@ -532,7 +533,7 @@ func (m *Gauge) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x28 } - n6, err6 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + n6, err6 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime):]) if err6 != nil { return 0, err6 } @@ -540,7 +541,7 @@ func (m *Gauge) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGauge(dAtA, i, uint64(n6)) i-- dAtA[i] = 0x22 - n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt):]) + n7, err7 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedAt):]) if err7 != nil { return 0, err7 } @@ -622,7 +623,7 @@ func (m *GaugeByTriggerDuration) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x12 } - n11, err11 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TriggerDuration, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TriggerDuration):]) + n11, err11 := github_com_cosmos_gogoproto_types.StdDurationMarshalTo(m.TriggerDuration, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.TriggerDuration):]) if err11 != nil { return 0, err11 } @@ -679,14 +680,14 @@ func (m *Gauge) Size() (n int) { if l > 0 { n += 1 + l + sovGauge(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedAt) n += 1 + l + sovGauge(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime) n += 1 + l + sovGauge(uint64(l)) if m.GaugeTypeId != 0 { n += 1 + sovGauge(uint64(m.GaugeTypeId)) } - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TriggerDuration) + l = github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.TriggerDuration) n += 1 + l + sovGauge(uint64(l)) l = m.DepositAmount.Size() n += 1 + l + sovGauge(uint64(l)) @@ -731,7 +732,7 @@ func (m *GaugeByTriggerDuration) Size() (n int) { } var l int _ = l - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TriggerDuration) + l = github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.TriggerDuration) n += 1 + l + sovGauge(uint64(l)) if len(m.GaugeIds) > 0 { l = 0 @@ -1023,7 +1024,7 @@ func (m *Gauge) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1056,7 +1057,7 @@ func (m *Gauge) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1108,7 +1109,7 @@ func (m *Gauge) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TriggerDuration, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdDurationUnmarshal(&m.TriggerDuration, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1389,7 +1390,7 @@ func (m *GaugeByTriggerDuration) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TriggerDuration, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdDurationUnmarshal(&m.TriggerDuration, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/rewards/types/rewards.pb.go b/x/rewards/types/rewards.pb.go index c524f27c6..a2f91f5fa 100644 --- a/x/rewards/types/rewards.pb.go +++ b/x/rewards/types/rewards.pb.go @@ -9,8 +9,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -1114,7 +1114,7 @@ func (m *LockerExternalRewards) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x58 } - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTimestamp):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.EndTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTimestamp):]) if err1 != nil { return 0, err1 } @@ -1122,7 +1122,7 @@ func (m *LockerExternalRewards) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintRewards(dAtA, i, uint64(n1)) i-- dAtA[i] = 0x52 - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTimestamp):]) + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.StartTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTimestamp):]) if err2 != nil { return 0, err2 } @@ -1220,7 +1220,7 @@ func (m *VaultExternalRewards) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x58 } - n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTimestamp):]) + n5, err5 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.EndTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTimestamp):]) if err5 != nil { return 0, err5 } @@ -1228,7 +1228,7 @@ func (m *VaultExternalRewards) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintRewards(dAtA, i, uint64(n5)) i-- dAtA[i] = 0x52 - n6, err6 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTimestamp):]) + n6, err6 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.StartTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTimestamp):]) if err6 != nil { return 0, err6 } @@ -1369,7 +1369,7 @@ func (m *LendExternalRewards) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x60 } - n9, err9 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTimestamp):]) + n9, err9 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.EndTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTimestamp):]) if err9 != nil { return 0, err9 } @@ -1377,7 +1377,7 @@ func (m *LendExternalRewards) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintRewards(dAtA, i, uint64(n9)) i-- dAtA[i] = 0x5a - n10, err10 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTimestamp):]) + n10, err10 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.StartTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTimestamp):]) if err10 != nil { return 0, err10 } @@ -1543,7 +1543,7 @@ func (m *StableVaultExternalRewards) MarshalToSizedBuffer(dAtA []byte) (int, err i-- dAtA[i] = 0x60 } - n16, err16 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTimestamp):]) + n16, err16 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.EndTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTimestamp):]) if err16 != nil { return 0, err16 } @@ -1551,7 +1551,7 @@ func (m *StableVaultExternalRewards) MarshalToSizedBuffer(dAtA []byte) (int, err i = encodeVarintRewards(dAtA, i, uint64(n16)) i-- dAtA[i] = 0x5a - n17, err17 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTimestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTimestamp):]) + n17, err17 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.StartTimestamp, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTimestamp):]) if err17 != nil { return 0, err17 } @@ -1713,9 +1713,9 @@ func (m *LockerExternalRewards) Size() (n int) { if l > 0 { n += 1 + l + sovRewards(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTimestamp) n += 1 + l + sovRewards(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTimestamp) n += 1 + l + sovRewards(uint64(l)) if m.MinLockupTimeSeconds != 0 { n += 1 + sovRewards(uint64(m.MinLockupTimeSeconds)) @@ -1755,9 +1755,9 @@ func (m *VaultExternalRewards) Size() (n int) { if l > 0 { n += 1 + l + sovRewards(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTimestamp) n += 1 + l + sovRewards(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTimestamp) n += 1 + l + sovRewards(uint64(l)) if m.MinLockupTimeSeconds != 0 { n += 1 + sovRewards(uint64(m.MinLockupTimeSeconds)) @@ -1822,9 +1822,9 @@ func (m *LendExternalRewards) Size() (n int) { if l > 0 { n += 1 + l + sovRewards(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTimestamp) n += 1 + l + sovRewards(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTimestamp) n += 1 + l + sovRewards(uint64(l)) if m.MinLockupTimeSeconds != 0 { n += 1 + sovRewards(uint64(m.MinLockupTimeSeconds)) @@ -1892,9 +1892,9 @@ func (m *StableVaultExternalRewards) Size() (n int) { if l > 0 { n += 1 + l + sovRewards(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTimestamp) n += 1 + l + sovRewards(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTimestamp) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.EndTimestamp) n += 1 + l + sovRewards(uint64(l)) if m.AcceptedBlockHeight != 0 { n += 1 + sovRewards(uint64(m.AcceptedBlockHeight)) @@ -2495,7 +2495,7 @@ func (m *LockerExternalRewards) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.StartTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2528,7 +2528,7 @@ func (m *LockerExternalRewards) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.EndTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.EndTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2843,7 +2843,7 @@ func (m *VaultExternalRewards) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.StartTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2876,7 +2876,7 @@ func (m *VaultExternalRewards) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.EndTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.EndTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3353,7 +3353,7 @@ func (m *LendExternalRewards) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.StartTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3386,7 +3386,7 @@ func (m *LendExternalRewards) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.EndTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.EndTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3903,7 +3903,7 @@ func (m *StableVaultExternalRewards) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.StartTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3936,7 +3936,7 @@ func (m *StableVaultExternalRewards) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.EndTimestamp, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.EndTimestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/rewards/types/tx.pb.go b/x/rewards/types/tx.pb.go index d4459018a..dea6f7efe 100644 --- a/x/rewards/types/tx.pb.go +++ b/x/rewards/types/tx.pb.go @@ -11,12 +11,12 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/duration" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + _ "google.golang.org/protobuf/types/known/durationpb" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -1463,7 +1463,7 @@ func (m *MsgCreateGauge) MarshalToSizedBuffer(dAtA []byte) (int, error) { } } } - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime):]) if err1 != nil { return 0, err1 } @@ -1486,7 +1486,7 @@ func (m *MsgCreateGauge) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x22 - n3, err3 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TriggerDuration, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TriggerDuration):]) + n3, err3 := github_com_cosmos_gogoproto_types.StdDurationMarshalTo(m.TriggerDuration, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.TriggerDuration):]) if err3 != nil { return 0, err3 } @@ -2189,14 +2189,14 @@ func (m *MsgCreateGauge) Size() (n int) { if m.GaugeTypeId != 0 { n += 1 + sovTx(uint64(m.GaugeTypeId)) } - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TriggerDuration) + l = github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.TriggerDuration) n += 1 + l + sovTx(uint64(l)) l = m.DepositAmount.Size() n += 1 + l + sovTx(uint64(l)) if m.TotalTriggers != 0 { n += 1 + sovTx(uint64(m.TotalTriggers)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime) n += 1 + l + sovTx(uint64(l)) if m.Kind != nil { n += m.Kind.Size() @@ -2612,7 +2612,7 @@ func (m *MsgCreateGauge) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TriggerDuration, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdDurationUnmarshal(&m.TriggerDuration, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2697,7 +2697,7 @@ func (m *MsgCreateGauge) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/tokenmint/types/mint.pb.go b/x/tokenmint/types/mint.pb.go index e4ad904ee..f2d9bed47 100644 --- a/x/tokenmint/types/mint.pb.go +++ b/x/tokenmint/types/mint.pb.go @@ -8,8 +8,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -221,7 +221,7 @@ func (m *MintedTokens) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x22 - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedAt):]) if err1 != nil { return 0, err1 } @@ -287,7 +287,7 @@ func (m *MintedTokens) Size() (n int) { } l = m.GenesisSupply.Size() n += 1 + l + sovMint(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedAt) n += 1 + l + sovMint(uint64(l)) l = m.CurrentSupply.Size() n += 1 + l + sovMint(uint64(l)) @@ -514,7 +514,7 @@ func (m *MintedTokens) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/vault/types/vault.pb.go b/x/vault/types/vault.pb.go index 36a5a5c59..171745700 100644 --- a/x/vault/types/vault.pb.go +++ b/x/vault/types/vault.pb.go @@ -8,8 +8,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_gogo_protobuf_types "github.com/cosmos/gogoproto/types" - _ "github.com/golang/protobuf/ptypes/timestamp" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -463,7 +463,7 @@ func (m *Vault) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BlockTime):]) if err1 != nil { return 0, err1 } @@ -496,7 +496,7 @@ func (m *Vault) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x42 - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt):]) + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedAt):]) if err2 != nil { return 0, err2 } @@ -765,7 +765,7 @@ func (m *StableMintVault) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt):]) + n5, err5 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedAt):]) if err5 != nil { return 0, err5 } @@ -962,7 +962,7 @@ func (m *Vault) Size() (n int) { n += 1 + l + sovVault(uint64(l)) l = m.AmountOut.Size() n += 1 + l + sovVault(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedAt) n += 1 + l + sovVault(uint64(l)) l = m.InterestAccumulated.Size() n += 1 + l + sovVault(uint64(l)) @@ -971,7 +971,7 @@ func (m *Vault) Size() (n int) { if m.BlockHeight != 0 { n += 1 + sovVault(uint64(m.BlockHeight)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BlockTime) n += 1 + l + sovVault(uint64(l)) return n } @@ -1073,7 +1073,7 @@ func (m *StableMintVault) Size() (n int) { if m.ExtendedPairVaultID != 0 { n += 1 + sovVault(uint64(m.ExtendedPairVaultID)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedAt) n += 1 + l + sovVault(uint64(l)) return n } @@ -1347,7 +1347,7 @@ func (m *Vault) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1467,7 +1467,7 @@ func (m *Vault) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BlockTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BlockTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2278,7 +2278,7 @@ func (m *StableMintVault) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex From 48357ed8efb10386681dee0730febe8da56c3cff Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Tue, 10 Oct 2023 02:31:54 +0530 Subject: [PATCH 61/90] newer gRPC services --- app/app.go | 11 +++++++++++ cmd/comdex/root.go | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index ca16c5d2b..2822e5664 100644 --- a/app/app.go +++ b/app/app.go @@ -119,9 +119,12 @@ import ( ibchost "github.com/cosmos/ibc-go/v7/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" "github.com/comdex-official/comdex/x/liquidation" liquidationkeeper "github.com/comdex-official/comdex/x/liquidation/keeper" liquidationtypes "github.com/comdex-official/comdex/x/liquidation/types" + runtimeservices "github.com/cosmos/cosmos-sdk/runtime/services" tmdb "github.com/cometbft/cometbft-db" abcitypes "github.com/cometbft/cometbft/abci/types" @@ -1152,6 +1155,14 @@ func New( app.MountTransientStores(app.tkeys) app.MountMemoryStores(app.mkeys) + // SDK v47 - since we do not use dep inject, this gives us access to newer gRPC services. + autocliv1.RegisterQueryServer(app.GRPCQueryRouter(), runtimeservices.NewAutoCLIQueryService(app.mm.Modules)) + reflectionSvc, err := runtimeservices.NewReflectionService() + if err != nil { + panic(err) + } + reflectionv1.RegisterReflectionServiceServer(app.GRPCQueryRouter(), reflectionSvc) + // initialize BaseApp app.SetInitChainer(app.InitChainer) app.SetBeginBlocker(app.BeginBlocker) diff --git a/cmd/comdex/root.go b/cmd/comdex/root.go index 078fe8dcf..20c205d0b 100644 --- a/cmd/comdex/root.go +++ b/cmd/comdex/root.go @@ -51,7 +51,7 @@ func NewRootCmd() (*cobra.Command, comdex.EncodingConfig) { WithLegacyAmino(encodingConfig.Amino). WithInput(os.Stdin). WithAccountRetriever(authtypes.AccountRetriever{}). - // WithBroadcastMode(flags.FlagBroadcastMode). + WithBroadcastMode(flags.FlagBroadcastMode). WithHomeDir(comdex.DefaultNodeHome). WithViper("") From 9480f1ffba224112c3ff9b3f5c7c1fefdbde2284 Mon Sep 17 00:00:00 2001 From: vishnukumavat Date: Tue, 10 Oct 2023 19:14:30 +0530 Subject: [PATCH 62/90] pool test refactored for sdk 47 compatibility --- x/liquidity/amm/pool_test.go | 461 +++++++++++++++++------------------ 1 file changed, 230 insertions(+), 231 deletions(-) diff --git a/x/liquidity/amm/pool_test.go b/x/liquidity/amm/pool_test.go index 6814bcdf0..7f8e02229 100644 --- a/x/liquidity/amm/pool_test.go +++ b/x/liquidity/amm/pool_test.go @@ -6,7 +6,6 @@ import ( "github.com/stretchr/testify/require" - sdk "github.com/cosmos/cosmos-sdk/types" sdkmath "cosmossdk.io/math" utils "github.com/comdex-official/comdex/types" @@ -16,47 +15,47 @@ import ( func TestBasicPool(t *testing.T) { r := rand.New(rand.NewSource(0)) for i := 0; i < 1000; i++ { - rx, ry := sdk.NewInt(1+r.Int63n(100000000)), sdk.NewInt(1+r.Int63n(100000000)) - pool := amm.NewBasicPool(rx, ry, sdk.Int{}) + rx, ry := sdkmath.NewInt(1+r.Int63n(100000000)), sdkmath.NewInt(1+r.Int63n(100000000)) + pool := amm.NewBasicPool(rx, ry, sdkmath.Int{}) highest, found := pool.HighestBuyPrice() require.True(t, found) - require.True(sdk.DecEq(t, pool.Price(), highest)) + require.True(sdkmath.LegacyDecEq(t, pool.Price(), highest)) lowest, found := pool.LowestSellPrice() require.True(t, found) - require.True(sdk.DecEq(t, pool.Price(), lowest)) + require.True(sdkmath.LegacyDecEq(t, pool.Price(), lowest)) } } func TestCreateBasicPool(t *testing.T) { for _, tc := range []struct { name string - rx, ry sdk.Int + rx, ry sdkmath.Int expectedErr string }{ { "both zero amount", - sdk.NewInt(0), sdk.NewInt(0), + sdkmath.NewInt(0), sdkmath.NewInt(0), "cannot create basic pool with zero reserve amount", }, { "zero y amount", - sdk.NewInt(1000000), sdk.NewInt(0), + sdkmath.NewInt(1000000), sdkmath.NewInt(0), "cannot create basic pool with zero reserve amount", }, { "zero x amount", - sdk.NewInt(0), sdk.NewInt(1000000), + sdkmath.NewInt(0), sdkmath.NewInt(1000000), "cannot create basic pool with zero reserve amount", }, { "too low price", - sdk.NewInt(1000000), sdkmath.NewIntWithDecimal(1, 26), + sdkmath.NewInt(1000000), sdkmath.NewIntWithDecimal(1, 26), "pool price is lower than min price 0.000000000000001000", }, { "too high price", - sdkmath.NewIntWithDecimal(1, 48), sdk.NewInt(1000000), + sdkmath.NewIntWithDecimal(1, 48), sdkmath.NewInt(1000000), "pool price is greater than max price 100000000000000000000.000000000000000000", }, } { @@ -74,28 +73,28 @@ func TestCreateBasicPool(t *testing.T) { func TestBasicPool_Price(t *testing.T) { for _, tc := range []struct { name string - rx, ry int64 // reserve balance - ps int64 // pool coin supply - p sdk.Dec // expected pool price + rx, ry int64 // reserve balance + ps int64 // pool coin supply + p sdkmath.LegacyDec // expected pool price }{ { name: "normal pool", ps: 10000, rx: 20000, ry: 100, - p: sdk.NewDec(200), + p: sdkmath.LegacyNewDec(200), }, { name: "decimal rounding", ps: 10000, rx: 200, ry: 300, - p: sdk.MustNewDecFromStr("0.666666666666666667"), + p: sdkmath.LegacyMustNewDecFromStr("0.666666666666666667"), }, } { t.Run(tc.name, func(t *testing.T) { - pool := amm.NewBasicPool(sdk.NewInt(tc.rx), sdk.NewInt(tc.ry), sdk.NewInt(tc.ps)) - require.True(sdk.DecEq(t, tc.p, pool.Price())) + pool := amm.NewBasicPool(sdkmath.NewInt(tc.rx), sdkmath.NewInt(tc.ry), sdkmath.NewInt(tc.ps)) + require.True(sdkmath.LegacyDecEq(t, tc.p, pool.Price())) }) } @@ -117,7 +116,7 @@ func TestBasicPool_Price(t *testing.T) { } { t.Run("panics", func(t *testing.T) { require.Panics(t, func() { - pool := amm.NewBasicPool(sdk.NewInt(tc.rx), sdk.NewInt(tc.ry), sdk.NewInt(tc.ps)) + pool := amm.NewBasicPool(sdkmath.NewInt(tc.rx), sdkmath.NewInt(tc.ry), sdkmath.NewInt(tc.ps)) pool.Price() }) }) @@ -168,7 +167,7 @@ func TestBasicPool_IsDepleted(t *testing.T) { }, } { t.Run(tc.name, func(t *testing.T) { - pool := amm.NewBasicPool(sdk.NewInt(tc.rx), sdk.NewInt(tc.ry), sdk.NewInt(tc.ps)) + pool := amm.NewBasicPool(sdkmath.NewInt(tc.rx), sdkmath.NewInt(tc.ry), sdkmath.NewInt(tc.ps)) require.Equal(t, tc.isDepleted, pool.IsDepleted()) }) } @@ -273,11 +272,11 @@ func TestBasicPool_Deposit(t *testing.T) { }, } { t.Run(tc.name, func(t *testing.T) { - pool := amm.NewBasicPool(sdk.NewInt(tc.rx), sdk.NewInt(tc.ry), sdk.NewInt(tc.ps)) - ax, ay, pc := amm.Deposit(sdk.NewInt(tc.rx), sdk.NewInt(tc.ry), sdk.NewInt(tc.ps), sdk.NewInt(tc.x), sdk.NewInt(tc.y)) - require.True(sdk.IntEq(t, sdk.NewInt(tc.ax), ax)) - require.True(sdk.IntEq(t, sdk.NewInt(tc.ay), ay)) - require.True(sdk.IntEq(t, sdk.NewInt(tc.pc), pc)) + pool := amm.NewBasicPool(sdkmath.NewInt(tc.rx), sdkmath.NewInt(tc.ry), sdkmath.NewInt(tc.ps)) + ax, ay, pc := amm.Deposit(sdkmath.NewInt(tc.rx), sdkmath.NewInt(tc.ry), sdkmath.NewInt(tc.ps), sdkmath.NewInt(tc.x), sdkmath.NewInt(tc.y)) + require.True(sdkmath.IntEq(t, sdkmath.NewInt(tc.ax), ax)) + require.True(sdkmath.IntEq(t, sdkmath.NewInt(tc.ay), ay)) + require.True(sdkmath.IntEq(t, sdkmath.NewInt(tc.pc), pc)) // Additional assertions if !pool.IsDepleted() { require.True(t, (ax.Int64()*tc.ps) >= (pc.Int64()*tc.rx)) // (ax / rx) > (pc / ps) @@ -293,7 +292,7 @@ func TestBasicPool_Withdraw(t *testing.T) { rx, ry int64 // reserve balance ps int64 // pool coin supply pc int64 // redeeming pool coin amount - feeRate sdk.Dec + feeRate sdkmath.LegacyDec x, y int64 // withdrawn coin amount }{ { @@ -302,7 +301,7 @@ func TestBasicPool_Withdraw(t *testing.T) { ry: 100, ps: 10000, pc: 1000, - feeRate: sdk.ZeroDec(), + feeRate: sdkmath.LegacyZeroDec(), x: 200, y: 10, }, @@ -312,7 +311,7 @@ func TestBasicPool_Withdraw(t *testing.T) { ry: 100, ps: 10000, pc: 1000, - feeRate: sdk.MustNewDecFromStr("0.003"), + feeRate: sdkmath.LegacyMustNewDecFromStr("0.003"), x: 199, y: 9, }, @@ -322,7 +321,7 @@ func TestBasicPool_Withdraw(t *testing.T) { ry: 567, ps: 10, pc: 10, - feeRate: sdk.MustNewDecFromStr("0.003"), + feeRate: sdkmath.LegacyMustNewDecFromStr("0.003"), x: 123, y: 567, }, @@ -332,7 +331,7 @@ func TestBasicPool_Withdraw(t *testing.T) { ry: 100, ps: 10000, pc: 99, - feeRate: sdk.ZeroDec(), + feeRate: sdkmath.LegacyZeroDec(), x: 0, y: 0, }, @@ -342,15 +341,15 @@ func TestBasicPool_Withdraw(t *testing.T) { ry: 100, ps: 10000, pc: 99, - feeRate: sdk.ZeroDec(), + feeRate: sdkmath.LegacyZeroDec(), x: 99, y: 0, }, } { t.Run(tc.name, func(t *testing.T) { - x, y := amm.Withdraw(sdk.NewInt(tc.rx), sdk.NewInt(tc.ry), sdk.NewInt(tc.ps), sdk.NewInt(tc.pc), tc.feeRate) - require.True(sdk.IntEq(t, sdk.NewInt(tc.x), x)) - require.True(sdk.IntEq(t, sdk.NewInt(tc.y), y)) + x, y := amm.Withdraw(sdkmath.NewInt(tc.rx), sdkmath.NewInt(tc.ry), sdkmath.NewInt(tc.ps), sdkmath.NewInt(tc.pc), tc.feeRate) + require.True(sdkmath.IntEq(t, sdkmath.NewInt(tc.x), x)) + require.True(sdkmath.IntEq(t, sdkmath.NewInt(tc.y), y)) // Additional assertions require.True(t, (tc.pc*tc.rx) >= (x.Int64()*tc.ps)) require.True(t, (tc.pc*tc.ry) >= (y.Int64()*tc.ps)) @@ -359,81 +358,81 @@ func TestBasicPool_Withdraw(t *testing.T) { } func TestBasicPool_BuyAmountOver(t *testing.T) { - pool := amm.NewBasicPool(sdk.NewInt(1000000), sdk.NewInt(1000000), sdk.Int{}) + pool := amm.NewBasicPool(sdkmath.NewInt(1000000), sdkmath.NewInt(1000000), sdkmath.Int{}) for _, tc := range []struct { pool *amm.BasicPool - price sdk.Dec - amt sdk.Int + price sdkmath.LegacyDec + amt sdkmath.Int }{ - {pool, utils.ParseDec("1.1"), sdk.ZeroInt()}, - {pool, utils.ParseDec("1.0"), sdk.ZeroInt()}, - {pool, utils.ParseDec("0.9"), sdk.NewInt(111111)}, - {pool, utils.ParseDec("0.8"), sdk.NewInt(250000)}, + {pool, utils.ParseDec("1.1"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("1.0"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("0.9"), sdkmath.NewInt(111111)}, + {pool, utils.ParseDec("0.8"), sdkmath.NewInt(250000)}, } { t.Run("", func(t *testing.T) { amt := tc.pool.BuyAmountOver(tc.price, true) - require.True(sdk.IntEq(t, tc.amt, amt)) + require.True(sdkmath.IntEq(t, tc.amt, amt)) }) } } func TestBasicPool_SellAmountUnder(t *testing.T) { - pool := amm.NewBasicPool(sdk.NewInt(1000000), sdk.NewInt(1000000), sdk.Int{}) + pool := amm.NewBasicPool(sdkmath.NewInt(1000000), sdkmath.NewInt(1000000), sdkmath.Int{}) for _, tc := range []struct { pool *amm.BasicPool - price sdk.Dec - amt sdk.Int + price sdkmath.LegacyDec + amt sdkmath.Int }{ - {pool, utils.ParseDec("0.9"), sdk.ZeroInt()}, - {pool, utils.ParseDec("1.0"), sdk.ZeroInt()}, - {pool, utils.ParseDec("1.1"), sdk.NewInt(90909)}, - {pool, utils.ParseDec("1.2"), sdk.NewInt(166666)}, + {pool, utils.ParseDec("0.9"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("1.0"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("1.1"), sdkmath.NewInt(90909)}, + {pool, utils.ParseDec("1.2"), sdkmath.NewInt(166666)}, } { t.Run("", func(t *testing.T) { amt := tc.pool.SellAmountUnder(tc.price, true) - require.True(sdk.IntEq(t, tc.amt, amt)) + require.True(sdkmath.IntEq(t, tc.amt, amt)) }) } } func TestBasicPool_BuyAmountTo(t *testing.T) { - pool := amm.NewBasicPool(sdk.NewInt(1000000), sdk.NewInt(1000000), sdk.Int{}) + pool := amm.NewBasicPool(sdkmath.NewInt(1000000), sdkmath.NewInt(1000000), sdkmath.Int{}) for _, tc := range []struct { pool *amm.BasicPool - price sdk.Dec - amt sdk.Int + price sdkmath.LegacyDec + amt sdkmath.Int }{ - {pool, utils.ParseDec("1.1"), sdk.ZeroInt()}, - {pool, utils.ParseDec("1.0"), sdk.ZeroInt()}, - {pool, utils.ParseDec("0.5"), sdk.NewInt(585786)}, - {pool, utils.ParseDec("0.4"), sdk.NewInt(918861)}, + {pool, utils.ParseDec("1.1"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("1.0"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("0.5"), sdkmath.NewInt(585786)}, + {pool, utils.ParseDec("0.4"), sdkmath.NewInt(918861)}, } { t.Run("", func(t *testing.T) { amt := tc.pool.BuyAmountTo(tc.price) - require.True(sdk.IntEq(t, tc.amt, amt)) + require.True(sdkmath.IntEq(t, tc.amt, amt)) }) } } func TestBasicPool_SellAmountTo(t *testing.T) { - pool := amm.NewBasicPool(sdk.NewInt(1000000), sdk.NewInt(1000000), sdk.Int{}) + pool := amm.NewBasicPool(sdkmath.NewInt(1000000), sdkmath.NewInt(1000000), sdkmath.Int{}) for _, tc := range []struct { pool *amm.BasicPool - price sdk.Dec - amt sdk.Int + price sdkmath.LegacyDec + amt sdkmath.Int }{ - {pool, utils.ParseDec("0.9"), sdk.ZeroInt()}, - {pool, utils.ParseDec("1.0"), sdk.ZeroInt()}, - {pool, utils.ParseDec("1.4"), sdk.NewInt(154845)}, - {pool, utils.ParseDec("1.5"), sdk.NewInt(183503)}, + {pool, utils.ParseDec("0.9"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("1.0"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("1.4"), sdkmath.NewInt(154845)}, + {pool, utils.ParseDec("1.5"), sdkmath.NewInt(183503)}, } { t.Run("", func(t *testing.T) { amt := tc.pool.SellAmountTo(tc.price) - require.True(sdk.IntEq(t, tc.amt, amt)) + require.True(sdkmath.IntEq(t, tc.amt, amt)) }) } } @@ -441,8 +440,8 @@ func TestBasicPool_SellAmountTo(t *testing.T) { func TestValidateRangedPoolParams(t *testing.T) { for _, tc := range []struct { name string - minPrice, maxPrice sdk.Dec - initialPrice sdk.Dec + minPrice, maxPrice sdkmath.LegacyDec + initialPrice sdkmath.LegacyDec expectedErr string }{ { @@ -465,13 +464,13 @@ func TestValidateRangedPoolParams(t *testing.T) { }, { "too low min price", - sdk.NewDecWithPrec(1, 16), utils.ParseDec("2.0"), + sdkmath.LegacyNewDecWithPrec(1, 16), utils.ParseDec("2.0"), utils.ParseDec("1.0"), "min price must not be lower than 0.000000000000001000", }, { "too high max price", - utils.ParseDec("0.5"), sdk.NewDec(sdkmath.NewIntWithDecimal(1, 25).Int64()), + utils.ParseDec("0.5"), sdkmath.NewIntWithDecimal(1, 25).ToLegacyDec(), utils.ParseDec("1.0"), "max price must not be higher than 100000000000000000000.000000000000000000", }, @@ -512,125 +511,125 @@ func TestValidateRangedPoolParams(t *testing.T) { } func TestCreateRangedPool(t *testing.T) { - intApproxEq := func(exp, got sdk.Int) (*testing.T, bool, string, string, string) { - c := exp.Sub(got).Abs().LTE(sdk.OneInt()) + intApproxEq := func(exp, got sdkmath.Int) (*testing.T, bool, string, string, string) { + c := exp.Sub(got).Abs().LTE(sdkmath.OneInt()) if c && !exp.IsZero() { - c = sdk.NewDec(exp.Int64()).Sub(sdk.NewDec(got.Int64())).Abs().Quo(sdk.NewDec(exp.Int64())).LTE(sdk.NewDecWithPrec(1, 3)) + c = exp.ToLegacyDec().Sub(got.ToLegacyDec()).Abs().Quo(exp.ToLegacyDec()).LTE(sdkmath.LegacyNewDecWithPrec(1, 3)) } return t, c, "expected:\t%v\ngot:\t\t%v", exp.String(), got.String() } for _, tc := range []struct { name string - x, y sdk.Int - minPrice, maxPrice sdk.Dec - initialPrice sdk.Dec + x, y sdkmath.Int + minPrice, maxPrice sdkmath.LegacyDec + initialPrice sdkmath.LegacyDec expectedErr string - ax, ay sdk.Int + ax, ay sdkmath.Int }{ { "basic case", - sdk.NewInt(1_000000), sdk.NewInt(1_000000), + sdkmath.NewInt(1_000000), sdkmath.NewInt(1_000000), utils.ParseDec("0.5"), utils.ParseDec("2.0"), utils.ParseDec("1.0"), "", - sdk.NewInt(1_000000), sdk.NewInt(1_000000), + sdkmath.NewInt(1_000000), sdkmath.NewInt(1_000000), }, { "basic case 2", - sdk.NewInt(500000), sdk.NewInt(1_000000), + sdkmath.NewInt(500000), sdkmath.NewInt(1_000000), utils.ParseDec("0.5"), utils.ParseDec("2.0"), utils.ParseDec("1.0"), "", - sdk.NewInt(500000), sdk.NewInt(500000), + sdkmath.NewInt(500000), sdkmath.NewInt(500000), }, { "basic case 3", - sdk.NewInt(1_000000), sdk.NewInt(500000), + sdkmath.NewInt(1_000000), sdkmath.NewInt(500000), utils.ParseDec("0.5"), utils.ParseDec("2.0"), utils.ParseDec("1.0"), "", - sdk.NewInt(500000), sdk.NewInt(500000), + sdkmath.NewInt(500000), sdkmath.NewInt(500000), }, { "invalid pool", - sdk.ZeroInt(), sdk.ZeroInt(), + sdkmath.ZeroInt(), sdkmath.ZeroInt(), utils.ParseDec("1.0"), utils.ParseDec("2.0"), utils.ParseDec("1.0"), "either x or y must be positive", - sdk.Int{}, sdk.Int{}, + sdkmath.Int{}, sdkmath.Int{}, }, { "single asset x pool", - sdk.NewInt(1_000000), sdk.ZeroInt(), + sdkmath.NewInt(1_000000), sdkmath.ZeroInt(), utils.ParseDec("1.0"), utils.ParseDec("2.0"), utils.ParseDec("2.0"), "", - sdk.NewInt(1_000000), sdk.ZeroInt(), + sdkmath.NewInt(1_000000), sdkmath.ZeroInt(), }, { "single asset x pool - refund", - sdk.NewInt(1_000000), sdk.NewInt(1_000000), + sdkmath.NewInt(1_000000), sdkmath.NewInt(1_000000), utils.ParseDec("1.0"), utils.ParseDec("2.0"), utils.ParseDec("2.0"), "", - sdk.NewInt(1_000000), sdk.ZeroInt(), + sdkmath.NewInt(1_000000), sdkmath.ZeroInt(), }, { "single asset y pool", - sdk.ZeroInt(), sdk.NewInt(1_000000), + sdkmath.ZeroInt(), sdkmath.NewInt(1_000000), utils.ParseDec("1.0"), utils.ParseDec("2.0"), utils.ParseDec("1.0"), "", - sdk.ZeroInt(), sdk.NewInt(1_000000), + sdkmath.ZeroInt(), sdkmath.NewInt(1_000000), }, { "single asset y pool - refund", - sdk.NewInt(1_000000), sdk.NewInt(1_000000), + sdkmath.NewInt(1_000000), sdkmath.NewInt(1_000000), utils.ParseDec("1.0"), utils.ParseDec("2.0"), utils.ParseDec("1.0"), "", - sdk.ZeroInt(), sdk.NewInt(1_000000), + sdkmath.ZeroInt(), sdkmath.NewInt(1_000000), }, { "small min price", - sdk.NewInt(1_000000000000000000), sdk.NewInt(1_000000000000000000), - sdk.NewDecWithPrec(1, 15), utils.ParseDec("2.0"), + sdkmath.NewInt(1_000000000000000000), sdkmath.NewInt(1_000000000000000000), + sdkmath.LegacyNewDecWithPrec(1, 15), utils.ParseDec("2.0"), utils.ParseDec("1.0"), "", - sdk.NewInt(1_000000000000000000), sdk.NewInt(292893228075549596), + sdkmath.NewInt(1_000000000000000000), sdkmath.NewInt(292893228075549596), }, { "large max price", - sdk.NewInt(1_000000000000000000), sdk.NewInt(1_000000000000000000), - utils.ParseDec("1.0"), sdk.NewDec(sdkmath.NewIntWithDecimal(1, 20).Int64()), + sdkmath.NewInt(1_000000000000000000), sdkmath.NewInt(1_000000000000000000), + utils.ParseDec("1.0"), sdkmath.NewIntWithDecimal(1, 20).ToLegacyDec(), utils.ParseDec("2.0"), "", - sdk.NewInt(585786437709747665), sdk.NewInt(1_000000000000000000), + sdkmath.NewInt(585786437709747665), sdkmath.NewInt(1_000000000000000000), }, { "close min price and max price", - sdk.NewInt(1_000000000000000000), sdk.NewInt(1_000000000000000000), + sdkmath.NewInt(1_000000000000000000), sdkmath.NewInt(1_000000000000000000), utils.ParseDec("1.0"), utils.ParseDec("1.001"), utils.ParseDec("1.0005"), "", - sdk.NewInt(1_000000000000000000), sdk.NewInt(999000936633614182), + sdkmath.NewInt(1_000000000000000000), sdkmath.NewInt(999000936633614182), }, { "small x asset", - sdk.NewInt(9), sdk.NewInt(9_000000000000000000), + sdkmath.NewInt(9), sdkmath.NewInt(9_000000000000000000), utils.ParseDec("0.5"), utils.ParseDec("2.0"), utils.ParseDec("0.5000001"), "", - sdk.NewInt(9), sdk.NewInt(89999987), + sdkmath.NewInt(9), sdkmath.NewInt(89999987), }, { "small y asset", - sdk.NewInt(9_000000000000000000), sdk.NewInt(9), + sdkmath.NewInt(9_000000000000000000), sdkmath.NewInt(9), utils.ParseDec("0.5"), utils.ParseDec("2.0"), utils.ParseDec("1.9999999"), "", - sdk.NewInt(359999969), sdk.NewInt(9), + sdkmath.NewInt(359999969), sdkmath.NewInt(9), }, } { t.Run(tc.name, func(t *testing.T) { @@ -651,67 +650,67 @@ func TestCreateRangedPool(t *testing.T) { func TestRangedPool_Deposit(t *testing.T) { for _, tc := range []struct { name string - rx, ry sdk.Int - ps sdk.Int - minPrice, maxPrice sdk.Dec - x, y sdk.Int // depositing x and y coin amount - ax, ay sdk.Int // accepted x and y coin amount - pc sdk.Int // expected minted pool coin amount + rx, ry sdkmath.Int + ps sdkmath.Int + minPrice, maxPrice sdkmath.LegacyDec + x, y sdkmath.Int // depositing x and y coin amount + ax, ay sdkmath.Int // accepted x and y coin amount + pc sdkmath.Int // expected minted pool coin amount }{ { "ideal case", - sdk.NewInt(1_000000000000000000), sdk.NewInt(1_000000000000000000), - sdk.NewInt(1_000000000000), + sdkmath.NewInt(1_000000000000000000), sdkmath.NewInt(1_000000000000000000), + sdkmath.NewInt(1_000000000000), utils.ParseDec("0.5"), utils.ParseDec("2.0"), - sdk.NewInt(123456789), sdk.NewInt(123456789), - sdk.NewInt(123000000), sdk.NewInt(123000000), - sdk.NewInt(123), + sdkmath.NewInt(123456789), sdkmath.NewInt(123456789), + sdkmath.NewInt(123000000), sdkmath.NewInt(123000000), + sdkmath.NewInt(123), }, { "single x asset pool", - sdk.NewInt(1_000000000000000000), sdk.NewInt(0), - sdk.NewInt(1_000000000000), + sdkmath.NewInt(1_000000000000000000), sdkmath.NewInt(0), + sdkmath.NewInt(1_000000000000), utils.ParseDec("0.5"), utils.ParseDec("2.0"), - sdk.NewInt(123456789), sdk.NewInt(0), - sdk.NewInt(123000000), sdk.NewInt(0), - sdk.NewInt(123), + sdkmath.NewInt(123456789), sdkmath.NewInt(0), + sdkmath.NewInt(123000000), sdkmath.NewInt(0), + sdkmath.NewInt(123), }, { "single y asset pool", - sdk.NewInt(0), sdk.NewInt(1_000000000000000000), - sdk.NewInt(1_000000000000), + sdkmath.NewInt(0), sdkmath.NewInt(1_000000000000000000), + sdkmath.NewInt(1_000000000000), utils.ParseDec("0.5"), utils.ParseDec("2.0"), - sdk.NewInt(0), sdk.NewInt(123456789), - sdk.NewInt(0), sdk.NewInt(123000000), - sdk.NewInt(123), + sdkmath.NewInt(0), sdkmath.NewInt(123456789), + sdkmath.NewInt(0), sdkmath.NewInt(123000000), + sdkmath.NewInt(123), }, } { t.Run(tc.name, func(t *testing.T) { pool := amm.NewRangedPool(tc.rx, tc.ry, tc.ps, tc.minPrice, tc.maxPrice) ax, ay, pc := amm.Deposit(tc.rx, tc.ry, tc.ps, tc.x, tc.y) - require.True(sdk.IntEq(t, tc.ax, ax)) - require.True(sdk.IntEq(t, tc.ay, ay)) - require.True(sdk.IntEq(t, tc.pc, pc)) + require.True(sdkmath.IntEq(t, tc.ax, ax)) + require.True(sdkmath.IntEq(t, tc.ay, ay)) + require.True(sdkmath.IntEq(t, tc.pc, pc)) newPool := amm.NewRangedPool(tc.rx.Add(ax), tc.ry.Add(ay), tc.ps.Add(pc), tc.minPrice, tc.maxPrice) - var reserveRatio sdk.Dec + var reserveRatio sdkmath.LegacyDec switch { case tc.rx.IsZero(): - reserveRatio = sdk.NewDec(ay.Int64()).Quo(sdk.NewDec(tc.ry.Int64())) + reserveRatio = ay.ToLegacyDec().Quo(tc.ry.ToLegacyDec()) case tc.ry.IsZero(): - reserveRatio = sdk.NewDec(ax.Int64()).Quo(sdk.NewDec(tc.rx.Int64())) + reserveRatio = ax.ToLegacyDec().Quo(tc.rx.ToLegacyDec()) default: - reserveRatio = sdk.NewDec(ax.Int64()).Quo(sdk.NewDec(tc.rx.Int64())) - require.True(t, utils.DecApproxEqual(reserveRatio, sdk.NewDec(ay.Int64()).Quo(sdk.NewDec(tc.ry.Int64())))) + reserveRatio = ax.ToLegacyDec().Quo(tc.rx.ToLegacyDec()) + require.True(t, utils.DecApproxEqual(reserveRatio, ay.ToLegacyDec().Quo(tc.ry.ToLegacyDec()))) } // check ax/ay == rx/ry if !tc.rx.IsZero() && !tc.ry.IsZero() { - require.True(t, utils.DecApproxEqual(sdk.NewDec(ax.Int64()).Quo(sdk.NewDec(ay.Int64())), sdk.NewDec(tc.rx.Int64()).Quo(sdk.NewDec(tc.ry.Int64())))) + require.True(t, utils.DecApproxEqual(ax.ToLegacyDec().Quo(ay.ToLegacyDec()), tc.rx.ToLegacyDec().Quo(tc.ry.ToLegacyDec()))) } // check ax/rx == ay/ry == pc/ps - require.True(t, utils.DecApproxEqual(reserveRatio, sdk.NewDec(pc.Int64()).Quo(sdk.NewDec(tc.ps.Int64())))) + require.True(t, utils.DecApproxEqual(reserveRatio, pc.ToLegacyDec().Quo(tc.ps.ToLegacyDec()))) // check pool price before == pool price after require.True(t, utils.DecApproxEqual(pool.Price(), newPool.Price())) @@ -720,8 +719,8 @@ func TestRangedPool_Deposit(t *testing.T) { transXPrime, transYPrime := newPool.Translation() // alpha = reserveRatio // check transX' == transX * (1+alpha), transY' == transY * (1+alpha) - require.True(t, utils.DecApproxEqual(reserveRatio.Add(sdk.OneDec()), transXPrime.Quo(transX))) - require.True(t, utils.DecApproxEqual(reserveRatio.Add(sdk.OneDec()), transYPrime.Quo(transY))) + require.True(t, utils.DecApproxEqual(reserveRatio.Add(sdkmath.LegacyOneDec()), transXPrime.Quo(transX))) + require.True(t, utils.DecApproxEqual(reserveRatio.Add(sdkmath.LegacyOneDec()), transYPrime.Quo(transY))) }) } } @@ -729,62 +728,62 @@ func TestRangedPool_Deposit(t *testing.T) { func TestRangedPool_Withdraw(t *testing.T) { for _, tc := range []struct { name string - rx, ry sdk.Int - ps sdk.Int - minPrice, maxPrice sdk.Dec - pc sdk.Int // redeeming pool coin amount - x, y sdk.Int // withdrawn x and y coin amount + rx, ry sdkmath.Int + ps sdkmath.Int + minPrice, maxPrice sdkmath.LegacyDec + pc sdkmath.Int // redeeming pool coin amount + x, y sdkmath.Int // withdrawn x and y coin amount }{ { "ideal case", - sdk.NewInt(1_000000000000000000), sdk.NewInt(1_000000000000000000), - sdk.NewInt(1_000000000000), + sdkmath.NewInt(1_000000000000000000), sdkmath.NewInt(1_000000000000000000), + sdkmath.NewInt(1_000000000000), utils.ParseDec("0.5"), utils.ParseDec("2.0"), - sdk.NewInt(123), - sdk.NewInt(123000000), sdk.NewInt(123000000), + sdkmath.NewInt(123), + sdkmath.NewInt(123000000), sdkmath.NewInt(123000000), }, { "single x asset pool", - sdk.NewInt(1_000000000000000000), sdk.NewInt(0), - sdk.NewInt(1_000000000000), + sdkmath.NewInt(1_000000000000000000), sdkmath.NewInt(0), + sdkmath.NewInt(1_000000000000), utils.ParseDec("0.5"), utils.ParseDec("2.0"), - sdk.NewInt(123), - sdk.NewInt(123000000), sdk.NewInt(0), + sdkmath.NewInt(123), + sdkmath.NewInt(123000000), sdkmath.NewInt(0), }, { "single y asset pool", - sdk.NewInt(0), sdk.NewInt(1_000000000000000000), - sdk.NewInt(1_000000000000), + sdkmath.NewInt(0), sdkmath.NewInt(1_000000000000000000), + sdkmath.NewInt(1_000000000000), utils.ParseDec("0.5"), utils.ParseDec("2.0"), - sdk.NewInt(123), - sdk.NewInt(0), sdk.NewInt(123000000), + sdkmath.NewInt(123), + sdkmath.NewInt(0), sdkmath.NewInt(123000000), }, } { t.Run(tc.name, func(t *testing.T) { pool := amm.NewRangedPool(tc.rx, tc.ry, tc.ps, tc.minPrice, tc.maxPrice) - x, y := amm.Withdraw(tc.rx, tc.ry, tc.ps, tc.pc, sdk.ZeroDec()) - require.True(sdk.IntEq(t, tc.x, x)) - require.True(sdk.IntEq(t, tc.y, y)) + x, y := amm.Withdraw(tc.rx, tc.ry, tc.ps, tc.pc, sdkmath.LegacyZeroDec()) + require.True(sdkmath.IntEq(t, tc.x, x)) + require.True(sdkmath.IntEq(t, tc.y, y)) newPool := amm.NewRangedPool(tc.rx.Sub(x), tc.ry.Sub(y), tc.ps.Sub(tc.pc), tc.minPrice, tc.maxPrice) - var reserveRatio sdk.Dec + var reserveRatio sdkmath.LegacyDec switch { case tc.rx.IsZero(): - reserveRatio = sdk.NewDec(y.Int64()).Quo(sdk.NewDec(tc.ry.Int64())) + reserveRatio = y.ToLegacyDec().Quo(tc.ry.ToLegacyDec()) case tc.ry.IsZero(): - reserveRatio = sdk.NewDec(y.Int64()).Quo(sdk.NewDec(tc.rx.Int64())) + reserveRatio = x.ToLegacyDec().Quo(tc.rx.ToLegacyDec()) default: - reserveRatio = sdk.NewDec(y.Int64()).Quo(sdk.NewDec(tc.rx.Int64())) - require.True(t, utils.DecApproxEqual(reserveRatio, sdk.NewDec(y.Int64()).Quo(sdk.NewDec(tc.ry.Int64())))) + reserveRatio = x.ToLegacyDec().Quo(tc.rx.ToLegacyDec()) + require.True(t, utils.DecApproxEqual(reserveRatio, y.ToLegacyDec().Quo(tc.ry.ToLegacyDec()))) } // check x/y == rx/ry if !tc.rx.IsZero() && !tc.ry.IsZero() { - require.True(t, utils.DecApproxEqual(sdk.NewDec(x.Int64()).Quo(sdk.NewDec(y.Int64())), sdk.NewDec(tc.rx.Int64()).Quo(sdk.NewDec(tc.ry.Int64())))) + require.True(t, utils.DecApproxEqual(x.ToLegacyDec().Quo(y.ToLegacyDec()), tc.rx.ToLegacyDec().Quo(tc.ry.ToLegacyDec()))) } // check x/rx == y/ry == pc/ps - require.True(t, utils.DecApproxEqual(reserveRatio, sdk.NewDec(tc.pc.Int64()).Quo(sdk.NewDec(tc.ps.Int64())))) + require.True(t, utils.DecApproxEqual(reserveRatio, tc.pc.ToLegacyDec().Quo(tc.ps.ToLegacyDec()))) // check pool price before == pool price after require.True(t, utils.DecApproxEqual(pool.Price(), newPool.Price())) @@ -793,104 +792,104 @@ func TestRangedPool_Withdraw(t *testing.T) { transXPrime, transYPrime := newPool.Translation() // alpha = reserveRatio // check transX' == transX * (1+alpha), transY' == transY * (1+alpha) - require.True(t, utils.DecApproxEqual(reserveRatio.Add(sdk.OneDec()), transXPrime.Quo(transX))) - require.True(t, utils.DecApproxEqual(reserveRatio.Add(sdk.OneDec()), transYPrime.Quo(transY))) + require.True(t, utils.DecApproxEqual(reserveRatio.Add(sdkmath.LegacyOneDec()), transXPrime.Quo(transX))) + require.True(t, utils.DecApproxEqual(reserveRatio.Add(sdkmath.LegacyOneDec()), transYPrime.Quo(transY))) }) } } func TestRangedPool_BuyAmountOver(t *testing.T) { pool := amm.NewRangedPool( - sdk.NewInt(1000000), sdk.NewInt(1000000), sdk.Int{}, + sdkmath.NewInt(1000000), sdkmath.NewInt(1000000), sdkmath.Int{}, utils.ParseDec("0.5"), utils.ParseDec("2.0")) for _, tc := range []struct { pool *amm.RangedPool - price sdk.Dec - amt sdk.Int + price sdkmath.LegacyDec + amt sdkmath.Int }{ - {pool, utils.ParseDec("1.1"), sdk.ZeroInt()}, - {pool, utils.ParseDec("1.0"), sdk.ZeroInt()}, - {pool, utils.ParseDec("0.9"), sdk.NewInt(379357)}, - {pool, utils.ParseDec("0.8"), sdk.NewInt(853553)}, + {pool, utils.ParseDec("1.1"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("1.0"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("0.9"), sdkmath.NewInt(379357)}, + {pool, utils.ParseDec("0.8"), sdkmath.NewInt(853553)}, } { t.Run("", func(t *testing.T) { amt := tc.pool.BuyAmountOver(tc.price, true) - require.True(sdk.IntEq(t, tc.amt, amt)) + require.True(sdkmath.IntEq(t, tc.amt, amt)) }) } } func TestRangedPool_SellAmountUnder(t *testing.T) { pool := amm.NewRangedPool( - sdk.NewInt(1000000), sdk.NewInt(1000000), sdk.Int{}, + sdkmath.NewInt(1000000), sdkmath.NewInt(1000000), sdkmath.Int{}, utils.ParseDec("0.5"), utils.ParseDec("2.0")) for _, tc := range []struct { pool *amm.RangedPool - price sdk.Dec - amt sdk.Int + price sdkmath.LegacyDec + amt sdkmath.Int }{ - {pool, utils.ParseDec("0.9"), sdk.ZeroInt()}, - {pool, utils.ParseDec("1.0"), sdk.ZeroInt()}, - {pool, utils.ParseDec("1.1"), sdk.NewInt(310383)}, - {pool, utils.ParseDec("1.2"), sdk.NewInt(569035)}, + {pool, utils.ParseDec("0.9"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("1.0"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("1.1"), sdkmath.NewInt(310383)}, + {pool, utils.ParseDec("1.2"), sdkmath.NewInt(569035)}, } { t.Run("", func(t *testing.T) { amt := tc.pool.SellAmountUnder(tc.price, true) - require.True(sdk.IntEq(t, tc.amt, amt)) + require.True(sdkmath.IntEq(t, tc.amt, amt)) }) } } func TestRangedPool_BuyAmountTo(t *testing.T) { pool := amm.NewRangedPool( - sdk.NewInt(1000000), sdk.NewInt(1000000), sdk.Int{}, + sdkmath.NewInt(1000000), sdkmath.NewInt(1000000), sdkmath.Int{}, utils.ParseDec("0.5"), utils.ParseDec("2.0")) for _, tc := range []struct { pool *amm.RangedPool - price sdk.Dec - amt sdk.Int + price sdkmath.LegacyDec + amt sdkmath.Int }{ - {pool, utils.ParseDec("1.1"), sdk.ZeroInt()}, - {pool, utils.ParseDec("1.0"), sdk.ZeroInt()}, - {pool, utils.ParseDec("0.8"), sdk.NewInt(450560)}, - {pool, utils.ParseDec("0.7"), sdk.NewInt(796682)}, + {pool, utils.ParseDec("1.1"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("1.0"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("0.8"), sdkmath.NewInt(450560)}, + {pool, utils.ParseDec("0.7"), sdkmath.NewInt(796682)}, { amm.NewRangedPool( - sdk.NewInt(957322), sdk.NewInt(3351038710333311), sdk.Int{}, + sdkmath.NewInt(957322), sdkmath.NewInt(3351038710333311), sdkmath.Int{}, utils.ParseDec("0.9"), utils.ParseDec("1.1"), ), utils.ParseDec("0.899580000000000000"), - sdk.NewInt(1064187), + sdkmath.NewInt(1064187), }, } { t.Run("", func(t *testing.T) { amt := tc.pool.BuyAmountTo(tc.price) - require.True(sdk.IntEq(t, tc.amt, amt)) + require.True(sdkmath.IntEq(t, tc.amt, amt)) }) } } func TestRangedPool_SellAmountTo(t *testing.T) { pool := amm.NewRangedPool( - sdk.NewInt(1000000), sdk.NewInt(1000000), sdk.Int{}, + sdkmath.NewInt(1000000), sdkmath.NewInt(1000000), sdkmath.Int{}, utils.ParseDec("0.5"), utils.ParseDec("2.0")) for _, tc := range []struct { pool *amm.RangedPool - price sdk.Dec - amt sdk.Int + price sdkmath.LegacyDec + amt sdkmath.Int }{ - {pool, utils.ParseDec("0.9"), sdk.ZeroInt()}, - {pool, utils.ParseDec("1.0"), sdk.ZeroInt()}, - {pool, utils.ParseDec("1.4"), sdk.NewInt(528676)}, - {pool, utils.ParseDec("1.5"), sdk.NewInt(626519)}, + {pool, utils.ParseDec("0.9"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("1.0"), sdkmath.ZeroInt()}, + {pool, utils.ParseDec("1.4"), sdkmath.NewInt(528676)}, + {pool, utils.ParseDec("1.5"), sdkmath.NewInt(626519)}, } { t.Run("", func(t *testing.T) { amt := tc.pool.SellAmountTo(tc.price) - require.True(sdk.IntEq(t, tc.amt, amt)) + require.True(sdkmath.IntEq(t, tc.amt, amt)) }) } } @@ -901,17 +900,17 @@ func TestRangedPool_exhaust(t *testing.T) { }{ { amm.NewRangedPool( - sdk.NewInt(1000000), sdk.NewInt(1000000), sdk.Int{}, + sdkmath.NewInt(1000000), sdkmath.NewInt(1000000), sdkmath.Int{}, utils.ParseDec("0.5"), utils.ParseDec("2.0")), }, { amm.NewRangedPool( - sdk.NewInt(1_000000000000000000), sdk.NewInt(9_000000000000000000), sdk.Int{}, + sdkmath.NewInt(1_000000000000000000), sdkmath.NewInt(9_000000000000000000), sdkmath.Int{}, utils.ParseDec("0.1001"), utils.ParseDec("10.05")), }, { amm.NewRangedPool( - sdk.NewInt(123456789), sdk.NewInt(987654321), sdk.Int{}, + sdkmath.NewInt(123456789), sdkmath.NewInt(987654321), sdkmath.Int{}, utils.ParseDec("0.05"), utils.ParseDec("20.1")), }, } { @@ -922,14 +921,14 @@ func TestRangedPool_exhaust(t *testing.T) { orders := amm.PoolSellOrders(tc.pool, amm.DefaultOrderer, minPrice, maxPrice, 4) amt := amm.TotalAmount(orders) require.True(t, amt.LTE(ry)) - require.True(t, amt.GTE(sdk.NewDec(ry.Int64()).Mul(utils.ParseDec("0.99")).TruncateInt())) + require.True(t, amt.GTE(ry.ToLegacyDec().Mul(utils.ParseDec("0.99")).TruncateInt())) orders = amm.PoolBuyOrders(tc.pool, amm.DefaultOrderer, minPrice, maxPrice, 4) - x := sdk.ZeroInt() + x := sdkmath.ZeroInt() for _, order := range orders { x = x.Add(order.GetPrice().MulInt(order.GetAmount()).TruncateInt()) } require.True(t, x.LTE(rx)) - require.True(t, x.GTE(sdk.NewDec(rx.Int64()).Mul(utils.ParseDec("0.99")).TruncateInt())) + require.True(t, x.GTE(rx.ToLegacyDec().Mul(utils.ParseDec("0.99")).TruncateInt())) }) } } @@ -938,8 +937,8 @@ func TestRangedPool_SwapPriceOutOfRange(t *testing.T) { r := rand.New(rand.NewSource(0)) for i := 0; i < 1000; i++ { - rx := utils.RandomInt(r, sdk.NewInt(1_000000), sdk.NewInt(1000_00000)) - ry := utils.RandomInt(r, sdk.NewInt(1_000000), sdk.NewInt(1000_00000)) + rx := utils.RandomInt(r, sdkmath.NewInt(1_000000), sdkmath.NewInt(1000_00000)) + ry := utils.RandomInt(r, sdkmath.NewInt(1_000000), sdkmath.NewInt(1000_00000)) minPrice := utils.RandomDec(r, utils.ParseDec("0.001"), utils.ParseDec("1")) maxPrice := utils.RandomDec(r, minPrice.Mul(utils.ParseDec("1.01")), utils.ParseDec("1000")) initialPrice := utils.RandomDec(r, minPrice, maxPrice) @@ -949,12 +948,12 @@ func TestRangedPool_SwapPriceOutOfRange(t *testing.T) { rx, ry = pool.Balances() // Price lower than min price - p := utils.RandomDec(r, sdk.NewDecWithPrec(1, 5), minPrice.Mul(utils.ParseDec("0.99"))) + p := utils.RandomDec(r, sdkmath.LegacyNewDecWithPrec(1, 5), minPrice.Mul(utils.ParseDec("0.99"))) amt := pool.BuyAmountTo(p) nextRx := rx.Sub(p.MulInt(amt).Ceil().TruncateInt()) nextRy := ry.Add(amt) - require.True(t, nextRx.LTE(sdk.OneInt())) - nextPool := amm.NewRangedPool(nextRx, nextRy, sdk.Int{}, minPrice, maxPrice) + require.True(t, nextRx.LTE(sdkmath.OneInt())) + nextPool := amm.NewRangedPool(nextRx, nextRy, sdkmath.Int{}, minPrice, maxPrice) require.True(t, utils.DecApproxEqual(minPrice, nextPool.Price())) // Price higher than min price @@ -962,49 +961,49 @@ func TestRangedPool_SwapPriceOutOfRange(t *testing.T) { amt = pool.SellAmountTo(p) nextRx = rx.Add(p.MulInt(amt).TruncateInt()) nextRy = ry.Sub(amt) - require.True(t, nextRy.LTE(sdk.OneInt())) - nextPool = amm.NewRangedPool(nextRx, nextRy, sdk.Int{}, minPrice, maxPrice) + require.True(t, nextRy.LTE(sdkmath.OneInt())) + nextPool = amm.NewRangedPool(nextRx, nextRy, sdkmath.Int{}, minPrice, maxPrice) require.True(t, utils.DecApproxEqual(maxPrice, nextPool.Price())) } } func TestInitialPoolCoinSupply(t *testing.T) { for _, tc := range []struct { - x, y sdk.Int - ps sdk.Int + x, y sdkmath.Int + ps sdkmath.Int }{ - {sdk.NewInt(1000000), sdk.NewInt(1000000), sdk.NewInt(10000000)}, - {sdk.NewInt(1000000), sdk.NewInt(10000000), sdk.NewInt(100000000)}, - {sdk.NewInt(1000000), sdk.NewInt(100000000), sdk.NewInt(100000000)}, - {sdk.NewInt(10000000), sdk.NewInt(100000000), sdk.NewInt(1000000000)}, - {sdk.NewInt(999999), sdk.NewInt(9999999), sdk.NewInt(10000000)}, + {sdkmath.NewInt(1000000), sdkmath.NewInt(1000000), sdkmath.NewInt(10000000)}, + {sdkmath.NewInt(1000000), sdkmath.NewInt(10000000), sdkmath.NewInt(100000000)}, + {sdkmath.NewInt(1000000), sdkmath.NewInt(100000000), sdkmath.NewInt(100000000)}, + {sdkmath.NewInt(10000000), sdkmath.NewInt(100000000), sdkmath.NewInt(1000000000)}, + {sdkmath.NewInt(999999), sdkmath.NewInt(9999999), sdkmath.NewInt(10000000)}, } { t.Run("", func(t *testing.T) { - require.True(sdk.IntEq(t, tc.ps, amm.InitialPoolCoinSupply(tc.x, tc.y))) + require.True(sdkmath.IntEq(t, tc.ps, amm.InitialPoolCoinSupply(tc.x, tc.y))) }) } } func TestBasicPool_BuyAmountOverOverflow(t *testing.T) { - n, _ := sdk.NewIntFromString("10000000000000000000000000000000000000000000") - pool := amm.NewBasicPool(n, sdk.NewInt(1000), sdk.Int{}) + n, _ := sdkmath.NewIntFromString("10000000000000000000000000000000000000000000") + pool := amm.NewBasicPool(n, sdkmath.NewInt(1000), sdkmath.Int{}) amt := pool.BuyAmountOver(defTickPrec.LowestTick(), true) - require.True(sdk.IntEq(t, amm.MaxCoinAmount, amt)) + require.True(sdkmath.IntEq(t, amm.MaxCoinAmount, amt)) } func TestBasicPoolOrders(t *testing.T) { - pool := amm.NewBasicPool(sdk.NewInt(862431695563), sdk.NewInt(37852851767), sdk.Int{}) + pool := amm.NewBasicPool(sdkmath.NewInt(862431695563), sdkmath.NewInt(37852851767), sdkmath.Int{}) poolPrice := pool.Price() - lowestPrice := poolPrice.Mul(sdk.NewDecWithPrec(9, 1)) - highestPrice := poolPrice.Mul(sdk.NewDecWithPrec(11, 1)) + lowestPrice := poolPrice.Mul(sdkmath.LegacyNewDecWithPrec(9, 1)) + highestPrice := poolPrice.Mul(sdkmath.LegacyNewDecWithPrec(11, 1)) require.Len(t, amm.PoolOrders(pool, amm.DefaultOrderer, lowestPrice, highestPrice, 4), 375) } func BenchmarkBasicPoolOrders(b *testing.B) { - pool := amm.NewBasicPool(sdk.NewInt(862431695563), sdk.NewInt(37852851767), sdk.Int{}) + pool := amm.NewBasicPool(sdkmath.NewInt(862431695563), sdkmath.NewInt(37852851767), sdkmath.Int{}) poolPrice := pool.Price() - lowestPrice := poolPrice.Mul(sdk.NewDecWithPrec(9, 1)) - highestPrice := poolPrice.Mul(sdk.NewDecWithPrec(11, 1)) + lowestPrice := poolPrice.Mul(sdkmath.LegacyNewDecWithPrec(9, 1)) + highestPrice := poolPrice.Mul(sdkmath.LegacyNewDecWithPrec(11, 1)) b.ResetTimer() for i := 0; i < b.N; i++ { amm.PoolOrders(pool, amm.DefaultOrderer, lowestPrice, highestPrice, 4) From 21d8d13228858edd9636479e78e12353c1c914d6 Mon Sep 17 00:00:00 2001 From: vishnukumavat Date: Tue, 10 Oct 2023 20:14:55 +0530 Subject: [PATCH 63/90] amm module refactor for 47 compatibility --- x/liquidity/amm/match_test.go | 100 +++++++++---------- x/liquidity/amm/orderbook_internal_test.go | 10 +- x/liquidity/amm/orderbook_test.go | 106 ++++++++++----------- x/liquidity/amm/tick_internal_test.go | 46 ++++----- x/liquidity/amm/tick_test.go | 56 +++++------ x/liquidity/amm/util_internal_test.go | 10 +- x/liquidity/amm/util_test.go | 48 +++++----- x/liquidity/amm/view_test.go | 46 ++++----- 8 files changed, 211 insertions(+), 211 deletions(-) diff --git a/x/liquidity/amm/match_test.go b/x/liquidity/amm/match_test.go index 68581b4ea..d6116c25d 100644 --- a/x/liquidity/amm/match_test.go +++ b/x/liquidity/amm/match_test.go @@ -4,14 +4,14 @@ import ( "fmt" "testing" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" "github.com/stretchr/testify/require" utils "github.com/comdex-official/comdex/types" "github.com/comdex-official/comdex/x/liquidity/amm" ) -func newOrder(dir amm.OrderDirection, price sdk.Dec, amt sdk.Int) amm.Order { +func newOrder(dir amm.OrderDirection, price sdkmath.LegacyDec, amt sdkmath.Int) amm.Order { return amm.DefaultOrderer.Order(dir, price, amt) } @@ -20,13 +20,13 @@ func TestFindMatchPrice(t *testing.T) { name string ov amm.OrderView found bool - matchPrice sdk.Dec + matchPrice sdkmath.LegacyDec }{ { "happy case", amm.NewOrderBook( - newOrder(amm.Buy, utils.ParseDec("1.1"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("0.9"), sdk.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("1.1"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("0.9"), sdkmath.NewInt(10000)), ).MakeView(), true, utils.ParseDec("1.0"), @@ -34,27 +34,27 @@ func TestFindMatchPrice(t *testing.T) { { "buy order only", amm.NewOrderBook( - newOrder(amm.Buy, utils.ParseDec("1.0"), sdk.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("1.0"), sdkmath.NewInt(10000)), ).MakeView(), false, - sdk.Dec{}, + sdkmath.LegacyDec{}, }, { "sell order only", amm.NewOrderBook( - newOrder(amm.Sell, utils.ParseDec("1.0"), sdk.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("1.0"), sdkmath.NewInt(10000)), ).MakeView(), false, - sdk.Dec{}, + sdkmath.LegacyDec{}, }, { "highest buy price is lower than lowest sell price", amm.NewOrderBook( - newOrder(amm.Buy, utils.ParseDec("0.9"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("1.1"), sdk.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("0.9"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("1.1"), sdkmath.NewInt(10000)), ).MakeView(), false, - sdk.Dec{}, + sdkmath.LegacyDec{}, }, } { t.Run(tc.name, func(t *testing.T) { @@ -72,14 +72,14 @@ func TestFindMatchPrice_Rounding(t *testing.T) { for i := 0; i < 50; i++ { ob := amm.NewOrderBook( - newOrder(amm.Buy, defTickPrec.UpTick(defTickPrec.UpTick(basePrice)), sdk.NewInt(80)), - newOrder(amm.Sell, defTickPrec.UpTick(basePrice), sdk.NewInt(20)), - newOrder(amm.Buy, basePrice, sdk.NewInt(10)), newOrder(amm.Sell, basePrice, sdk.NewInt(10)), - newOrder(amm.Sell, defTickPrec.DownTick(basePrice), sdk.NewInt(70)), + newOrder(amm.Buy, defTickPrec.UpTick(defTickPrec.UpTick(basePrice)), sdkmath.NewInt(80)), + newOrder(amm.Sell, defTickPrec.UpTick(basePrice), sdkmath.NewInt(20)), + newOrder(amm.Buy, basePrice, sdkmath.NewInt(10)), newOrder(amm.Sell, basePrice, sdkmath.NewInt(10)), + newOrder(amm.Sell, defTickPrec.DownTick(basePrice), sdkmath.NewInt(70)), ) matchPrice, found := amm.FindMatchPrice(ob.MakeView(), int(defTickPrec)) require.True(t, found) - require.True(sdk.DecEq(t, + require.True(sdkmath.LegacyDecEq(t, defTickPrec.RoundPrice(basePrice.Add(defTickPrec.UpTick(basePrice)).QuoInt64(2)), matchPrice)) @@ -94,58 +94,58 @@ func TestMatchOrders(t *testing.T) { for _, tc := range []struct { name string ob *amm.OrderBook - lastPrice sdk.Dec + lastPrice sdkmath.LegacyDec matched bool - matchPrice sdk.Dec - quoteCoinDust sdk.Int + matchPrice sdkmath.LegacyDec + quoteCoinDust sdkmath.Int }{ { "happy case", amm.NewOrderBook( - newOrder(amm.Buy, utils.ParseDec("1.0"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("1.0"), sdk.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("1.0"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("1.0"), sdkmath.NewInt(10000)), ), utils.ParseDec("1.0"), true, utils.ParseDec("1.0"), - sdk.ZeroInt(), + sdkmath.ZeroInt(), }, { "happy case #2", amm.NewOrderBook( - newOrder(amm.Buy, utils.ParseDec("1.1"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("0.9"), sdk.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("1.1"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("0.9"), sdkmath.NewInt(10000)), ), utils.ParseDec("1.0"), true, utils.ParseDec("1.0"), - sdk.ZeroInt(), + sdkmath.ZeroInt(), }, { "positive quote coin dust", amm.NewOrderBook( - newOrder(amm.Buy, utils.ParseDec("0.9999"), sdk.NewInt(1000)), - newOrder(amm.Buy, utils.ParseDec("0.9999"), sdk.NewInt(1000)), - newOrder(amm.Sell, utils.ParseDec("0.9999"), sdk.NewInt(1000)), - newOrder(amm.Sell, utils.ParseDec("0.9999"), sdk.NewInt(1000)), + newOrder(amm.Buy, utils.ParseDec("0.9999"), sdkmath.NewInt(1000)), + newOrder(amm.Buy, utils.ParseDec("0.9999"), sdkmath.NewInt(1000)), + newOrder(amm.Sell, utils.ParseDec("0.9999"), sdkmath.NewInt(1000)), + newOrder(amm.Sell, utils.ParseDec("0.9999"), sdkmath.NewInt(1000)), ), utils.ParseDec("0.9999"), true, utils.ParseDec("0.9999"), - sdk.NewInt(2), + sdkmath.NewInt(2), }, } { t.Run(tc.name, func(t *testing.T) { matchPrice, quoteCoinDust, matched := tc.ob.Match(tc.lastPrice) require.Equal(t, tc.matched, matched) - require.True(sdk.DecEq(t, tc.matchPrice, matchPrice)) + require.True(sdkmath.LegacyDecEq(t, tc.matchPrice, matchPrice)) if matched { - require.True(sdk.IntEq(t, tc.quoteCoinDust, quoteCoinDust)) + require.True(sdkmath.IntEq(t, tc.quoteCoinDust, quoteCoinDust)) for _, order := range tc.ob.Orders() { if order.IsMatched() { paid := order.GetPaidOfferCoinAmount() received := order.GetReceivedDemandCoinAmount() - var effPrice sdk.Dec // Effective swap price + var effPrice sdkmath.LegacyDec // Effective swap price switch order.GetDirection() { case amm.Buy: effPrice = paid.ToLegacyDec().QuoInt(received) @@ -163,30 +163,30 @@ func TestMatchOrders(t *testing.T) { func TestFindMatchableAmountAtSinglePrice(t *testing.T) { for _, tc := range []struct { orders []amm.Order - matchPrice sdk.Dec + matchPrice sdkmath.LegacyDec found bool - matchableAmt sdk.Int + matchableAmt sdkmath.Int }{ { []amm.Order{ - newOrder(amm.Sell, utils.ParseDec("0.100"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("0.099"), sdk.NewInt(9995)), - newOrder(amm.Buy, utils.ParseDec("0.101"), sdk.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("0.100"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("0.099"), sdkmath.NewInt(9995)), + newOrder(amm.Buy, utils.ParseDec("0.101"), sdkmath.NewInt(10000)), }, utils.ParseDec("0.100"), true, - sdk.NewInt(9995), + sdkmath.NewInt(9995), }, { []amm.Order{ - newOrder(amm.Sell, utils.ParseDec("0.100"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("0.099"), sdk.NewInt(9995)), - newOrder(amm.Buy, utils.ParseDec("0.101"), sdk.NewInt(10000)), - newOrder(amm.Buy, utils.ParseDec("0.100"), sdk.NewInt(1000)), + newOrder(amm.Sell, utils.ParseDec("0.100"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("0.099"), sdkmath.NewInt(9995)), + newOrder(amm.Buy, utils.ParseDec("0.101"), sdkmath.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("0.100"), sdkmath.NewInt(1000)), }, utils.ParseDec("0.100"), true, - sdk.NewInt(11000), + sdkmath.NewInt(11000), }, } { t.Run("", func(t *testing.T) { @@ -194,7 +194,7 @@ func TestFindMatchableAmountAtSinglePrice(t *testing.T) { matchableAmt, found := ob.FindMatchableAmountAtSinglePrice(tc.matchPrice) require.Equal(t, tc.found, found) if found { - require.True(sdk.IntEq(t, tc.matchableAmt, matchableAmt)) + require.True(sdkmath.IntEq(t, tc.matchableAmt, matchableAmt)) } }) } @@ -202,10 +202,10 @@ func TestFindMatchableAmountAtSinglePrice(t *testing.T) { func TestMatch_edgecase1(t *testing.T) { orders := []amm.Order{ - newOrder(amm.Sell, utils.ParseDec("0.100"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("0.099"), sdk.NewInt(9995)), - newOrder(amm.Buy, utils.ParseDec("0.101"), sdk.NewInt(10000)), - newOrder(amm.Buy, utils.ParseDec("0.100"), sdk.NewInt(5000)), + newOrder(amm.Sell, utils.ParseDec("0.100"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("0.099"), sdkmath.NewInt(9995)), + newOrder(amm.Buy, utils.ParseDec("0.101"), sdkmath.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("0.100"), sdkmath.NewInt(5000)), } ob := amm.NewOrderBook(orders...) _, _, matched := ob.Match(utils.ParseDec("0.098")) diff --git a/x/liquidity/amm/orderbook_internal_test.go b/x/liquidity/amm/orderbook_internal_test.go index 99b27a020..abe0e7f9e 100644 --- a/x/liquidity/amm/orderbook_internal_test.go +++ b/x/liquidity/amm/orderbook_internal_test.go @@ -6,17 +6,17 @@ import ( "github.com/stretchr/testify/require" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" utils "github.com/comdex-official/comdex/types" ) -func newOrder(dir OrderDirection, price sdk.Dec, amt sdk.Int) *BaseOrder { +func newOrder(dir OrderDirection, price sdkmath.LegacyDec, amt sdkmath.Int) *BaseOrder { return NewBaseOrder(dir, price, amt, OfferCoinAmount(dir, price, amt)) } func TestOrderBookTicks_add(t *testing.T) { - prices := []sdk.Dec{ + prices := []sdkmath.LegacyDec{ utils.ParseDec("1.0"), utils.ParseDec("1.1"), utils.ParseDec("1.05"), @@ -27,7 +27,7 @@ func TestOrderBookTicks_add(t *testing.T) { } var ticks orderBookTicks for _, price := range prices { - ticks.addOrder(newOrder(Buy, price, sdk.NewInt(10000))) + ticks.addOrder(newOrder(Buy, price, sdkmath.NewInt(10000))) } pricesSet := map[string]struct{}{} for _, price := range prices { @@ -41,6 +41,6 @@ func TestOrderBookTicks_add(t *testing.T) { return prices[i].GT(prices[j]) }) for i, price := range prices { - require.True(sdk.DecEq(t, price, ticks.ticks[i].price)) + require.True(sdkmath.LegacyDecEq(t, price, ticks.ticks[i].price)) } } diff --git a/x/liquidity/amm/orderbook_test.go b/x/liquidity/amm/orderbook_test.go index 454625ad0..a9ce384da 100644 --- a/x/liquidity/amm/orderbook_test.go +++ b/x/liquidity/amm/orderbook_test.go @@ -5,7 +5,7 @@ import ( "math/rand" "testing" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" "github.com/stretchr/testify/require" utils "github.com/comdex-official/comdex/types" @@ -14,30 +14,30 @@ import ( func TestOrderBook(t *testing.T) { ob := amm.NewOrderBook( - newOrder(amm.Buy, utils.ParseDec("10.01"), sdk.NewInt(10000)), - newOrder(amm.Buy, utils.ParseDec("10.00"), sdk.NewInt(10000)), - newOrder(amm.Buy, utils.ParseDec("9.999"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("9.999"), sdk.NewInt(10000)), - newOrder(amm.Buy, utils.ParseDec("9.998"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("9.998"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("9.997"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("9.996"), sdk.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("10.01"), sdkmath.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("10.00"), sdkmath.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("9.999"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("9.999"), sdkmath.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("9.998"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("9.998"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("9.997"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("9.996"), sdkmath.NewInt(10000)), ) highest, found := ob.HighestPrice() require.True(t, found) - require.True(sdk.DecEq(t, utils.ParseDec("10.01"), highest)) + require.True(sdkmath.LegacyDecEq(t, utils.ParseDec("10.01"), highest)) lowest, found := ob.LowestPrice() require.True(t, found) - require.True(sdk.DecEq(t, utils.ParseDec("9.996"), lowest)) + require.True(sdkmath.LegacyDecEq(t, utils.ParseDec("9.996"), lowest)) } func TestOrderBook_BuyOrdersAt(t *testing.T) { - order1 := newOrder(amm.Sell, utils.ParseDec("1.1"), sdk.NewInt(10000)) - order2 := newOrder(amm.Buy, utils.ParseDec("1.1"), sdk.NewInt(10000)) - order3 := newOrder(amm.Buy, utils.ParseDec("1.1"), sdk.NewInt(10000)) - order4 := newOrder(amm.Buy, utils.ParseDec("1.0"), sdk.NewInt(10000)) - order5 := newOrder(amm.Buy, utils.ParseDec("1.2"), sdk.NewInt(10000)) + order1 := newOrder(amm.Sell, utils.ParseDec("1.1"), sdkmath.NewInt(10000)) + order2 := newOrder(amm.Buy, utils.ParseDec("1.1"), sdkmath.NewInt(10000)) + order3 := newOrder(amm.Buy, utils.ParseDec("1.1"), sdkmath.NewInt(10000)) + order4 := newOrder(amm.Buy, utils.ParseDec("1.0"), sdkmath.NewInt(10000)) + order5 := newOrder(amm.Buy, utils.ParseDec("1.2"), sdkmath.NewInt(10000)) ob := amm.NewOrderBook(order1, order2, order3, order4, order5) buyOrders := ob.BuyOrdersAt(utils.ParseDec("1.1")) @@ -50,11 +50,11 @@ func TestOrderBook_BuyOrdersAt(t *testing.T) { } func TestOrderBook_SellOrdersAt(t *testing.T) { - order1 := newOrder(amm.Buy, utils.ParseDec("1.1"), sdk.NewInt(10000)) - order2 := newOrder(amm.Sell, utils.ParseDec("1.1"), sdk.NewInt(10000)) - order3 := newOrder(amm.Sell, utils.ParseDec("1.1"), sdk.NewInt(10000)) - order4 := newOrder(amm.Sell, utils.ParseDec("1.0"), sdk.NewInt(10000)) - order5 := newOrder(amm.Sell, utils.ParseDec("1.2"), sdk.NewInt(10000)) + order1 := newOrder(amm.Buy, utils.ParseDec("1.1"), sdkmath.NewInt(10000)) + order2 := newOrder(amm.Sell, utils.ParseDec("1.1"), sdkmath.NewInt(10000)) + order3 := newOrder(amm.Sell, utils.ParseDec("1.1"), sdkmath.NewInt(10000)) + order4 := newOrder(amm.Sell, utils.ParseDec("1.0"), sdkmath.NewInt(10000)) + order5 := newOrder(amm.Sell, utils.ParseDec("1.2"), sdkmath.NewInt(10000)) ob := amm.NewOrderBook(order1, order2, order3, order4, order5) sellOrders := ob.SellOrdersAt(utils.ParseDec("1.1")) @@ -70,33 +70,33 @@ func TestOrderBook_HighestPriceLowestPrice(t *testing.T) { for _, tc := range []struct { ob *amm.OrderBook found bool - highestPrice sdk.Dec - lowestPrice sdk.Dec + highestPrice sdkmath.LegacyDec + lowestPrice sdkmath.LegacyDec }{ { amm.NewOrderBook(), - false, sdk.Dec{}, sdk.Dec{}, + false, sdkmath.LegacyDec{}, sdkmath.LegacyDec{}, }, { amm.NewOrderBook( - newOrder(amm.Buy, utils.ParseDec("1.1"), sdk.NewInt(10000)), - newOrder(amm.Buy, utils.ParseDec("1.0"), sdk.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("1.1"), sdkmath.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("1.0"), sdkmath.NewInt(10000)), ), true, utils.ParseDec("1.1"), utils.ParseDec("1.0"), }, { amm.NewOrderBook( - newOrder(amm.Sell, utils.ParseDec("1.1"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("1.0"), sdk.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("1.1"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("1.0"), sdkmath.NewInt(10000)), ), true, utils.ParseDec("1.1"), utils.ParseDec("1.0"), }, { amm.NewOrderBook( - newOrder(amm.Sell, utils.ParseDec("1.1"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("1.0"), sdk.NewInt(10000)), - newOrder(amm.Buy, utils.ParseDec("1.0"), sdk.NewInt(10000)), - newOrder(amm.Buy, utils.ParseDec("0.9"), sdk.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("1.1"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("1.0"), sdkmath.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("1.0"), sdkmath.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("0.9"), sdkmath.NewInt(10000)), ), true, utils.ParseDec("1.1"), utils.ParseDec("0.9"), }, @@ -107,8 +107,8 @@ func TestOrderBook_HighestPriceLowestPrice(t *testing.T) { lowestPrice, foundLowestPrice := tc.ob.LowestPrice() require.Equal(t, tc.found, foundLowestPrice) if tc.found { - require.True(sdk.DecEq(t, tc.highestPrice, highestPrice)) - require.True(sdk.DecEq(t, tc.lowestPrice, lowestPrice)) + require.True(sdkmath.LegacyDecEq(t, tc.highestPrice, highestPrice)) + require.True(sdkmath.LegacyDecEq(t, tc.lowestPrice, lowestPrice)) } }) } @@ -116,15 +116,15 @@ func TestOrderBook_HighestPriceLowestPrice(t *testing.T) { func ExampleOrderBook_String() { ob := amm.NewOrderBook( - newOrder(amm.Sell, utils.ParseDec("1.2"), sdk.NewInt(10000)), - newOrder(amm.Buy, utils.ParseDec("1.17"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("1.15"), sdk.NewInt(5000)), - newOrder(amm.Sell, utils.ParseDec("1.1"), sdk.NewInt(3000)), - newOrder(amm.Buy, utils.ParseDec("1.1"), sdk.NewInt(5000)), - newOrder(amm.Buy, utils.ParseDec("1.1"), sdk.NewInt(1000)), - newOrder(amm.Sell, utils.ParseDec("1.09"), sdk.NewInt(6000)), - newOrder(amm.Sell, utils.ParseDec("1.09"), sdk.NewInt(4000)), - newOrder(amm.Buy, utils.ParseDec("1.06"), sdk.NewInt(15000)), + newOrder(amm.Sell, utils.ParseDec("1.2"), sdkmath.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("1.17"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("1.15"), sdkmath.NewInt(5000)), + newOrder(amm.Sell, utils.ParseDec("1.1"), sdkmath.NewInt(3000)), + newOrder(amm.Buy, utils.ParseDec("1.1"), sdkmath.NewInt(5000)), + newOrder(amm.Buy, utils.ParseDec("1.1"), sdkmath.NewInt(1000)), + newOrder(amm.Sell, utils.ParseDec("1.09"), sdkmath.NewInt(6000)), + newOrder(amm.Sell, utils.ParseDec("1.09"), sdkmath.NewInt(4000)), + newOrder(amm.Buy, utils.ParseDec("1.06"), sdkmath.NewInt(15000)), ) fmt.Println(ob.String()) @@ -141,15 +141,15 @@ func ExampleOrderBook_String() { func ExampleOrderBook_FullString() { ob := amm.NewOrderBook( - newOrder(amm.Sell, utils.ParseDec("1.2"), sdk.NewInt(10000)), - newOrder(amm.Buy, utils.ParseDec("1.17"), sdk.NewInt(10000)), - newOrder(amm.Sell, utils.ParseDec("1.15"), sdk.NewInt(5000)), - newOrder(amm.Sell, utils.ParseDec("1.1"), sdk.NewInt(3000)), - newOrder(amm.Buy, utils.ParseDec("1.1"), sdk.NewInt(5000)), - newOrder(amm.Buy, utils.ParseDec("1.1"), sdk.NewInt(1000)), - newOrder(amm.Sell, utils.ParseDec("1.09"), sdk.NewInt(6000)), - newOrder(amm.Sell, utils.ParseDec("1.09"), sdk.NewInt(4000)), - newOrder(amm.Buy, utils.ParseDec("1.06"), sdk.NewInt(15000)), + newOrder(amm.Sell, utils.ParseDec("1.2"), sdkmath.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("1.17"), sdkmath.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("1.15"), sdkmath.NewInt(5000)), + newOrder(amm.Sell, utils.ParseDec("1.1"), sdkmath.NewInt(3000)), + newOrder(amm.Buy, utils.ParseDec("1.1"), sdkmath.NewInt(5000)), + newOrder(amm.Buy, utils.ParseDec("1.1"), sdkmath.NewInt(1000)), + newOrder(amm.Sell, utils.ParseDec("1.09"), sdkmath.NewInt(6000)), + newOrder(amm.Sell, utils.ParseDec("1.09"), sdkmath.NewInt(4000)), + newOrder(amm.Buy, utils.ParseDec("1.06"), sdkmath.NewInt(15000)), ) fmt.Println(ob.FullString(2)) @@ -202,7 +202,7 @@ func BenchmarkOrderBook_AddOrder(b *testing.B) { } price := defTickPrec.PriceToDownTick( utils.RandomDec(r, utils.ParseDec("0.01"), utils.ParseDec("100.0"))) - orders[i] = newOrder(dir, price, sdk.NewInt(10000)) + orders[i] = newOrder(dir, price, sdkmath.NewInt(10000)) } for _, numOrders := range []int{1000, 5000, 10000} { b.Run(fmt.Sprintf("%d orders", numOrders), func(b *testing.B) { diff --git a/x/liquidity/amm/tick_internal_test.go b/x/liquidity/amm/tick_internal_test.go index 349b4814a..4c5bbdd17 100644 --- a/x/liquidity/amm/tick_internal_test.go +++ b/x/liquidity/amm/tick_internal_test.go @@ -5,32 +5,32 @@ import ( "github.com/stretchr/testify/require" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" utils "github.com/comdex-official/comdex/types" ) func Test_char(t *testing.T) { require.Panics(t, func() { - char(sdk.ZeroDec()) + char(sdkmath.LegacyZeroDec()) }) for _, tc := range []struct { - x sdk.Dec + x sdkmath.LegacyDec expected int }{ - {sdk.MustNewDecFromStr("999.99999999999999999"), 20}, - {sdk.MustNewDecFromStr("100"), 20}, - {sdk.MustNewDecFromStr("99.999999999999999999"), 19}, - {sdk.MustNewDecFromStr("10"), 19}, - {sdk.MustNewDecFromStr("9.999999999999999999"), 18}, - {sdk.MustNewDecFromStr("1"), 18}, - {sdk.MustNewDecFromStr("0.999999999999999999"), 17}, - {sdk.MustNewDecFromStr("0.1"), 17}, - {sdk.MustNewDecFromStr("0.099999999999999999"), 16}, - {sdk.MustNewDecFromStr("0.01"), 16}, - {sdk.MustNewDecFromStr("0.000000000000000009"), 0}, - {sdk.MustNewDecFromStr("0.000000000000000001"), 0}, + {sdkmath.LegacyMustNewDecFromStr("999.99999999999999999"), 20}, + {sdkmath.LegacyMustNewDecFromStr("100"), 20}, + {sdkmath.LegacyMustNewDecFromStr("99.999999999999999999"), 19}, + {sdkmath.LegacyMustNewDecFromStr("10"), 19}, + {sdkmath.LegacyMustNewDecFromStr("9.999999999999999999"), 18}, + {sdkmath.LegacyMustNewDecFromStr("1"), 18}, + {sdkmath.LegacyMustNewDecFromStr("0.999999999999999999"), 17}, + {sdkmath.LegacyMustNewDecFromStr("0.1"), 17}, + {sdkmath.LegacyMustNewDecFromStr("0.099999999999999999"), 16}, + {sdkmath.LegacyMustNewDecFromStr("0.01"), 16}, + {sdkmath.LegacyMustNewDecFromStr("0.000000000000000009"), 0}, + {sdkmath.LegacyMustNewDecFromStr("0.000000000000000001"), 0}, } { t.Run("", func(t *testing.T) { require.Equal(t, tc.expected, char(tc.x)) @@ -41,23 +41,23 @@ func Test_char(t *testing.T) { func Test_pow10(t *testing.T) { for _, tc := range []struct { power int - expected sdk.Dec + expected sdkmath.LegacyDec }{ - {18, sdk.NewDec(1)}, - {19, sdk.NewDec(10)}, - {20, sdk.NewDec(100)}, - {17, sdk.NewDecWithPrec(1, 1)}, - {16, sdk.NewDecWithPrec(1, 2)}, + {18, sdkmath.LegacyNewDec(1)}, + {19, sdkmath.LegacyNewDec(10)}, + {20, sdkmath.LegacyNewDec(100)}, + {17, sdkmath.LegacyNewDecWithPrec(1, 1)}, + {16, sdkmath.LegacyNewDecWithPrec(1, 2)}, } { t.Run("", func(t *testing.T) { - require.True(sdk.DecEq(t, tc.expected, pow10(tc.power))) + require.True(sdkmath.LegacyDecEq(t, tc.expected, pow10(tc.power))) }) } } func Test_isPow10(t *testing.T) { for _, tc := range []struct { - x sdk.Dec + x sdkmath.LegacyDec expected bool }{ {utils.ParseDec("100"), true}, diff --git a/x/liquidity/amm/tick_test.go b/x/liquidity/amm/tick_test.go index 7c77b218a..cecc8b47b 100644 --- a/x/liquidity/amm/tick_test.go +++ b/x/liquidity/amm/tick_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/require" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" utils "github.com/comdex-official/comdex/types" "github.com/comdex-official/comdex/x/liquidity/amm" @@ -16,8 +16,8 @@ const defTickPrec = amm.TickPrecision(3) func TestPriceToTick(t *testing.T) { for _, tc := range []struct { - price sdk.Dec - expected sdk.Dec + price sdkmath.LegacyDec + expected sdkmath.LegacyDec }{ {utils.ParseDec("0.000000000000099999"), utils.ParseDec("0.00000000000009999")}, {utils.ParseDec("1.999999999999999999"), utils.ParseDec("1.999")}, @@ -27,7 +27,7 @@ func TestPriceToTick(t *testing.T) { {utils.ParseDec("10019"), utils.ParseDec("10010")}, {utils.ParseDec("1000100005"), utils.ParseDec("1000000000")}, } { - require.True(sdk.DecEq(t, tc.expected, amm.PriceToDownTick(tc.price, 3))) + require.True(sdkmath.LegacyDecEq(t, tc.expected, amm.PriceToDownTick(tc.price, 3))) } } @@ -35,21 +35,21 @@ func TestTick(t *testing.T) { for _, tc := range []struct { i int prec int - expected sdk.Dec + expected sdkmath.LegacyDec }{ - {0, 3, sdk.NewDecWithPrec(1, int64(sdk.Precision-defTickPrec))}, + {0, 3, sdkmath.LegacyNewDecWithPrec(1, int64(sdkmath.LegacyPrecision-defTickPrec))}, {1, 3, utils.ParseDec("0.000000000000001001")}, {8999, 3, utils.ParseDec("0.000000000000009999")}, {9000, 3, utils.ParseDec("0.000000000000010000")}, {9001, 3, utils.ParseDec("0.000000000000010010")}, {17999, 3, utils.ParseDec("0.000000000000099990")}, {18000, 3, utils.ParseDec("0.000000000000100000")}, - {135000, 3, sdk.NewDec(1)}, + {135000, 3, sdkmath.LegacyNewDec(1)}, {135001, 3, utils.ParseDec("1.001")}, } { t.Run("", func(t *testing.T) { res := amm.TickFromIndex(tc.i, tc.prec) - require.True(sdk.DecEq(t, tc.expected, res)) + require.True(sdkmath.LegacyDecEq(t, tc.expected, res)) require.Equal(t, tc.i, amm.TickToIndex(res, tc.prec)) }) } @@ -57,9 +57,9 @@ func TestTick(t *testing.T) { func TestUpTick(t *testing.T) { for _, tc := range []struct { - price sdk.Dec + price sdkmath.LegacyDec prec int - expected sdk.Dec + expected sdkmath.LegacyDec }{ {utils.ParseDec("1000000000000000000"), 3, utils.ParseDec("1001000000000000000")}, {utils.ParseDec("1000"), 3, utils.ParseDec("1001")}, @@ -75,16 +75,16 @@ func TestUpTick(t *testing.T) { {utils.ParseDec("1000.9"), 3, utils.ParseDec("1001")}, } { t.Run("", func(t *testing.T) { - require.True(sdk.DecEq(t, tc.expected, amm.UpTick(tc.price, tc.prec))) + require.True(sdkmath.LegacyDecEq(t, tc.expected, amm.UpTick(tc.price, tc.prec))) }) } } func TestDownTick(t *testing.T) { for _, tc := range []struct { - price sdk.Dec + price sdkmath.LegacyDec prec int - expected sdk.Dec + expected sdkmath.LegacyDec }{ {utils.ParseDec("1000000000000000000"), 3, utils.ParseDec("999900000000000000")}, {utils.ParseDec("10010"), 3, utils.ParseDec("10000")}, @@ -100,7 +100,7 @@ func TestDownTick(t *testing.T) { {utils.ParseDec("1000.9"), 3, utils.ParseDec("1000")}, } { t.Run("", func(t *testing.T) { - require.True(sdk.DecEq(t, tc.expected, amm.DownTick(tc.price, tc.prec))) + require.True(sdkmath.LegacyDecEq(t, tc.expected, amm.DownTick(tc.price, tc.prec))) }) } } @@ -118,7 +118,7 @@ func TestHighestTick(t *testing.T) { i, ok := new(big.Int).SetString(tc.expected, 10) require.True(t, ok) tick := amm.HighestTick(tc.prec) - require.True(sdk.DecEq(t, sdk.NewDecFromBigInt(i), tick)) + require.True(sdkmath.LegacyDecEq(t, sdkmath.LegacyNewDecFromBigInt(i), tick)) }) } } @@ -126,22 +126,22 @@ func TestHighestTick(t *testing.T) { func TestLowestTick(t *testing.T) { for _, tc := range []struct { prec int - expected sdk.Dec + expected sdkmath.LegacyDec }{ - {0, sdk.NewDecWithPrec(1, 18)}, - {3, sdk.NewDecWithPrec(1, 15)}, + {0, sdkmath.LegacyNewDecWithPrec(1, 18)}, + {3, sdkmath.LegacyNewDecWithPrec(1, 15)}, } { t.Run("", func(t *testing.T) { - require.True(sdk.DecEq(t, tc.expected, amm.LowestTick(tc.prec))) + require.True(sdkmath.LegacyDecEq(t, tc.expected, amm.LowestTick(tc.prec))) }) } } func TestPriceToUpTick(t *testing.T) { for _, tc := range []struct { - price sdk.Dec + price sdkmath.LegacyDec prec int - expected sdk.Dec + expected sdkmath.LegacyDec }{ {utils.ParseDec("1.0015"), 3, utils.ParseDec("1.002")}, {utils.ParseDec("100"), 3, utils.ParseDec("100")}, @@ -149,7 +149,7 @@ func TestPriceToUpTick(t *testing.T) { {utils.ParseDec("100.099"), 3, utils.ParseDec("100.1")}, } { t.Run("", func(t *testing.T) { - require.True(sdk.DecEq(t, tc.expected, amm.PriceToUpTick(tc.price, tc.prec))) + require.True(sdkmath.LegacyDecEq(t, tc.expected, amm.PriceToUpTick(tc.price, tc.prec))) }) } } @@ -179,9 +179,9 @@ func TestRoundTickIndex(t *testing.T) { func TestRoundPrice(t *testing.T) { for _, tc := range []struct { - price sdk.Dec + price sdkmath.LegacyDec prec int - expected sdk.Dec + expected sdkmath.LegacyDec }{ {utils.ParseDec("0.000000000000001000"), 3, utils.ParseDec("0.000000000000001000")}, {utils.ParseDec("0.000000000000010000"), 3, utils.ParseDec("0.000000000000010000")}, @@ -196,16 +196,16 @@ func TestRoundPrice(t *testing.T) { {utils.ParseDec("1.0035"), 3, utils.ParseDec("1.004")}, } { t.Run("", func(t *testing.T) { - require.True(sdk.DecEq(t, tc.expected, amm.RoundPrice(tc.price, tc.prec))) + require.True(sdkmath.LegacyDecEq(t, tc.expected, amm.RoundPrice(tc.price, tc.prec))) }) } } func TestTickGap(t *testing.T) { for _, tc := range []struct { - price sdk.Dec + price sdkmath.LegacyDec tickPrec int - expected sdk.Dec + expected sdkmath.LegacyDec }{ {utils.ParseDec("1.0"), 3, utils.ParseDec("0.001")}, {utils.ParseDec("1234"), 3, utils.ParseDec("1")}, @@ -215,7 +215,7 @@ func TestTickGap(t *testing.T) { {utils.ParseDec("0.00000000009"), 3, utils.ParseDec("0.00000000000001")}, } { t.Run("", func(t *testing.T) { - require.True(sdk.DecEq(t, tc.expected, amm.TickGap(tc.price, tc.tickPrec))) + require.True(sdkmath.LegacyDecEq(t, tc.expected, amm.TickGap(tc.price, tc.tickPrec))) }) } } diff --git a/x/liquidity/amm/util_internal_test.go b/x/liquidity/amm/util_internal_test.go index de93523de..1cf5efe1f 100644 --- a/x/liquidity/amm/util_internal_test.go +++ b/x/liquidity/amm/util_internal_test.go @@ -3,7 +3,7 @@ package amm import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" "github.com/stretchr/testify/require" utils "github.com/comdex-official/comdex/types" @@ -33,9 +33,9 @@ func Test_findFirstTrueCondition(t *testing.T) { func Test_poolOrderPriceGapRatio(t *testing.T) { for _, tc := range []struct { - poolPrice sdk.Dec - currentPrice sdk.Dec - expected sdk.Dec + poolPrice sdkmath.LegacyDec + currentPrice sdkmath.LegacyDec + expected sdkmath.LegacyDec }{ {utils.ParseDec("1"), utils.ParseDec("1"), utils.ParseDec("0.00003")}, {utils.ParseDec("1"), utils.ParseDec("1.005"), utils.ParseDec("0.000065")}, @@ -51,7 +51,7 @@ func Test_poolOrderPriceGapRatio(t *testing.T) { {utils.ParseDec("1"), utils.ParseDec("0.1"), utils.ParseDec("0.005")}, } { t.Run("", func(t *testing.T) { - require.True(sdk.DecEq(t, tc.expected, poolOrderPriceGapRatio(tc.poolPrice, tc.currentPrice))) + require.True(sdkmath.LegacyDecEq(t, tc.expected, poolOrderPriceGapRatio(tc.poolPrice, tc.currentPrice))) }) } } diff --git a/x/liquidity/amm/util_test.go b/x/liquidity/amm/util_test.go index 8afa7c566..7db293d76 100644 --- a/x/liquidity/amm/util_test.go +++ b/x/liquidity/amm/util_test.go @@ -3,7 +3,7 @@ package amm_test import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" "github.com/stretchr/testify/require" utils "github.com/comdex-official/comdex/types" @@ -11,21 +11,21 @@ import ( ) func TestMatchableAmount(t *testing.T) { - order1 := newOrder(amm.Buy, utils.ParseDec("1.0"), sdk.NewInt(10000)) + order1 := newOrder(amm.Buy, utils.ParseDec("1.0"), sdkmath.NewInt(10000)) for _, tc := range []struct { order amm.Order - price sdk.Dec - expected sdk.Int + price sdkmath.LegacyDec + expected sdkmath.Int }{ - {order1, utils.ParseDec("1"), sdk.NewInt(10000)}, - {order1, utils.ParseDec("0.01"), sdk.NewInt(10000)}, - {order1, utils.ParseDec("100"), sdk.NewInt(100)}, - {order1, utils.ParseDec("100.1"), sdk.NewInt(99)}, - {order1, utils.ParseDec("9999"), sdk.NewInt(1)}, - {order1, utils.ParseDec("10001"), sdk.NewInt(0)}, + {order1, utils.ParseDec("1"), sdkmath.NewInt(10000)}, + {order1, utils.ParseDec("0.01"), sdkmath.NewInt(10000)}, + {order1, utils.ParseDec("100"), sdkmath.NewInt(100)}, + {order1, utils.ParseDec("100.1"), sdkmath.NewInt(99)}, + {order1, utils.ParseDec("9999"), sdkmath.NewInt(1)}, + {order1, utils.ParseDec("10001"), sdkmath.NewInt(0)}, } { t.Run("", func(t *testing.T) { - require.True(sdk.IntEq(t, tc.expected, amm.MatchableAmount(tc.order, tc.price))) + require.True(sdkmath.IntEq(t, tc.expected, amm.MatchableAmount(tc.order, tc.price))) }) } } @@ -34,7 +34,7 @@ type batchIdOrderer struct { batchId uint64 } -func (orderer *batchIdOrderer) Order(dir amm.OrderDirection, price sdk.Dec, amt sdk.Int) amm.Order { +func (orderer *batchIdOrderer) Order(dir amm.OrderDirection, price sdkmath.LegacyDec, amt sdkmath.Int) amm.Order { return &batchIdOrder{newOrder(dir, price, amt), orderer.batchId} } @@ -49,25 +49,25 @@ func (order *batchIdOrder) GetBatchID() uint64 { func TestGroupOrdersByBatchId(t *testing.T) { price := utils.ParseDec("1.0") - newOrder := func(amt sdk.Int, batchId uint64) amm.Order { + newOrder := func(amt sdkmath.Int, batchId uint64) amm.Order { return (&batchIdOrderer{batchId}).Order(amm.Buy, price, amt) } orders := []amm.Order{ - newOrder(sdk.NewInt(32000), 0), - newOrder(sdk.NewInt(8000), 4), - newOrder(sdk.NewInt(1000), 1), - newOrder(sdk.NewInt(16000), 4), - newOrder(sdk.NewInt(4000), 2), - newOrder(sdk.NewInt(2000), 1), - newOrder(sdk.NewInt(64000), 0), + newOrder(sdkmath.NewInt(32000), 0), + newOrder(sdkmath.NewInt(8000), 4), + newOrder(sdkmath.NewInt(1000), 1), + newOrder(sdkmath.NewInt(16000), 4), + newOrder(sdkmath.NewInt(4000), 2), + newOrder(sdkmath.NewInt(2000), 1), + newOrder(sdkmath.NewInt(64000), 0), } groups := amm.GroupOrdersByBatchID(orders) require.EqualValues(t, 1, groups[0].BatchID) - require.True(sdk.IntEq(t, sdk.NewInt(3000), amm.TotalAmount(groups[0].Orders))) + require.True(sdkmath.IntEq(t, sdkmath.NewInt(3000), amm.TotalAmount(groups[0].Orders))) require.EqualValues(t, 2, groups[1].BatchID) - require.True(sdk.IntEq(t, sdk.NewInt(4000), amm.TotalAmount(groups[1].Orders))) + require.True(sdkmath.IntEq(t, sdkmath.NewInt(4000), amm.TotalAmount(groups[1].Orders))) require.EqualValues(t, 4, groups[2].BatchID) - require.True(sdk.IntEq(t, sdk.NewInt(24000), amm.TotalAmount(groups[2].Orders))) + require.True(sdkmath.IntEq(t, sdkmath.NewInt(24000), amm.TotalAmount(groups[2].Orders))) require.EqualValues(t, 0, groups[3].BatchID) - require.True(sdk.IntEq(t, sdk.NewInt(96000), amm.TotalAmount(groups[3].Orders))) + require.True(sdkmath.IntEq(t, sdkmath.NewInt(96000), amm.TotalAmount(groups[3].Orders))) } diff --git a/x/liquidity/amm/view_test.go b/x/liquidity/amm/view_test.go index b351218e7..b58605035 100644 --- a/x/liquidity/amm/view_test.go +++ b/x/liquidity/amm/view_test.go @@ -4,7 +4,7 @@ import ( "math/rand" "testing" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" "github.com/stretchr/testify/require" utils "github.com/comdex-official/comdex/types" @@ -20,11 +20,11 @@ func TestOrderBookView(t *testing.T) { // Add 10 random orders for each buy and sell direction for j := 0; j < 10; j++ { price := utils.RandomDec(r, utils.ParseDec("0.5"), utils.ParseDec("2.0")) - amt := utils.RandomInt(r, sdk.NewInt(1000), sdk.NewInt(10000)) + amt := utils.RandomInt(r, sdkmath.NewInt(1000), sdkmath.NewInt(10000)) ob.AddOrder(newOrder(amm.Buy, price, amt)) price = utils.RandomDec(r, utils.ParseDec("0.5"), utils.ParseDec("2.0")) - amt = utils.RandomInt(r, sdk.NewInt(1000), sdk.NewInt(10000)) + amt = utils.RandomInt(r, sdkmath.NewInt(1000), sdkmath.NewInt(10000)) ob.AddOrder(newOrder(amm.Sell, price, amt)) } @@ -37,89 +37,89 @@ func TestOrderBookView(t *testing.T) { price := utils.RandomDec(r, utils.ParseDec("0.4"), utils.ParseDec("2.1")) // buy amount over (inclusive) - expected := sdk.ZeroInt() + expected := sdkmath.ZeroInt() for _, order := range orders { if order.GetDirection() == amm.Buy && order.GetPrice().GTE(price) { expected = expected.Add(order.GetAmount()) } } - require.True(sdk.IntEq(t, expected, ov.BuyAmountOver(price, true))) + require.True(sdkmath.IntEq(t, expected, ov.BuyAmountOver(price, true))) // buy amount over (exclusive) - expected = sdk.ZeroInt() + expected = sdkmath.ZeroInt() for _, order := range orders { if order.GetDirection() == amm.Buy && order.GetPrice().GT(price) { expected = expected.Add(order.GetAmount()) } } - require.True(sdk.IntEq(t, expected, ov.BuyAmountOver(price, false))) + require.True(sdkmath.IntEq(t, expected, ov.BuyAmountOver(price, false))) // buy amount under (inclusive) - expected = sdk.ZeroInt() + expected = sdkmath.ZeroInt() for _, order := range orders { if order.GetDirection() == amm.Buy && order.GetPrice().LTE(price) { expected = expected.Add(order.GetAmount()) } } - require.True(sdk.IntEq(t, expected, ov.BuyAmountUnder(price, true))) + require.True(sdkmath.IntEq(t, expected, ov.BuyAmountUnder(price, true))) // buy amount under (exclusive) - expected = sdk.ZeroInt() + expected = sdkmath.ZeroInt() for _, order := range orders { if order.GetDirection() == amm.Buy && order.GetPrice().LT(price) { expected = expected.Add(order.GetAmount()) } } - require.True(sdk.IntEq(t, expected, ov.BuyAmountUnder(price, false))) + require.True(sdkmath.IntEq(t, expected, ov.BuyAmountUnder(price, false))) // sell amount under (inclusive) - expected = sdk.ZeroInt() + expected = sdkmath.ZeroInt() for _, order := range orders { if order.GetDirection() == amm.Sell && order.GetPrice().LTE(price) { expected = expected.Add(order.GetAmount()) } } - require.True(sdk.IntEq(t, expected, ov.SellAmountUnder(price, true))) + require.True(sdkmath.IntEq(t, expected, ov.SellAmountUnder(price, true))) // sell amount under (exclusive) - expected = sdk.ZeroInt() + expected = sdkmath.ZeroInt() for _, order := range orders { if order.GetDirection() == amm.Sell && order.GetPrice().LT(price) { expected = expected.Add(order.GetAmount()) } } - require.True(sdk.IntEq(t, expected, ov.SellAmountUnder(price, false))) + require.True(sdkmath.IntEq(t, expected, ov.SellAmountUnder(price, false))) // sell amount over (inclusive) - expected = sdk.ZeroInt() + expected = sdkmath.ZeroInt() for _, order := range orders { if order.GetDirection() == amm.Sell && order.GetPrice().GTE(price) { expected = expected.Add(order.GetAmount()) } } - require.True(sdk.IntEq(t, expected, ov.SellAmountOver(price, true))) + require.True(sdkmath.IntEq(t, expected, ov.SellAmountOver(price, true))) // sell amount over (exclusive) - expected = sdk.ZeroInt() + expected = sdkmath.ZeroInt() for _, order := range orders { if order.GetDirection() == amm.Sell && order.GetPrice().GT(price) { expected = expected.Add(order.GetAmount()) } } - require.True(sdk.IntEq(t, expected, ov.SellAmountOver(price, false))) + require.True(sdkmath.IntEq(t, expected, ov.SellAmountOver(price, false))) } } } func TestOrderBookView_NoMatch(t *testing.T) { ob := amm.NewOrderBook( - newOrder(amm.Sell, utils.ParseDec("1.1"), sdk.NewInt(10000)), - newOrder(amm.Buy, utils.ParseDec("1.0"), sdk.NewInt(10000)), + newOrder(amm.Sell, utils.ParseDec("1.1"), sdkmath.NewInt(10000)), + newOrder(amm.Buy, utils.ParseDec("1.0"), sdkmath.NewInt(10000)), ) ov := ob.MakeView() ov.Match() - require.True(sdk.IntEq(t, sdk.NewInt(10000), ov.BuyAmountOver(utils.ParseDec("1.0"), true))) - require.True(sdk.IntEq(t, sdk.NewInt(10000), ov.SellAmountUnder(utils.ParseDec("1.1"), true))) + require.True(sdkmath.IntEq(t, sdkmath.NewInt(10000), ov.BuyAmountOver(utils.ParseDec("1.0"), true))) + require.True(sdkmath.IntEq(t, sdkmath.NewInt(10000), ov.SellAmountUnder(utils.ParseDec("1.1"), true))) } From a84e5ca9e6df055e92f5b3049780876b1679b0f3 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Tue, 10 Oct 2023 21:00:51 +0530 Subject: [PATCH 64/90] buf yaml name fix --- go.mod | 2 +- proto/buf.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index d4b342f56..ebbb73fdb 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/comdex-official/comdex go 1.20 require ( + cosmossdk.io/api v0.3.1 cosmossdk.io/math v1.1.2 github.com/CosmWasm/wasmd v0.40.2 github.com/CosmWasm/wasmvm v1.3.0 @@ -45,7 +46,6 @@ require ( cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v1.1.0 // indirect cloud.google.com/go/storage v1.30.1 // indirect - cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.6.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.4 // indirect cosmossdk.io/errors v1.0.0 // indirect diff --git a/proto/buf.yaml b/proto/buf.yaml index 082a8587f..e8b388892 100644 --- a/proto/buf.yaml +++ b/proto/buf.yaml @@ -1,6 +1,6 @@ -# This module represents buf.build/cosmos/cosmos-sdk +# This module represents buf.build/comdex-official/comdex version: v1 -name: buf.build/cosmos/cosmos-sdk +name: buf.build/comdex-official/comdex deps: - buf.build/cosmos/cosmos-proto - buf.build/cosmos/gogo-proto From 4020149c9e041f6c2c1759e09f989de65340ff72 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 11 Oct 2023 03:53:02 +0530 Subject: [PATCH 65/90] paramKeyTable fix for wasm and upgrade --- app/app.go | 2 +- app/upgrades/testnet/v13/upgrades.go | 64 ++-------------------------- 2 files changed, 4 insertions(+), 62 deletions(-) diff --git a/app/app.go b/app/app.go index 2822e5664..9d472a3af 100644 --- a/app/app.go +++ b/app/app.go @@ -487,7 +487,7 @@ func New( app.ParamsKeeper.Subspace(liquidationtypes.ModuleName) app.ParamsKeeper.Subspace(lockertypes.ModuleName) app.ParamsKeeper.Subspace(bandoraclemoduletypes.ModuleName) - app.ParamsKeeper.Subspace(wasmtypes.ModuleName) + app.ParamsKeeper.Subspace(wasmtypes.ModuleName).WithKeyTable(wasmtypes.ParamKeyTable()) app.ParamsKeeper.Subspace(auctiontypes.ModuleName) app.ParamsKeeper.Subspace(tokenminttypes.ModuleName) app.ParamsKeeper.Subspace(liquiditytypes.ModuleName) diff --git a/app/upgrades/testnet/v13/upgrades.go b/app/upgrades/testnet/v13/upgrades.go index 6158df289..bd98e9308 100644 --- a/app/upgrades/testnet/v13/upgrades.go +++ b/app/upgrades/testnet/v13/upgrades.go @@ -2,33 +2,21 @@ package v13 import ( "fmt" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" - icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - // SDK v47 modules - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" - crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" - distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" - slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" exported "github.com/cosmos/ibc-go/v7/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" ) func CreateUpgradeHandlerV13( @@ -47,52 +35,6 @@ func CreateUpgradeHandlerV13( ctx.Logger().Info("Applying test net upgrade - v.13.0.0") logger := ctx.Logger().With("upgrade", UpgradeName) - // https://github.com/cosmos/cosmos-sdk/pull/12363/files - // Set param key table for params module migration - for _, subspace := range paramsKeeper.GetSubspaces() { - subspace := subspace - - var keyTable paramstypes.KeyTable - switch subspace.Name() { - case authtypes.ModuleName: - keyTable = authtypes.ParamKeyTable() //nolint:staticcheck - case banktypes.ModuleName: - keyTable = banktypes.ParamKeyTable() //nolint:staticcheck - case stakingtypes.ModuleName: - keyTable = stakingtypes.ParamKeyTable() //nolint:staticcheck - - // case minttypes.ModuleName: - // keyTable = minttypes.ParamKeyTable() //nolint:staticcheck - case distrtypes.ModuleName: - keyTable = distrtypes.ParamKeyTable() //nolint:staticcheck - case slashingtypes.ModuleName: - keyTable = slashingtypes.ParamKeyTable() //nolint:staticcheck - case govtypes.ModuleName: - keyTable = govv1.ParamKeyTable() //nolint:staticcheck - case crisistypes.ModuleName: - keyTable = crisistypes.ParamKeyTable() //nolint:staticcheck - - // ibc types - case ibctransfertypes.ModuleName: - keyTable = ibctransfertypes.ParamKeyTable() - case icahosttypes.SubModuleName: - keyTable = icahosttypes.ParamKeyTable() - case icacontrollertypes.SubModuleName: - keyTable = icacontrollertypes.ParamKeyTable() - - // wasm - case wasmtypes.ModuleName: - keyTable = wasmtypes.ParamKeyTable() //nolint:staticcheck - - // TODO: comdex modules - - } - - if !subspace.HasKeyTable() { - subspace.WithKeyTable(keyTable) - } - } - // Migrate Tendermint consensus parameters from x/params module to a deprecated x/consensus module. // The old params module is required to still be imported in your app.go in order to handle this migration. ctx.Logger().Info("Migrating tendermint consensus params from x/params to x/consensus...") From 5278e23267dca8989d55325b244c8a675cb60b9e Mon Sep 17 00:00:00 2001 From: vishnukumavat Date: Wed, 11 Oct 2023 04:59:26 +0530 Subject: [PATCH 66/90] integration test suite for liquidity refactored --- x/liquidity/client/testutil/cli_test.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/x/liquidity/client/testutil/cli_test.go b/x/liquidity/client/testutil/cli_test.go index 2ec6f646e..4a4679b44 100644 --- a/x/liquidity/client/testutil/cli_test.go +++ b/x/liquidity/client/testutil/cli_test.go @@ -1,11 +1,5 @@ package testutil -import ( - "testing" - - "github.com/stretchr/testify/suite" -) - -func TestLiquidityIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(LiquidityIntegrationTestSuite)) -} +// func TestLiquidityIntegrationTestSuite(t *testing.T) { +// suite.Run(t, new(LiquidityIntegrationTestSuite)) +// } From 2673658865bcdd1953cf5b1ea986392eb0572871 Mon Sep 17 00:00:00 2001 From: vishnukumavat Date: Wed, 11 Oct 2023 05:10:48 +0530 Subject: [PATCH 67/90] printfs removal in liquidity amm's match_test --- x/liquidity/amm/match_test.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/x/liquidity/amm/match_test.go b/x/liquidity/amm/match_test.go index d6116c25d..827988c89 100644 --- a/x/liquidity/amm/match_test.go +++ b/x/liquidity/amm/match_test.go @@ -1,7 +1,6 @@ package amm_test import ( - "fmt" "testing" sdkmath "cosmossdk.io/math" @@ -210,10 +209,4 @@ func TestMatch_edgecase1(t *testing.T) { ob := amm.NewOrderBook(orders...) _, _, matched := ob.Match(utils.ParseDec("0.098")) require.True(t, matched) - for _, order := range orders { - fmt.Printf( - "%s %s (%s/%s) paid=%s, received=%s\n", - order.GetDirection(), order.GetPrice(), order.GetOpenAmount(), order.GetAmount(), - order.GetPaidOfferCoinAmount(), order.GetReceivedDemandCoinAmount()) - } } From 6b39b7be65933fb104b7a99e2ee16cd2fd026d56 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 12 Oct 2023 23:36:20 +0530 Subject: [PATCH 68/90] register msg services fix in module.go --- x/asset/module.go | 1 + x/auctionsV2/module.go | 1 + x/collector/module.go | 1 + x/lend/module.go | 1 + x/liquidationsV2/module.go | 1 + x/tokenmint/module.go | 1 + x/vault/module.go | 2 +- 7 files changed, 7 insertions(+), 1 deletion(-) diff --git a/x/asset/module.go b/x/asset/module.go index 2a197c0de..86ee035c8 100644 --- a/x/asset/module.go +++ b/x/asset/module.go @@ -107,6 +107,7 @@ func (a AppModule) QuerierRoute() string { } func (a AppModule) RegisterServices(configurator module.Configurator) { + types.RegisterMsgServer(configurator.MsgServer(), keeper.NewMsgServerImpl(a.keeper)) types.RegisterQueryServer(configurator.QueryServer(), keeper.NewQueryServer(a.keeper)) } diff --git a/x/auctionsV2/module.go b/x/auctionsV2/module.go index 0df6a099e..8ba4e5e62 100644 --- a/x/auctionsV2/module.go +++ b/x/auctionsV2/module.go @@ -124,6 +124,7 @@ func (AppModule) QuerierRoute() string { return types.QuerierRoute } // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServer(am.keeper)) } diff --git a/x/collector/module.go b/x/collector/module.go index 9b5478268..29035288e 100644 --- a/x/collector/module.go +++ b/x/collector/module.go @@ -126,6 +126,7 @@ func (AppModule) QuerierRoute() string { return types.QuerierRoute } // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { // types.RegisterQueryServiceServer(cfg.QueryServer(), am.keeper) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServer(am.keeper)) } diff --git a/x/lend/module.go b/x/lend/module.go index 9fdc37274..0c6c1243c 100644 --- a/x/lend/module.go +++ b/x/lend/module.go @@ -135,6 +135,7 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { if err := cfg.RegisterMigration(types.ModuleName, 2, migrator.Migrate2to3); err != nil { panic(fmt.Errorf("failed to migrate %s to v2: %w", types.ModuleName, err)) } + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServer(am.keeper)) } diff --git a/x/liquidationsV2/module.go b/x/liquidationsV2/module.go index e5d9f0215..c76e2c036 100644 --- a/x/liquidationsV2/module.go +++ b/x/liquidationsV2/module.go @@ -126,6 +126,7 @@ func (AppModule) QuerierRoute() string { return types.QuerierRoute } // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServer(am.keeper)) } diff --git a/x/tokenmint/module.go b/x/tokenmint/module.go index 5f43a4b2d..55f67e3aa 100644 --- a/x/tokenmint/module.go +++ b/x/tokenmint/module.go @@ -125,6 +125,7 @@ func (AppModule) QuerierRoute() string { return types.QuerierRoute } // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServer(am.keeper)) types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServer(am.keeper)) } diff --git a/x/vault/module.go b/x/vault/module.go index 14926c14a..e7fe7ccec 100644 --- a/x/vault/module.go +++ b/x/vault/module.go @@ -103,7 +103,7 @@ func (a AppModule) QuerierRoute() string { } func (a AppModule) RegisterServices(configurator module.Configurator) { - types.RegisterMsgServer(configurator.QueryServer(), keeper.NewMsgServer(a.k)) + types.RegisterMsgServer(configurator.MsgServer(), keeper.NewMsgServer(a.k)) types.RegisterQueryServer(configurator.QueryServer(), keeper.NewQueryServer(a.k)) } From 4fe1d481afd98fc7ee436d0f66d666a40688666c Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Fri, 13 Oct 2023 00:46:50 +0530 Subject: [PATCH 69/90] upgrade code modified --- app/ante.go | 4 +-- app/app.go | 2 +- app/upgrades/testnet/v13/upgrades.go | 43 +++++++++++++++++++--------- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/app/ante.go b/app/ante.go index b9dfcfa1e..b7fa16018 100644 --- a/app/ante.go +++ b/app/ante.go @@ -9,7 +9,7 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" - // ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" + ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" storetypes "github.com/cosmos/cosmos-sdk/store/types" ) @@ -58,7 +58,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewSigGasConsumeDecorator(options.AccountKeeper, sigGasConsumer), ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler), ante.NewIncrementSequenceDecorator(options.AccountKeeper), - // ibcante.NewAnteDecorator(options.IBCChannelKeeper), + ibcante.NewRedundantRelayDecorator(options.IBCChannelKeeper), } return sdk.ChainAnteDecorators(anteDecorators...), nil diff --git a/app/app.go b/app/app.go index 9d472a3af..5b962996d 100644 --- a/app/app.go +++ b/app/app.go @@ -1508,7 +1508,7 @@ func (a *App) registerUpgradeHandlers() { case upgradeInfo.Name == tv13.UpgradeName: a.UpgradeKeeper.SetUpgradeHandler( tv13.UpgradeName, - tv13.CreateUpgradeHandlerV13(a.mm, a.configurator, a.WasmKeeper, a.ParamsKeeper, a.ConsensusParamsKeeper, *a.IbcKeeper, a.GovKeeper, *a.StakingKeeper, a.MintKeeper, a.SlashingKeeper), + tv13.CreateUpgradeHandlerV13(a.mm, a.configurator, a.cdc, a.keys[capabilitytypes.ModuleName], a.CapabilityKeeper, a.WasmKeeper, a.ParamsKeeper, a.ConsensusParamsKeeper, *a.IbcKeeper, a.GovKeeper, *a.StakingKeeper, a.MintKeeper, a.SlashingKeeper), ) } diff --git a/app/upgrades/testnet/v13/upgrades.go b/app/upgrades/testnet/v13/upgrades.go index bd98e9308..adeed5657 100644 --- a/app/upgrades/testnet/v13/upgrades.go +++ b/app/upgrades/testnet/v13/upgrades.go @@ -4,9 +4,13 @@ import ( "fmt" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + bandoraclemoduletypes "github.com/comdex-official/comdex/x/bandoracle/types" "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" + capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" @@ -15,6 +19,7 @@ import ( slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + icacontrollermigrations "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/migrations/v6" exported "github.com/cosmos/ibc-go/v7/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" ) @@ -22,6 +27,9 @@ import ( func CreateUpgradeHandlerV13( mm *module.Manager, configurator module.Configurator, + cdc codec.Codec, + capabilityStoreKey *storetypes.KVStoreKey, + capabilityKeeper *capabilitykeeper.Keeper, wasmKeeper wasmkeeper.Keeper, paramsKeeper paramskeeper.Keeper, consensusParamsKeeper consensusparamkeeper.Keeper, @@ -41,19 +49,32 @@ func CreateUpgradeHandlerV13( legacyParamSubspace := paramsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable()) baseapp.MigrateParams(ctx, legacyParamSubspace, &consensusParamsKeeper) - // Run migrations - logger.Info(fmt.Sprintf("pre migrate version map: %v", fromVM)) - vm, err := mm.RunMigrations(ctx, configurator, fromVM) - if err != nil { + // TODO: check if v5-v6 is required ?? + ctx.Logger().Info("Migrating ICA channel capabilities for ibc-go v5 to v6 migration...") + if err := icacontrollermigrations.MigrateICS27ChannelCapability( + ctx, + cdc, + capabilityStoreKey, + capabilityKeeper, + bandoraclemoduletypes.ModuleName, + ); err != nil { return nil, err } - logger.Info(fmt.Sprintf("post migrate version map: %v", vm)) // https://github.com/cosmos/ibc-go/blob/v7.1.0/docs/migrations/v7-to-v7_1.md // explicitly update the IBC 02-client params, adding the localhost client type params := IBCKeeper.ClientKeeper.GetParams(ctx) params.AllowedClients = append(params.AllowedClients, exported.Localhost) IBCKeeper.ClientKeeper.SetParams(ctx, params) + logger.Info(fmt.Sprintf("updated ibc client params %v", params)) + + // Run migrations + logger.Info(fmt.Sprintf("pre migrate version map: %v", fromVM)) + vm, err := mm.RunMigrations(ctx, configurator, fromVM) + if err != nil { + return nil, err + } + logger.Info(fmt.Sprintf("post migrate version map: %v", vm)) //TODO: confirm the initial deposit // update gov params to use a 20% initial deposit ratio, allowing us to remote the ante handler @@ -62,15 +83,7 @@ func CreateUpgradeHandlerV13( if err := GovKeeper.SetParams(ctx, govParams); err != nil { return nil, err } - - //TODO: confirm the minimum commission - // x/Staking - set minimum commission to 0.050000000000000000 - stakingParams := StakingKeeper.GetParams(ctx) - stakingParams.MinCommissionRate = sdk.NewDecWithPrec(5, 2) - err = StakingKeeper.SetParams(ctx, stakingParams) - if err != nil { - return nil, err - } + logger.Info(fmt.Sprintf("updated gov params to %v", govParams)) // x/Mint // Double blocks per year (from 6 seconds to 3 = 2x blocks per year) @@ -94,6 +107,8 @@ func CreateUpgradeHandlerV13( wasmParams := wasmKeeper.GetParams(ctx) wasmParams.CodeUploadAccess = wasmtypes.AllowEverybody wasmKeeper.SetParams(ctx, wasmParams) + logger.Info(fmt.Sprintf("updated wasm params to %v", wasmParams)) + return vm, err } } From b8ec177784a39485f8944f99d0cc296673ca2f84 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Fri, 13 Oct 2023 00:47:37 +0530 Subject: [PATCH 70/90] third_party not required for proto gen, so removed --- third_party/proto/confio/proofs.proto | 234 -- third_party/proto/cosmos_proto/cosmos.proto | 16 - third_party/proto/gogoproto/gogo.proto | 145 - .../proto/google/api/annotations.proto | 31 - third_party/proto/google/api/http.proto | 318 -- third_party/proto/google/api/httpbody.proto | 78 - third_party/proto/google/protobuf/any.proto | 164 - .../protoc-gen-openapiv2/options/BUILD.bazel | 38 - .../options/annotations.pb.go | 241 -- .../options/annotations.proto | 44 - .../options/openapiv2.pb.go | 2780 ----------------- .../options/openapiv2.proto | 645 ---- third_party/proto/tendermint/abci/types.proto | 407 --- .../proto/tendermint/crypto/keys.proto | 17 - .../proto/tendermint/crypto/proof.proto | 41 - .../proto/tendermint/libs/bits/types.proto | 9 - third_party/proto/tendermint/p2p/types.proto | 34 - .../proto/tendermint/types/block.proto | 15 - .../proto/tendermint/types/evidence.proto | 38 - .../proto/tendermint/types/params.proto | 80 - .../proto/tendermint/types/types.proto | 157 - .../proto/tendermint/types/validator.proto | 25 - .../proto/tendermint/version/types.proto | 24 - 23 files changed, 5581 deletions(-) delete mode 100644 third_party/proto/confio/proofs.proto delete mode 100644 third_party/proto/cosmos_proto/cosmos.proto delete mode 100644 third_party/proto/gogoproto/gogo.proto delete mode 100644 third_party/proto/google/api/annotations.proto delete mode 100644 third_party/proto/google/api/http.proto delete mode 100644 third_party/proto/google/api/httpbody.proto delete mode 100644 third_party/proto/google/protobuf/any.proto delete mode 100644 third_party/proto/protoc-gen-openapiv2/options/BUILD.bazel delete mode 100644 third_party/proto/protoc-gen-openapiv2/options/annotations.pb.go delete mode 100644 third_party/proto/protoc-gen-openapiv2/options/annotations.proto delete mode 100644 third_party/proto/protoc-gen-openapiv2/options/openapiv2.pb.go delete mode 100644 third_party/proto/protoc-gen-openapiv2/options/openapiv2.proto delete mode 100644 third_party/proto/tendermint/abci/types.proto delete mode 100644 third_party/proto/tendermint/crypto/keys.proto delete mode 100644 third_party/proto/tendermint/crypto/proof.proto delete mode 100644 third_party/proto/tendermint/libs/bits/types.proto delete mode 100644 third_party/proto/tendermint/p2p/types.proto delete mode 100644 third_party/proto/tendermint/types/block.proto delete mode 100644 third_party/proto/tendermint/types/evidence.proto delete mode 100644 third_party/proto/tendermint/types/params.proto delete mode 100644 third_party/proto/tendermint/types/types.proto delete mode 100644 third_party/proto/tendermint/types/validator.proto delete mode 100644 third_party/proto/tendermint/version/types.proto diff --git a/third_party/proto/confio/proofs.proto b/third_party/proto/confio/proofs.proto deleted file mode 100644 index da43503ec..000000000 --- a/third_party/proto/confio/proofs.proto +++ /dev/null @@ -1,234 +0,0 @@ -syntax = "proto3"; - -package ics23; -option go_package = "github.com/confio/ics23/go"; - -enum HashOp { - // NO_HASH is the default if no data passed. Note this is an illegal argument some places. - NO_HASH = 0; - SHA256 = 1; - SHA512 = 2; - KECCAK = 3; - RIPEMD160 = 4; - BITCOIN = 5; // ripemd160(sha256(x)) -} - -/** -LengthOp defines how to process the key and value of the LeafOp -to include length information. After encoding the length with the given -algorithm, the length will be prepended to the key and value bytes. -(Each one with it's own encoded length) -*/ -enum LengthOp { - // NO_PREFIX don't include any length info - NO_PREFIX = 0; - // VAR_PROTO uses protobuf (and go-amino) varint encoding of the length - VAR_PROTO = 1; - // VAR_RLP uses rlp int encoding of the length - VAR_RLP = 2; - // FIXED32_BIG uses big-endian encoding of the length as a 32 bit integer - FIXED32_BIG = 3; - // FIXED32_LITTLE uses little-endian encoding of the length as a 32 bit integer - FIXED32_LITTLE = 4; - // FIXED64_BIG uses big-endian encoding of the length as a 64 bit integer - FIXED64_BIG = 5; - // FIXED64_LITTLE uses little-endian encoding of the length as a 64 bit integer - FIXED64_LITTLE = 6; - // REQUIRE_32_BYTES is like NONE, but will fail if the input is not exactly 32 bytes (sha256 output) - REQUIRE_32_BYTES = 7; - // REQUIRE_64_BYTES is like NONE, but will fail if the input is not exactly 64 bytes (sha512 output) - REQUIRE_64_BYTES = 8; -} - -/** -ExistenceProof takes a key and a value and a set of steps to perform on it. -The result of peforming all these steps will provide a "root hash", which can -be compared to the value in a header. - -Since it is computationally infeasible to produce a hash collission for any of the used -cryptographic hash functions, if someone can provide a series of operations to transform -a given key and value into a root hash that matches some trusted root, these key and values -must be in the referenced merkle tree. - -The only possible issue is maliablity in LeafOp, such as providing extra prefix data, -which should be controlled by a spec. Eg. with lengthOp as NONE, - prefix = FOO, key = BAR, value = CHOICE -and - prefix = F, key = OOBAR, value = CHOICE -would produce the same value. - -With LengthOp this is tricker but not impossible. Which is why the "leafPrefixEqual" field -in the ProofSpec is valuable to prevent this mutability. And why all trees should -length-prefix the data before hashing it. -*/ -message ExistenceProof { - bytes key = 1; - bytes value = 2; - LeafOp leaf = 3; - repeated InnerOp path = 4; -} - -/* -NonExistenceProof takes a proof of two neighbors, one left of the desired key, -one right of the desired key. If both proofs are valid AND they are neighbors, -then there is no valid proof for the given key. -*/ -message NonExistenceProof { - bytes key = 1; // TODO: remove this as unnecessary??? we prove a range - ExistenceProof left = 2; - ExistenceProof right = 3; -} - -/* -CommitmentProof is either an ExistenceProof or a NonExistenceProof, or a Batch of such messages -*/ -message CommitmentProof { - oneof proof { - ExistenceProof exist = 1; - NonExistenceProof nonexist = 2; - BatchProof batch = 3; - CompressedBatchProof compressed = 4; - } -} - -/** -LeafOp represents the raw key-value data we wish to prove, and -must be flexible to represent the internal transformation from -the original key-value pairs into the basis hash, for many existing -merkle trees. - -key and value are passed in. So that the signature of this operation is: - leafOp(key, value) -> output - -To process this, first prehash the keys and values if needed (ANY means no hash in this case): - hkey = prehashKey(key) - hvalue = prehashValue(value) - -Then combine the bytes, and hash it - output = hash(prefix || length(hkey) || hkey || length(hvalue) || hvalue) -*/ -message LeafOp { - HashOp hash = 1; - HashOp prehash_key = 2; - HashOp prehash_value = 3; - LengthOp length = 4; - // prefix is a fixed bytes that may optionally be included at the beginning to differentiate - // a leaf node from an inner node. - bytes prefix = 5; -} - -/** -InnerOp represents a merkle-proof step that is not a leaf. -It represents concatenating two children and hashing them to provide the next result. - -The result of the previous step is passed in, so the signature of this op is: - innerOp(child) -> output - -The result of applying InnerOp should be: - output = op.hash(op.prefix || child || op.suffix) - - where the || operator is concatenation of binary data, -and child is the result of hashing all the tree below this step. - -Any special data, like prepending child with the length, or prepending the entire operation with -some value to differentiate from leaf nodes, should be included in prefix and suffix. -If either of prefix or suffix is empty, we just treat it as an empty string -*/ -message InnerOp { - HashOp hash = 1; - bytes prefix = 2; - bytes suffix = 3; -} - - -/** -ProofSpec defines what the expected parameters are for a given proof type. -This can be stored in the client and used to validate any incoming proofs. - - verify(ProofSpec, Proof) -> Proof | Error - -As demonstrated in tests, if we don't fix the algorithm used to calculate the -LeafHash for a given tree, there are many possible key-value pairs that can -generate a given hash (by interpretting the preimage differently). -We need this for proper security, requires client knows a priori what -tree format server uses. But not in code, rather a configuration object. -*/ -message ProofSpec { - // any field in the ExistenceProof must be the same as in this spec. - // except Prefix, which is just the first bytes of prefix (spec can be longer) - LeafOp leaf_spec = 1; - InnerSpec inner_spec = 2; - // max_depth (if > 0) is the maximum number of InnerOps allowed (mainly for fixed-depth tries) - int32 max_depth = 3; - // min_depth (if > 0) is the minimum number of InnerOps allowed (mainly for fixed-depth tries) - int32 min_depth = 4; -} - -/* -InnerSpec contains all store-specific structure info to determine if two proofs from a -given store are neighbors. - -This enables: - - isLeftMost(spec: InnerSpec, op: InnerOp) - isRightMost(spec: InnerSpec, op: InnerOp) - isLeftNeighbor(spec: InnerSpec, left: InnerOp, right: InnerOp) -*/ -message InnerSpec { - // Child order is the ordering of the children node, must count from 0 - // iavl tree is [0, 1] (left then right) - // merk is [0, 2, 1] (left, right, here) - repeated int32 child_order = 1; - int32 child_size = 2; - int32 min_prefix_length = 3; - int32 max_prefix_length = 4; - // empty child is the prehash image that is used when one child is nil (eg. 20 bytes of 0) - bytes empty_child = 5; - // hash is the algorithm that must be used for each InnerOp - HashOp hash = 6; -} - -/* -BatchProof is a group of multiple proof types than can be compressed -*/ -message BatchProof { - repeated BatchEntry entries = 1; -} - -// Use BatchEntry not CommitmentProof, to avoid recursion -message BatchEntry { - oneof proof { - ExistenceProof exist = 1; - NonExistenceProof nonexist = 2; - } -} - - -/****** all items here are compressed forms *******/ - -message CompressedBatchProof { - repeated CompressedBatchEntry entries = 1; - repeated InnerOp lookup_inners = 2; -} - -// Use BatchEntry not CommitmentProof, to avoid recursion -message CompressedBatchEntry { - oneof proof { - CompressedExistenceProof exist = 1; - CompressedNonExistenceProof nonexist = 2; - } -} - -message CompressedExistenceProof { - bytes key = 1; - bytes value = 2; - LeafOp leaf = 3; - // these are indexes into the lookup_inners table in CompressedBatchProof - repeated int32 path = 4; -} - -message CompressedNonExistenceProof { - bytes key = 1; // TODO: remove this as unnecessary??? we prove a range - CompressedExistenceProof left = 2; - CompressedExistenceProof right = 3; -} diff --git a/third_party/proto/cosmos_proto/cosmos.proto b/third_party/proto/cosmos_proto/cosmos.proto deleted file mode 100644 index 167b17075..000000000 --- a/third_party/proto/cosmos_proto/cosmos.proto +++ /dev/null @@ -1,16 +0,0 @@ -syntax = "proto3"; -package cosmos_proto; - -import "google/protobuf/descriptor.proto"; - -option go_package = "github.com/regen-network/cosmos-proto"; - -extend google.protobuf.MessageOptions { - string interface_type = 93001; - - string implements_interface = 93002; -} - -extend google.protobuf.FieldOptions { - string accepts_interface = 93001; -} diff --git a/third_party/proto/gogoproto/gogo.proto b/third_party/proto/gogoproto/gogo.proto deleted file mode 100644 index 49e78f99f..000000000 --- a/third_party/proto/gogoproto/gogo.proto +++ /dev/null @@ -1,145 +0,0 @@ -// Protocol Buffers for Go with Gadgets -// -// Copyright (c) 2013, The GoGo Authors. All rights reserved. -// http://github.com/gogo/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto2"; -package gogoproto; - -import "google/protobuf/descriptor.proto"; - -option java_package = "com.google.protobuf"; -option java_outer_classname = "GoGoProtos"; -option go_package = "github.com/gogo/protobuf/gogoproto"; - -extend google.protobuf.EnumOptions { - optional bool goproto_enum_prefix = 62001; - optional bool goproto_enum_stringer = 62021; - optional bool enum_stringer = 62022; - optional string enum_customname = 62023; - optional bool enumdecl = 62024; -} - -extend google.protobuf.EnumValueOptions { - optional string enumvalue_customname = 66001; -} - -extend google.protobuf.FileOptions { - optional bool goproto_getters_all = 63001; - optional bool goproto_enum_prefix_all = 63002; - optional bool goproto_stringer_all = 63003; - optional bool verbose_equal_all = 63004; - optional bool face_all = 63005; - optional bool gostring_all = 63006; - optional bool populate_all = 63007; - optional bool stringer_all = 63008; - optional bool onlyone_all = 63009; - - optional bool equal_all = 63013; - optional bool description_all = 63014; - optional bool testgen_all = 63015; - optional bool benchgen_all = 63016; - optional bool marshaler_all = 63017; - optional bool unmarshaler_all = 63018; - optional bool stable_marshaler_all = 63019; - - optional bool sizer_all = 63020; - - optional bool goproto_enum_stringer_all = 63021; - optional bool enum_stringer_all = 63022; - - optional bool unsafe_marshaler_all = 63023; - optional bool unsafe_unmarshaler_all = 63024; - - optional bool goproto_extensions_map_all = 63025; - optional bool goproto_unrecognized_all = 63026; - optional bool gogoproto_import = 63027; - optional bool protosizer_all = 63028; - optional bool compare_all = 63029; - optional bool typedecl_all = 63030; - optional bool enumdecl_all = 63031; - - optional bool goproto_registration = 63032; - optional bool messagename_all = 63033; - - optional bool goproto_sizecache_all = 63034; - optional bool goproto_unkeyed_all = 63035; -} - -extend google.protobuf.MessageOptions { - optional bool goproto_getters = 64001; - optional bool goproto_stringer = 64003; - optional bool verbose_equal = 64004; - optional bool face = 64005; - optional bool gostring = 64006; - optional bool populate = 64007; - optional bool stringer = 67008; - optional bool onlyone = 64009; - - optional bool equal = 64013; - optional bool description = 64014; - optional bool testgen = 64015; - optional bool benchgen = 64016; - optional bool marshaler = 64017; - optional bool unmarshaler = 64018; - optional bool stable_marshaler = 64019; - - optional bool sizer = 64020; - - optional bool unsafe_marshaler = 64023; - optional bool unsafe_unmarshaler = 64024; - - optional bool goproto_extensions_map = 64025; - optional bool goproto_unrecognized = 64026; - - optional bool protosizer = 64028; - optional bool compare = 64029; - - optional bool typedecl = 64030; - - optional bool messagename = 64033; - - optional bool goproto_sizecache = 64034; - optional bool goproto_unkeyed = 64035; -} - -extend google.protobuf.FieldOptions { - optional bool nullable = 65001; - optional bool embed = 65002; - optional string customtype = 65003; - optional string customname = 65004; - optional string jsontag = 65005; - optional string moretags = 65006; - optional string casttype = 65007; - optional string castkey = 65008; - optional string castvalue = 65009; - - optional bool stdtime = 65010; - optional bool stdduration = 65011; - optional bool wktpointer = 65012; - - optional string castrepeated = 65013; -} diff --git a/third_party/proto/google/api/annotations.proto b/third_party/proto/google/api/annotations.proto deleted file mode 100644 index 85c361b47..000000000 --- a/third_party/proto/google/api/annotations.proto +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2015, Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/api/http.proto"; -import "google/protobuf/descriptor.proto"; - -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "AnnotationsProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -extend google.protobuf.MethodOptions { - // See `HttpRule`. - HttpRule http = 72295728; -} diff --git a/third_party/proto/google/api/http.proto b/third_party/proto/google/api/http.proto deleted file mode 100644 index 2bd3a19bf..000000000 --- a/third_party/proto/google/api/http.proto +++ /dev/null @@ -1,318 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -option cc_enable_arenas = true; -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "HttpProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - - -// Defines the HTTP configuration for an API service. It contains a list of -// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method -// to one or more HTTP REST API methods. -message Http { - // A list of HTTP configuration rules that apply to individual API methods. - // - // **NOTE:** All service configuration rules follow "last one wins" order. - repeated HttpRule rules = 1; - - // When set to true, URL path parmeters will be fully URI-decoded except in - // cases of single segment matches in reserved expansion, where "%2F" will be - // left encoded. - // - // The default behavior is to not decode RFC 6570 reserved characters in multi - // segment matches. - bool fully_decode_reserved_expansion = 2; -} - -// `HttpRule` defines the mapping of an RPC method to one or more HTTP -// REST API methods. The mapping specifies how different portions of the RPC -// request message are mapped to URL path, URL query parameters, and -// HTTP request body. The mapping is typically specified as an -// `google.api.http` annotation on the RPC method, -// see "google/api/annotations.proto" for details. -// -// The mapping consists of a field specifying the path template and -// method kind. The path template can refer to fields in the request -// message, as in the example below which describes a REST GET -// operation on a resource collection of messages: -// -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http).get = "/v1/messages/{message_id}/{sub.subfield}"; -// } -// } -// message GetMessageRequest { -// message SubMessage { -// string subfield = 1; -// } -// string message_id = 1; // mapped to the URL -// SubMessage sub = 2; // `sub.subfield` is url-mapped -// } -// message Message { -// string text = 1; // content of the resource -// } -// -// The same http annotation can alternatively be expressed inside the -// `GRPC API Configuration` YAML file. -// -// http: -// rules: -// - selector: .Messaging.GetMessage -// get: /v1/messages/{message_id}/{sub.subfield} -// -// This definition enables an automatic, bidrectional mapping of HTTP -// JSON to RPC. Example: -// -// HTTP | RPC -// -----|----- -// `GET /v1/messages/123456/foo` | `GetMessage(message_id: "123456" sub: SubMessage(subfield: "foo"))` -// -// In general, not only fields but also field paths can be referenced -// from a path pattern. Fields mapped to the path pattern cannot be -// repeated and must have a primitive (non-message) type. -// -// Any fields in the request message which are not bound by the path -// pattern automatically become (optional) HTTP query -// parameters. Assume the following definition of the request message: -// -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http).get = "/v1/messages/{message_id}"; -// } -// } -// message GetMessageRequest { -// message SubMessage { -// string subfield = 1; -// } -// string message_id = 1; // mapped to the URL -// int64 revision = 2; // becomes a parameter -// SubMessage sub = 3; // `sub.subfield` becomes a parameter -// } -// -// -// This enables a HTTP JSON to RPC mapping as below: -// -// HTTP | RPC -// -----|----- -// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: "foo"))` -// -// Note that fields which are mapped to HTTP parameters must have a -// primitive type or a repeated primitive type. Message types are not -// allowed. In the case of a repeated type, the parameter can be -// repeated in the URL, as in `...?param=A¶m=B`. -// -// For HTTP method kinds which allow a request body, the `body` field -// specifies the mapping. Consider a REST update method on the -// message resource collection: -// -// -// service Messaging { -// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { -// option (google.api.http) = { -// put: "/v1/messages/{message_id}" -// body: "message" -// }; -// } -// } -// message UpdateMessageRequest { -// string message_id = 1; // mapped to the URL -// Message message = 2; // mapped to the body -// } -// -// -// The following HTTP JSON to RPC mapping is enabled, where the -// representation of the JSON in the request body is determined by -// protos JSON encoding: -// -// HTTP | RPC -// -----|----- -// `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" message { text: "Hi!" })` -// -// The special name `*` can be used in the body mapping to define that -// every field not bound by the path template should be mapped to the -// request body. This enables the following alternative definition of -// the update method: -// -// service Messaging { -// rpc UpdateMessage(Message) returns (Message) { -// option (google.api.http) = { -// put: "/v1/messages/{message_id}" -// body: "*" -// }; -// } -// } -// message Message { -// string message_id = 1; -// string text = 2; -// } -// -// -// The following HTTP JSON to RPC mapping is enabled: -// -// HTTP | RPC -// -----|----- -// `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" text: "Hi!")` -// -// Note that when using `*` in the body mapping, it is not possible to -// have HTTP parameters, as all fields not bound by the path end in -// the body. This makes this option more rarely used in practice of -// defining REST APIs. The common usage of `*` is in custom methods -// which don't use the URL at all for transferring data. -// -// It is possible to define multiple HTTP methods for one RPC by using -// the `additional_bindings` option. Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/messages/{message_id}" -// additional_bindings { -// get: "/v1/users/{user_id}/messages/{message_id}" -// } -// }; -// } -// } -// message GetMessageRequest { -// string message_id = 1; -// string user_id = 2; -// } -// -// -// This enables the following two alternative HTTP JSON to RPC -// mappings: -// -// HTTP | RPC -// -----|----- -// `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` -// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: "123456")` -// -// # Rules for HTTP mapping -// -// The rules for mapping HTTP path, query parameters, and body fields -// to the request message are as follows: -// -// 1. The `body` field specifies either `*` or a field path, or is -// omitted. If omitted, it indicates there is no HTTP request body. -// 2. Leaf fields (recursive expansion of nested messages in the -// request) can be classified into three types: -// (a) Matched in the URL template. -// (b) Covered by body (if body is `*`, everything except (a) fields; -// else everything under the body field) -// (c) All other fields. -// 3. URL query parameters found in the HTTP request are mapped to (c) fields. -// 4. Any body sent with an HTTP request can contain only (b) fields. -// -// The syntax of the path template is as follows: -// -// Template = "/" Segments [ Verb ] ; -// Segments = Segment { "/" Segment } ; -// Segment = "*" | "**" | LITERAL | Variable ; -// Variable = "{" FieldPath [ "=" Segments ] "}" ; -// FieldPath = IDENT { "." IDENT } ; -// Verb = ":" LITERAL ; -// -// The syntax `*` matches a single path segment. The syntax `**` matches zero -// or more path segments, which must be the last part of the path except the -// `Verb`. The syntax `LITERAL` matches literal text in the path. -// -// The syntax `Variable` matches part of the URL path as specified by its -// template. A variable template must not contain other variables. If a variable -// matches a single path segment, its template may be omitted, e.g. `{var}` -// is equivalent to `{var=*}`. -// -// If a variable contains exactly one path segment, such as `"{var}"` or -// `"{var=*}"`, when such a variable is expanded into a URL path, all characters -// except `[-_.~0-9a-zA-Z]` are percent-encoded. Such variables show up in the -// Discovery Document as `{var}`. -// -// If a variable contains one or more path segments, such as `"{var=foo/*}"` -// or `"{var=**}"`, when such a variable is expanded into a URL path, all -// characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. Such variables -// show up in the Discovery Document as `{+var}`. -// -// NOTE: While the single segment variable matches the semantics of -// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 -// Simple String Expansion, the multi segment variable **does not** match -// RFC 6570 Reserved Expansion. The reason is that the Reserved Expansion -// does not expand special characters like `?` and `#`, which would lead -// to invalid URLs. -// -// NOTE: the field paths in variables and in the `body` must not refer to -// repeated fields or map fields. -message HttpRule { - // Selects methods to which this rule applies. - // - // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. - string selector = 1; - - // Determines the URL pattern is matched by this rules. This pattern can be - // used with any of the {get|put|post|delete|patch} methods. A custom method - // can be defined using the 'custom' field. - oneof pattern { - // Used for listing and getting information about resources. - string get = 2; - - // Used for updating a resource. - string put = 3; - - // Used for creating a resource. - string post = 4; - - // Used for deleting a resource. - string delete = 5; - - // Used for updating a resource. - string patch = 6; - - // The custom pattern is used for specifying an HTTP method that is not - // included in the `pattern` field, such as HEAD, or "*" to leave the - // HTTP method unspecified for this rule. The wild-card rule is useful - // for services that provide content to Web (HTML) clients. - CustomHttpPattern custom = 8; - } - - // The name of the request field whose value is mapped to the HTTP body, or - // `*` for mapping all fields not captured by the path pattern to the HTTP - // body. NOTE: the referred field must not be a repeated field and must be - // present at the top-level of request message type. - string body = 7; - - // Optional. The name of the response field whose value is mapped to the HTTP - // body of response. Other response fields are ignored. When - // not set, the response message will be used as HTTP body of response. - string response_body = 12; - - // Additional HTTP bindings for the selector. Nested bindings must - // not contain an `additional_bindings` field themselves (that is, - // the nesting may only be one level deep). - repeated HttpRule additional_bindings = 11; -} - -// A custom pattern is used for defining custom HTTP verb. -message CustomHttpPattern { - // The name of this custom HTTP verb. - string kind = 1; - - // The path matched by this custom verb. - string path = 2; -} diff --git a/third_party/proto/google/api/httpbody.proto b/third_party/proto/google/api/httpbody.proto deleted file mode 100644 index 4428515c1..000000000 --- a/third_party/proto/google/api/httpbody.proto +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2018 Google LLC. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -syntax = "proto3"; - -package google.api; - -import "google/protobuf/any.proto"; - -option cc_enable_arenas = true; -option go_package = "google.golang.org/genproto/googleapis/api/httpbody;httpbody"; -option java_multiple_files = true; -option java_outer_classname = "HttpBodyProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -// Message that represents an arbitrary HTTP body. It should only be used for -// payload formats that can't be represented as JSON, such as raw binary or -// an HTML page. -// -// -// This message can be used both in streaming and non-streaming API methods in -// the request as well as the response. -// -// It can be used as a top-level request field, which is convenient if one -// wants to extract parameters from either the URL or HTTP template into the -// request fields and also want access to the raw HTTP body. -// -// Example: -// -// message GetResourceRequest { -// // A unique request id. -// string request_id = 1; -// -// // The raw HTTP body is bound to this field. -// google.api.HttpBody http_body = 2; -// } -// -// service ResourceService { -// rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); -// rpc UpdateResource(google.api.HttpBody) returns -// (google.protobuf.Empty); -// } -// -// Example with streaming methods: -// -// service CaldavService { -// rpc GetCalendar(stream google.api.HttpBody) -// returns (stream google.api.HttpBody); -// rpc UpdateCalendar(stream google.api.HttpBody) -// returns (stream google.api.HttpBody); -// } -// -// Use of this type only changes how the request and response bodies are -// handled, all other features will continue to work unchanged. -message HttpBody { - // The HTTP Content-Type header value specifying the content type of the body. - string content_type = 1; - - // The HTTP request/response body as raw binary. - bytes data = 2; - - // Application specific response metadata. Must be set in the first response - // for streaming APIs. - repeated google.protobuf.Any extensions = 3; -} \ No newline at end of file diff --git a/third_party/proto/google/protobuf/any.proto b/third_party/proto/google/protobuf/any.proto deleted file mode 100644 index 58b511583..000000000 --- a/third_party/proto/google/protobuf/any.proto +++ /dev/null @@ -1,164 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -import "gogoproto/gogo.proto"; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option go_package = "types"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "AnyProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; - -// `Any` contains an arbitrary serialized protocol buffer message along with a -// URL that describes the type of the serialized message. -// -// Protobuf library provides support to pack/unpack Any values in the form -// of utility functions or additional generated methods of the Any type. -// -// Example 1: Pack and unpack a message in C++. -// -// Foo foo = ...; -// Any any; -// any.PackFrom(foo); -// ... -// if (any.UnpackTo(&foo)) { -// ... -// } -// -// Example 2: Pack and unpack a message in Java. -// -// Foo foo = ...; -// Any any = Any.pack(foo); -// ... -// if (any.is(Foo.class)) { -// foo = any.unpack(Foo.class); -// } -// -// Example 3: Pack and unpack a message in Python. -// -// foo = Foo(...) -// any = Any() -// any.Pack(foo) -// ... -// if any.Is(Foo.DESCRIPTOR): -// any.Unpack(foo) -// ... -// -// Example 4: Pack and unpack a message in Go -// -// foo := &pb.Foo{...} -// any, err := ptypes.MarshalAny(foo) -// ... -// foo := &pb.Foo{} -// if err := ptypes.UnmarshalAny(any, foo); err != nil { -// ... -// } -// -// The pack methods provided by protobuf library will by default use -// 'type.googleapis.com/full.type.name' as the type URL and the unpack -// methods only use the fully qualified type name after the last '/' -// in the type URL, for example "foo.bar.com/x/y.z" will yield type -// name "y.z". -// -// -// JSON -// ==== -// The JSON representation of an `Any` value uses the regular -// representation of the deserialized, embedded message, with an -// additional field `@type` which contains the type URL. Example: -// -// package google.profile; -// message Person { -// string first_name = 1; -// string last_name = 2; -// } -// -// { -// "@type": "type.googleapis.com/google.profile.Person", -// "firstName": , -// "lastName": -// } -// -// If the embedded message type is well-known and has a custom JSON -// representation, that representation will be embedded adding a field -// `value` which holds the custom JSON in addition to the `@type` -// field. Example (for message [google.protobuf.Duration][]): -// -// { -// "@type": "type.googleapis.com/google.protobuf.Duration", -// "value": "1.212s" -// } -// -message Any { - // A URL/resource name that uniquely identifies the type of the serialized - // protocol buffer message. This string must contain at least - // one "/" character. The last segment of the URL's path must represent - // the fully qualified name of the type (as in - // `path/google.protobuf.Duration`). The name should be in a canonical form - // (e.g., leading "." is not accepted). - // - // In practice, teams usually precompile into the binary all types that they - // expect it to use in the context of Any. However, for URLs which use the - // scheme `http`, `https`, or no scheme, one can optionally set up a type - // server that maps type URLs to message definitions as follows: - // - // * If no scheme is provided, `https` is assumed. - // * An HTTP GET on the URL must yield a [google.protobuf.Type][] - // value in binary format, or produce an error. - // * Applications are allowed to cache lookup results based on the - // URL, or have them precompiled into a binary to avoid any - // lookup. Therefore, binary compatibility needs to be preserved - // on changes to types. (Use versioned type names to manage - // breaking changes.) - // - // Note: this functionality is not currently available in the official - // protobuf release, and it is not used for type URLs beginning with - // type.googleapis.com. - // - // Schemes other than `http`, `https` (or the empty scheme) might be - // used with implementation specific semantics. - // - string type_url = 1; - - // Must be a valid serialized protocol buffer of the above specified type. - bytes value = 2; - - option (gogoproto.typedecl) = false; - option (gogoproto.goproto_stringer) = false; - option (gogoproto.gostring) = false; - option (gogoproto.stringer) = false; -} - -option (gogoproto.goproto_registration) = false; diff --git a/third_party/proto/protoc-gen-openapiv2/options/BUILD.bazel b/third_party/proto/protoc-gen-openapiv2/options/BUILD.bazel deleted file mode 100644 index 363699941..000000000 --- a/third_party/proto/protoc-gen-openapiv2/options/BUILD.bazel +++ /dev/null @@ -1,38 +0,0 @@ -load("@rules_proto//proto:defs.bzl", "proto_library") -load("@io_bazel_rules_go//go:def.bzl", "go_library") -load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") - -package(default_visibility = ["//visibility:public"]) - -filegroup( - name = "options_proto_files", - srcs = [ - "annotations.proto", - "openapiv2.proto", - ], -) - -go_library( - name = "go_default_library", - embed = [":options_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options", -) - -proto_library( - name = "options_proto", - srcs = [ - "annotations.proto", - "openapiv2.proto", - ], - deps = [ - "@com_google_protobuf//:descriptor_proto", - "@com_google_protobuf//:struct_proto", - ], -) - -go_proto_library( - name = "options_go_proto", - compilers = ["//:go_apiv2"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options", - proto = ":options_proto", -) diff --git a/third_party/proto/protoc-gen-openapiv2/options/annotations.pb.go b/third_party/proto/protoc-gen-openapiv2/options/annotations.pb.go deleted file mode 100644 index dbe535168..000000000 --- a/third_party/proto/protoc-gen-openapiv2/options/annotations.pb.go +++ /dev/null @@ -1,241 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 -// source: protoc-gen-openapiv2/options/annotations.proto - -package options - -import ( - proto "github.com/golang/protobuf/proto" - descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -var file_protoc_gen_openapiv2_options_annotations_proto_extTypes = []protoimpl.ExtensionInfo{ - { - ExtendedType: (*descriptor.FileOptions)(nil), - ExtensionType: (*Swagger)(nil), - Field: 1042, - Name: "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger", - Tag: "bytes,1042,opt,name=openapiv2_swagger", - Filename: "protoc-gen-openapiv2/options/annotations.proto", - }, - { - ExtendedType: (*descriptor.MethodOptions)(nil), - ExtensionType: (*Operation)(nil), - Field: 1042, - Name: "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation", - Tag: "bytes,1042,opt,name=openapiv2_operation", - Filename: "protoc-gen-openapiv2/options/annotations.proto", - }, - { - ExtendedType: (*descriptor.MessageOptions)(nil), - ExtensionType: (*Schema)(nil), - Field: 1042, - Name: "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema", - Tag: "bytes,1042,opt,name=openapiv2_schema", - Filename: "protoc-gen-openapiv2/options/annotations.proto", - }, - { - ExtendedType: (*descriptor.ServiceOptions)(nil), - ExtensionType: (*Tag)(nil), - Field: 1042, - Name: "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag", - Tag: "bytes,1042,opt,name=openapiv2_tag", - Filename: "protoc-gen-openapiv2/options/annotations.proto", - }, - { - ExtendedType: (*descriptor.FieldOptions)(nil), - ExtensionType: (*JSONSchema)(nil), - Field: 1042, - Name: "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field", - Tag: "bytes,1042,opt,name=openapiv2_field", - Filename: "protoc-gen-openapiv2/options/annotations.proto", - }, -} - -// Extension fields to descriptor.FileOptions. -var ( - // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. - // - // All IDs are the same, as assigned. It is okay that they are the same, as they extend - // different descriptor messages. - // - // optional grpc.gateway.protoc_gen_openapiv2.options.Swagger openapiv2_swagger = 1042; - E_Openapiv2Swagger = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[0] -) - -// Extension fields to descriptor.MethodOptions. -var ( - // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. - // - // All IDs are the same, as assigned. It is okay that they are the same, as they extend - // different descriptor messages. - // - // optional grpc.gateway.protoc_gen_openapiv2.options.Operation openapiv2_operation = 1042; - E_Openapiv2Operation = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[1] -) - -// Extension fields to descriptor.MessageOptions. -var ( - // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. - // - // All IDs are the same, as assigned. It is okay that they are the same, as they extend - // different descriptor messages. - // - // optional grpc.gateway.protoc_gen_openapiv2.options.Schema openapiv2_schema = 1042; - E_Openapiv2Schema = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[2] -) - -// Extension fields to descriptor.ServiceOptions. -var ( - // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. - // - // All IDs are the same, as assigned. It is okay that they are the same, as they extend - // different descriptor messages. - // - // optional grpc.gateway.protoc_gen_openapiv2.options.Tag openapiv2_tag = 1042; - E_Openapiv2Tag = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[3] -) - -// Extension fields to descriptor.FieldOptions. -var ( - // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. - // - // All IDs are the same, as assigned. It is okay that they are the same, as they extend - // different descriptor messages. - // - // optional grpc.gateway.protoc_gen_openapiv2.options.JSONSchema openapiv2_field = 1042; - E_Openapiv2Field = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[4] -) - -var File_protoc_gen_openapiv2_options_annotations_proto protoreflect.FileDescriptor - -var file_protoc_gen_openapiv2_options_annotations_proto_rawDesc = []byte{ - 0x0a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, - 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x29, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, - 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x20, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, - 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, - 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3a, 0x7e, 0x0a, 0x11, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, - 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, - 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x3a, 0x86, 0x01, 0x0a, 0x13, - 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x12, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x7e, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, - 0x32, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x3a, 0x75, 0x0a, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, - 0x32, 0x5f, 0x74, 0x61, 0x67, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, - 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x0c, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x54, 0x61, 0x67, 0x3a, 0x7e, 0x0a, 0x0f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1d, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0e, 0x6f, 0x70, 0x65, - 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x48, 0x5a, 0x46, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, - 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, - 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var file_protoc_gen_openapiv2_options_annotations_proto_goTypes = []interface{}{ - (*descriptor.FileOptions)(nil), // 0: google.protobuf.FileOptions - (*descriptor.MethodOptions)(nil), // 1: google.protobuf.MethodOptions - (*descriptor.MessageOptions)(nil), // 2: google.protobuf.MessageOptions - (*descriptor.ServiceOptions)(nil), // 3: google.protobuf.ServiceOptions - (*descriptor.FieldOptions)(nil), // 4: google.protobuf.FieldOptions - (*Swagger)(nil), // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger - (*Operation)(nil), // 6: grpc.gateway.protoc_gen_openapiv2.options.Operation - (*Schema)(nil), // 7: grpc.gateway.protoc_gen_openapiv2.options.Schema - (*Tag)(nil), // 8: grpc.gateway.protoc_gen_openapiv2.options.Tag - (*JSONSchema)(nil), // 9: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema -} -var file_protoc_gen_openapiv2_options_annotations_proto_depIdxs = []int32{ - 0, // 0: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger:extendee -> google.protobuf.FileOptions - 1, // 1: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation:extendee -> google.protobuf.MethodOptions - 2, // 2: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema:extendee -> google.protobuf.MessageOptions - 3, // 3: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag:extendee -> google.protobuf.ServiceOptions - 4, // 4: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field:extendee -> google.protobuf.FieldOptions - 5, // 5: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger - 6, // 6: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation - 7, // 7: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema - 8, // 8: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag - 9, // 9: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema - 10, // [10:10] is the sub-list for method output_type - 10, // [10:10] is the sub-list for method input_type - 5, // [5:10] is the sub-list for extension type_name - 0, // [0:5] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_protoc_gen_openapiv2_options_annotations_proto_init() } -func file_protoc_gen_openapiv2_options_annotations_proto_init() { - if File_protoc_gen_openapiv2_options_annotations_proto != nil { - return - } - file_protoc_gen_openapiv2_options_openapiv2_proto_init() - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_protoc_gen_openapiv2_options_annotations_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 5, - NumServices: 0, - }, - GoTypes: file_protoc_gen_openapiv2_options_annotations_proto_goTypes, - DependencyIndexes: file_protoc_gen_openapiv2_options_annotations_proto_depIdxs, - ExtensionInfos: file_protoc_gen_openapiv2_options_annotations_proto_extTypes, - }.Build() - File_protoc_gen_openapiv2_options_annotations_proto = out.File - file_protoc_gen_openapiv2_options_annotations_proto_rawDesc = nil - file_protoc_gen_openapiv2_options_annotations_proto_goTypes = nil - file_protoc_gen_openapiv2_options_annotations_proto_depIdxs = nil -} diff --git a/third_party/proto/protoc-gen-openapiv2/options/annotations.proto b/third_party/proto/protoc-gen-openapiv2/options/annotations.proto deleted file mode 100644 index 1c189e206..000000000 --- a/third_party/proto/protoc-gen-openapiv2/options/annotations.proto +++ /dev/null @@ -1,44 +0,0 @@ -syntax = "proto3"; - -package grpc.gateway.protoc_gen_openapiv2.options; - -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"; - -import "google/protobuf/descriptor.proto"; -import "protoc-gen-openapiv2/options/openapiv2.proto"; - -extend google.protobuf.FileOptions { - // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. - // - // All IDs are the same, as assigned. It is okay that they are the same, as they extend - // different descriptor messages. - Swagger openapiv2_swagger = 1042; -} -extend google.protobuf.MethodOptions { - // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. - // - // All IDs are the same, as assigned. It is okay that they are the same, as they extend - // different descriptor messages. - Operation openapiv2_operation = 1042; -} -extend google.protobuf.MessageOptions { - // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. - // - // All IDs are the same, as assigned. It is okay that they are the same, as they extend - // different descriptor messages. - Schema openapiv2_schema = 1042; -} -extend google.protobuf.ServiceOptions { - // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. - // - // All IDs are the same, as assigned. It is okay that they are the same, as they extend - // different descriptor messages. - Tag openapiv2_tag = 1042; -} -extend google.protobuf.FieldOptions { - // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. - // - // All IDs are the same, as assigned. It is okay that they are the same, as they extend - // different descriptor messages. - JSONSchema openapiv2_field = 1042; -} diff --git a/third_party/proto/protoc-gen-openapiv2/options/openapiv2.pb.go b/third_party/proto/protoc-gen-openapiv2/options/openapiv2.pb.go deleted file mode 100644 index 69ca57764..000000000 --- a/third_party/proto/protoc-gen-openapiv2/options/openapiv2.pb.go +++ /dev/null @@ -1,2780 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 -// source: protoc-gen-openapiv2/options/openapiv2.proto - -package options - -import ( - proto "github.com/golang/protobuf/proto" - _struct "github.com/golang/protobuf/ptypes/struct" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -// Scheme describes the schemes supported by the OpenAPI Swagger -// and Operation objects. -type Scheme int32 - -const ( - Scheme_UNKNOWN Scheme = 0 - Scheme_HTTP Scheme = 1 - Scheme_HTTPS Scheme = 2 - Scheme_WS Scheme = 3 - Scheme_WSS Scheme = 4 -) - -// Enum value maps for Scheme. -var ( - Scheme_name = map[int32]string{ - 0: "UNKNOWN", - 1: "HTTP", - 2: "HTTPS", - 3: "WS", - 4: "WSS", - } - Scheme_value = map[string]int32{ - "UNKNOWN": 0, - "HTTP": 1, - "HTTPS": 2, - "WS": 3, - "WSS": 4, - } -) - -func (x Scheme) Enum() *Scheme { - p := new(Scheme) - *p = x - return p -} - -func (x Scheme) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Scheme) Descriptor() protoreflect.EnumDescriptor { - return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[0].Descriptor() -} - -func (Scheme) Type() protoreflect.EnumType { - return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[0] -} - -func (x Scheme) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Scheme.Descriptor instead. -func (Scheme) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{0} -} - -type JSONSchema_JSONSchemaSimpleTypes int32 - -const ( - JSONSchema_UNKNOWN JSONSchema_JSONSchemaSimpleTypes = 0 - JSONSchema_ARRAY JSONSchema_JSONSchemaSimpleTypes = 1 - JSONSchema_BOOLEAN JSONSchema_JSONSchemaSimpleTypes = 2 - JSONSchema_INTEGER JSONSchema_JSONSchemaSimpleTypes = 3 - JSONSchema_NULL JSONSchema_JSONSchemaSimpleTypes = 4 - JSONSchema_NUMBER JSONSchema_JSONSchemaSimpleTypes = 5 - JSONSchema_OBJECT JSONSchema_JSONSchemaSimpleTypes = 6 - JSONSchema_STRING JSONSchema_JSONSchemaSimpleTypes = 7 -) - -// Enum value maps for JSONSchema_JSONSchemaSimpleTypes. -var ( - JSONSchema_JSONSchemaSimpleTypes_name = map[int32]string{ - 0: "UNKNOWN", - 1: "ARRAY", - 2: "BOOLEAN", - 3: "INTEGER", - 4: "NULL", - 5: "NUMBER", - 6: "OBJECT", - 7: "STRING", - } - JSONSchema_JSONSchemaSimpleTypes_value = map[string]int32{ - "UNKNOWN": 0, - "ARRAY": 1, - "BOOLEAN": 2, - "INTEGER": 3, - "NULL": 4, - "NUMBER": 5, - "OBJECT": 6, - "STRING": 7, - } -) - -func (x JSONSchema_JSONSchemaSimpleTypes) Enum() *JSONSchema_JSONSchemaSimpleTypes { - p := new(JSONSchema_JSONSchemaSimpleTypes) - *p = x - return p -} - -func (x JSONSchema_JSONSchemaSimpleTypes) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (JSONSchema_JSONSchemaSimpleTypes) Descriptor() protoreflect.EnumDescriptor { - return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[1].Descriptor() -} - -func (JSONSchema_JSONSchemaSimpleTypes) Type() protoreflect.EnumType { - return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[1] -} - -func (x JSONSchema_JSONSchemaSimpleTypes) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use JSONSchema_JSONSchemaSimpleTypes.Descriptor instead. -func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{9, 0} -} - -// The type of the security scheme. Valid values are "basic", -// "apiKey" or "oauth2". -type SecurityScheme_Type int32 - -const ( - SecurityScheme_TYPE_INVALID SecurityScheme_Type = 0 - SecurityScheme_TYPE_BASIC SecurityScheme_Type = 1 - SecurityScheme_TYPE_API_KEY SecurityScheme_Type = 2 - SecurityScheme_TYPE_OAUTH2 SecurityScheme_Type = 3 -) - -// Enum value maps for SecurityScheme_Type. -var ( - SecurityScheme_Type_name = map[int32]string{ - 0: "TYPE_INVALID", - 1: "TYPE_BASIC", - 2: "TYPE_API_KEY", - 3: "TYPE_OAUTH2", - } - SecurityScheme_Type_value = map[string]int32{ - "TYPE_INVALID": 0, - "TYPE_BASIC": 1, - "TYPE_API_KEY": 2, - "TYPE_OAUTH2": 3, - } -) - -func (x SecurityScheme_Type) Enum() *SecurityScheme_Type { - p := new(SecurityScheme_Type) - *p = x - return p -} - -func (x SecurityScheme_Type) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (SecurityScheme_Type) Descriptor() protoreflect.EnumDescriptor { - return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[2].Descriptor() -} - -func (SecurityScheme_Type) Type() protoreflect.EnumType { - return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[2] -} - -func (x SecurityScheme_Type) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use SecurityScheme_Type.Descriptor instead. -func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12, 0} -} - -// The location of the API key. Valid values are "query" or "header". -type SecurityScheme_In int32 - -const ( - SecurityScheme_IN_INVALID SecurityScheme_In = 0 - SecurityScheme_IN_QUERY SecurityScheme_In = 1 - SecurityScheme_IN_HEADER SecurityScheme_In = 2 -) - -// Enum value maps for SecurityScheme_In. -var ( - SecurityScheme_In_name = map[int32]string{ - 0: "IN_INVALID", - 1: "IN_QUERY", - 2: "IN_HEADER", - } - SecurityScheme_In_value = map[string]int32{ - "IN_INVALID": 0, - "IN_QUERY": 1, - "IN_HEADER": 2, - } -) - -func (x SecurityScheme_In) Enum() *SecurityScheme_In { - p := new(SecurityScheme_In) - *p = x - return p -} - -func (x SecurityScheme_In) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (SecurityScheme_In) Descriptor() protoreflect.EnumDescriptor { - return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[3].Descriptor() -} - -func (SecurityScheme_In) Type() protoreflect.EnumType { - return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[3] -} - -func (x SecurityScheme_In) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use SecurityScheme_In.Descriptor instead. -func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12, 1} -} - -// The flow used by the OAuth2 security scheme. Valid values are -// "implicit", "password", "application" or "accessCode". -type SecurityScheme_Flow int32 - -const ( - SecurityScheme_FLOW_INVALID SecurityScheme_Flow = 0 - SecurityScheme_FLOW_IMPLICIT SecurityScheme_Flow = 1 - SecurityScheme_FLOW_PASSWORD SecurityScheme_Flow = 2 - SecurityScheme_FLOW_APPLICATION SecurityScheme_Flow = 3 - SecurityScheme_FLOW_ACCESS_CODE SecurityScheme_Flow = 4 -) - -// Enum value maps for SecurityScheme_Flow. -var ( - SecurityScheme_Flow_name = map[int32]string{ - 0: "FLOW_INVALID", - 1: "FLOW_IMPLICIT", - 2: "FLOW_PASSWORD", - 3: "FLOW_APPLICATION", - 4: "FLOW_ACCESS_CODE", - } - SecurityScheme_Flow_value = map[string]int32{ - "FLOW_INVALID": 0, - "FLOW_IMPLICIT": 1, - "FLOW_PASSWORD": 2, - "FLOW_APPLICATION": 3, - "FLOW_ACCESS_CODE": 4, - } -) - -func (x SecurityScheme_Flow) Enum() *SecurityScheme_Flow { - p := new(SecurityScheme_Flow) - *p = x - return p -} - -func (x SecurityScheme_Flow) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (SecurityScheme_Flow) Descriptor() protoreflect.EnumDescriptor { - return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[4].Descriptor() -} - -func (SecurityScheme_Flow) Type() protoreflect.EnumType { - return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[4] -} - -func (x SecurityScheme_Flow) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use SecurityScheme_Flow.Descriptor instead. -func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12, 2} -} - -// `Swagger` is a representation of OpenAPI v2 specification's Swagger object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#swaggerObject -// -// Example: -// -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { -// info: { -// title: "Echo API"; -// version: "1.0"; -// description: "; -// contact: { -// name: "gRPC-Gateway project"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway"; -// email: "none@example.com"; -// }; -// license: { -// name: "BSD 3-Clause License"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt"; -// }; -// }; -// schemes: HTTPS; -// consumes: "application/json"; -// produces: "application/json"; -// }; -type Swagger struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Specifies the OpenAPI Specification version being used. It can be - // used by the OpenAPI UI and other clients to interpret the API listing. The - // value MUST be "2.0". - Swagger string `protobuf:"bytes,1,opt,name=swagger,proto3" json:"swagger,omitempty"` - // Provides metadata about the API. The metadata can be used by the - // clients if needed. - Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` - // The host (name or ip) serving the API. This MUST be the host only and does - // not include the scheme nor sub-paths. It MAY include a port. If the host is - // not included, the host serving the documentation is to be used (including - // the port). The host does not support path templating. - Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` - // The base path on which the API is served, which is relative to the host. If - // it is not included, the API is served directly under the host. The value - // MUST start with a leading slash (/). The basePath does not support path - // templating. - // Note that using `base_path` does not change the endpoint paths that are - // generated in the resulting OpenAPI file. If you wish to use `base_path` - // with relatively generated OpenAPI paths, the `base_path` prefix must be - // manually removed from your `google.api.http` paths and your code changed to - // serve the API from the `base_path`. - BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` - // The transfer protocol of the API. Values MUST be from the list: "http", - // "https", "ws", "wss". If the schemes is not included, the default scheme to - // be used is the one used to access the OpenAPI definition itself. - Schemes []Scheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.Scheme" json:"schemes,omitempty"` - // A list of MIME types the APIs can consume. This is global to all APIs but - // can be overridden on specific API calls. Value MUST be as described under - // Mime Types. - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - // A list of MIME types the APIs can produce. This is global to all APIs but - // can be overridden on specific API calls. Value MUST be as described under - // Mime Types. - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - // An object to hold responses that can be used across operations. This - // property does not define global responses for all operations. - Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Security scheme definitions that can be used across the specification. - SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` - // A declaration of which security schemes are applied for the API as a whole. - // The list of values describes alternative security schemes that can be used - // (that is, there is a logical OR between the security requirements). - // Individual operations can override this definition. - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` - // Additional external documentation. - ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,15,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Swagger) Reset() { - *x = Swagger{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Swagger) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Swagger) ProtoMessage() {} - -func (x *Swagger) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Swagger.ProtoReflect.Descriptor instead. -func (*Swagger) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{0} -} - -func (x *Swagger) GetSwagger() string { - if x != nil { - return x.Swagger - } - return "" -} - -func (x *Swagger) GetInfo() *Info { - if x != nil { - return x.Info - } - return nil -} - -func (x *Swagger) GetHost() string { - if x != nil { - return x.Host - } - return "" -} - -func (x *Swagger) GetBasePath() string { - if x != nil { - return x.BasePath - } - return "" -} - -func (x *Swagger) GetSchemes() []Scheme { - if x != nil { - return x.Schemes - } - return nil -} - -func (x *Swagger) GetConsumes() []string { - if x != nil { - return x.Consumes - } - return nil -} - -func (x *Swagger) GetProduces() []string { - if x != nil { - return x.Produces - } - return nil -} - -func (x *Swagger) GetResponses() map[string]*Response { - if x != nil { - return x.Responses - } - return nil -} - -func (x *Swagger) GetSecurityDefinitions() *SecurityDefinitions { - if x != nil { - return x.SecurityDefinitions - } - return nil -} - -func (x *Swagger) GetSecurity() []*SecurityRequirement { - if x != nil { - return x.Security - } - return nil -} - -func (x *Swagger) GetExternalDocs() *ExternalDocumentation { - if x != nil { - return x.ExternalDocs - } - return nil -} - -func (x *Swagger) GetExtensions() map[string]*_struct.Value { - if x != nil { - return x.Extensions - } - return nil -} - -// `Operation` is a representation of OpenAPI v2 specification's Operation object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#operationObject -// -// Example: -// -// service EchoService { -// rpc Echo(SimpleMessage) returns (SimpleMessage) { -// option (google.api.http) = { -// get: "/v1/example/echo/{id}" -// }; -// -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { -// summary: "Get a message."; -// operation_id: "getMessage"; -// tags: "echo"; -// responses: { -// key: "200" -// value: { -// description: "OK"; -// } -// } -// }; -// } -// } -type Operation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A list of tags for API documentation control. Tags can be used for logical - // grouping of operations by resources or any other qualifier. - Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` - // A short summary of what the operation does. For maximum readability in the - // swagger-ui, this field SHOULD be less than 120 characters. - Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` - // A verbose explanation of the operation behavior. GFM syntax can be used for - // rich text representation. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // Additional external documentation for this operation. - ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - // Unique string used to identify the operation. The id MUST be unique among - // all operations described in the API. Tools and libraries MAY use the - // operationId to uniquely identify an operation, therefore, it is recommended - // to follow common programming naming conventions. - OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` - // A list of MIME types the operation can consume. This overrides the consumes - // definition at the OpenAPI Object. An empty value MAY be used to clear the - // global definition. Value MUST be as described under Mime Types. - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - // A list of MIME types the operation can produce. This overrides the produces - // definition at the OpenAPI Object. An empty value MAY be used to clear the - // global definition. Value MUST be as described under Mime Types. - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - // The list of possible responses as they are returned from executing this - // operation. - Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The transfer protocol for the operation. Values MUST be from the list: - // "http", "https", "ws", "wss". The value overrides the OpenAPI Object - // schemes definition. - Schemes []Scheme `protobuf:"varint,10,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.Scheme" json:"schemes,omitempty"` - // Declares this operation to be deprecated. Usage of the declared operation - // should be refrained. Default value is false. - Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` - // A declaration of which security schemes are applied for this operation. The - // list of values describes alternative security schemes that can be used - // (that is, there is a logical OR between the security requirements). This - // definition overrides any declared top-level security. To remove a top-level - // security declaration, an empty array can be used. - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,13,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Operation) Reset() { - *x = Operation{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Operation) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Operation) ProtoMessage() {} - -func (x *Operation) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Operation.ProtoReflect.Descriptor instead. -func (*Operation) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{1} -} - -func (x *Operation) GetTags() []string { - if x != nil { - return x.Tags - } - return nil -} - -func (x *Operation) GetSummary() string { - if x != nil { - return x.Summary - } - return "" -} - -func (x *Operation) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Operation) GetExternalDocs() *ExternalDocumentation { - if x != nil { - return x.ExternalDocs - } - return nil -} - -func (x *Operation) GetOperationId() string { - if x != nil { - return x.OperationId - } - return "" -} - -func (x *Operation) GetConsumes() []string { - if x != nil { - return x.Consumes - } - return nil -} - -func (x *Operation) GetProduces() []string { - if x != nil { - return x.Produces - } - return nil -} - -func (x *Operation) GetResponses() map[string]*Response { - if x != nil { - return x.Responses - } - return nil -} - -func (x *Operation) GetSchemes() []Scheme { - if x != nil { - return x.Schemes - } - return nil -} - -func (x *Operation) GetDeprecated() bool { - if x != nil { - return x.Deprecated - } - return false -} - -func (x *Operation) GetSecurity() []*SecurityRequirement { - if x != nil { - return x.Security - } - return nil -} - -func (x *Operation) GetExtensions() map[string]*_struct.Value { - if x != nil { - return x.Extensions - } - return nil -} - -// `Header` is a representation of OpenAPI v2 specification's Header object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#headerObject -type Header struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // `Description` is a short description of the header. - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - // The type of the object. The value MUST be one of "string", "number", "integer", or "boolean". The "array" type is not supported. - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - // `Format` The extending format for the previously mentioned type. - Format string `protobuf:"bytes,3,opt,name=format,proto3" json:"format,omitempty"` - // `Default` Declares the value of the header that the server will use if none is provided. - // See: https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-6.2. - // Unlike JSON Schema this value MUST conform to the defined type for the header. - Default string `protobuf:"bytes,6,opt,name=default,proto3" json:"default,omitempty"` - // 'Pattern' See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3. - Pattern string `protobuf:"bytes,13,opt,name=pattern,proto3" json:"pattern,omitempty"` -} - -func (x *Header) Reset() { - *x = Header{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Header) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Header) ProtoMessage() {} - -func (x *Header) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Header.ProtoReflect.Descriptor instead. -func (*Header) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{2} -} - -func (x *Header) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Header) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *Header) GetFormat() string { - if x != nil { - return x.Format - } - return "" -} - -func (x *Header) GetDefault() string { - if x != nil { - return x.Default - } - return "" -} - -func (x *Header) GetPattern() string { - if x != nil { - return x.Pattern - } - return "" -} - -// `Response` is a representation of OpenAPI v2 specification's Response object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responseObject -type Response struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // `Description` is a short description of the response. - // GFM syntax can be used for rich text representation. - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - // `Schema` optionally defines the structure of the response. - // If `Schema` is not provided, it means there is no content to the response. - Schema *Schema `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` - // `Headers` A list of headers that are sent with the response. - // `Header` name is expected to be a string in the canonical format of the MIME header key - // See: https://golang.org/pkg/net/textproto/#CanonicalMIMEHeaderKey - Headers map[string]*Header `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // `Examples` gives per-mimetype response examples. - // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object - Examples map[string]string `protobuf:"bytes,4,rep,name=examples,proto3" json:"examples,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Extensions map[string]*_struct.Value `protobuf:"bytes,5,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Response) Reset() { - *x = Response{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Response) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Response) ProtoMessage() {} - -func (x *Response) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Response.ProtoReflect.Descriptor instead. -func (*Response) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{3} -} - -func (x *Response) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Response) GetSchema() *Schema { - if x != nil { - return x.Schema - } - return nil -} - -func (x *Response) GetHeaders() map[string]*Header { - if x != nil { - return x.Headers - } - return nil -} - -func (x *Response) GetExamples() map[string]string { - if x != nil { - return x.Examples - } - return nil -} - -func (x *Response) GetExtensions() map[string]*_struct.Value { - if x != nil { - return x.Extensions - } - return nil -} - -// `Info` is a representation of OpenAPI v2 specification's Info object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject -// -// Example: -// -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { -// info: { -// title: "Echo API"; -// version: "1.0"; -// description: "; -// contact: { -// name: "gRPC-Gateway project"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway"; -// email: "none@example.com"; -// }; -// license: { -// name: "BSD 3-Clause License"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt"; -// }; -// }; -// ... -// }; -type Info struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The title of the application. - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - // A short description of the application. GFM syntax can be used for rich - // text representation. - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - // The Terms of Service for the API. - TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` - // The contact information for the exposed API. - Contact *Contact `protobuf:"bytes,4,opt,name=contact,proto3" json:"contact,omitempty"` - // The license information for the exposed API. - License *License `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` - // Provides the version of the application API (not to be confused - // with the specification version). - Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,7,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Info) Reset() { - *x = Info{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Info) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Info) ProtoMessage() {} - -func (x *Info) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Info.ProtoReflect.Descriptor instead. -func (*Info) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{4} -} - -func (x *Info) GetTitle() string { - if x != nil { - return x.Title - } - return "" -} - -func (x *Info) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Info) GetTermsOfService() string { - if x != nil { - return x.TermsOfService - } - return "" -} - -func (x *Info) GetContact() *Contact { - if x != nil { - return x.Contact - } - return nil -} - -func (x *Info) GetLicense() *License { - if x != nil { - return x.License - } - return nil -} - -func (x *Info) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -func (x *Info) GetExtensions() map[string]*_struct.Value { - if x != nil { - return x.Extensions - } - return nil -} - -// `Contact` is a representation of OpenAPI v2 specification's Contact object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#contactObject -// -// Example: -// -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { -// info: { -// ... -// contact: { -// name: "gRPC-Gateway project"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway"; -// email: "none@example.com"; -// }; -// ... -// }; -// ... -// }; -type Contact struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The identifying name of the contact person/organization. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The URL pointing to the contact information. MUST be in the format of a - // URL. - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` - // The email address of the contact person/organization. MUST be in the format - // of an email address. - Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` -} - -func (x *Contact) Reset() { - *x = Contact{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Contact) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Contact) ProtoMessage() {} - -func (x *Contact) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Contact.ProtoReflect.Descriptor instead. -func (*Contact) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{5} -} - -func (x *Contact) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Contact) GetUrl() string { - if x != nil { - return x.Url - } - return "" -} - -func (x *Contact) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -// `License` is a representation of OpenAPI v2 specification's License object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#licenseObject -// -// Example: -// -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { -// info: { -// ... -// license: { -// name: "BSD 3-Clause License"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt"; -// }; -// ... -// }; -// ... -// }; -type License struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The license name used for the API. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // A URL to the license used for the API. MUST be in the format of a URL. - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` -} - -func (x *License) Reset() { - *x = License{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *License) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*License) ProtoMessage() {} - -func (x *License) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use License.ProtoReflect.Descriptor instead. -func (*License) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{6} -} - -func (x *License) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *License) GetUrl() string { - if x != nil { - return x.Url - } - return "" -} - -// `ExternalDocumentation` is a representation of OpenAPI v2 specification's -// ExternalDocumentation object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#externalDocumentationObject -// -// Example: -// -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { -// ... -// external_docs: { -// description: "More about gRPC-Gateway"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway"; -// } -// ... -// }; -type ExternalDocumentation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A short description of the target documentation. GFM syntax can be used for - // rich text representation. - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - // The URL for the target documentation. Value MUST be in the format - // of a URL. - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` -} - -func (x *ExternalDocumentation) Reset() { - *x = ExternalDocumentation{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExternalDocumentation) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExternalDocumentation) ProtoMessage() {} - -func (x *ExternalDocumentation) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExternalDocumentation.ProtoReflect.Descriptor instead. -func (*ExternalDocumentation) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{7} -} - -func (x *ExternalDocumentation) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *ExternalDocumentation) GetUrl() string { - if x != nil { - return x.Url - } - return "" -} - -// `Schema` is a representation of OpenAPI v2 specification's Schema object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject -type Schema struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema,proto3" json:"json_schema,omitempty"` - // Adds support for polymorphism. The discriminator is the schema property - // name that is used to differentiate between other schema that inherit this - // schema. The property name used MUST be defined at this schema and it MUST - // be in the required property list. When used, the value MUST be the name of - // this schema or any schema that inherits it. - Discriminator string `protobuf:"bytes,2,opt,name=discriminator,proto3" json:"discriminator,omitempty"` - // Relevant only for Schema "properties" definitions. Declares the property as - // "read only". This means that it MAY be sent as part of a response but MUST - // NOT be sent as part of the request. Properties marked as readOnly being - // true SHOULD NOT be in the required list of the defined schema. Default - // value is false. - ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` - // Additional external documentation for this schema. - ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - // A free-form property to include an example of an instance for this schema in JSON. - // This is copied verbatim to the output. - Example string `protobuf:"bytes,6,opt,name=example,proto3" json:"example,omitempty"` -} - -func (x *Schema) Reset() { - *x = Schema{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Schema) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Schema) ProtoMessage() {} - -func (x *Schema) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Schema.ProtoReflect.Descriptor instead. -func (*Schema) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{8} -} - -func (x *Schema) GetJsonSchema() *JSONSchema { - if x != nil { - return x.JsonSchema - } - return nil -} - -func (x *Schema) GetDiscriminator() string { - if x != nil { - return x.Discriminator - } - return "" -} - -func (x *Schema) GetReadOnly() bool { - if x != nil { - return x.ReadOnly - } - return false -} - -func (x *Schema) GetExternalDocs() *ExternalDocumentation { - if x != nil { - return x.ExternalDocs - } - return nil -} - -func (x *Schema) GetExample() string { - if x != nil { - return x.Example - } - return "" -} - -// `JSONSchema` represents properties from JSON Schema taken, and as used, in -// the OpenAPI v2 spec. -// -// This includes changes made by OpenAPI v2. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject -// -// See also: https://cswr.github.io/JsonSchema/spec/basic_types/, -// https://github.com/json-schema-org/json-schema-spec/blob/master/schema.json -// -// Example: -// -// message SimpleMessage { -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { -// json_schema: { -// title: "SimpleMessage" -// description: "A simple message." -// required: ["id"] -// } -// }; -// -// // Id represents the message identifier. -// string id = 1; [ -// (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { -// {description: "The unique identifier of the simple message." -// }]; -// } -type JSONSchema struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Ref is used to define an external reference to include in the message. - // This could be a fully qualified proto message reference, and that type must - // be imported into the protofile. If no message is identified, the Ref will - // be used verbatim in the output. - // For example: - // `ref: ".google.protobuf.Timestamp"`. - Ref string `protobuf:"bytes,3,opt,name=ref,proto3" json:"ref,omitempty"` - // The title of the schema. - Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` - // A short description of the schema. - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` - Default string `protobuf:"bytes,7,opt,name=default,proto3" json:"default,omitempty"` - ReadOnly bool `protobuf:"varint,8,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` - // A free-form property to include a JSON example of this field. This is copied - // verbatim to the output swagger.json. Quotes must be escaped. - // This property is the same for 2.0 and 3.0.0 https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/3.0.0.md#schemaObject https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject - Example string `protobuf:"bytes,9,opt,name=example,proto3" json:"example,omitempty"` - MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` - // Maximum represents an inclusive upper limit for a numeric instance. The - // value of MUST be a number, - Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` - // minimum represents an inclusive lower limit for a numeric instance. The - // value of MUST be a number, - Minimum float64 `protobuf:"fixed64,13,opt,name=minimum,proto3" json:"minimum,omitempty"` - ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` - MaxLength uint64 `protobuf:"varint,15,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` - MinLength uint64 `protobuf:"varint,16,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - Pattern string `protobuf:"bytes,17,opt,name=pattern,proto3" json:"pattern,omitempty"` - MaxItems uint64 `protobuf:"varint,20,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` - MinItems uint64 `protobuf:"varint,21,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` - UniqueItems bool `protobuf:"varint,22,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` - MaxProperties uint64 `protobuf:"varint,24,opt,name=max_properties,json=maxProperties,proto3" json:"max_properties,omitempty"` - MinProperties uint64 `protobuf:"varint,25,opt,name=min_properties,json=minProperties,proto3" json:"min_properties,omitempty"` - Required []string `protobuf:"bytes,26,rep,name=required,proto3" json:"required,omitempty"` - // Items in 'array' must be unique. - Array []string `protobuf:"bytes,34,rep,name=array,proto3" json:"array,omitempty"` - Type []JSONSchema_JSONSchemaSimpleTypes `protobuf:"varint,35,rep,packed,name=type,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.JSONSchema_JSONSchemaSimpleTypes" json:"type,omitempty"` - // `Format` - Format string `protobuf:"bytes,36,opt,name=format,proto3" json:"format,omitempty"` - // Items in `enum` must be unique https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1 - Enum []string `protobuf:"bytes,46,rep,name=enum,proto3" json:"enum,omitempty"` -} - -func (x *JSONSchema) Reset() { - *x = JSONSchema{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *JSONSchema) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*JSONSchema) ProtoMessage() {} - -func (x *JSONSchema) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use JSONSchema.ProtoReflect.Descriptor instead. -func (*JSONSchema) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{9} -} - -func (x *JSONSchema) GetRef() string { - if x != nil { - return x.Ref - } - return "" -} - -func (x *JSONSchema) GetTitle() string { - if x != nil { - return x.Title - } - return "" -} - -func (x *JSONSchema) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *JSONSchema) GetDefault() string { - if x != nil { - return x.Default - } - return "" -} - -func (x *JSONSchema) GetReadOnly() bool { - if x != nil { - return x.ReadOnly - } - return false -} - -func (x *JSONSchema) GetExample() string { - if x != nil { - return x.Example - } - return "" -} - -func (x *JSONSchema) GetMultipleOf() float64 { - if x != nil { - return x.MultipleOf - } - return 0 -} - -func (x *JSONSchema) GetMaximum() float64 { - if x != nil { - return x.Maximum - } - return 0 -} - -func (x *JSONSchema) GetExclusiveMaximum() bool { - if x != nil { - return x.ExclusiveMaximum - } - return false -} - -func (x *JSONSchema) GetMinimum() float64 { - if x != nil { - return x.Minimum - } - return 0 -} - -func (x *JSONSchema) GetExclusiveMinimum() bool { - if x != nil { - return x.ExclusiveMinimum - } - return false -} - -func (x *JSONSchema) GetMaxLength() uint64 { - if x != nil { - return x.MaxLength - } - return 0 -} - -func (x *JSONSchema) GetMinLength() uint64 { - if x != nil { - return x.MinLength - } - return 0 -} - -func (x *JSONSchema) GetPattern() string { - if x != nil { - return x.Pattern - } - return "" -} - -func (x *JSONSchema) GetMaxItems() uint64 { - if x != nil { - return x.MaxItems - } - return 0 -} - -func (x *JSONSchema) GetMinItems() uint64 { - if x != nil { - return x.MinItems - } - return 0 -} - -func (x *JSONSchema) GetUniqueItems() bool { - if x != nil { - return x.UniqueItems - } - return false -} - -func (x *JSONSchema) GetMaxProperties() uint64 { - if x != nil { - return x.MaxProperties - } - return 0 -} - -func (x *JSONSchema) GetMinProperties() uint64 { - if x != nil { - return x.MinProperties - } - return 0 -} - -func (x *JSONSchema) GetRequired() []string { - if x != nil { - return x.Required - } - return nil -} - -func (x *JSONSchema) GetArray() []string { - if x != nil { - return x.Array - } - return nil -} - -func (x *JSONSchema) GetType() []JSONSchema_JSONSchemaSimpleTypes { - if x != nil { - return x.Type - } - return nil -} - -func (x *JSONSchema) GetFormat() string { - if x != nil { - return x.Format - } - return "" -} - -func (x *JSONSchema) GetEnum() []string { - if x != nil { - return x.Enum - } - return nil -} - -// `Tag` is a representation of OpenAPI v2 specification's Tag object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject -type Tag struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A short description for the tag. GFM syntax can be used for rich text - // representation. - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - // Additional external documentation for this tag. - ExternalDocs *ExternalDocumentation `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` -} - -func (x *Tag) Reset() { - *x = Tag{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Tag) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Tag) ProtoMessage() {} - -func (x *Tag) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Tag.ProtoReflect.Descriptor instead. -func (*Tag) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{10} -} - -func (x *Tag) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Tag) GetExternalDocs() *ExternalDocumentation { - if x != nil { - return x.ExternalDocs - } - return nil -} - -// `SecurityDefinitions` is a representation of OpenAPI v2 specification's -// Security Definitions object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securityDefinitionsObject -// -// A declaration of the security schemes available to be used in the -// specification. This does not enforce the security schemes on the operations -// and only serves to provide the relevant details for each scheme. -type SecurityDefinitions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A single security scheme definition, mapping a "name" to the scheme it - // defines. - Security map[string]*SecurityScheme `protobuf:"bytes,1,rep,name=security,proto3" json:"security,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *SecurityDefinitions) Reset() { - *x = SecurityDefinitions{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SecurityDefinitions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SecurityDefinitions) ProtoMessage() {} - -func (x *SecurityDefinitions) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SecurityDefinitions.ProtoReflect.Descriptor instead. -func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{11} -} - -func (x *SecurityDefinitions) GetSecurity() map[string]*SecurityScheme { - if x != nil { - return x.Security - } - return nil -} - -// `SecurityScheme` is a representation of OpenAPI v2 specification's -// Security Scheme object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securitySchemeObject -// -// Allows the definition of a security scheme that can be used by the -// operations. Supported schemes are basic authentication, an API key (either as -// a header or as a query parameter) and OAuth2's common flows (implicit, -// password, application and access code). -type SecurityScheme struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The type of the security scheme. Valid values are "basic", - // "apiKey" or "oauth2". - Type SecurityScheme_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme_Type" json:"type,omitempty"` - // A short description for security scheme. - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - // The name of the header or query parameter to be used. - // Valid for apiKey. - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - // The location of the API key. Valid values are "query" or - // "header". - // Valid for apiKey. - In SecurityScheme_In `protobuf:"varint,4,opt,name=in,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme_In" json:"in,omitempty"` - // The flow used by the OAuth2 security scheme. Valid values are - // "implicit", "password", "application" or "accessCode". - // Valid for oauth2. - Flow SecurityScheme_Flow `protobuf:"varint,5,opt,name=flow,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme_Flow" json:"flow,omitempty"` - // The authorization URL to be used for this flow. This SHOULD be in - // the form of a URL. - // Valid for oauth2/implicit and oauth2/accessCode. - AuthorizationUrl string `protobuf:"bytes,6,opt,name=authorization_url,json=authorizationUrl,proto3" json:"authorization_url,omitempty"` - // The token URL to be used for this flow. This SHOULD be in the - // form of a URL. - // Valid for oauth2/password, oauth2/application and oauth2/accessCode. - TokenUrl string `protobuf:"bytes,7,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` - // The available scopes for the OAuth2 security scheme. - // Valid for oauth2. - Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,9,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *SecurityScheme) Reset() { - *x = SecurityScheme{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SecurityScheme) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SecurityScheme) ProtoMessage() {} - -func (x *SecurityScheme) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SecurityScheme.ProtoReflect.Descriptor instead. -func (*SecurityScheme) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12} -} - -func (x *SecurityScheme) GetType() SecurityScheme_Type { - if x != nil { - return x.Type - } - return SecurityScheme_TYPE_INVALID -} - -func (x *SecurityScheme) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *SecurityScheme) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SecurityScheme) GetIn() SecurityScheme_In { - if x != nil { - return x.In - } - return SecurityScheme_IN_INVALID -} - -func (x *SecurityScheme) GetFlow() SecurityScheme_Flow { - if x != nil { - return x.Flow - } - return SecurityScheme_FLOW_INVALID -} - -func (x *SecurityScheme) GetAuthorizationUrl() string { - if x != nil { - return x.AuthorizationUrl - } - return "" -} - -func (x *SecurityScheme) GetTokenUrl() string { - if x != nil { - return x.TokenUrl - } - return "" -} - -func (x *SecurityScheme) GetScopes() *Scopes { - if x != nil { - return x.Scopes - } - return nil -} - -func (x *SecurityScheme) GetExtensions() map[string]*_struct.Value { - if x != nil { - return x.Extensions - } - return nil -} - -// `SecurityRequirement` is a representation of OpenAPI v2 specification's -// Security Requirement object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securityRequirementObject -// -// Lists the required security schemes to execute this operation. The object can -// have multiple security schemes declared in it which are all required (that -// is, there is a logical AND between the schemes). -// -// The name used for each property MUST correspond to a security scheme -// declared in the Security Definitions. -type SecurityRequirement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Each name must correspond to a security scheme which is declared in - // the Security Definitions. If the security scheme is of type "oauth2", - // then the value is a list of scope names required for the execution. - // For other security scheme types, the array MUST be empty. - SecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue `protobuf:"bytes,1,rep,name=security_requirement,json=securityRequirement,proto3" json:"security_requirement,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *SecurityRequirement) Reset() { - *x = SecurityRequirement{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SecurityRequirement) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SecurityRequirement) ProtoMessage() {} - -func (x *SecurityRequirement) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SecurityRequirement.ProtoReflect.Descriptor instead. -func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{13} -} - -func (x *SecurityRequirement) GetSecurityRequirement() map[string]*SecurityRequirement_SecurityRequirementValue { - if x != nil { - return x.SecurityRequirement - } - return nil -} - -// `Scopes` is a representation of OpenAPI v2 specification's Scopes object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#scopesObject -// -// Lists the available scopes for an OAuth2 security scheme. -type Scopes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Maps between a name of a scope to a short description of it (as the value - // of the property). - Scope map[string]string `protobuf:"bytes,1,rep,name=scope,proto3" json:"scope,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Scopes) Reset() { - *x = Scopes{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Scopes) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Scopes) ProtoMessage() {} - -func (x *Scopes) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Scopes.ProtoReflect.Descriptor instead. -func (*Scopes) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{14} -} - -func (x *Scopes) GetScope() map[string]string { - if x != nil { - return x.Scope - } - return nil -} - -// If the security scheme is of type "oauth2", then the value is a list of -// scope names required for the execution. For other security scheme types, -// the array MUST be empty. -type SecurityRequirement_SecurityRequirementValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Scope []string `protobuf:"bytes,1,rep,name=scope,proto3" json:"scope,omitempty"` -} - -func (x *SecurityRequirement_SecurityRequirementValue) Reset() { - *x = SecurityRequirement_SecurityRequirementValue{} - if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SecurityRequirement_SecurityRequirementValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} - -func (x *SecurityRequirement_SecurityRequirementValue) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SecurityRequirement_SecurityRequirementValue.ProtoReflect.Descriptor instead. -func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{13, 0} -} - -func (x *SecurityRequirement_SecurityRequirementValue) GetScope() []string { - if x != nil { - return x.Scope - } - return nil -} - -var File_protoc_gen_openapiv2_options_openapiv2_proto protoreflect.FileDescriptor - -var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ - 0x0a, 0x2c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, - 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x29, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, - 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf5, 0x07, 0x0a, 0x07, 0x53, 0x77, 0x61, 0x67, - 0x67, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x12, 0x43, 0x0a, - 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, - 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x73, 0x65, 0x50, - 0x61, 0x74, 0x68, 0x12, 0x4b, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x14, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x08, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, - 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x65, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, - 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, - 0x62, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, - 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x1a, 0x71, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, - 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, - 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x22, - 0xff, 0x06, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, - 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x44, 0x6f, 0x63, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x12, - 0x61, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, - 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, - 0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, - 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x12, - 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x5a, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, - 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x64, 0x0a, 0x0a, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, - 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0x71, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x08, 0x10, - 0x09, 0x22, 0xd8, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x4a, 0x04, - 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, - 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, - 0x10, 0x0b, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, - 0x08, 0x0e, 0x10, 0x0f, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, - 0x4a, 0x04, 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x22, 0x9a, 0x05, 0x0a, - 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x06, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5a, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x12, 0x5d, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x12, 0x63, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, - 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x6d, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd6, 0x03, 0x0a, 0x04, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, - 0x72, 0x6d, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, - 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x63, 0x74, 0x12, 0x4c, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, - 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x0a, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, - 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, - 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x45, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x75, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2f, 0x0a, 0x07, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x4b, 0x0a, 0x15, 0x45, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xaa, 0x02, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x56, 0x0a, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, - 0x6a, 0x73, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, - 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, - 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x65, 0x0a, - 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x44, 0x6f, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4a, 0x04, - 0x08, 0x04, 0x10, 0x05, 0x22, 0xdf, 0x07, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, - 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, - 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, - 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, - 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, - 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, - 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, - 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, - 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, - 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, - 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, - 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, - 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, - 0x6d, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, - 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x1a, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x72, 0x72, - 0x61, 0x79, 0x12, 0x5f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0e, - 0x32, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, - 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x24, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, - 0x6e, 0x75, 0x6d, 0x18, 0x2e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, - 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, - 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x01, - 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, - 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x55, - 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x05, - 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, - 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, - 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, - 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, 0x17, 0x10, 0x18, 0x4a, 0x04, 0x08, 0x1b, - 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e, 0x4a, 0x04, - 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x25, 0x10, 0x2a, 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, - 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0x94, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x65, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xf7, 0x01, - 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, - 0x76, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x4f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, - 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xff, 0x06, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, - 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x49, 0x6e, 0x52, 0x02, - 0x69, 0x6e, 0x12, 0x52, 0x0a, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, - 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, - 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, - 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, - 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, 0x48, 0x32, 0x10, 0x03, 0x22, 0x31, 0x0a, 0x02, 0x49, 0x6e, - 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, - 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0d, - 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x6a, 0x0a, - 0x04, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4e, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, - 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, - 0x4f, 0x57, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, - 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x43, 0x43, 0x45, - 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x04, 0x22, 0xf6, 0x02, 0x0a, 0x13, 0x53, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x14, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, - 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, - 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, - 0x1a, 0x9f, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x6d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, - 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x96, 0x01, 0x0a, 0x06, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x52, 0x0a, - 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, - 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, - 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x3b, 0x0a, 0x06, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, - 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x53, 0x10, 0x03, 0x12, - 0x07, 0x0a, 0x03, 0x57, 0x53, 0x53, 0x10, 0x04, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, - 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescOnce sync.Once - file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescData = file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc -) - -func file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP() []byte { - file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescOnce.Do(func() { - file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescData = protoimpl.X.CompressGZIP(file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescData) - }) - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescData -} - -var file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 28) -var file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []interface{}{ - (Scheme)(0), // 0: grpc.gateway.protoc_gen_openapiv2.options.Scheme - (JSONSchema_JSONSchemaSimpleTypes)(0), // 1: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes - (SecurityScheme_Type)(0), // 2: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type - (SecurityScheme_In)(0), // 3: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In - (SecurityScheme_Flow)(0), // 4: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow - (*Swagger)(nil), // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger - (*Operation)(nil), // 6: grpc.gateway.protoc_gen_openapiv2.options.Operation - (*Header)(nil), // 7: grpc.gateway.protoc_gen_openapiv2.options.Header - (*Response)(nil), // 8: grpc.gateway.protoc_gen_openapiv2.options.Response - (*Info)(nil), // 9: grpc.gateway.protoc_gen_openapiv2.options.Info - (*Contact)(nil), // 10: grpc.gateway.protoc_gen_openapiv2.options.Contact - (*License)(nil), // 11: grpc.gateway.protoc_gen_openapiv2.options.License - (*ExternalDocumentation)(nil), // 12: grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - (*Schema)(nil), // 13: grpc.gateway.protoc_gen_openapiv2.options.Schema - (*JSONSchema)(nil), // 14: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema - (*Tag)(nil), // 15: grpc.gateway.protoc_gen_openapiv2.options.Tag - (*SecurityDefinitions)(nil), // 16: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions - (*SecurityScheme)(nil), // 17: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme - (*SecurityRequirement)(nil), // 18: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement - (*Scopes)(nil), // 19: grpc.gateway.protoc_gen_openapiv2.options.Scopes - nil, // 20: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry - nil, // 21: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry - nil, // 22: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry - nil, // 23: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry - nil, // 24: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry - nil, // 25: grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry - nil, // 26: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry - nil, // 27: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry - nil, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - nil, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - (*SecurityRequirement_SecurityRequirementValue)(nil), // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - nil, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - nil, // 32: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - (*_struct.Value)(nil), // 33: google.protobuf.Value -} -var file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{ - 9, // 0: grpc.gateway.protoc_gen_openapiv2.options.Swagger.info:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info - 0, // 1: grpc.gateway.protoc_gen_openapiv2.options.Swagger.schemes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scheme - 20, // 2: grpc.gateway.protoc_gen_openapiv2.options.Swagger.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry - 16, // 3: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security_definitions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions - 18, // 4: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement - 12, // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 21, // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry - 12, // 7: grpc.gateway.protoc_gen_openapiv2.options.Operation.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 22, // 8: grpc.gateway.protoc_gen_openapiv2.options.Operation.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry - 0, // 9: grpc.gateway.protoc_gen_openapiv2.options.Operation.schemes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scheme - 18, // 10: grpc.gateway.protoc_gen_openapiv2.options.Operation.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement - 23, // 11: grpc.gateway.protoc_gen_openapiv2.options.Operation.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry - 13, // 12: grpc.gateway.protoc_gen_openapiv2.options.Response.schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema - 24, // 13: grpc.gateway.protoc_gen_openapiv2.options.Response.headers:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry - 25, // 14: grpc.gateway.protoc_gen_openapiv2.options.Response.examples:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry - 26, // 15: grpc.gateway.protoc_gen_openapiv2.options.Response.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry - 10, // 16: grpc.gateway.protoc_gen_openapiv2.options.Info.contact:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Contact - 11, // 17: grpc.gateway.protoc_gen_openapiv2.options.Info.license:type_name -> grpc.gateway.protoc_gen_openapiv2.options.License - 27, // 18: grpc.gateway.protoc_gen_openapiv2.options.Info.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry - 14, // 19: grpc.gateway.protoc_gen_openapiv2.options.Schema.json_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema - 12, // 20: grpc.gateway.protoc_gen_openapiv2.options.Schema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 1, // 21: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes - 12, // 22: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 28, // 23: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - 2, // 24: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type - 3, // 25: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In - 4, // 26: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow - 19, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes - 29, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - 31, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - 32, // 30: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - 8, // 31: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 33, // 32: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value - 8, // 33: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 33, // 34: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value - 7, // 35: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header - 33, // 36: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value - 33, // 37: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value - 17, // 38: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme - 33, // 39: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value - 30, // 40: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - 41, // [41:41] is the sub-list for method output_type - 41, // [41:41] is the sub-list for method input_type - 41, // [41:41] is the sub-list for extension type_name - 41, // [41:41] is the sub-list for extension extendee - 0, // [0:41] is the sub-list for field type_name -} - -func init() { file_protoc_gen_openapiv2_options_openapiv2_proto_init() } -func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { - if File_protoc_gen_openapiv2_options_openapiv2_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Swagger); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Operation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Header); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Response); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Contact); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*License); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExternalDocumentation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Schema); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JSONSchema); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Tag); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SecurityDefinitions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SecurityScheme); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SecurityRequirement); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Scopes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SecurityRequirement_SecurityRequirementValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc, - NumEnums: 5, - NumMessages: 28, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes, - DependencyIndexes: file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs, - EnumInfos: file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes, - MessageInfos: file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes, - }.Build() - File_protoc_gen_openapiv2_options_openapiv2_proto = out.File - file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = nil - file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = nil - file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = nil -} diff --git a/third_party/proto/protoc-gen-openapiv2/options/openapiv2.proto b/third_party/proto/protoc-gen-openapiv2/options/openapiv2.proto deleted file mode 100644 index 7be1fb572..000000000 --- a/third_party/proto/protoc-gen-openapiv2/options/openapiv2.proto +++ /dev/null @@ -1,645 +0,0 @@ -syntax = "proto3"; - -package grpc.gateway.protoc_gen_openapiv2.options; - -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"; - -import "google/protobuf/struct.proto"; - -// Scheme describes the schemes supported by the OpenAPI Swagger -// and Operation objects. -enum Scheme { - UNKNOWN = 0; - HTTP = 1; - HTTPS = 2; - WS = 3; - WSS = 4; -} - -// `Swagger` is a representation of OpenAPI v2 specification's Swagger object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#swaggerObject -// -// Example: -// -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { -// info: { -// title: "Echo API"; -// version: "1.0"; -// description: "; -// contact: { -// name: "gRPC-Gateway project"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway"; -// email: "none@example.com"; -// }; -// license: { -// name: "BSD 3-Clause License"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt"; -// }; -// }; -// schemes: HTTPS; -// consumes: "application/json"; -// produces: "application/json"; -// }; -// -message Swagger { - // Specifies the OpenAPI Specification version being used. It can be - // used by the OpenAPI UI and other clients to interpret the API listing. The - // value MUST be "2.0". - string swagger = 1; - // Provides metadata about the API. The metadata can be used by the - // clients if needed. - Info info = 2; - // The host (name or ip) serving the API. This MUST be the host only and does - // not include the scheme nor sub-paths. It MAY include a port. If the host is - // not included, the host serving the documentation is to be used (including - // the port). The host does not support path templating. - string host = 3; - // The base path on which the API is served, which is relative to the host. If - // it is not included, the API is served directly under the host. The value - // MUST start with a leading slash (/). The basePath does not support path - // templating. - // Note that using `base_path` does not change the endpoint paths that are - // generated in the resulting OpenAPI file. If you wish to use `base_path` - // with relatively generated OpenAPI paths, the `base_path` prefix must be - // manually removed from your `google.api.http` paths and your code changed to - // serve the API from the `base_path`. - string base_path = 4; - // The transfer protocol of the API. Values MUST be from the list: "http", - // "https", "ws", "wss". If the schemes is not included, the default scheme to - // be used is the one used to access the OpenAPI definition itself. - repeated Scheme schemes = 5; - // A list of MIME types the APIs can consume. This is global to all APIs but - // can be overridden on specific API calls. Value MUST be as described under - // Mime Types. - repeated string consumes = 6; - // A list of MIME types the APIs can produce. This is global to all APIs but - // can be overridden on specific API calls. Value MUST be as described under - // Mime Types. - repeated string produces = 7; - // field 8 is reserved for 'paths'. - reserved 8; - // field 9 is reserved for 'definitions', which at this time are already - // exposed as and customizable as proto messages. - reserved 9; - // An object to hold responses that can be used across operations. This - // property does not define global responses for all operations. - map responses = 10; - // Security scheme definitions that can be used across the specification. - SecurityDefinitions security_definitions = 11; - // A declaration of which security schemes are applied for the API as a whole. - // The list of values describes alternative security schemes that can be used - // (that is, there is a logical OR between the security requirements). - // Individual operations can override this definition. - repeated SecurityRequirement security = 12; - // field 13 is reserved for 'tags', which are supposed to be exposed as and - // customizable as proto services. TODO(ivucica): add processing of proto - // service objects into OpenAPI v2 Tag objects. - reserved 13; - // Additional external documentation. - ExternalDocumentation external_docs = 14; - map extensions = 15; -} - -// `Operation` is a representation of OpenAPI v2 specification's Operation object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#operationObject -// -// Example: -// -// service EchoService { -// rpc Echo(SimpleMessage) returns (SimpleMessage) { -// option (google.api.http) = { -// get: "/v1/example/echo/{id}" -// }; -// -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { -// summary: "Get a message."; -// operation_id: "getMessage"; -// tags: "echo"; -// responses: { -// key: "200" -// value: { -// description: "OK"; -// } -// } -// }; -// } -// } -message Operation { - // A list of tags for API documentation control. Tags can be used for logical - // grouping of operations by resources or any other qualifier. - repeated string tags = 1; - // A short summary of what the operation does. For maximum readability in the - // swagger-ui, this field SHOULD be less than 120 characters. - string summary = 2; - // A verbose explanation of the operation behavior. GFM syntax can be used for - // rich text representation. - string description = 3; - // Additional external documentation for this operation. - ExternalDocumentation external_docs = 4; - // Unique string used to identify the operation. The id MUST be unique among - // all operations described in the API. Tools and libraries MAY use the - // operationId to uniquely identify an operation, therefore, it is recommended - // to follow common programming naming conventions. - string operation_id = 5; - // A list of MIME types the operation can consume. This overrides the consumes - // definition at the OpenAPI Object. An empty value MAY be used to clear the - // global definition. Value MUST be as described under Mime Types. - repeated string consumes = 6; - // A list of MIME types the operation can produce. This overrides the produces - // definition at the OpenAPI Object. An empty value MAY be used to clear the - // global definition. Value MUST be as described under Mime Types. - repeated string produces = 7; - // field 8 is reserved for 'parameters'. - reserved 8; - // The list of possible responses as they are returned from executing this - // operation. - map responses = 9; - // The transfer protocol for the operation. Values MUST be from the list: - // "http", "https", "ws", "wss". The value overrides the OpenAPI Object - // schemes definition. - repeated Scheme schemes = 10; - // Declares this operation to be deprecated. Usage of the declared operation - // should be refrained. Default value is false. - bool deprecated = 11; - // A declaration of which security schemes are applied for this operation. The - // list of values describes alternative security schemes that can be used - // (that is, there is a logical OR between the security requirements). This - // definition overrides any declared top-level security. To remove a top-level - // security declaration, an empty array can be used. - repeated SecurityRequirement security = 12; - map extensions = 13; -} - -// `Header` is a representation of OpenAPI v2 specification's Header object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#headerObject -// -message Header { - // `Description` is a short description of the header. - string description = 1; - // The type of the object. The value MUST be one of "string", "number", "integer", or "boolean". The "array" type is not supported. - string type = 2; - // `Format` The extending format for the previously mentioned type. - string format = 3; - // field 4 is reserved for 'items', but in OpenAPI-specific way. - reserved 4; - // field 5 is reserved `Collection Format` Determines the format of the array if type array is used. - reserved 5; - // `Default` Declares the value of the header that the server will use if none is provided. - // See: https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-6.2. - // Unlike JSON Schema this value MUST conform to the defined type for the header. - string default = 6; - // field 7 is reserved for 'maximum'. - reserved 7; - // field 8 is reserved for 'exclusiveMaximum'. - reserved 8; - // field 9 is reserved for 'minimum'. - reserved 9; - // field 10 is reserved for 'exclusiveMinimum'. - reserved 10; - // field 11 is reserved for 'maxLength'. - reserved 11; - // field 12 is reserved for 'minLength'. - reserved 12; - // 'Pattern' See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3. - string pattern = 13; - // field 14 is reserved for 'maxItems'. - reserved 14; - // field 15 is reserved for 'minItems'. - reserved 15; - // field 16 is reserved for 'uniqueItems'. - reserved 16; - // field 17 is reserved for 'enum'. - reserved 17; - // field 18 is reserved for 'multipleOf'. - reserved 18; -} - -// `Response` is a representation of OpenAPI v2 specification's Response object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responseObject -// -message Response { - // `Description` is a short description of the response. - // GFM syntax can be used for rich text representation. - string description = 1; - // `Schema` optionally defines the structure of the response. - // If `Schema` is not provided, it means there is no content to the response. - Schema schema = 2; - // `Headers` A list of headers that are sent with the response. - // `Header` name is expected to be a string in the canonical format of the MIME header key - // See: https://golang.org/pkg/net/textproto/#CanonicalMIMEHeaderKey - map headers = 3; - // `Examples` gives per-mimetype response examples. - // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object - map examples = 4; - map extensions = 5; -} - -// `Info` is a representation of OpenAPI v2 specification's Info object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject -// -// Example: -// -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { -// info: { -// title: "Echo API"; -// version: "1.0"; -// description: "; -// contact: { -// name: "gRPC-Gateway project"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway"; -// email: "none@example.com"; -// }; -// license: { -// name: "BSD 3-Clause License"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt"; -// }; -// }; -// ... -// }; -// -message Info { - // The title of the application. - string title = 1; - // A short description of the application. GFM syntax can be used for rich - // text representation. - string description = 2; - // The Terms of Service for the API. - string terms_of_service = 3; - // The contact information for the exposed API. - Contact contact = 4; - // The license information for the exposed API. - License license = 5; - // Provides the version of the application API (not to be confused - // with the specification version). - string version = 6; - map extensions = 7; -} - -// `Contact` is a representation of OpenAPI v2 specification's Contact object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#contactObject -// -// Example: -// -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { -// info: { -// ... -// contact: { -// name: "gRPC-Gateway project"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway"; -// email: "none@example.com"; -// }; -// ... -// }; -// ... -// }; -// -message Contact { - // The identifying name of the contact person/organization. - string name = 1; - // The URL pointing to the contact information. MUST be in the format of a - // URL. - string url = 2; - // The email address of the contact person/organization. MUST be in the format - // of an email address. - string email = 3; -} - -// `License` is a representation of OpenAPI v2 specification's License object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#licenseObject -// -// Example: -// -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { -// info: { -// ... -// license: { -// name: "BSD 3-Clause License"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt"; -// }; -// ... -// }; -// ... -// }; -// -message License { - // The license name used for the API. - string name = 1; - // A URL to the license used for the API. MUST be in the format of a URL. - string url = 2; -} - -// `ExternalDocumentation` is a representation of OpenAPI v2 specification's -// ExternalDocumentation object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#externalDocumentationObject -// -// Example: -// -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { -// ... -// external_docs: { -// description: "More about gRPC-Gateway"; -// url: "https://github.com/grpc-ecosystem/grpc-gateway"; -// } -// ... -// }; -// -message ExternalDocumentation { - // A short description of the target documentation. GFM syntax can be used for - // rich text representation. - string description = 1; - // The URL for the target documentation. Value MUST be in the format - // of a URL. - string url = 2; -} - -// `Schema` is a representation of OpenAPI v2 specification's Schema object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject -// -message Schema { - JSONSchema json_schema = 1; - // Adds support for polymorphism. The discriminator is the schema property - // name that is used to differentiate between other schema that inherit this - // schema. The property name used MUST be defined at this schema and it MUST - // be in the required property list. When used, the value MUST be the name of - // this schema or any schema that inherits it. - string discriminator = 2; - // Relevant only for Schema "properties" definitions. Declares the property as - // "read only". This means that it MAY be sent as part of a response but MUST - // NOT be sent as part of the request. Properties marked as readOnly being - // true SHOULD NOT be in the required list of the defined schema. Default - // value is false. - bool read_only = 3; - // field 4 is reserved for 'xml'. - reserved 4; - // Additional external documentation for this schema. - ExternalDocumentation external_docs = 5; - // A free-form property to include an example of an instance for this schema in JSON. - // This is copied verbatim to the output. - string example = 6; -} - -// `JSONSchema` represents properties from JSON Schema taken, and as used, in -// the OpenAPI v2 spec. -// -// This includes changes made by OpenAPI v2. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject -// -// See also: https://cswr.github.io/JsonSchema/spec/basic_types/, -// https://github.com/json-schema-org/json-schema-spec/blob/master/schema.json -// -// Example: -// -// message SimpleMessage { -// option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { -// json_schema: { -// title: "SimpleMessage" -// description: "A simple message." -// required: ["id"] -// } -// }; -// -// // Id represents the message identifier. -// string id = 1; [ -// (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { -// {description: "The unique identifier of the simple message." -// }]; -// } -// -message JSONSchema { - // field 1 is reserved for '$id', omitted from OpenAPI v2. - reserved 1; - // field 2 is reserved for '$schema', omitted from OpenAPI v2. - reserved 2; - // Ref is used to define an external reference to include in the message. - // This could be a fully qualified proto message reference, and that type must - // be imported into the protofile. If no message is identified, the Ref will - // be used verbatim in the output. - // For example: - // `ref: ".google.protobuf.Timestamp"`. - string ref = 3; - // field 4 is reserved for '$comment', omitted from OpenAPI v2. - reserved 4; - // The title of the schema. - string title = 5; - // A short description of the schema. - string description = 6; - string default = 7; - bool read_only = 8; - // A free-form property to include a JSON example of this field. This is copied - // verbatim to the output swagger.json. Quotes must be escaped. - // This property is the same for 2.0 and 3.0.0 https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/3.0.0.md#schemaObject https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject - string example = 9; - double multiple_of = 10; - // Maximum represents an inclusive upper limit for a numeric instance. The - // value of MUST be a number, - double maximum = 11; - bool exclusive_maximum = 12; - // minimum represents an inclusive lower limit for a numeric instance. The - // value of MUST be a number, - double minimum = 13; - bool exclusive_minimum = 14; - uint64 max_length = 15; - uint64 min_length = 16; - string pattern = 17; - // field 18 is reserved for 'additionalItems', omitted from OpenAPI v2. - reserved 18; - // field 19 is reserved for 'items', but in OpenAPI-specific way. - // TODO(ivucica): add 'items'? - reserved 19; - uint64 max_items = 20; - uint64 min_items = 21; - bool unique_items = 22; - // field 23 is reserved for 'contains', omitted from OpenAPI v2. - reserved 23; - uint64 max_properties = 24; - uint64 min_properties = 25; - repeated string required = 26; - // field 27 is reserved for 'additionalProperties', but in OpenAPI-specific - // way. TODO(ivucica): add 'additionalProperties'? - reserved 27; - // field 28 is reserved for 'definitions', omitted from OpenAPI v2. - reserved 28; - // field 29 is reserved for 'properties', but in OpenAPI-specific way. - // TODO(ivucica): add 'additionalProperties'? - reserved 29; - // following fields are reserved, as the properties have been omitted from - // OpenAPI v2: - // patternProperties, dependencies, propertyNames, const - reserved 30 to 33; - // Items in 'array' must be unique. - repeated string array = 34; - - enum JSONSchemaSimpleTypes { - UNKNOWN = 0; - ARRAY = 1; - BOOLEAN = 2; - INTEGER = 3; - NULL = 4; - NUMBER = 5; - OBJECT = 6; - STRING = 7; - } - - repeated JSONSchemaSimpleTypes type = 35; - // `Format` - string format = 36; - // following fields are reserved, as the properties have been omitted from - // OpenAPI v2: contentMediaType, contentEncoding, if, then, else - reserved 37 to 41; - // field 42 is reserved for 'allOf', but in OpenAPI-specific way. - // TODO(ivucica): add 'allOf'? - reserved 42; - // following fields are reserved, as the properties have been omitted from - // OpenAPI v2: - // anyOf, oneOf, not - reserved 43 to 45; - // Items in `enum` must be unique https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1 - repeated string enum = 46; -} - -// `Tag` is a representation of OpenAPI v2 specification's Tag object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject -// -message Tag { - // field 1 is reserved for 'name'. In our generator, this is (to be) extracted - // from the name of proto service, and thus not exposed to the user, as - // changing tag object's name would break the link to the references to the - // tag in individual operation specifications. - // - // TODO(ivucica): Add 'name' property. Use it to allow override of the name of - // global Tag object, then use that name to reference the tag throughout the - // OpenAPI file. - reserved 1; - // A short description for the tag. GFM syntax can be used for rich text - // representation. - string description = 2; - // Additional external documentation for this tag. - ExternalDocumentation external_docs = 3; -} - -// `SecurityDefinitions` is a representation of OpenAPI v2 specification's -// Security Definitions object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securityDefinitionsObject -// -// A declaration of the security schemes available to be used in the -// specification. This does not enforce the security schemes on the operations -// and only serves to provide the relevant details for each scheme. -message SecurityDefinitions { - // A single security scheme definition, mapping a "name" to the scheme it - // defines. - map security = 1; -} - -// `SecurityScheme` is a representation of OpenAPI v2 specification's -// Security Scheme object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securitySchemeObject -// -// Allows the definition of a security scheme that can be used by the -// operations. Supported schemes are basic authentication, an API key (either as -// a header or as a query parameter) and OAuth2's common flows (implicit, -// password, application and access code). -message SecurityScheme { - // The type of the security scheme. Valid values are "basic", - // "apiKey" or "oauth2". - enum Type { - TYPE_INVALID = 0; - TYPE_BASIC = 1; - TYPE_API_KEY = 2; - TYPE_OAUTH2 = 3; - } - - // The location of the API key. Valid values are "query" or "header". - enum In { - IN_INVALID = 0; - IN_QUERY = 1; - IN_HEADER = 2; - } - - // The flow used by the OAuth2 security scheme. Valid values are - // "implicit", "password", "application" or "accessCode". - enum Flow { - FLOW_INVALID = 0; - FLOW_IMPLICIT = 1; - FLOW_PASSWORD = 2; - FLOW_APPLICATION = 3; - FLOW_ACCESS_CODE = 4; - } - - // The type of the security scheme. Valid values are "basic", - // "apiKey" or "oauth2". - Type type = 1; - // A short description for security scheme. - string description = 2; - // The name of the header or query parameter to be used. - // Valid for apiKey. - string name = 3; - // The location of the API key. Valid values are "query" or - // "header". - // Valid for apiKey. - In in = 4; - // The flow used by the OAuth2 security scheme. Valid values are - // "implicit", "password", "application" or "accessCode". - // Valid for oauth2. - Flow flow = 5; - // The authorization URL to be used for this flow. This SHOULD be in - // the form of a URL. - // Valid for oauth2/implicit and oauth2/accessCode. - string authorization_url = 6; - // The token URL to be used for this flow. This SHOULD be in the - // form of a URL. - // Valid for oauth2/password, oauth2/application and oauth2/accessCode. - string token_url = 7; - // The available scopes for the OAuth2 security scheme. - // Valid for oauth2. - Scopes scopes = 8; - map extensions = 9; -} - -// `SecurityRequirement` is a representation of OpenAPI v2 specification's -// Security Requirement object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#securityRequirementObject -// -// Lists the required security schemes to execute this operation. The object can -// have multiple security schemes declared in it which are all required (that -// is, there is a logical AND between the schemes). -// -// The name used for each property MUST correspond to a security scheme -// declared in the Security Definitions. -message SecurityRequirement { - // If the security scheme is of type "oauth2", then the value is a list of - // scope names required for the execution. For other security scheme types, - // the array MUST be empty. - message SecurityRequirementValue { - repeated string scope = 1; - } - // Each name must correspond to a security scheme which is declared in - // the Security Definitions. If the security scheme is of type "oauth2", - // then the value is a list of scope names required for the execution. - // For other security scheme types, the array MUST be empty. - map security_requirement = 1; -} - -// `Scopes` is a representation of OpenAPI v2 specification's Scopes object. -// -// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#scopesObject -// -// Lists the available scopes for an OAuth2 security scheme. -message Scopes { - // Maps between a name of a scope to a short description of it (as the value - // of the property). - map scope = 1; -} diff --git a/third_party/proto/tendermint/abci/types.proto b/third_party/proto/tendermint/abci/types.proto deleted file mode 100644 index 2e70acac7..000000000 --- a/third_party/proto/tendermint/abci/types.proto +++ /dev/null @@ -1,407 +0,0 @@ -syntax = "proto3"; -package tendermint.abci; - -option go_package = "github.com/cometbft/cometbft/abci/types"; - -// For more information on gogo.proto, see: -// https://github.com/gogo/protobuf/blob/master/extensions.md -import "tendermint/crypto/proof.proto"; -import "tendermint/types/types.proto"; -import "tendermint/crypto/keys.proto"; -import "tendermint/types/params.proto"; -import "google/protobuf/timestamp.proto"; -import "gogoproto/gogo.proto"; - -// This file is copied from http://github.com/tendermint/abci -// NOTE: When using custom types, mind the warnings. -// https://github.com/gogo/protobuf/blob/master/custom_types.md#warnings-and-issues - -//---------------------------------------- -// Request types - -message Request { - oneof value { - RequestEcho echo = 1; - RequestFlush flush = 2; - RequestInfo info = 3; - RequestSetOption set_option = 4; - RequestInitChain init_chain = 5; - RequestQuery query = 6; - RequestBeginBlock begin_block = 7; - RequestCheckTx check_tx = 8; - RequestDeliverTx deliver_tx = 9; - RequestEndBlock end_block = 10; - RequestCommit commit = 11; - RequestListSnapshots list_snapshots = 12; - RequestOfferSnapshot offer_snapshot = 13; - RequestLoadSnapshotChunk load_snapshot_chunk = 14; - RequestApplySnapshotChunk apply_snapshot_chunk = 15; - } -} - -message RequestEcho { - string message = 1; -} - -message RequestFlush {} - -message RequestInfo { - string version = 1; - uint64 block_version = 2; - uint64 p2p_version = 3; -} - -// nondeterministic -message RequestSetOption { - string key = 1; - string value = 2; -} - -message RequestInitChain { - google.protobuf.Timestamp time = 1 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - string chain_id = 2; - ConsensusParams consensus_params = 3; - repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; - bytes app_state_bytes = 5; - int64 initial_height = 6; -} - -message RequestQuery { - bytes data = 1; - string path = 2; - int64 height = 3; - bool prove = 4; -} - -message RequestBeginBlock { - bytes hash = 1; - tendermint.types.Header header = 2 [(gogoproto.nullable) = false]; - LastCommitInfo last_commit_info = 3 [(gogoproto.nullable) = false]; - repeated Evidence byzantine_validators = 4 [(gogoproto.nullable) = false]; -} - -enum CheckTxType { - NEW = 0 [(gogoproto.enumvalue_customname) = "New"]; - RECHECK = 1 [(gogoproto.enumvalue_customname) = "Recheck"]; -} - -message RequestCheckTx { - bytes tx = 1; - CheckTxType type = 2; -} - -message RequestDeliverTx { - bytes tx = 1; -} - -message RequestEndBlock { - int64 height = 1; -} - -message RequestCommit {} - -// lists available snapshots -message RequestListSnapshots { -} - -// offers a snapshot to the application -message RequestOfferSnapshot { - Snapshot snapshot = 1; // snapshot offered by peers - bytes app_hash = 2; // light client-verified app hash for snapshot height -} - -// loads a snapshot chunk -message RequestLoadSnapshotChunk { - uint64 height = 1; - uint32 format = 2; - uint32 chunk = 3; -} - -// Applies a snapshot chunk -message RequestApplySnapshotChunk { - uint32 index = 1; - bytes chunk = 2; - string sender = 3; -} - -//---------------------------------------- -// Response types - -message Response { - oneof value { - ResponseException exception = 1; - ResponseEcho echo = 2; - ResponseFlush flush = 3; - ResponseInfo info = 4; - ResponseSetOption set_option = 5; - ResponseInitChain init_chain = 6; - ResponseQuery query = 7; - ResponseBeginBlock begin_block = 8; - ResponseCheckTx check_tx = 9; - ResponseDeliverTx deliver_tx = 10; - ResponseEndBlock end_block = 11; - ResponseCommit commit = 12; - ResponseListSnapshots list_snapshots = 13; - ResponseOfferSnapshot offer_snapshot = 14; - ResponseLoadSnapshotChunk load_snapshot_chunk = 15; - ResponseApplySnapshotChunk apply_snapshot_chunk = 16; - } -} - -// nondeterministic -message ResponseException { - string error = 1; -} - -message ResponseEcho { - string message = 1; -} - -message ResponseFlush {} - -message ResponseInfo { - string data = 1; - - string version = 2; - uint64 app_version = 3; - - int64 last_block_height = 4; - bytes last_block_app_hash = 5; -} - -// nondeterministic -message ResponseSetOption { - uint32 code = 1; - // bytes data = 2; - string log = 3; - string info = 4; -} - -message ResponseInitChain { - ConsensusParams consensus_params = 1; - repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; - bytes app_hash = 3; -} - -message ResponseQuery { - uint32 code = 1; - // bytes data = 2; // use "value" instead. - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 index = 5; - bytes key = 6; - bytes value = 7; - tendermint.crypto.ProofOps proof_ops = 8; - int64 height = 9; - string codespace = 10; -} - -message ResponseBeginBlock { - repeated Event events = 1 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; -} - -message ResponseCheckTx { - uint32 code = 1; - bytes data = 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 gas_wanted = 5 [json_name = "gas_wanted"]; - int64 gas_used = 6 [json_name = "gas_used"]; - repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - string codespace = 8; -} - -message ResponseDeliverTx { - uint32 code = 1; - bytes data = 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 gas_wanted = 5 [json_name = "gas_wanted"]; - int64 gas_used = 6 [json_name = "gas_used"]; - repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - string codespace = 8; -} - -message ResponseEndBlock { - repeated ValidatorUpdate validator_updates = 1 - [(gogoproto.nullable) = false]; - ConsensusParams consensus_param_updates = 2; - repeated Event events = 3 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; -} - -message ResponseCommit { - // reserve 1 - bytes data = 2; - int64 retain_height = 3; -} - -message ResponseListSnapshots { - repeated Snapshot snapshots = 1; -} - -message ResponseOfferSnapshot { - Result result = 1; - - enum Result { - UNKNOWN = 0; // Unknown result, abort all snapshot restoration - ACCEPT = 1; // Snapshot accepted, apply chunks - ABORT = 2; // Abort all snapshot restoration - REJECT = 3; // Reject this specific snapshot, try others - REJECT_FORMAT = 4; // Reject all snapshots of this format, try others - REJECT_SENDER = 5; // Reject all snapshots from the sender(s), try others - } -} - -message ResponseLoadSnapshotChunk { - bytes chunk = 1; -} - -message ResponseApplySnapshotChunk { - Result result = 1; - repeated uint32 refetch_chunks = 2; // Chunks to refetch and reapply - repeated string reject_senders = 3; // Chunk senders to reject and ban - - enum Result { - UNKNOWN = 0; // Unknown result, abort all snapshot restoration - ACCEPT = 1; // Chunk successfully accepted - ABORT = 2; // Abort all snapshot restoration - RETRY = 3; // Retry chunk (combine with refetch and reject) - RETRY_SNAPSHOT = 4; // Retry snapshot (combine with refetch and reject) - REJECT_SNAPSHOT = 5; // Reject this snapshot, try others - } -} - -//---------------------------------------- -// Misc. - -// ConsensusParams contains all consensus-relevant parameters -// that can be adjusted by the abci app -message ConsensusParams { - BlockParams block = 1; - tendermint.types.EvidenceParams evidence = 2; - tendermint.types.ValidatorParams validator = 3; - tendermint.types.VersionParams version = 4; -} - -// BlockParams contains limits on the block size. -message BlockParams { - // Note: must be greater than 0 - int64 max_bytes = 1; - // Note: must be greater or equal to -1 - int64 max_gas = 2; -} - -message LastCommitInfo { - int32 round = 1; - repeated VoteInfo votes = 2 [(gogoproto.nullable) = false]; -} - -// Event allows application developers to attach additional information to -// ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx. -// Later, transactions may be queried using these events. -message Event { - string type = 1; - repeated EventAttribute attributes = 2 [ - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "attributes,omitempty" - ]; -} - -// EventAttribute is a single key-value pair, associated with an event. -message EventAttribute { - bytes key = 1; - bytes value = 2; - bool index = 3; // nondeterministic -} - -// TxResult contains results of executing the transaction. -// -// One usage is indexing transaction results. -message TxResult { - int64 height = 1; - uint32 index = 2; - bytes tx = 3; - ResponseDeliverTx result = 4 [(gogoproto.nullable) = false]; -} - -//---------------------------------------- -// Blockchain Types - -// Validator -message Validator { - bytes address = 1; // The first 20 bytes of SHA256(public key) - // PubKey pub_key = 2 [(gogoproto.nullable)=false]; - int64 power = 3; // The voting power -} - -// ValidatorUpdate -message ValidatorUpdate { - tendermint.crypto.PublicKey pub_key = 1 [(gogoproto.nullable) = false]; - int64 power = 2; -} - -// VoteInfo -message VoteInfo { - Validator validator = 1 [(gogoproto.nullable) = false]; - bool signed_last_block = 2; -} - -enum EvidenceType { - UNKNOWN = 0; - DUPLICATE_VOTE = 1; - LIGHT_CLIENT_ATTACK = 2; -} - -message Evidence { - EvidenceType type = 1; - // The offending validator - Validator validator = 2 [(gogoproto.nullable) = false]; - // The height when the offense occurred - int64 height = 3; - // The corresponding time where the offense occurred - google.protobuf.Timestamp time = 4 [ - (gogoproto.nullable) = false, - (gogoproto.stdtime) = true - ]; - // Total voting power of the validator set in case the ABCI application does - // not store historical validators. - // https://github.com/tendermint/tendermint/issues/4581 - int64 total_voting_power = 5; -} - -//---------------------------------------- -// State Sync Types - -message Snapshot { - uint64 height = 1; // The height at which the snapshot was taken - uint32 format = 2; // The application-specific snapshot format - uint32 chunks = 3; // Number of chunks in the snapshot - bytes hash = 4; // Arbitrary snapshot hash, equal only if identical - bytes metadata = 5; // Arbitrary application metadata -} - -//---------------------------------------- -// Service Definition - -service ABCIApplication { - rpc Echo(RequestEcho) returns (ResponseEcho); - rpc Flush(RequestFlush) returns (ResponseFlush); - rpc Info(RequestInfo) returns (ResponseInfo); - rpc SetOption(RequestSetOption) returns (ResponseSetOption); - rpc DeliverTx(RequestDeliverTx) returns (ResponseDeliverTx); - rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); - rpc Query(RequestQuery) returns (ResponseQuery); - rpc Commit(RequestCommit) returns (ResponseCommit); - rpc InitChain(RequestInitChain) returns (ResponseInitChain); - rpc BeginBlock(RequestBeginBlock) returns (ResponseBeginBlock); - rpc EndBlock(RequestEndBlock) returns (ResponseEndBlock); - rpc ListSnapshots(RequestListSnapshots) returns (ResponseListSnapshots); - rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); - rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) returns (ResponseLoadSnapshotChunk); - rpc ApplySnapshotChunk(RequestApplySnapshotChunk) returns (ResponseApplySnapshotChunk); -} diff --git a/third_party/proto/tendermint/crypto/keys.proto b/third_party/proto/tendermint/crypto/keys.proto deleted file mode 100644 index 16fd7adf3..000000000 --- a/third_party/proto/tendermint/crypto/keys.proto +++ /dev/null @@ -1,17 +0,0 @@ -syntax = "proto3"; -package tendermint.crypto; - -option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; - -import "gogoproto/gogo.proto"; - -// PublicKey defines the keys available for use with Tendermint Validators -message PublicKey { - option (gogoproto.compare) = true; - option (gogoproto.equal) = true; - - oneof sum { - bytes ed25519 = 1; - bytes secp256k1 = 2; - } -} diff --git a/third_party/proto/tendermint/crypto/proof.proto b/third_party/proto/tendermint/crypto/proof.proto deleted file mode 100644 index 975df7685..000000000 --- a/third_party/proto/tendermint/crypto/proof.proto +++ /dev/null @@ -1,41 +0,0 @@ -syntax = "proto3"; -package tendermint.crypto; - -option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; - -import "gogoproto/gogo.proto"; - -message Proof { - int64 total = 1; - int64 index = 2; - bytes leaf_hash = 3; - repeated bytes aunts = 4; -} - -message ValueOp { - // Encoded in ProofOp.Key. - bytes key = 1; - - // To encode in ProofOp.Data - Proof proof = 2; -} - -message DominoOp { - string key = 1; - string input = 2; - string output = 3; -} - -// ProofOp defines an operation used for calculating Merkle root -// The data could be arbitrary format, providing nessecary data -// for example neighbouring node hash -message ProofOp { - string type = 1; - bytes key = 2; - bytes data = 3; -} - -// ProofOps is Merkle proof defined by the list of ProofOps -message ProofOps { - repeated ProofOp ops = 1 [(gogoproto.nullable) = false]; -} diff --git a/third_party/proto/tendermint/libs/bits/types.proto b/third_party/proto/tendermint/libs/bits/types.proto deleted file mode 100644 index 3111d113a..000000000 --- a/third_party/proto/tendermint/libs/bits/types.proto +++ /dev/null @@ -1,9 +0,0 @@ -syntax = "proto3"; -package tendermint.libs.bits; - -option go_package = "github.com/tendermint/tendermint/proto/tendermint/libs/bits"; - -message BitArray { - int64 bits = 1; - repeated uint64 elems = 2; -} diff --git a/third_party/proto/tendermint/p2p/types.proto b/third_party/proto/tendermint/p2p/types.proto deleted file mode 100644 index 0d42ea400..000000000 --- a/third_party/proto/tendermint/p2p/types.proto +++ /dev/null @@ -1,34 +0,0 @@ -syntax = "proto3"; -package tendermint.p2p; - -option go_package = "github.com/tendermint/tendermint/proto/tendermint/p2p"; - -import "gogoproto/gogo.proto"; - -message NetAddress { - string id = 1 [(gogoproto.customname) = "ID"]; - string ip = 2 [(gogoproto.customname) = "IP"]; - uint32 port = 3; -} - -message ProtocolVersion { - uint64 p2p = 1 [(gogoproto.customname) = "P2P"]; - uint64 block = 2; - uint64 app = 3; -} - -message DefaultNodeInfo { - ProtocolVersion protocol_version = 1 [(gogoproto.nullable) = false]; - string default_node_id = 2 [(gogoproto.customname) = "DefaultNodeID"]; - string listen_addr = 3; - string network = 4; - string version = 5; - bytes channels = 6; - string moniker = 7; - DefaultNodeInfoOther other = 8 [(gogoproto.nullable) = false]; -} - -message DefaultNodeInfoOther { - string tx_index = 1; - string rpc_address = 2 [(gogoproto.customname) = "RPCAddress"]; -} diff --git a/third_party/proto/tendermint/types/block.proto b/third_party/proto/tendermint/types/block.proto deleted file mode 100644 index d531c06a0..000000000 --- a/third_party/proto/tendermint/types/block.proto +++ /dev/null @@ -1,15 +0,0 @@ -syntax = "proto3"; -package tendermint.types; - -option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; - -import "gogoproto/gogo.proto"; -import "tendermint/types/types.proto"; -import "tendermint/types/evidence.proto"; - -message Block { - Header header = 1 [(gogoproto.nullable) = false]; - Data data = 2 [(gogoproto.nullable) = false]; - tendermint.types.EvidenceList evidence = 3 [(gogoproto.nullable) = false]; - Commit last_commit = 4; -} diff --git a/third_party/proto/tendermint/types/evidence.proto b/third_party/proto/tendermint/types/evidence.proto deleted file mode 100644 index 9c169bb4c..000000000 --- a/third_party/proto/tendermint/types/evidence.proto +++ /dev/null @@ -1,38 +0,0 @@ -syntax = "proto3"; -package tendermint.types; - -option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; - -import "gogoproto/gogo.proto"; -import "google/protobuf/timestamp.proto"; -import "tendermint/types/types.proto"; -import "tendermint/types/validator.proto"; - -message Evidence { - oneof sum { - DuplicateVoteEvidence duplicate_vote_evidence = 1; - LightClientAttackEvidence light_client_attack_evidence = 2; - } -} - -// DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes. -message DuplicateVoteEvidence { - tendermint.types.Vote vote_a = 1; - tendermint.types.Vote vote_b = 2; - int64 total_voting_power = 3; - int64 validator_power = 4; - google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; -} - -// LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client. -message LightClientAttackEvidence { - tendermint.types.LightBlock conflicting_block = 1; - int64 common_height = 2; - repeated tendermint.types.Validator byzantine_validators = 3; - int64 total_voting_power = 4; - google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; -} - -message EvidenceList { - repeated Evidence evidence = 1 [(gogoproto.nullable) = false]; -} diff --git a/third_party/proto/tendermint/types/params.proto b/third_party/proto/tendermint/types/params.proto deleted file mode 100644 index 1eeb55538..000000000 --- a/third_party/proto/tendermint/types/params.proto +++ /dev/null @@ -1,80 +0,0 @@ -syntax = "proto3"; -package tendermint.types; - -option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; - -import "gogoproto/gogo.proto"; -import "google/protobuf/duration.proto"; - -option (gogoproto.equal_all) = true; - -// ConsensusParams contains consensus critical parameters that determine the -// validity of blocks. -message ConsensusParams { - BlockParams block = 1 [(gogoproto.nullable) = false]; - EvidenceParams evidence = 2 [(gogoproto.nullable) = false]; - ValidatorParams validator = 3 [(gogoproto.nullable) = false]; - VersionParams version = 4 [(gogoproto.nullable) = false]; -} - -// BlockParams contains limits on the block size. -message BlockParams { - // Max block size, in bytes. - // Note: must be greater than 0 - int64 max_bytes = 1; - // Max gas per block. - // Note: must be greater or equal to -1 - int64 max_gas = 2; - // Minimum time increment between consecutive blocks (in milliseconds) If the - // block header timestamp is ahead of the system clock, decrease this value. - // - // Not exposed to the application. - int64 time_iota_ms = 3; -} - -// EvidenceParams determine how we handle evidence of malfeasance. -message EvidenceParams { - // Max age of evidence, in blocks. - // - // The basic formula for calculating this is: MaxAgeDuration / {average block - // time}. - int64 max_age_num_blocks = 1; - - // Max age of evidence, in time. - // - // It should correspond with an app's "unbonding period" or other similar - // mechanism for handling [Nothing-At-Stake - // attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). - google.protobuf.Duration max_age_duration = 2 - [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; - - // This sets the maximum size of total evidence in bytes that can be committed in a single block. - // and should fall comfortably under the max block bytes. - // Default is 1048576 or 1MB - int64 max_bytes = 3; -} - -// ValidatorParams restrict the public key types validators can use. -// NOTE: uses ABCI pubkey naming, not Amino names. -message ValidatorParams { - option (gogoproto.populate) = true; - option (gogoproto.equal) = true; - - repeated string pub_key_types = 1; -} - -// VersionParams contains the ABCI application version. -message VersionParams { - option (gogoproto.populate) = true; - option (gogoproto.equal) = true; - - uint64 app_version = 1; -} - -// HashedParams is a subset of ConsensusParams. -// -// It is hashed into the Header.ConsensusHash. -message HashedParams { - int64 block_max_bytes = 1; - int64 block_max_gas = 2; -} diff --git a/third_party/proto/tendermint/types/types.proto b/third_party/proto/tendermint/types/types.proto deleted file mode 100644 index 7a43c8efd..000000000 --- a/third_party/proto/tendermint/types/types.proto +++ /dev/null @@ -1,157 +0,0 @@ -syntax = "proto3"; -package tendermint.types; - -option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; - -import "gogoproto/gogo.proto"; -import "google/protobuf/timestamp.proto"; -import "tendermint/crypto/proof.proto"; -import "tendermint/version/types.proto"; -import "tendermint/types/validator.proto"; - -// BlockIdFlag indicates which BlcokID the signature is for -enum BlockIDFlag { - option (gogoproto.goproto_enum_stringer) = true; - option (gogoproto.goproto_enum_prefix) = false; - - BLOCK_ID_FLAG_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "BlockIDFlagUnknown"]; - BLOCK_ID_FLAG_ABSENT = 1 [(gogoproto.enumvalue_customname) = "BlockIDFlagAbsent"]; - BLOCK_ID_FLAG_COMMIT = 2 [(gogoproto.enumvalue_customname) = "BlockIDFlagCommit"]; - BLOCK_ID_FLAG_NIL = 3 [(gogoproto.enumvalue_customname) = "BlockIDFlagNil"]; -} - -// SignedMsgType is a type of signed message in the consensus. -enum SignedMsgType { - option (gogoproto.goproto_enum_stringer) = true; - option (gogoproto.goproto_enum_prefix) = false; - - SIGNED_MSG_TYPE_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "UnknownType"]; - // Votes - SIGNED_MSG_TYPE_PREVOTE = 1 [(gogoproto.enumvalue_customname) = "PrevoteType"]; - SIGNED_MSG_TYPE_PRECOMMIT = 2 [(gogoproto.enumvalue_customname) = "PrecommitType"]; - - // Proposals - SIGNED_MSG_TYPE_PROPOSAL = 32 [(gogoproto.enumvalue_customname) = "ProposalType"]; -} - -// PartsetHeader -message PartSetHeader { - uint32 total = 1; - bytes hash = 2; -} - -message Part { - uint32 index = 1; - bytes bytes = 2; - tendermint.crypto.Proof proof = 3 [(gogoproto.nullable) = false]; -} - -// BlockID -message BlockID { - bytes hash = 1; - PartSetHeader part_set_header = 2 [(gogoproto.nullable) = false]; -} - -// -------------------------------- - -// Header defines the structure of a Tendermint block header. -message Header { - // basic block info - tendermint.version.Consensus version = 1 [(gogoproto.nullable) = false]; - string chain_id = 2 [(gogoproto.customname) = "ChainID"]; - int64 height = 3; - google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - - // prev block info - BlockID last_block_id = 5 [(gogoproto.nullable) = false]; - - // hashes of block data - bytes last_commit_hash = 6; // commit from validators from the last block - bytes data_hash = 7; // transactions - - // hashes from the app output from the prev block - bytes validators_hash = 8; // validators for the current block - bytes next_validators_hash = 9; // validators for the next block - bytes consensus_hash = 10; // consensus params for current block - bytes app_hash = 11; // state after txs from the previous block - bytes last_results_hash = 12; // root hash of all results from the txs from the previous block - - // consensus info - bytes evidence_hash = 13; // evidence included in the block - bytes proposer_address = 14; // original proposer of the block -} - -// Data contains the set of transactions included in the block -message Data { - // Txs that will be applied by state @ block.Height+1. - // NOTE: not all txs here are valid. We're just agreeing on the order first. - // This means that block.AppHash does not include these txs. - repeated bytes txs = 1; -} - -// Vote represents a prevote, precommit, or commit vote from validators for -// consensus. -message Vote { - SignedMsgType type = 1; - int64 height = 2; - int32 round = 3; - BlockID block_id = 4 - [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; // zero if vote is nil. - google.protobuf.Timestamp timestamp = 5 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - bytes validator_address = 6; - int32 validator_index = 7; - bytes signature = 8; -} - -// Commit contains the evidence that a block was committed by a set of validators. -message Commit { - int64 height = 1; - int32 round = 2; - BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; - repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; -} - -// CommitSig is a part of the Vote included in a Commit. -message CommitSig { - BlockIDFlag block_id_flag = 1; - bytes validator_address = 2; - google.protobuf.Timestamp timestamp = 3 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - bytes signature = 4; -} - -message Proposal { - SignedMsgType type = 1; - int64 height = 2; - int32 round = 3; - int32 pol_round = 4; - BlockID block_id = 5 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; - google.protobuf.Timestamp timestamp = 6 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - bytes signature = 7; -} - -message SignedHeader { - Header header = 1; - Commit commit = 2; -} - -message LightBlock { - SignedHeader signed_header = 1; - tendermint.types.ValidatorSet validator_set = 2; -} - -message BlockMeta { - BlockID block_id = 1 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; - int64 block_size = 2; - Header header = 3 [(gogoproto.nullable) = false]; - int64 num_txs = 4; -} - -// TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree. -message TxProof { - bytes root_hash = 1; - bytes data = 2; - tendermint.crypto.Proof proof = 3; -} diff --git a/third_party/proto/tendermint/types/validator.proto b/third_party/proto/tendermint/types/validator.proto deleted file mode 100644 index 3e170262c..000000000 --- a/third_party/proto/tendermint/types/validator.proto +++ /dev/null @@ -1,25 +0,0 @@ -syntax = "proto3"; -package tendermint.types; - -option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; - -import "gogoproto/gogo.proto"; -import "tendermint/crypto/keys.proto"; - -message ValidatorSet { - repeated Validator validators = 1; - Validator proposer = 2; - int64 total_voting_power = 3; -} - -message Validator { - bytes address = 1; - tendermint.crypto.PublicKey pub_key = 2 [(gogoproto.nullable) = false]; - int64 voting_power = 3; - int64 proposer_priority = 4; -} - -message SimpleValidator { - tendermint.crypto.PublicKey pub_key = 1; - int64 voting_power = 2; -} diff --git a/third_party/proto/tendermint/version/types.proto b/third_party/proto/tendermint/version/types.proto deleted file mode 100644 index 6061868bd..000000000 --- a/third_party/proto/tendermint/version/types.proto +++ /dev/null @@ -1,24 +0,0 @@ -syntax = "proto3"; -package tendermint.version; - -option go_package = "github.com/tendermint/tendermint/proto/tendermint/version"; - -import "gogoproto/gogo.proto"; - -// App includes the protocol and software version for the application. -// This information is included in ResponseInfo. The App.Protocol can be -// updated in ResponseEndBlock. -message App { - uint64 protocol = 1; - string software = 2; -} - -// Consensus captures the consensus rules for processing a block in the blockchain, -// including all blockchain data structures and the rules of the application's -// state transition machine. -message Consensus { - option (gogoproto.equal) = true; - - uint64 block = 1; - uint64 app = 2; -} From b5ccfb9e091b8b6c0bf28969570192c9c9fbd999 Mon Sep 17 00:00:00 2001 From: vishnukumavat Date: Fri, 13 Oct 2023 23:23:36 +0530 Subject: [PATCH 71/90] liquidity proto regenration and compatibility refactor --- .../comdex/liquidity/v1beta1/liquidity.proto | 12 +- proto/comdex/liquidity/v1beta1/params.proto | 12 +- proto/comdex/liquidity/v1beta1/query.proto | 18 +- proto/comdex/liquidity/v1beta1/tx.proto | 24 +- x/liquidity/keeper/batch_test.go | 10 +- x/liquidity/keeper/genesis_test.go | 9 +- x/liquidity/keeper/grpc_query.go | 11 +- x/liquidity/keeper/keeper_test.go | 35 +- x/liquidity/keeper/pair_test.go | 3 +- x/liquidity/keeper/pool.go | 45 +- x/liquidity/keeper/pool_test.go | 372 ++++++++-------- x/liquidity/keeper/rewards.go | 67 +-- x/liquidity/keeper/rewards_test.go | 9 +- x/liquidity/keeper/swap.go | 89 ++-- x/liquidity/keeper/swap_test.go | 261 ++++++------ x/liquidity/types/liquidity.pb.go | 290 ++++++------- x/liquidity/types/params.pb.go | 120 +++--- x/liquidity/types/query.pb.go | 403 +++++++++--------- x/liquidity/types/tx.pb.go | 206 ++++----- 19 files changed, 1008 insertions(+), 988 deletions(-) diff --git a/proto/comdex/liquidity/v1beta1/liquidity.proto b/proto/comdex/liquidity/v1beta1/liquidity.proto index 633d93bb2..55378e8d3 100644 --- a/proto/comdex/liquidity/v1beta1/liquidity.proto +++ b/proto/comdex/liquidity/v1beta1/liquidity.proto @@ -20,7 +20,7 @@ message Pair { uint64 last_order_id = 5; - string last_price = 6 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec"]; + string last_price = 6 [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec"]; uint64 current_batch_id = 7; @@ -51,9 +51,9 @@ message Pool { string creator = 10; - string min_price = 11 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec"]; + string min_price = 11 [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec"]; - string max_price = 12 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec"]; + string max_price = 12 [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec"]; @@ -141,12 +141,12 @@ message Order { cosmos.base.v1beta1.Coin received_coin = 8 [(gogoproto.nullable) = false]; // price specifies the price that an orderer is willing to swap - string price = 9 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + string price = 9 [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; - string amount = 10 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + string amount = 10 [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; string open_amount = 11 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; // batch_id specifies the pair's batch id when the request is stored uint64 batch_id = 12; diff --git a/proto/comdex/liquidity/v1beta1/params.proto b/proto/comdex/liquidity/v1beta1/params.proto index 31ff0dfbc..162fb4477 100644 --- a/proto/comdex/liquidity/v1beta1/params.proto +++ b/proto/comdex/liquidity/v1beta1/params.proto @@ -22,7 +22,7 @@ message GenericParams { string dust_collector_address = 4; string min_initial_pool_coin_supply = 5 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; repeated cosmos.base.v1beta1.Coin pair_creation_fee = 6 [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", (gogoproto.nullable) = false]; @@ -31,18 +31,18 @@ message GenericParams { [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", (gogoproto.nullable) = false]; string min_initial_deposit_amount = 8 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; string max_price_limit_ratio = 9 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; google.protobuf.Duration max_order_lifespan = 10 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; string swap_fee_rate = 11 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; string withdraw_fee_rate = 12 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; uint64 deposit_extra_gas = 13 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Gas", (gogoproto.nullable) = false]; @@ -56,7 +56,7 @@ message GenericParams { string swap_fee_distr_denom = 16; string swap_fee_burn_rate = 17 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; uint64 app_id = 18; diff --git a/proto/comdex/liquidity/v1beta1/query.proto b/proto/comdex/liquidity/v1beta1/query.proto index c6e180a1c..98621c39c 100644 --- a/proto/comdex/liquidity/v1beta1/query.proto +++ b/proto/comdex/liquidity/v1beta1/query.proto @@ -214,13 +214,13 @@ message PoolResponse { string creator = 10; string pool_coin_supply = 11 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; - string min_price = 12 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec"]; + string min_price = 12 [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec"]; - string max_price = 13 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec"]; + string max_price = 13 [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec"]; - string price = 14 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec"]; + string price = 14 [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec"]; bool disabled = 15; @@ -345,23 +345,23 @@ message QueryOrderBooksResponse { message OrderBookPairResponse { uint64 pair_id = 1; string base_price = 2 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; repeated OrderBookResponse order_books = 3 [(gogoproto.nullable) = false]; } message OrderBookResponse { string price_unit = 1 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; repeated OrderBookTickResponse sells = 2 [(gogoproto.nullable) = false]; repeated OrderBookTickResponse buys = 3 [(gogoproto.nullable) = false]; } message OrderBookTickResponse { - string price = 1 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + string price = 1 [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; string user_order_amount = 2 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; string pool_order_amount = 3 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; } message TotalActiveAndQueuedPoolCoins { diff --git a/proto/comdex/liquidity/v1beta1/tx.proto b/proto/comdex/liquidity/v1beta1/tx.proto index 261c7bc2a..47edf14a8 100644 --- a/proto/comdex/liquidity/v1beta1/tx.proto +++ b/proto/comdex/liquidity/v1beta1/tx.proto @@ -107,13 +107,13 @@ message MsgCreateRangedPool { [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", (gogoproto.nullable) = false]; string min_price = 5 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; string max_price = 6 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; string initial_price = 7 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; } // MsgCreateRangedPoolResponse defines the Msg/CreateRangedPool response type. @@ -172,10 +172,10 @@ message MsgLimitOrder { string demand_coin_denom = 5; // price specifies the order price - string price = 6 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + string price = 6 [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; // amount specifies the amount of base coin the orderer wants to buy or sell - string amount = 7 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + string amount = 7 [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; // order_lifespan specifies the order lifespan google.protobuf.Duration order_lifespan = 8 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; @@ -204,7 +204,7 @@ message MsgMarketOrder { string demand_coin_denom = 5; // amount specifies the amount of base coin the orderer wants to buy or sell - string amount = 6 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + string amount = 6 [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; // order_lifespan specifies the order lifespan google.protobuf.Duration order_lifespan = 7 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; @@ -227,27 +227,27 @@ message MsgMMOrder { // max_sell_price specifies the maximum sell price string max_sell_price = 4 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; // min_sell_price specifies the minimum sell price string min_sell_price = 5 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; // sell_amount specifies the total amount of base coin of sell orders string sell_amount = 6 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; // max_buy_price specifies the maximum buy price string max_buy_price = 7 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; // min_buy_price specifies the minimum buy price string min_buy_price = 8 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false]; // buy_amount specifies the total amount of base coin of buy orders string buy_amount = 9 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; // order_lifespan specifies the order lifespan google.protobuf.Duration order_lifespan = 10 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; diff --git a/x/liquidity/keeper/batch_test.go b/x/liquidity/keeper/batch_test.go index 66b6b6003..dc5262984 100644 --- a/x/liquidity/keeper/batch_test.go +++ b/x/liquidity/keeper/batch_test.go @@ -3,7 +3,7 @@ package keeper_test import ( "time" - sdk "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" utils "github.com/comdex-official/comdex/types" "github.com/comdex-official/comdex/x/liquidity" @@ -23,7 +23,7 @@ func (s *KeeperTestSuite) TestOrderExpiration() { pair := s.CreateNewLiquidityPair(appID1, creator, asset1.Denom, asset2.Denom) s.ctx = s.ctx.WithBlockTime(utils.ParseTime("2022-03-01T12:00:00Z")) - order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdk.NewInt(10000), 10*time.Second) + order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdkmath.NewInt(10000), 10*time.Second) liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) s.ctx = s.ctx.WithBlockTime(utils.ParseTime("2022-03-01T12:00:06Z")) @@ -31,7 +31,7 @@ func (s *KeeperTestSuite) TestOrderExpiration() { order, found := s.keeper.GetOrder(s.ctx, appID1, order.PairId, order.Id) s.Require().True(found) // The order is not yet deleted. // A buy order comes in. - s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdk.NewInt(5000), 0) + s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdkmath.NewInt(5000), 0) liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) s.ctx = s.ctx.WithBlockTime(utils.ParseTime("2022-03-01T12:00:12Z")) @@ -41,11 +41,11 @@ func (s *KeeperTestSuite) TestOrderExpiration() { s.Require().Equal(types.OrderStatusPartiallyMatched, order.Status) // Another buy order comes in, but this time the first order has been expired, // so there is no match. - s.LimitOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdk.NewInt(5000), 0) + s.LimitOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdkmath.NewInt(5000), 0) liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) order, _ = s.keeper.GetOrder(s.ctx, appID1, order.PairId, order.Id) s.Require().Equal(types.OrderStatusExpired, order.Status) - s.Require().True(sdk.NewInt(5000).Equal(order.OpenAmount)) + s.Require().True(sdkmath.NewInt(5000).Equal(order.OpenAmount)) liquidity.BeginBlocker(s.ctx, s.keeper, s.app.AssetKeeper) _, found = s.keeper.GetOrder(s.ctx, appID1, order.PairId, order.Id) diff --git a/x/liquidity/keeper/genesis_test.go b/x/liquidity/keeper/genesis_test.go index 9faaf7c1c..2bcb13734 100644 --- a/x/liquidity/keeper/genesis_test.go +++ b/x/liquidity/keeper/genesis_test.go @@ -3,6 +3,7 @@ package keeper_test import ( "time" + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" utils "github.com/comdex-official/comdex/types" @@ -41,12 +42,12 @@ func (s *KeeperTestSuite) TestImportExportGenesis() { s.Farm(appID1, pool.Id, s.addr(4), "4440000pool1-1") - s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdk.NewInt(10000), 0) + s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdkmath.NewInt(10000), 0) s.nextBlock() depositReq := s.Deposit(appID1, pool.Id, s.addr(3), "1000000denom1,1000000denom2") withdrawReq := s.Withdraw(appID1, pool.Id, s.addr(1), poolCoin) - order := s.LimitOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdk.NewInt(10000), 0) + order := s.LimitOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdkmath.NewInt(10000), 0) pair, _ = k.GetPair(ctx, pair.AppId, pair.Id) pool, _ = k.GetPool(ctx, pool.AppId, pool.Id) @@ -137,8 +138,8 @@ func (s *KeeperTestSuite) TestIndexesAfterImport() { withdrawReq1 := s.Withdraw(appID1, pool1.Id, s.addr(4), utils.ParseCoin("1000000pool1-1")) withdrawReq2 := s.Withdraw(appID1, pool2.Id, s.addr(5), utils.ParseCoin("1000000pool1-2")) - order1 := s.LimitOrder(appID1, s.addr(6), pair1.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdk.NewInt(10000), time.Minute) - order2 := s.LimitOrder(appID1, s.addr(7), pair2.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdk.NewInt(10000), time.Minute) + order1 := s.LimitOrder(appID1, s.addr(6), pair1.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdkmath.NewInt(10000), time.Minute) + order2 := s.LimitOrder(appID1, s.addr(7), pair2.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdkmath.NewInt(10000), time.Minute) liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) diff --git a/x/liquidity/keeper/grpc_query.go b/x/liquidity/keeper/grpc_query.go index 12ca604ac..527923a7d 100644 --- a/x/liquidity/keeper/grpc_query.go +++ b/x/liquidity/keeper/grpc_query.go @@ -7,6 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -592,7 +593,7 @@ func (k Querier) Farmer(c context.Context, req *types.QueryFarmerRequest) (*type queuedFarmer, qfound := k.GetQueuedFarmer(ctx, req.AppId, req.PoolId, farmer) if !afound && !qfound { - return &types.QueryFarmerResponse{ActivePoolCoin: sdk.NewCoin(pool.PoolCoinDenom, sdk.NewInt(0)), QueuedPoolCoin: []types.QueuedPoolCoin{}}, nil + return &types.QueryFarmerResponse{ActivePoolCoin: sdk.NewCoin(pool.PoolCoinDenom, sdkmath.NewInt(0)), QueuedPoolCoin: []types.QueuedPoolCoin{}}, nil } availableLiquidityGauges := k.rewardsKeeper.GetAllGaugesByGaugeTypeID(ctx, rewardstypes.LiquidityGaugeTypeID) @@ -608,7 +609,7 @@ func (k Querier) Farmer(c context.Context, req *types.QueryFarmerRequest) (*type } } - activePoolCoin := sdk.NewCoin(pool.PoolCoinDenom, sdk.NewInt(0)) + activePoolCoin := sdk.NewCoin(pool.PoolCoinDenom, sdkmath.NewInt(0)) if afound { activePoolCoin.Amount = activePoolCoin.Amount.Add(activeFarmer.FarmedPoolCoin.Amount) } @@ -736,13 +737,13 @@ func (k Querier) TotalActiveAndQueuedPoolCoin(c context.Context, req *types.Quer pools := k.GetAllPools(ctx, req.AppId) for _, pool := range pools { - totalActiveCoin := sdk.NewCoin(pool.PoolCoinDenom, sdk.ZeroInt()) + totalActiveCoin := sdk.NewCoin(pool.PoolCoinDenom, sdkmath.ZeroInt()) allActiveFarmers := k.GetAllActiveFarmers(ctx, req.AppId, pool.Id) for _, afarmer := range allActiveFarmers { totalActiveCoin = totalActiveCoin.Add(afarmer.FarmedPoolCoin) } - totalQueuedCoin := sdk.NewCoin(pool.PoolCoinDenom, sdk.ZeroInt()) + totalQueuedCoin := sdk.NewCoin(pool.PoolCoinDenom, sdkmath.ZeroInt()) allQueuedFarmers := k.GetAllQueuedFarmers(ctx, req.AppId, pool.Id) for _, qfarmer := range allQueuedFarmers { for _, qCoin := range qfarmer.QueudCoins { @@ -841,7 +842,7 @@ func (k Querier) OrderBooks(c context.Context, req *types.QueryOrderBooksRequest return false, nil } rx, ry := k.getPoolBalances(ctx, pool, pair) - ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}) + ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdkmath.Int{}) ob.AddOrder(amm.PoolOrders(ammPool, amm.DefaultOrderer, lowestPrice, highestPrice, int(tickPrec))...) return false, nil }) diff --git a/x/liquidity/keeper/keeper_test.go b/x/liquidity/keeper/keeper_test.go index 224f58bff..2cc25dd0b 100644 --- a/x/liquidity/keeper/keeper_test.go +++ b/x/liquidity/keeper/keeper_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/suite" + sdkmath "cosmossdk.io/math" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -79,12 +80,12 @@ func (s *KeeperTestSuite) fundAddr(addr sdk.AccAddress, amt sdk.Coins) { s.Require().NoError(err) } -func newInt(i int64) sdk.Int { - return sdk.NewInt(i) +func newInt(i int64) sdkmath.Int { + return sdkmath.NewInt(i) } -func newDec(i int64) sdk.Dec { - return sdk.NewDec(i) +func newDec(i int64) sdkmath.LegacyDec { + return sdkmath.LegacyNewDec(i) } func coinEq(exp, got sdk.Coin) (bool, string, string, string) { @@ -95,11 +96,11 @@ func coinsEq(exp, got sdk.Coins) (bool, string, string, string) { return exp.IsEqual(got), "expected:\t%v\ngot:\t\t%v", exp.String(), got.String() } -func intEq(exp, got sdk.Int) (bool, string, string, string) { +func intEq(exp, got sdkmath.Int) (bool, string, string, string) { return exp.Equal(got), "expected:\t%v\ngot:\t\t%v", exp.String(), got.String() } -func decEq(exp, got sdk.Dec) (bool, string, string, string) { +func decEq(exp, got sdkmath.LegacyDec) (bool, string, string, string) { return exp.Equal(got), "expected:\t%v\ngot:\t\t%v", exp.String(), got.String() } @@ -107,7 +108,7 @@ func (s *KeeperTestSuite) CreateNewApp(appName string) uint64 { err := s.app.AssetKeeper.AddAppRecords(s.ctx, assettypes.AppData{ Name: strings.ToLower(appName), ShortName: strings.ToLower(appName), - MinGovDeposit: sdk.NewInt(0), + MinGovDeposit: sdkmath.NewInt(0), GovTimeInSeconds: 0, GenesisToken: []assettypes.MintGenesisToken{}, }) @@ -132,7 +133,7 @@ func (s *KeeperTestSuite) CreateNewAsset(name, denom string, price uint64) asset err := s.app.AssetKeeper.AddAssetRecords(s.ctx, assettypes.Asset{ Name: name, Denom: denom, - Decimals: sdk.NewInt(1000000), + Decimals: sdkmath.NewInt(1000000), IsOnChain: true, IsOraclePriceRequired: true, }) @@ -193,7 +194,7 @@ func (s *KeeperTestSuite) CreateNewLiquidityPool(appID, pairID uint64, creator s return pool } -func (s *KeeperTestSuite) CreateNewLiquidityRangedPool(appID, pairID uint64, creator sdk.AccAddress, depositCoins string, minPrice, maxPrice, initialPrice sdk.Dec) types.Pool { +func (s *KeeperTestSuite) CreateNewLiquidityRangedPool(appID, pairID uint64, creator sdk.AccAddress, depositCoins string, minPrice, maxPrice, initialPrice sdkmath.LegacyDec) types.Pool { params, err := s.keeper.GetGenericParams(s.ctx, appID) s.Require().NoError(err) @@ -235,8 +236,8 @@ func (s *KeeperTestSuite) LimitOrder( orderer sdk.AccAddress, pairId uint64, dir types.OrderDirection, - price sdk.Dec, - amt sdk.Int, + price sdkmath.LegacyDec, + amt sdkmath.Int, orderLifespan time.Duration, ) types.Order { s.T().Helper() @@ -258,7 +259,7 @@ func (s *KeeperTestSuite) LimitOrder( params, err := s.keeper.GetGenericParams(s.ctx, appID) s.Require().NoError(err) - offerCoin = offerCoin.Add(sdk.NewCoin(offerCoin.Denom, sdk.NewDec(offerCoin.Amount.Int64()).Mul(params.SwapFeeRate).RoundInt())) + offerCoin = offerCoin.Add(sdk.NewCoin(offerCoin.Denom, sdkmath.LegacyNewDec(offerCoin.Amount.Int64()).Mul(params.SwapFeeRate).RoundInt())) s.fundAddr(orderer, sdk.NewCoins(offerCoin)) msg := types.NewMsgLimitOrder( @@ -275,7 +276,7 @@ func (s *KeeperTestSuite) MarketOrder( orderer sdk.AccAddress, pairId uint64, dir types.OrderDirection, - amt sdk.Int, + amt sdkmath.Int, orderLifespan time.Duration, ) types.Order { s.T().Helper() @@ -289,7 +290,7 @@ func (s *KeeperTestSuite) MarketOrder( var demandCoinDenom string switch dir { case types.OrderDirectionBuy: - maxPrice := lastPrice.Mul(sdk.OneDec().Add(params.MaxPriceLimitRatio)) + maxPrice := lastPrice.Mul(sdkmath.LegacyOneDec().Add(params.MaxPriceLimitRatio)) offerCoin = sdk.NewCoin(pair.QuoteCoinDenom, amm.OfferCoinAmount(amm.Buy, maxPrice, amt)) demandCoinDenom = pair.BaseCoinDenom case types.OrderDirectionSell: @@ -297,7 +298,7 @@ func (s *KeeperTestSuite) MarketOrder( demandCoinDenom = pair.QuoteCoinDenom } - offerCoin = offerCoin.Add(sdk.NewCoin(offerCoin.Denom, sdk.NewDec(offerCoin.Amount.Int64()).Mul(params.SwapFeeRate).RoundInt())) + offerCoin = offerCoin.Add(sdk.NewCoin(offerCoin.Denom, sdkmath.LegacyNewDec(offerCoin.Amount.Int64()).Mul(params.SwapFeeRate).RoundInt())) s.fundAddr(orderer, sdk.NewCoins(offerCoin)) msg := types.NewMsgMarketOrder( @@ -311,8 +312,8 @@ func (s *KeeperTestSuite) MarketOrder( func (s *KeeperTestSuite) MarketMakingOrder( orderer sdk.AccAddress, appID, pairId uint64, - maxSellPrice, minSellPrice sdk.Dec, sellAmt sdk.Int, - maxBuyPrice, minBuyPrice sdk.Dec, buyAmt sdk.Int, + maxSellPrice, minSellPrice sdkmath.LegacyDec, sellAmt sdkmath.Int, + maxBuyPrice, minBuyPrice sdkmath.LegacyDec, buyAmt sdkmath.Int, orderLifespan time.Duration, fund bool) []types.Order { s.T().Helper() params, err := s.keeper.GetGenericParams(s.ctx, appID) diff --git a/x/liquidity/keeper/pair_test.go b/x/liquidity/keeper/pair_test.go index 59757a868..f6d62594f 100644 --- a/x/liquidity/keeper/pair_test.go +++ b/x/liquidity/keeper/pair_test.go @@ -1,6 +1,7 @@ package keeper_test import ( + sdkmath "cosmossdk.io/math" "github.com/comdex-official/comdex/x/liquidity/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -233,7 +234,7 @@ func (s *KeeperTestSuite) TestCreatePair() { params, err := s.keeper.GetGenericParams(s.ctx, tc.Msg.AppId) s.Require().NoError(err) collectedPairCreationFee := s.getBalances(sdk.MustAccAddressFromBech32(params.FeeCollectorAddress)) - s.Require().True(sdk.NewCoins(sdk.NewCoin(params.PairCreationFee[0].Denom, params.PairCreationFee[0].Amount.Mul(sdk.NewInt(int64(tc.QueryResponseIndex+1))))).IsEqual(collectedPairCreationFee)) + s.Require().True(sdk.NewCoins(sdk.NewCoin(params.PairCreationFee[0].Denom, params.PairCreationFee[0].Amount.Mul(sdkmath.NewInt(int64(tc.QueryResponseIndex+1))))).IsEqual(collectedPairCreationFee)) pairs := s.keeper.GetAllPairs(s.ctx, tc.Msg.AppId) s.Require().Len(pairs, int(tc.QueryResponseIndex)+1) diff --git a/x/liquidity/keeper/pool.go b/x/liquidity/keeper/pool.go index b8c5747c7..4a985efb2 100644 --- a/x/liquidity/keeper/pool.go +++ b/x/liquidity/keeper/pool.go @@ -4,6 +4,7 @@ import ( "fmt" "strconv" + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -59,7 +60,7 @@ func (k Keeper) getPoolBalances(ctx sdk.Context, pool types.Pool, pair types.Pai } // GetPoolCoinSupply returns total pool coin supply of the pool. -func (k Keeper) GetPoolCoinSupply(ctx sdk.Context, pool types.Pool) sdk.Int { +func (k Keeper) GetPoolCoinSupply(ctx sdk.Context, pool types.Pool) sdkmath.Int { return k.bankKeeper.GetSupply(ctx, pool.PoolCoinDenom).Amount } @@ -160,7 +161,7 @@ func (k Keeper) CreatePool(ctx sdk.Context, msg *types.MsgCreatePool) (types.Poo // Mint and send pool coin to the creator. // Minting pool coin amount is calculated based on two coins' amount. // Minimum minting amount is params.MinInitialPoolCoinSupply. - ps := sdk.MaxInt( + ps := sdkmath.MaxInt( ammPool.PoolCoinSupply(), params.MinInitialPoolCoinSupply, ) @@ -178,7 +179,7 @@ func (k Keeper) CreatePool(ctx sdk.Context, msg *types.MsgCreatePool) (types.Poo ctx.BlockTime(), rewardstypes.LiquidityGaugeTypeID, types.DefaultSwapFeeDistributionDuration, - sdk.NewCoin(params.SwapFeeDistrDenom, sdk.NewInt(0)), + sdk.NewCoin(params.SwapFeeDistrDenom, sdkmath.NewInt(0)), 1, ) newGauge.Kind = &rewardstypes.MsgCreateGauge_LiquidityMetaData{ @@ -312,7 +313,7 @@ func (k Keeper) CreateRangedPool(ctx sdk.Context, msg *types.MsgCreateRangedPool // Mint and send pool coin to the creator. // Minimum minting amount is params.MinInitialPoolCoinSupply. - ps := sdk.MaxInt(ammPool.PoolCoinSupply(), params.MinInitialPoolCoinSupply) + ps := sdkmath.MaxInt(ammPool.PoolCoinSupply(), params.MinInitialPoolCoinSupply) poolCoin := sdk.NewCoin(pool.PoolCoinDenom, ps) if err := k.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(poolCoin)); err != nil { return types.Pool{}, err @@ -327,7 +328,7 @@ func (k Keeper) CreateRangedPool(ctx sdk.Context, msg *types.MsgCreateRangedPool ctx.BlockTime(), rewardstypes.LiquidityGaugeTypeID, types.DefaultSwapFeeDistributionDuration, - sdk.NewCoin(params.SwapFeeDistrDenom, sdk.NewInt(0)), + sdk.NewCoin(params.SwapFeeDistrDenom, sdkmath.NewInt(0)), 1, ) newGauge.Kind = &rewardstypes.MsgCreateGauge_LiquidityMetaData{ @@ -708,7 +709,7 @@ func (k Keeper) TransferFundsForSwapFeeDistribution(ctx sdk.Context, appID, requ return sdk.Coin{}, types.ErrOraclePricesNotFound } // moduleAddr := k.accountKeeper.GetModuleAddress(types.ModuleName) - poolLiquidityMap := make(map[uint64]sdk.Dec) + poolLiquidityMap := make(map[uint64]sdkmath.LegacyDec) for _, pool := range allPoolsForPair { if pool.Disabled { continue @@ -723,32 +724,32 @@ func (k Keeper) TransferFundsForSwapFeeDistribution(ctx sdk.Context, appID, requ baseValue, _ := k.CalcAssetPrice(ctx, baseAsset.Id, ry.Amount) totalValue := quoteValue.Add(baseValue) if !totalValue.IsPositive() { - return sdk.NewCoin(params.SwapFeeDistrDenom, sdk.ZeroInt()), nil + return sdk.NewCoin(params.SwapFeeDistrDenom, sdkmath.ZeroInt()), nil } poolLiquidityMap[pool.Id] = totalValue } - totalLiquidity := sdk.ZeroDec() + totalLiquidity := sdkmath.LegacyZeroDec() for _, pLiquidity := range poolLiquidityMap { totalLiquidity = totalLiquidity.Add(pLiquidity) } requestedPoolShare := poolLiquidityMap[requestedPoolID].Quo(totalLiquidity) - eligibleSwapFeeAmount := requestedPoolShare.Mul(sdk.NewDec(availableBalance.Amount.Int64())) + eligibleSwapFeeAmount := requestedPoolShare.Mul(sdkmath.LegacyNewDec(availableBalance.Amount.Int64())) availableBalance.Amount = eligibleSwapFeeAmount.RoundInt() } - burnAmount := sdk.NewDec(availableBalance.Amount.Int64()).MulTruncate(params.SwapFeeBurnRate).TruncateInt() + burnAmount := sdkmath.LegacyNewDec(availableBalance.Amount.Int64()).MulTruncate(params.SwapFeeBurnRate).TruncateInt() burnCoin := sdk.NewCoin(availableBalance.Denom, burnAmount) if burnCoin.Amount.IsPositive() { err = k.bankKeeper.SendCoinsFromAccountToModule(ctx, pair.GetSwapFeeCollectorAddress(), types.ModuleName, sdk.NewCoins(burnCoin)) if err != nil { - return sdk.NewCoin(params.SwapFeeDistrDenom, sdk.ZeroInt()), err + return sdk.NewCoin(params.SwapFeeDistrDenom, sdkmath.ZeroInt()), err } err = k.bankKeeper.BurnCoins(ctx, types.ModuleName, sdk.NewCoins(burnCoin)) if err != nil { - return sdk.NewCoin(params.SwapFeeDistrDenom, sdk.ZeroInt()), err + return sdk.NewCoin(params.SwapFeeDistrDenom, sdkmath.ZeroInt()), err } } @@ -757,19 +758,19 @@ func (k Keeper) TransferFundsForSwapFeeDistribution(ctx sdk.Context, appID, requ if availableBalance.IsPositive() { err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, pair.GetSwapFeeCollectorAddress(), rewardstypes.ModuleName, sdk.NewCoins(availableBalance)) if err != nil { - return sdk.NewCoin(params.SwapFeeDistrDenom, sdk.ZeroInt()), err + return sdk.NewCoin(params.SwapFeeDistrDenom, sdkmath.ZeroInt()), err } } else { // negative amount handalling - availableBalance.Amount = sdk.NewInt(0) + availableBalance.Amount = sdkmath.NewInt(0) } return availableBalance, nil } -func (k Keeper) WasmMsgAddEmissionPoolRewards(ctx sdk.Context, appID, cswapAppID uint64, amount sdk.Int, pool []uint64, votingRatio []sdk.Int) error { +func (k Keeper) WasmMsgAddEmissionPoolRewards(ctx sdk.Context, appID, cswapAppID uint64, amount sdkmath.Int, pool []uint64, votingRatio []sdkmath.Int) error { var assetID uint64 - totalVote := sdk.ZeroInt() + totalVote := sdkmath.ZeroInt() app, _ := k.assetKeeper.GetApp(ctx, appID) govToken := app.GenesisToken for _, v := range govToken { @@ -778,7 +779,7 @@ func (k Keeper) WasmMsgAddEmissionPoolRewards(ctx sdk.Context, appID, cswapAppID } } asset, _ := k.assetKeeper.GetAsset(ctx, assetID) - if amount.GT(sdk.ZeroInt()) { + if amount.GT(sdkmath.ZeroInt()) { err := k.bankKeeper.MintCoins(ctx, tokenminttypes.ModuleName, sdk.NewCoins(sdk.NewCoin(asset.Denom, amount))) if err != nil { return err @@ -793,18 +794,18 @@ func (k Keeper) WasmMsgAddEmissionPoolRewards(ctx sdk.Context, appID, cswapAppID moduleAddr := k.accountKeeper.GetModuleAddress(types.ModuleName) farmedCoins := k.bankKeeper.GetBalance(ctx, moduleAddr, pool.PoolCoinDenom) individualVote := votingRatio[j] - votingR := sdk.NewDec(individualVote.Int64()).Quo(sdk.NewDec(totalVote.Int64())) - shareByPool := votingR.Mul(sdk.NewDec(amount.Int64())) + votingR := sdkmath.LegacyNewDec(individualVote.Int64()).Quo(sdkmath.LegacyNewDec(totalVote.Int64())) + shareByPool := votingR.Mul(sdkmath.LegacyNewDec(amount.Int64())) if farmedCoins.IsZero() { continue } - perUserShareByAmtDec := shareByPool.Quo(sdk.NewDec(farmedCoins.Amount.Int64())) + perUserShareByAmtDec := shareByPool.Quo(sdkmath.LegacyNewDec(farmedCoins.Amount.Int64())) allActiveFarmer := k.GetAllActiveFarmers(ctx, cswapAppID, extP) for _, farmerDetail := range allActiveFarmer { - amt := sdk.NewDecFromInt(farmerDetail.FarmedPoolCoin.Amount).Mul(perUserShareByAmtDec) + amt := sdkmath.LegacyNewDecFromInt(farmerDetail.FarmedPoolCoin.Amount).Mul(perUserShareByAmtDec) addr, _ := sdk.AccAddressFromBech32(farmerDetail.Farmer) - if amt.GT(sdk.NewDec(0)) { + if amt.GT(sdkmath.LegacyNewDec(0)) { err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, tokenminttypes.ModuleName, addr, sdk.NewCoins(sdk.NewCoin(asset.Denom, amt.TruncateInt()))) if err != nil { return err diff --git a/x/liquidity/keeper/pool_test.go b/x/liquidity/keeper/pool_test.go index 573e8081a..c51335b0b 100644 --- a/x/liquidity/keeper/pool_test.go +++ b/x/liquidity/keeper/pool_test.go @@ -5,6 +5,8 @@ import ( "github.com/comdex-official/comdex/x/liquidity" "github.com/comdex-official/comdex/x/liquidity/amm" "github.com/comdex-official/comdex/x/liquidity/types" + + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" _ "github.com/stretchr/testify/suite" @@ -27,7 +29,7 @@ func (s *KeeperTestSuite) TestCreatePool() { params, err := s.keeper.GetGenericParams(s.ctx, appID1) s.Require().NoError(err) - s.fundAddr(addr1, sdk.NewCoins(sdk.NewCoin(dummyPair2.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(dummyPair2.QuoteCoinDenom, sdk.NewInt(1000000000000)))) + s.fundAddr(addr1, sdk.NewCoins(sdk.NewCoin(dummyPair2.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(dummyPair2.QuoteCoinDenom, sdkmath.NewInt(1000000000000)))) testCases := []struct { Name string @@ -41,7 +43,7 @@ func (s *KeeperTestSuite) TestCreatePool() { { Name: "error app id invalid", Msg: *types.NewMsgCreatePool( - 69, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdk.NewInt(1000000000000))), + 69, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), ), ExpErr: sdkerrors.Wrapf(types.ErrInvalidAppID, "app id %d not found", 69), ExpResp: &types.Pool{}, @@ -52,7 +54,7 @@ func (s *KeeperTestSuite) TestCreatePool() { { Name: "error pair id invalid", Msg: *types.NewMsgCreatePool( - appID1, addr1, 12, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdk.NewInt(1000000000000))), + appID1, addr1, 12, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), ), ExpErr: sdkerrors.Wrapf(sdkerrors.ErrNotFound, "pair %d not found", 12), ExpResp: &types.Pool{}, @@ -63,7 +65,7 @@ func (s *KeeperTestSuite) TestCreatePool() { { Name: "error invalid deposit coin denom 1", Msg: *types.NewMsgCreatePool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin("fakedenom1", sdk.NewInt(1000000000000)), sdk.NewCoin("fakedenom2", sdk.NewInt(1000000000000))), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin("fakedenom1", sdkmath.NewInt(1000000000000)), sdk.NewCoin("fakedenom2", sdkmath.NewInt(1000000000000))), ), ExpErr: sdkerrors.Wrapf(types.ErrInvalidCoinDenom, "coin denom %s is not in the pair", "fakedenom1"), ExpResp: &types.Pool{}, @@ -74,7 +76,7 @@ func (s *KeeperTestSuite) TestCreatePool() { { Name: "error invalid deposit coin denom 2", Msg: *types.NewMsgCreatePool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin("fakedenom2", sdk.NewInt(1000000000000))), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin("fakedenom2", sdkmath.NewInt(1000000000000))), ), ExpErr: sdkerrors.Wrapf(types.ErrInvalidCoinDenom, "coin denom %s is not in the pair", "fakedenom2"), ExpResp: &types.Pool{}, @@ -85,7 +87,7 @@ func (s *KeeperTestSuite) TestCreatePool() { { Name: "error invalid deposit coin denom 3", Msg: *types.NewMsgCreatePool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin("fakedenom1", sdk.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdk.NewInt(1000000000000))), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin("fakedenom1", sdkmath.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), ), ExpErr: sdkerrors.Wrapf(types.ErrInvalidCoinDenom, "coin denom %s is not in the pair", "fakedenom1"), ExpResp: &types.Pool{}, @@ -96,9 +98,9 @@ func (s *KeeperTestSuite) TestCreatePool() { { Name: "error smaller than minimum deposit amount 1", Msg: *types.NewMsgCreatePool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount.Sub(sdk.NewInt(1))), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdk.NewInt(1)))), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount.Sub(sdkmath.NewInt(1))), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdkmath.NewInt(1)))), ), - ExpErr: sdkerrors.Wrapf(types.ErrInsufficientDepositAmount, "%s is smaller than %s", sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount.Sub(sdk.NewInt(1))), sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount)), + ExpErr: sdkerrors.Wrapf(types.ErrInsufficientDepositAmount, "%s is smaller than %s", sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount.Sub(sdkmath.NewInt(1))), sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount)), ExpResp: &types.Pool{}, QueryResponseIndex: 0, QueryResponse: nil, @@ -107,9 +109,9 @@ func (s *KeeperTestSuite) TestCreatePool() { { Name: "error smaller than minimum deposit amount 2", Msg: *types.NewMsgCreatePool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdk.NewInt(1)))), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdkmath.NewInt(1)))), ), - ExpErr: sdkerrors.Wrapf(types.ErrInsufficientDepositAmount, "%s is smaller than %s", sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdk.NewInt(1))), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount)), + ExpErr: sdkerrors.Wrapf(types.ErrInsufficientDepositAmount, "%s is smaller than %s", sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdkmath.NewInt(1))), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount)), ExpResp: &types.Pool{}, QueryResponseIndex: 0, QueryResponse: nil, @@ -120,7 +122,7 @@ func (s *KeeperTestSuite) TestCreatePool() { { Name: "error insufficient deposit coins", Msg: *types.NewMsgCreatePool( - appID1, addr1, dummyPair1.Id, sdk.NewCoins(sdk.NewCoin(dummyPair1.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(dummyPair1.QuoteCoinDenom, sdk.NewInt(1000000000000))), + appID1, addr1, dummyPair1.Id, sdk.NewCoins(sdk.NewCoin(dummyPair1.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(dummyPair1.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), ), ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance is smaller than 1000000000000%s", dummyPair1.QuoteCoinDenom), ExpResp: &types.Pool{}, @@ -133,7 +135,7 @@ func (s *KeeperTestSuite) TestCreatePool() { { Name: "error insufficient pool creation fees", Msg: *types.NewMsgCreatePool( - appID1, addr1, dummyPair2.Id, sdk.NewCoins(sdk.NewCoin(dummyPair2.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(dummyPair2.QuoteCoinDenom, sdk.NewInt(1000000000000))), + appID1, addr1, dummyPair2.Id, sdk.NewCoins(sdk.NewCoin(dummyPair2.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(dummyPair2.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), ), ExpErr: sdkerrors.Wrap(sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance is smaller than %s", params.PoolCreationFee[0].String()), "insufficient pool creation fee"), ExpResp: &types.Pool{}, @@ -144,7 +146,7 @@ func (s *KeeperTestSuite) TestCreatePool() { { Name: "success valid case app1 pair1", Msg: *types.NewMsgCreatePool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdk.NewInt(1000000000000))), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), ), ExpErr: nil, ExpResp: &types.Pool{ @@ -172,12 +174,12 @@ func (s *KeeperTestSuite) TestCreatePool() { Type: types.PoolTypeBasic, Creator: addr1.String(), }, - AvailableBalance: sdk.NewCoins(sdk.NewCoin("pool1-3", amm.InitialPoolCoinSupply(sdk.NewInt(1000000000000), sdk.NewInt(1000000000000)))), + AvailableBalance: sdk.NewCoins(sdk.NewCoin("pool1-3", amm.InitialPoolCoinSupply(sdkmath.NewInt(1000000000000), sdkmath.NewInt(1000000000000)))), }, { Name: "error pool already exists", Msg: *types.NewMsgCreatePool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdk.NewInt(1000000000000))), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), ), ExpErr: types.ErrPoolAlreadyExists, ExpResp: &types.Pool{}, @@ -188,7 +190,7 @@ func (s *KeeperTestSuite) TestCreatePool() { { Name: "success valid case app2 pair1", Msg: *types.NewMsgCreatePool( - appID2, addr1, app2pair.Id, sdk.NewCoins(sdk.NewCoin(app2pair.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(app2pair.QuoteCoinDenom, sdk.NewInt(1000000000000))), + appID2, addr1, app2pair.Id, sdk.NewCoins(sdk.NewCoin(app2pair.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(app2pair.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), ), ExpErr: nil, ExpResp: &types.Pool{ @@ -216,7 +218,7 @@ func (s *KeeperTestSuite) TestCreatePool() { Type: types.PoolTypeBasic, Creator: addr1.String(), }, - AvailableBalance: sdk.NewCoins(sdk.NewCoin("pool1-3", amm.InitialPoolCoinSupply(sdk.NewInt(1000000000000), sdk.NewInt(1000000000000))), sdk.NewCoin("pool2-1", amm.InitialPoolCoinSupply(sdk.NewInt(1000000000000), sdk.NewInt(1000000000000)))), + AvailableBalance: sdk.NewCoins(sdk.NewCoin("pool1-3", amm.InitialPoolCoinSupply(sdkmath.NewInt(1000000000000), sdkmath.NewInt(1000000000000))), sdk.NewCoin("pool2-1", amm.InitialPoolCoinSupply(sdkmath.NewInt(1000000000000), sdkmath.NewInt(1000000000000)))), }, } @@ -247,13 +249,13 @@ func (s *KeeperTestSuite) TestCreatePool() { params, err := s.keeper.GetGenericParams(s.ctx, tc.Msg.AppId) s.Require().NoError(err) - expectedPairCreationFeesCollected := sdk.NewCoin(params.PairCreationFee[0].Denom, params.PairCreationFee[0].Amount.Mul(sdk.NewInt(int64(len(s.keeper.GetAllPairs(s.ctx, tc.Msg.AppId)))))) + expectedPairCreationFeesCollected := sdk.NewCoin(params.PairCreationFee[0].Denom, params.PairCreationFee[0].Amount.Mul(sdkmath.NewInt(int64(len(s.keeper.GetAllPairs(s.ctx, tc.Msg.AppId)))))) expectedPoolCreationFeesCollected := sdk.Coin{} if tc.Msg.AppId == appID1 { - expectedPoolCreationFeesCollected = sdk.NewCoin(params.PoolCreationFee[0].Denom, params.PoolCreationFee[0].Amount.Mul(sdk.NewInt(int64(tc.QueryResponseIndex-1)))) + expectedPoolCreationFeesCollected = sdk.NewCoin(params.PoolCreationFee[0].Denom, params.PoolCreationFee[0].Amount.Mul(sdkmath.NewInt(int64(tc.QueryResponseIndex-1)))) } else { - expectedPoolCreationFeesCollected = sdk.NewCoin(params.PoolCreationFee[0].Denom, params.PoolCreationFee[0].Amount.Mul(sdk.NewInt(int64(tc.QueryResponseIndex+1)))) + expectedPoolCreationFeesCollected = sdk.NewCoin(params.PoolCreationFee[0].Denom, params.PoolCreationFee[0].Amount.Mul(sdkmath.NewInt(int64(tc.QueryResponseIndex+1)))) } collectedPairPoolCreationFee := s.getBalances(sdk.MustAccAddressFromBech32(params.FeeCollectorAddress)) @@ -377,8 +379,8 @@ func (s *KeeperTestSuite) TestDeposit() { app2Pool := s.CreateNewLiquidityPool(appID2, app2Pair.Id, addr1, "1000000000000uasset1,1000000000000uasset2") addr1AvailableBalance := sdk.NewCoins( - sdk.NewCoin(app1Pool.PoolCoinDenom, amm.InitialPoolCoinSupply(sdk.NewInt(1000000000000), sdk.NewInt(1000000000000))), - sdk.NewCoin(app2Pool.PoolCoinDenom, amm.InitialPoolCoinSupply(sdk.NewInt(1000000000000), sdk.NewInt(1000000000000))), + sdk.NewCoin(app1Pool.PoolCoinDenom, amm.InitialPoolCoinSupply(sdkmath.NewInt(1000000000000), sdkmath.NewInt(1000000000000))), + sdk.NewCoin(app2Pool.PoolCoinDenom, amm.InitialPoolCoinSupply(sdkmath.NewInt(1000000000000), sdkmath.NewInt(1000000000000))), ) testCases := []struct { @@ -393,7 +395,7 @@ func (s *KeeperTestSuite) TestDeposit() { { Name: "error app id invalid", Msg: *types.NewMsgDeposit( - 69, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdk.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdk.NewInt(100000000))), + 69, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdkmath.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdkmath.NewInt(100000000))), ), ExpErr: sdkerrors.Wrapf(types.ErrInvalidAppID, "app id %d not found", 69), ExpResp: &types.DepositRequest{}, @@ -404,7 +406,7 @@ func (s *KeeperTestSuite) TestDeposit() { { Name: "error pool id invalid", Msg: *types.NewMsgDeposit( - appID1, addr1, 69, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdk.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdk.NewInt(100000000))), + appID1, addr1, 69, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdkmath.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdkmath.NewInt(100000000))), ), ExpErr: sdkerrors.Wrapf(sdkerrors.ErrNotFound, "pool %d not found", 69), ExpResp: &types.DepositRequest{}, @@ -415,7 +417,7 @@ func (s *KeeperTestSuite) TestDeposit() { { Name: "error invalid deposit coin 1", Msg: *types.NewMsgDeposit( - appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin("fakedenom1", sdk.NewInt(100000000)), sdk.NewCoin("fakedenom2", sdk.NewInt(100000000))), + appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin("fakedenom1", sdkmath.NewInt(100000000)), sdk.NewCoin("fakedenom2", sdkmath.NewInt(100000000))), ), ExpErr: sdkerrors.Wrapf(types.ErrInvalidCoinDenom, "coin denom fakedenom1 is not in the pair"), ExpResp: &types.DepositRequest{}, @@ -426,7 +428,7 @@ func (s *KeeperTestSuite) TestDeposit() { { Name: "error invalid deposit coin 2", Msg: *types.NewMsgDeposit( - appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdk.NewInt(100000000)), sdk.NewCoin("fakedenom2", sdk.NewInt(100000000))), + appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdkmath.NewInt(100000000)), sdk.NewCoin("fakedenom2", sdkmath.NewInt(100000000))), ), ExpErr: sdkerrors.Wrapf(types.ErrInvalidCoinDenom, "coin denom fakedenom2 is not in the pair"), ExpResp: &types.DepositRequest{}, @@ -437,7 +439,7 @@ func (s *KeeperTestSuite) TestDeposit() { { Name: "error invalid deposit coin 3", Msg: *types.NewMsgDeposit( - appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin("fakedenom1", sdk.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdk.NewInt(100000000))), + appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin("fakedenom1", sdkmath.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdkmath.NewInt(100000000))), ), ExpErr: sdkerrors.Wrapf(types.ErrInvalidCoinDenom, "coin denom fakedenom1 is not in the pair"), ExpResp: &types.DepositRequest{}, @@ -448,7 +450,7 @@ func (s *KeeperTestSuite) TestDeposit() { { Name: "error insufficeint deposit coins", Msg: *types.NewMsgDeposit( - appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdk.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdk.NewInt(100000000))), + appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdkmath.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdkmath.NewInt(100000000))), ), ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance is smaller than 100000000%s", app1Pair.BaseCoinDenom), ExpResp: &types.DepositRequest{}, @@ -459,7 +461,7 @@ func (s *KeeperTestSuite) TestDeposit() { { Name: "success valid case 1 app1 pool1", Msg: *types.NewMsgDeposit( - appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdk.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdk.NewInt(100000000))), + appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdkmath.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdkmath.NewInt(100000000))), ), ExpErr: nil, ExpResp: &types.DepositRequest{ @@ -467,20 +469,20 @@ func (s *KeeperTestSuite) TestDeposit() { PoolId: 1, MsgHeight: 0, Depositor: addr1.String(), - DepositCoins: sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdk.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdk.NewInt(100000000))), + DepositCoins: sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdkmath.NewInt(100000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdkmath.NewInt(100000000))), AcceptedCoins: nil, - MintedPoolCoin: sdk.NewCoin(app1Pool.PoolCoinDenom, sdk.NewInt(0)), + MintedPoolCoin: sdk.NewCoin(app1Pool.PoolCoinDenom, sdkmath.NewInt(0)), Status: types.RequestStatusNotExecuted, AppId: appID1, }, QueryResponseIndex: 0, QueryResponse: nil, - AvailableBalance: addr1AvailableBalance.Add(sdk.NewCoin(app1Pool.PoolCoinDenom, sdk.NewInt(1000000000))), + AvailableBalance: addr1AvailableBalance.Add(sdk.NewCoin(app1Pool.PoolCoinDenom, sdkmath.NewInt(1000000000))), }, { Name: "success valid case 2 app1 pool1", Msg: *types.NewMsgDeposit( - appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdk.NewInt(300000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdk.NewInt(300000000))), + appID1, addr1, app1Pool.Id, sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdkmath.NewInt(300000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdkmath.NewInt(300000000))), ), ExpErr: nil, ExpResp: &types.DepositRequest{ @@ -488,20 +490,20 @@ func (s *KeeperTestSuite) TestDeposit() { PoolId: 1, MsgHeight: 0, Depositor: addr1.String(), - DepositCoins: sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdk.NewInt(300000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdk.NewInt(300000000))), + DepositCoins: sdk.NewCoins(sdk.NewCoin(app1Pair.BaseCoinDenom, sdkmath.NewInt(300000000)), sdk.NewCoin(app1Pair.QuoteCoinDenom, sdkmath.NewInt(300000000))), AcceptedCoins: nil, - MintedPoolCoin: sdk.NewCoin(app1Pool.PoolCoinDenom, sdk.NewInt(0)), + MintedPoolCoin: sdk.NewCoin(app1Pool.PoolCoinDenom, sdkmath.NewInt(0)), Status: types.RequestStatusNotExecuted, AppId: appID1, }, QueryResponseIndex: 0, QueryResponse: nil, - AvailableBalance: addr1AvailableBalance.Add(sdk.NewCoin(app1Pool.PoolCoinDenom, sdk.NewInt(3999999999))), + AvailableBalance: addr1AvailableBalance.Add(sdk.NewCoin(app1Pool.PoolCoinDenom, sdkmath.NewInt(3999999999))), }, { Name: "success valid case 3 app2 pool1", Msg: *types.NewMsgDeposit( - appID2, addr1, app2Pool.Id, sdk.NewCoins(sdk.NewCoin(app2Pair.BaseCoinDenom, sdk.NewInt(100000000)), sdk.NewCoin(app2Pair.QuoteCoinDenom, sdk.NewInt(100000000))), + appID2, addr1, app2Pool.Id, sdk.NewCoins(sdk.NewCoin(app2Pair.BaseCoinDenom, sdkmath.NewInt(100000000)), sdk.NewCoin(app2Pair.QuoteCoinDenom, sdkmath.NewInt(100000000))), ), ExpErr: nil, ExpResp: &types.DepositRequest{ @@ -509,20 +511,20 @@ func (s *KeeperTestSuite) TestDeposit() { PoolId: 1, MsgHeight: 0, Depositor: addr1.String(), - DepositCoins: sdk.NewCoins(sdk.NewCoin(app2Pair.BaseCoinDenom, sdk.NewInt(100000000)), sdk.NewCoin(app2Pair.QuoteCoinDenom, sdk.NewInt(100000000))), + DepositCoins: sdk.NewCoins(sdk.NewCoin(app2Pair.BaseCoinDenom, sdkmath.NewInt(100000000)), sdk.NewCoin(app2Pair.QuoteCoinDenom, sdkmath.NewInt(100000000))), AcceptedCoins: nil, - MintedPoolCoin: sdk.NewCoin(app2Pool.PoolCoinDenom, sdk.NewInt(0)), + MintedPoolCoin: sdk.NewCoin(app2Pool.PoolCoinDenom, sdkmath.NewInt(0)), Status: types.RequestStatusNotExecuted, AppId: appID2, }, QueryResponseIndex: 0, QueryResponse: nil, - AvailableBalance: addr1AvailableBalance.Add(sdk.NewCoin(app1Pool.PoolCoinDenom, sdk.NewInt(3999999999))).Add(sdk.NewCoin(app2Pool.PoolCoinDenom, sdk.NewInt(1000000000))), + AvailableBalance: addr1AvailableBalance.Add(sdk.NewCoin(app1Pool.PoolCoinDenom, sdkmath.NewInt(3999999999))).Add(sdk.NewCoin(app2Pool.PoolCoinDenom, sdkmath.NewInt(1000000000))), }, { Name: "success valid case 4 app2 pool1", Msg: *types.NewMsgDeposit( - appID2, addr1, app2Pool.Id, sdk.NewCoins(sdk.NewCoin(app2Pair.BaseCoinDenom, sdk.NewInt(700000000)), sdk.NewCoin(app2Pair.QuoteCoinDenom, sdk.NewInt(700000000))), + appID2, addr1, app2Pool.Id, sdk.NewCoins(sdk.NewCoin(app2Pair.BaseCoinDenom, sdkmath.NewInt(700000000)), sdk.NewCoin(app2Pair.QuoteCoinDenom, sdkmath.NewInt(700000000))), ), ExpErr: nil, ExpResp: &types.DepositRequest{ @@ -530,15 +532,15 @@ func (s *KeeperTestSuite) TestDeposit() { PoolId: 1, MsgHeight: 0, Depositor: addr1.String(), - DepositCoins: sdk.NewCoins(sdk.NewCoin(app2Pair.BaseCoinDenom, sdk.NewInt(700000000)), sdk.NewCoin(app2Pair.QuoteCoinDenom, sdk.NewInt(700000000))), + DepositCoins: sdk.NewCoins(sdk.NewCoin(app2Pair.BaseCoinDenom, sdkmath.NewInt(700000000)), sdk.NewCoin(app2Pair.QuoteCoinDenom, sdkmath.NewInt(700000000))), AcceptedCoins: nil, - MintedPoolCoin: sdk.NewCoin(app2Pool.PoolCoinDenom, sdk.NewInt(0)), + MintedPoolCoin: sdk.NewCoin(app2Pool.PoolCoinDenom, sdkmath.NewInt(0)), Status: types.RequestStatusNotExecuted, AppId: appID2, }, QueryResponseIndex: 0, QueryResponse: nil, - AvailableBalance: addr1AvailableBalance.Add(sdk.NewCoin(app1Pool.PoolCoinDenom, sdk.NewInt(3999999999))).Add(sdk.NewCoin(app2Pool.PoolCoinDenom, sdk.NewInt(7999999999))), + AvailableBalance: addr1AvailableBalance.Add(sdk.NewCoin(app1Pool.PoolCoinDenom, sdkmath.NewInt(3999999999))).Add(sdk.NewCoin(app2Pool.PoolCoinDenom, sdkmath.NewInt(7999999999))), }, } @@ -940,8 +942,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { Name: "error app id invalid", Msg: *types.NewMsgCreateRangedPool( 69, addr1, app1pair.Id, - sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdk.NewInt(1000000000000))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), + sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1"), ), ExpErr: sdkerrors.Wrapf(types.ErrInvalidAppID, "app id %d not found", 69), ExpResp: &types.Pool{}, @@ -953,8 +955,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { Name: "error pair id invalid", Msg: *types.NewMsgCreateRangedPool( appID1, addr1, 12, - sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdk.NewInt(1000000000000))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), + sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1"), ), ExpErr: sdkerrors.Wrapf(sdkerrors.ErrNotFound, "pair %d not found", 12), ExpResp: &types.Pool{}, @@ -966,8 +968,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { Name: "error invalid deposit coin denom 1", Msg: *types.NewMsgCreateRangedPool( appID1, addr1, app1pair.Id, - sdk.NewCoins(sdk.NewCoin("fakedenom1", sdk.NewInt(1000000000000)), sdk.NewCoin("fakedenom2", sdk.NewInt(1000000000000))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), + sdk.NewCoins(sdk.NewCoin("fakedenom1", sdkmath.NewInt(1000000000000)), sdk.NewCoin("fakedenom2", sdkmath.NewInt(1000000000000))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1"), ), ExpErr: sdkerrors.Wrapf(types.ErrInvalidCoinDenom, "coin denom %s is not in the pair", "fakedenom1"), ExpResp: &types.Pool{}, @@ -978,8 +980,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { { Name: "error invalid deposit coin denom 2", Msg: *types.NewMsgCreateRangedPool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin("fakedenom2", sdk.NewInt(1000000000000))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin("fakedenom2", sdkmath.NewInt(1000000000000))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1"), ), ExpErr: sdkerrors.Wrapf(types.ErrInvalidCoinDenom, "coin denom %s is not in the pair", "fakedenom2"), ExpResp: &types.Pool{}, @@ -990,8 +992,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { { Name: "error invalid deposit coin denom 3", Msg: *types.NewMsgCreateRangedPool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin("fakedenom1", sdk.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdk.NewInt(1000000000000))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin("fakedenom1", sdkmath.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1"), ), ExpErr: sdkerrors.Wrapf(types.ErrInvalidCoinDenom, "coin denom %s is not in the pair", "fakedenom1"), ExpResp: &types.Pool{}, @@ -1002,8 +1004,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { { Name: "error smaller than minimum deposit amount 1", Msg: *types.NewMsgCreateRangedPool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount.Sub(sdk.NewInt(1))), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdk.NewInt(1)))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount.Sub(sdkmath.NewInt(1))), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdkmath.NewInt(1)))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1"), ), ExpErr: types.ErrInsufficientDepositAmount, ExpResp: &types.Pool{}, @@ -1014,8 +1016,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { { Name: "error smaller than minimum deposit amount 2", Msg: *types.NewMsgCreateRangedPool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdk.NewInt(1)))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdkmath.NewInt(1)))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1"), ), ExpErr: types.ErrInsufficientDepositAmount, ExpResp: &types.Pool{}, @@ -1026,8 +1028,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { { Name: "error initial price lower than min price", Msg: *types.NewMsgCreateRangedPool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdk.NewInt(1)))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("0.98"), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdkmath.NewInt(1)))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("0.98"), ), ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "initial price must not be lower than min price"), ExpResp: &types.Pool{}, @@ -1038,8 +1040,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { { Name: "error initial price higher than max price", Msg: *types.NewMsgCreateRangedPool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdk.NewInt(1)))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1.05"), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, params.MinInitialDepositAmount), sdk.NewCoin(app1pair.QuoteCoinDenom, params.MinInitialDepositAmount.Sub(sdkmath.NewInt(1)))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1.05"), ), ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "initial price must not be higher than max price"), ExpResp: &types.Pool{}, @@ -1052,8 +1054,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { { Name: "error insufficient deposit coins", Msg: *types.NewMsgCreateRangedPool( - appID1, addr1, dummyPair1.Id, sdk.NewCoins(sdk.NewCoin(dummyPair1.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(dummyPair1.QuoteCoinDenom, sdk.NewInt(1000000000000))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), + appID1, addr1, dummyPair1.Id, sdk.NewCoins(sdk.NewCoin(dummyPair1.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(dummyPair1.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1"), ), ExpErr: sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance is smaller than 1000000000000%s", dummyPair1.QuoteCoinDenom), ExpResp: &types.Pool{}, @@ -1066,8 +1068,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { { Name: "error insufficient pool creation fees", Msg: *types.NewMsgCreateRangedPool( - appID1, addr1, dummyPair2.Id, sdk.NewCoins(sdk.NewCoin(dummyPair2.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(dummyPair2.QuoteCoinDenom, sdk.NewInt(1000000000000))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), + appID1, addr1, dummyPair2.Id, sdk.NewCoins(sdk.NewCoin(dummyPair2.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(dummyPair2.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1"), ), ExpErr: sdkerrors.Wrap(sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, "spendable balance is smaller than %s", params.PoolCreationFee[0].String()), "insufficient pool creation fee"), ExpResp: &types.Pool{}, @@ -1078,8 +1080,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { { Name: "success valid case app1 pair1 pool1", Msg: *types.NewMsgCreateRangedPool( - appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdk.NewInt(1000000000000))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), + appID1, addr1, app1pair.Id, sdk.NewCoins(sdk.NewCoin(app1pair.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(app1pair.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1"), ), ExpErr: nil, ExpResp: &types.Pool{ @@ -1108,16 +1110,16 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { Creator: addr1.String(), }, AvailableBalance: sdk.NewCoins( - sdk.NewCoin("pool1-3", amm.InitialPoolCoinSupply(sdk.NewInt(1000000000000), sdk.NewInt(1000000000000))), - sdk.NewCoin(app1pair.BaseCoinDenom, sdk.NewInt(9925681617)), + sdk.NewCoin("pool1-3", amm.InitialPoolCoinSupply(sdkmath.NewInt(1000000000000), sdkmath.NewInt(1000000000000))), + sdk.NewCoin(app1pair.BaseCoinDenom, sdkmath.NewInt(9925681617)), ), }, { Name: "success valid case app2 pair1", Msg: *types.NewMsgCreateRangedPool( appID2, addr1, app2pair.Id, - sdk.NewCoins(sdk.NewCoin(app2pair.BaseCoinDenom, sdk.NewInt(1000000000000)), sdk.NewCoin(app2pair.QuoteCoinDenom, sdk.NewInt(1000000000000))), - sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1"), + sdk.NewCoins(sdk.NewCoin(app2pair.BaseCoinDenom, sdkmath.NewInt(1000000000000)), sdk.NewCoin(app2pair.QuoteCoinDenom, sdkmath.NewInt(1000000000000))), + sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1"), ), ExpErr: nil, ExpResp: &types.Pool{ @@ -1146,8 +1148,8 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { Creator: addr1.String(), }, AvailableBalance: sdk.NewCoins( - sdk.NewCoin("pool2-1", amm.InitialPoolCoinSupply(sdk.NewInt(1000000000000), sdk.NewInt(1000000000000))), - sdk.NewCoin(app1pair.BaseCoinDenom, sdk.NewInt(9925681617)), + sdk.NewCoin("pool2-1", amm.InitialPoolCoinSupply(sdkmath.NewInt(1000000000000), sdkmath.NewInt(1000000000000))), + sdk.NewCoin(app1pair.BaseCoinDenom, sdkmath.NewInt(9925681617)), ), }, } @@ -1186,13 +1188,13 @@ func (s *KeeperTestSuite) TestCreateRangedPool() { params, err := s.keeper.GetGenericParams(s.ctx, tc.Msg.AppId) s.Require().NoError(err) - expectedPairCreationFeesCollected := sdk.NewCoin(params.PairCreationFee[0].Denom, params.PairCreationFee[0].Amount.Mul(sdk.NewInt(int64(len(s.keeper.GetAllPairs(s.ctx, tc.Msg.AppId)))))) + expectedPairCreationFeesCollected := sdk.NewCoin(params.PairCreationFee[0].Denom, params.PairCreationFee[0].Amount.Mul(sdkmath.NewInt(int64(len(s.keeper.GetAllPairs(s.ctx, tc.Msg.AppId)))))) expectedPoolCreationFeesCollected := sdk.Coin{} if tc.Msg.AppId == appID1 { - expectedPoolCreationFeesCollected = sdk.NewCoin(params.PoolCreationFee[0].Denom, params.PoolCreationFee[0].Amount.Mul(sdk.NewInt(int64(tc.QueryResponseIndex-1)))) + expectedPoolCreationFeesCollected = sdk.NewCoin(params.PoolCreationFee[0].Denom, params.PoolCreationFee[0].Amount.Mul(sdkmath.NewInt(int64(tc.QueryResponseIndex-1)))) } else { - expectedPoolCreationFeesCollected = sdk.NewCoin(params.PoolCreationFee[0].Denom, params.PoolCreationFee[0].Amount.Mul(sdk.NewInt(int64(tc.QueryResponseIndex+1)))) + expectedPoolCreationFeesCollected = sdk.NewCoin(params.PoolCreationFee[0].Denom, params.PoolCreationFee[0].Amount.Mul(sdkmath.NewInt(int64(tc.QueryResponseIndex+1)))) } collectedPairPoolCreationFee := s.getBalances(sdk.MustAccAddressFromBech32(params.FeeCollectorAddress)) @@ -1247,26 +1249,26 @@ func (s *KeeperTestSuite) Test1MaximumRangePoolInPair() { pair := s.CreateNewLiquidityPair(appID1, addr1, asset1.Denom, asset2.Denom) // maximum 20 pool can be created in each pair - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) params, err := s.keeper.GetGenericParams(s.ctx, appID1) s.Require().NoError(err) @@ -1275,7 +1277,7 @@ func (s *KeeperTestSuite) Test1MaximumRangePoolInPair() { s.fundAddr(addr1, params.PoolCreationFee) s.fundAddr(addr1, parsedDepositCoins) - msg := types.NewMsgCreateRangedPool(appID1, addr1, pair.Id, parsedDepositCoins, sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) + msg := types.NewMsgCreateRangedPool(appID1, addr1, pair.Id, parsedDepositCoins, sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) _, err = s.keeper.CreateRangedPool(s.ctx, msg) s.Require().EqualError(types.ErrTooManyPools, err.Error()) } @@ -1289,25 +1291,25 @@ func (s *KeeperTestSuite) Test2MaximumRangePoolInPair() { pair := s.CreateNewLiquidityPair(appID1, addr1, asset1.Denom, asset2.Denom) // maximum 20 pool can be created in each pair - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) _ = s.CreateNewLiquidityPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2") @@ -1318,7 +1320,7 @@ func (s *KeeperTestSuite) Test2MaximumRangePoolInPair() { s.fundAddr(addr1, params.PoolCreationFee) s.fundAddr(addr1, parsedDepositCoins) - msg := types.NewMsgCreateRangedPool(appID1, addr1, pair.Id, parsedDepositCoins, sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) + msg := types.NewMsgCreateRangedPool(appID1, addr1, pair.Id, parsedDepositCoins, sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) _, err = s.keeper.CreateRangedPool(s.ctx, msg) s.Require().EqualError(types.ErrTooManyPools, err.Error()) } @@ -1332,26 +1334,26 @@ func (s *KeeperTestSuite) Test3MaximumRangePoolInPair() { pair := s.CreateNewLiquidityPair(appID1, addr1, asset1.Denom, asset2.Denom) // maximum 20 pool can be created in each pair - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000000uasset1,1000000uasset2", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) params, err := s.keeper.GetGenericParams(s.ctx, appID1) s.Require().NoError(err) @@ -1375,20 +1377,20 @@ func (s *KeeperTestSuite) TestRangedPoolDepositWithdraw() { pool := s.CreateNewLiquidityRangedPool(appID1, pair.Id, s.addr(1), "1000000denom1,1000000denom2", utils.ParseDec("0.5"), utils.ParseDec("2.0"), utils.ParseDec("1.0")) rx, ry := s.keeper.GetPoolBalances(s.ctx, pool) - ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}) + ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdkmath.Int{}) s.Require().True(utils.DecApproxEqual(ammPool.Price(), utils.ParseDec("1.0"))) s.Deposit(appID1, pool.Id, s.addr(2), "400000denom1,1000000denom2") liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) rx, ry = s.keeper.GetPoolBalances(s.ctx, pool) - ammPool = pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}) + ammPool = pool.AMMPool(rx.Amount, ry.Amount, sdkmath.Int{}) s.Require().True(utils.DecApproxEqual(ammPool.Price(), utils.ParseDec("1.0"))) poolCoin := s.getBalance(s.addr(2), pool.PoolCoinDenom) s.Withdraw(appID1, pool.Id, s.addr(2), poolCoin.SubAmount(poolCoin.Amount.QuoRaw(3))) // withdraw 2/3 pool coin liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) rx, ry = s.keeper.GetPoolBalances(s.ctx, pool) - ammPool = pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}) + ammPool = pool.AMMPool(rx.Amount, ry.Amount, sdkmath.Int{}) s.Require().True(utils.DecApproxEqual(ammPool.Price(), utils.ParseDec("1.0"))) } @@ -1402,8 +1404,8 @@ func (s *KeeperTestSuite) TestRangedPoolDepositWithdraw_single_side() { pool := s.CreateNewLiquidityRangedPool(appID1, pair.Id, s.addr(1), "1000000denom1", utils.ParseDec("0.5"), utils.ParseDec("2.0"), utils.ParseDec("0.5")) rx, ry := s.keeper.GetPoolBalances(s.ctx, pool) - s.Require().True(intEq(sdk.ZeroInt(), rx.Amount)) - s.Require().True(intEq(sdk.NewInt(1000000), ry.Amount)) + s.Require().True(intEq(sdkmath.ZeroInt(), rx.Amount)) + s.Require().True(intEq(sdkmath.NewInt(1000000), ry.Amount)) ps := s.keeper.GetPoolCoinSupply(s.ctx, pool) s.Deposit(appID1, pool.Id, s.addr(2), "50000denom1") @@ -1412,8 +1414,8 @@ func (s *KeeperTestSuite) TestRangedPoolDepositWithdraw_single_side() { pc := s.getBalance(s.addr(2), pool.PoolCoinDenom) rx, ry = s.keeper.GetPoolBalances(s.ctx, pool) - s.Require().True(intEq(sdk.ZeroInt(), rx.Amount)) - s.Require().True(intEq(sdk.NewInt(1050000), ry.Amount)) + s.Require().True(intEq(sdkmath.ZeroInt(), rx.Amount)) + s.Require().True(intEq(sdkmath.NewInt(1050000), ry.Amount)) s.Require().True(intEq(ps.QuoRaw(20), pc.Amount)) balanceBefore := s.getBalance(s.addr(2), "denom1") @@ -1421,13 +1423,13 @@ func (s *KeeperTestSuite) TestRangedPoolDepositWithdraw_single_side() { s.nextBlock() balanceAfter := s.getBalance(s.addr(2), "denom1") - s.Require().True(balanceAfter.Sub(balanceBefore).Amount.Sub(sdk.NewInt(50000)).LTE(sdk.OneInt())) + s.Require().True(balanceAfter.Sub(balanceBefore).Amount.Sub(sdkmath.NewInt(50000)).LTE(sdkmath.OneInt())) s.Deposit(appID1, pool.Id, s.addr(3), "1000000denom1,1000000denom2") s.nextBlock() - s.Require().True(intEq(sdk.ZeroInt(), s.getBalance(s.addr(3), "denom1").Amount)) - s.Require().True(intEq(sdk.NewInt(1000000), s.getBalance(s.addr(3), "denom2").Amount)) + s.Require().True(intEq(sdkmath.ZeroInt(), s.getBalance(s.addr(3), "denom1").Amount)) + s.Require().True(intEq(sdkmath.NewInt(1000000), s.getBalance(s.addr(3), "denom2").Amount)) } func (s *KeeperTestSuite) TestRangedPoolDepositWithdraw_single_side2() { @@ -1440,8 +1442,8 @@ func (s *KeeperTestSuite) TestRangedPoolDepositWithdraw_single_side2() { pool := s.CreateNewLiquidityRangedPool(appID1, pair.Id, s.addr(1), "1000000denom2", utils.ParseDec("0.5"), utils.ParseDec("2.0"), utils.ParseDec("2.0")) rx, ry := s.keeper.GetPoolBalances(s.ctx, pool) - s.Require().True(intEq(sdk.NewInt(1000000), rx.Amount)) - s.Require().True(intEq(sdk.ZeroInt(), ry.Amount)) + s.Require().True(intEq(sdkmath.NewInt(1000000), rx.Amount)) + s.Require().True(intEq(sdkmath.ZeroInt(), ry.Amount)) ps := s.keeper.GetPoolCoinSupply(s.ctx, pool) s.Deposit(appID1, pool.Id, s.addr(2), "50000denom2") @@ -1450,8 +1452,8 @@ func (s *KeeperTestSuite) TestRangedPoolDepositWithdraw_single_side2() { pc := s.getBalance(s.addr(2), pool.PoolCoinDenom) rx, ry = s.keeper.GetPoolBalances(s.ctx, pool) - s.Require().True(intEq(sdk.NewInt(1050000), rx.Amount)) - s.Require().True(intEq(sdk.ZeroInt(), ry.Amount)) + s.Require().True(intEq(sdkmath.NewInt(1050000), rx.Amount)) + s.Require().True(intEq(sdkmath.ZeroInt(), ry.Amount)) s.Require().True(intEq(ps.QuoRaw(20), pc.Amount)) balanceBefore := s.getBalance(s.addr(2), "denom2") @@ -1459,13 +1461,13 @@ func (s *KeeperTestSuite) TestRangedPoolDepositWithdraw_single_side2() { s.nextBlock() balanceAfter := s.getBalance(s.addr(2), "denom2") - s.Require().True(balanceAfter.Sub(balanceBefore).Amount.Sub(sdk.NewInt(50000)).LTE(sdk.OneInt())) + s.Require().True(balanceAfter.Sub(balanceBefore).Amount.Sub(sdkmath.NewInt(50000)).LTE(sdkmath.OneInt())) s.Deposit(appID1, pool.Id, s.addr(3), "1000000denom1,1000000denom2") s.nextBlock() - s.Require().True(intEq(sdk.ZeroInt(), s.getBalance(s.addr(3), "denom2").Amount)) - s.Require().True(intEq(sdk.NewInt(1000000), s.getBalance(s.addr(3), "denom1").Amount)) + s.Require().True(intEq(sdkmath.ZeroInt(), s.getBalance(s.addr(3), "denom2").Amount)) + s.Require().True(intEq(sdkmath.NewInt(1000000), s.getBalance(s.addr(3), "denom1").Amount)) } func (s *KeeperTestSuite) TestTransferFundsForSwapFeeDistribution_OnlyBasicPool() { @@ -1480,13 +1482,13 @@ func (s *KeeperTestSuite) TestTransferFundsForSwapFeeDistribution_OnlyBasicPool( s.keeper.SetPair(s.ctx, pair) p1 := s.CreateNewLiquidityPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor") - s.MarketOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, sdk.NewInt(30_000000), 0) - s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, sdk.NewInt(54_000000), 0) - s.MarketOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, sdk.NewInt(17_000000), 0) + s.MarketOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(30_000000), 0) + s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(54_000000), 0) + s.MarketOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(17_000000), 0) - s.MarketOrder(appID1, s.addr(5), pair.Id, types.OrderDirectionSell, sdk.NewInt(12_000000), 0) - s.MarketOrder(appID1, s.addr(6), pair.Id, types.OrderDirectionSell, sdk.NewInt(19_000000), 0) - s.MarketOrder(appID1, s.addr(7), pair.Id, types.OrderDirectionSell, sdk.NewInt(23_000000), 0) + s.MarketOrder(appID1, s.addr(5), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(12_000000), 0) + s.MarketOrder(appID1, s.addr(6), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(19_000000), 0) + s.MarketOrder(appID1, s.addr(7), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(23_000000), 0) params, err := s.keeper.GetGenericParams(s.ctx, appID1) s.Require().NoError(err) @@ -1515,15 +1517,15 @@ func (s *KeeperTestSuite) TestTransferFundsForSwapFeeDistribution_OnlyRangedPool pair := s.CreateNewLiquidityPair(appID1, addr1, asset1.Denom, asset2.Denom) pair.LastPrice = utils.ParseDecP("1.01") s.keeper.SetPair(s.ctx, pair) - p1 := s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) + p1 := s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) - s.MarketOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, sdk.NewInt(30_000000), 0) - s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, sdk.NewInt(54_000000), 0) - s.MarketOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, sdk.NewInt(17_000000), 0) + s.MarketOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(30_000000), 0) + s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(54_000000), 0) + s.MarketOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(17_000000), 0) - s.MarketOrder(appID1, s.addr(5), pair.Id, types.OrderDirectionSell, sdk.NewInt(12_000000), 0) - s.MarketOrder(appID1, s.addr(6), pair.Id, types.OrderDirectionSell, sdk.NewInt(19_000000), 0) - s.MarketOrder(appID1, s.addr(7), pair.Id, types.OrderDirectionSell, sdk.NewInt(23_000000), 0) + s.MarketOrder(appID1, s.addr(5), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(12_000000), 0) + s.MarketOrder(appID1, s.addr(6), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(19_000000), 0) + s.MarketOrder(appID1, s.addr(7), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(23_000000), 0) params, err := s.keeper.GetGenericParams(s.ctx, appID1) s.Require().NoError(err) @@ -1554,17 +1556,17 @@ func (s *KeeperTestSuite) TestTransferFundsForSwapFeeDistribution_MultiplePools( s.keeper.SetPair(s.ctx, pair) p1 := s.CreateNewLiquidityPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor") // the given deposit amount is not the actuall deposit amout, it will be decided by the protocal based on the min,max and initial prices of ranged pools - p2 := s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - p3 := s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdk.MustNewDecFromStr("0.90"), sdk.MustNewDecFromStr("1.1"), sdk.MustNewDecFromStr("1")) - p4 := s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1")) + p2 := s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + p3 := s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdkmath.LegacyMustNewDecFromStr("0.90"), sdkmath.LegacyMustNewDecFromStr("1.1"), sdkmath.LegacyMustNewDecFromStr("1")) + p4 := s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1")) - s.MarketOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, sdk.NewInt(30_000000), 0) - s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, sdk.NewInt(54_000000), 0) - s.MarketOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, sdk.NewInt(17_000000), 0) + s.MarketOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(30_000000), 0) + s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(54_000000), 0) + s.MarketOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(17_000000), 0) - s.MarketOrder(appID1, s.addr(5), pair.Id, types.OrderDirectionSell, sdk.NewInt(12_000000), 0) - s.MarketOrder(appID1, s.addr(6), pair.Id, types.OrderDirectionSell, sdk.NewInt(19_000000), 0) - s.MarketOrder(appID1, s.addr(7), pair.Id, types.OrderDirectionSell, sdk.NewInt(23_000000), 0) + s.MarketOrder(appID1, s.addr(5), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(12_000000), 0) + s.MarketOrder(appID1, s.addr(6), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(19_000000), 0) + s.MarketOrder(appID1, s.addr(7), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(23_000000), 0) params, err := s.keeper.GetGenericParams(s.ctx, appID1) s.Require().NoError(err) @@ -1603,15 +1605,15 @@ func (s *KeeperTestSuite) TestTransferFundsForSwapFeeDistribution_WithBurnRate() pair := s.CreateNewLiquidityPair(appID1, addr1, asset1.Denom, asset2.Denom) pair.LastPrice = utils.ParseDecP("1.01") s.keeper.SetPair(s.ctx, pair) - p1 := s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) + p1 := s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) - s.MarketOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, sdk.NewInt(30_000000), 0) - s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, sdk.NewInt(54_000000), 0) - s.MarketOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, sdk.NewInt(17_000000), 0) + s.MarketOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(30_000000), 0) + s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(54_000000), 0) + s.MarketOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(17_000000), 0) - s.MarketOrder(appID1, s.addr(5), pair.Id, types.OrderDirectionSell, sdk.NewInt(12_000000), 0) - s.MarketOrder(appID1, s.addr(6), pair.Id, types.OrderDirectionSell, sdk.NewInt(19_000000), 0) - s.MarketOrder(appID1, s.addr(7), pair.Id, types.OrderDirectionSell, sdk.NewInt(23_000000), 0) + s.MarketOrder(appID1, s.addr(5), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(12_000000), 0) + s.MarketOrder(appID1, s.addr(6), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(19_000000), 0) + s.MarketOrder(appID1, s.addr(7), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(23_000000), 0) params, err := s.keeper.GetGenericParams(s.ctx, appID1) s.Require().NoError(err) @@ -1623,7 +1625,7 @@ func (s *KeeperTestSuite) TestTransferFundsForSwapFeeDistribution_WithBurnRate() accumulatedSwapFee := s.getBalances(pair.GetSwapFeeCollectorAddress()) s.Require().True(coinsEq(utils.ParseCoins("162000ucmdx,306613uharbor"), accumulatedSwapFee)) - params.SwapFeeBurnRate = sdk.MustNewDecFromStr("0.5") + params.SwapFeeBurnRate = sdkmath.LegacyMustNewDecFromStr("0.5") s.keeper.SetGenericParams(s.ctx, params) receivedSwapFunds, err := s.keeper.TransferFundsForSwapFeeDistribution(s.ctx, appID1, p1.Id) diff --git a/x/liquidity/keeper/rewards.go b/x/liquidity/keeper/rewards.go index 623f9d603..8d297ef05 100644 --- a/x/liquidity/keeper/rewards.go +++ b/x/liquidity/keeper/rewards.go @@ -5,6 +5,7 @@ import ( "strconv" "time" + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -15,18 +16,18 @@ import ( rewardstypes "github.com/comdex-official/comdex/x/rewards/types" ) -func (k Keeper) CalcAssetPrice(ctx sdk.Context, id uint64, amt sdk.Int) (price sdk.Dec, err error) { +func (k Keeper) CalcAssetPrice(ctx sdk.Context, id uint64, amt sdkmath.Int) (price sdkmath.LegacyDec, err error) { asset, found := k.assetKeeper.GetAsset(ctx, id) if !found { - return sdk.ZeroDec(), assettypes.ErrorAssetDoesNotExist + return sdkmath.LegacyZeroDec(), assettypes.ErrorAssetDoesNotExist } twa, found := k.marketKeeper.GetTwa(ctx, id) if found && twa.Twa > 0 { - numerator := sdk.NewDecFromInt(amt).Mul(sdk.NewDecFromInt(sdk.NewIntFromUint64(twa.Twa))) - denominator := sdk.NewDecFromInt(asset.Decimals) + numerator := sdkmath.LegacyNewDecFromInt(amt).Mul(sdkmath.LegacyNewDecFromInt(sdkmath.NewIntFromUint64(twa.Twa))) + denominator := sdkmath.LegacyNewDecFromInt(asset.Decimals) return numerator.Quo(denominator), nil } - return sdk.ZeroDec(), markettypes.ErrorPriceNotActive + return sdkmath.LegacyZeroDec(), markettypes.ErrorPriceNotActive } func (k Keeper) GetPoolTokenDesrializerKit(ctx sdk.Context, appID, poolID uint64) (types.PoolTokenDeserializerKit, error) { @@ -57,11 +58,11 @@ func (k Keeper) GetPoolTokenDesrializerKit(ctx sdk.Context, appID, poolID uint64 return deserializerKit, nil } -func (k Keeper) CalculateXYFromPoolCoin(ctx sdk.Context, deserializerKit types.PoolTokenDeserializerKit, poolCoin sdk.Coin) (sdk.Int, sdk.Int, error) { +func (k Keeper) CalculateXYFromPoolCoin(ctx sdk.Context, deserializerKit types.PoolTokenDeserializerKit, poolCoin sdk.Coin) (sdkmath.Int, sdkmath.Int, error) { // amm.Withdraw implemets the actual logic for pool token ratio calculation - x, y := amm.Withdraw(deserializerKit.QuoteCoinPoolBalance.Amount, deserializerKit.BaseCoinPoolBalance.Amount, deserializerKit.PoolCoinSupply, poolCoin.Amount, sdk.ZeroDec()) + x, y := amm.Withdraw(deserializerKit.QuoteCoinPoolBalance.Amount, deserializerKit.BaseCoinPoolBalance.Amount, deserializerKit.PoolCoinSupply, poolCoin.Amount, sdkmath.LegacyZeroDec()) if x.IsZero() && y.IsZero() { - return sdk.NewInt(0), sdk.NewInt(0), types.ErrCalculatedPoolAmountIsZero + return sdkmath.NewInt(0), sdkmath.NewInt(0), types.ErrCalculatedPoolAmountIsZero } return x, y, nil } @@ -72,10 +73,10 @@ func (k Keeper) DeserializePoolCoinHelper(ctx sdk.Context, appID, poolID, poolCo return nil, err } - poolCoin := sdk.NewCoin(deserializerKit.Pool.PoolCoinDenom, sdk.NewInt(int64(poolCoinAmount))) + poolCoin := sdk.NewCoin(deserializerKit.Pool.PoolCoinDenom, sdkmath.NewInt(int64(poolCoinAmount))) x, y, err := k.CalculateXYFromPoolCoin(ctx, deserializerKit, poolCoin) if err != nil { - return []sdk.Coin{sdk.NewCoin(deserializerKit.Pair.QuoteCoinDenom, sdk.NewInt(0)), sdk.NewCoin(deserializerKit.Pair.BaseCoinDenom, sdk.NewInt(0))}, nil + return []sdk.Coin{sdk.NewCoin(deserializerKit.Pair.QuoteCoinDenom, sdkmath.NewInt(0)), sdk.NewCoin(deserializerKit.Pair.BaseCoinDenom, sdkmath.NewInt(0))}, nil } quoteCoin := sdk.NewCoin(deserializerKit.Pair.QuoteCoinDenom, x) baseCoin := sdk.NewCoin(deserializerKit.Pair.BaseCoinDenom, y) @@ -112,8 +113,8 @@ func (k Keeper) GetAssetWhoseOraclePriceExists(ctx sdk.Context, quoteCoinDenom, return asset, nil } -func (k Keeper) GetAggregatedChildPoolContributions(ctx sdk.Context, appID uint64, poolIds []uint64, masterPoolSupplyAddresses []sdk.AccAddress) map[string]sdk.Dec { - poolSupplyData := make(map[string]sdk.Dec) +func (k Keeper) GetAggregatedChildPoolContributions(ctx sdk.Context, appID uint64, poolIds []uint64, masterPoolSupplyAddresses []sdk.AccAddress) map[string]sdkmath.LegacyDec { + poolSupplyData := make(map[string]sdkmath.LegacyDec) for _, poolID := range poolIds { deserializerKit, err := k.GetPoolTokenDesrializerKit(ctx, appID, poolID) @@ -139,7 +140,7 @@ func (k Keeper) GetAggregatedChildPoolContributions(ctx sdk.Context, appID uint6 quoteCoin := sdk.NewCoin(pair.QuoteCoinDenom, x) baseCoin := sdk.NewCoin(pair.BaseCoinDenom, y) - var assetAmount sdk.Int + var assetAmount sdkmath.Int if pair.QuoteCoinDenom == asset.Denom { assetAmount = quoteCoin.Amount @@ -147,7 +148,7 @@ func (k Keeper) GetAggregatedChildPoolContributions(ctx sdk.Context, appID uint6 assetAmount = baseCoin.Amount } value, _ := k.CalcAssetPrice(ctx, asset.Id, assetAmount) - value = value.Mul(sdk.NewDec(2)) // multiplying the calculated value of sigle asset with 2, since we have 50-50 pools. + value = value.Mul(sdkmath.LegacyNewDec(2)) // multiplying the calculated value of sigle asset with 2, since we have 50-50 pools. _, found = poolSupplyData[address.String()] if !found { poolSupplyData[address.String()] = value @@ -174,7 +175,7 @@ func (k Keeper) GetFarmingRewardsData(ctx sdk.Context, appID uint64, coinsToDist } var lpAddresses []sdk.AccAddress - var lpSupplies []sdk.Dec + var lpSupplies []sdkmath.LegacyDec activeFarmers := k.GetAllActiveFarmers(ctx, appID, pool.Id) for _, activeFarmer := range activeFarmers { @@ -189,7 +190,7 @@ func (k Keeper) GetFarmingRewardsData(ctx sdk.Context, appID uint64, coinsToDist quoteCoin := sdk.NewCoin(pair.QuoteCoinDenom, x) baseCoin := sdk.NewCoin(pair.BaseCoinDenom, y) - var assetAmount sdk.Int + var assetAmount sdkmath.Int if pair.QuoteCoinDenom == asset.Denom { assetAmount = quoteCoin.Amount @@ -197,15 +198,15 @@ func (k Keeper) GetFarmingRewardsData(ctx sdk.Context, appID uint64, coinsToDist assetAmount = baseCoin.Amount } value, _ := k.CalcAssetPrice(ctx, asset.Id, assetAmount) - value = value.Mul(sdk.NewDec(2)) // multiplying the calculated value of sigle asset with 2, since we have 50-50 pools. + value = value.Mul(sdkmath.LegacyNewDec(2)) // multiplying the calculated value of sigle asset with 2, since we have 50-50 pools. lpAddresses = append(lpAddresses, addr) lpSupplies = append(lpSupplies, value) } // Logic for master pool mechanism if liquidityGaugeData.IsMasterPool { - var childPoolSupplies []sdk.Dec - var minMasterChildPoolSupplies []sdk.Dec + var childPoolSupplies []sdkmath.LegacyDec + var minMasterChildPoolSupplies []sdkmath.LegacyDec var childPoolIds []uint64 if len(liquidityGaugeData.ChildPoolIds) == 0 { @@ -231,7 +232,7 @@ func (k Keeper) GetFarmingRewardsData(ctx sdk.Context, appID uint64, coinsToDist for _, accAddress := range lpAddresses { aggregatedSupplyValue, found := chilPoolSuppliesData[accAddress.String()] if !found { - childPoolSupplies = append(childPoolSupplies, sdk.NewDec(0)) + childPoolSupplies = append(childPoolSupplies, sdkmath.LegacyNewDec(0)) } else { childPoolSupplies = append(childPoolSupplies, aggregatedSupplyValue) } @@ -241,9 +242,9 @@ func (k Keeper) GetFarmingRewardsData(ctx sdk.Context, appID uint64, coinsToDist return nil, types.ErrSupplyValueCalculationInvalid } - totalRewardEligibleSupply := sdk.NewDec(0) + totalRewardEligibleSupply := sdkmath.LegacyNewDec(0) for i := 0; i < len(lpAddresses); i++ { - var minSupply sdk.Dec + var minSupply sdkmath.LegacyDec if lpSupplies[i].LTE(childPoolSupplies[i]) { minSupply = lpSupplies[i] } else { @@ -255,13 +256,13 @@ func (k Keeper) GetFarmingRewardsData(ctx sdk.Context, appID uint64, coinsToDist var rewardData []rewardstypes.RewardDistributionDataCollector if !totalRewardEligibleSupply.IsZero() { - multiplier := sdk.NewDecFromInt(coinsToDistribute.Amount).Quo(totalRewardEligibleSupply) + multiplier := sdkmath.LegacyNewDecFromInt(coinsToDistribute.Amount).Quo(totalRewardEligibleSupply) for index, address := range lpAddresses { if !minMasterChildPoolSupplies[index].IsZero() { calculatedReward := int64(math.Floor(minMasterChildPoolSupplies[index].Mul(multiplier).MustFloat64())) newData := new(rewardstypes.RewardDistributionDataCollector) newData.RewardReceiver = address - newData.RewardCoin = sdk.NewCoin(coinsToDistribute.Denom, sdk.NewInt(calculatedReward)) + newData.RewardCoin = sdk.NewCoin(coinsToDistribute.Denom, sdkmath.NewInt(calculatedReward)) rewardData = append(rewardData, *newData) } } @@ -272,19 +273,19 @@ func (k Keeper) GetFarmingRewardsData(ctx sdk.Context, appID uint64, coinsToDist } // Logic for non master pool gauges (external rewards), (also used for masterpool if no child pool exists) - totalRewardEligibleSupply := sdk.NewDec(0) + totalRewardEligibleSupply := sdkmath.LegacyNewDec(0) for _, supply := range lpSupplies { totalRewardEligibleSupply = totalRewardEligibleSupply.Add(supply) } var rewardData []rewardstypes.RewardDistributionDataCollector if !totalRewardEligibleSupply.IsZero() { - multiplier := sdk.NewDecFromInt(coinsToDistribute.Amount).Quo(totalRewardEligibleSupply) + multiplier := sdkmath.LegacyNewDecFromInt(coinsToDistribute.Amount).Quo(totalRewardEligibleSupply) for index, address := range lpAddresses { calculatedReward := int64(math.Floor(lpSupplies[index].Mul(multiplier).MustFloat64())) newData := new(rewardstypes.RewardDistributionDataCollector) newData.RewardReceiver = address - newData.RewardCoin = sdk.NewCoin(coinsToDistribute.Denom, sdk.NewInt(calculatedReward)) + newData.RewardCoin = sdk.NewCoin(coinsToDistribute.Denom, sdkmath.NewInt(calculatedReward)) rewardData = append(rewardData, *newData) } } @@ -397,7 +398,7 @@ func (k Keeper) Unfarm(ctx sdk.Context, msg *types.MsgUnfarm) error { return sdkerrors.Wrapf(types.ErrorFarmerNotFound, "no active farm found for given pool id %d", msg.PoolId) } - farmedCoinAmount := sdk.NewInt(0) + farmedCoinAmount := sdkmath.NewInt(0) if qfound { for _, qCoin := range queuedFarmer.QueudCoins { @@ -419,11 +420,11 @@ func (k Keeper) Unfarm(ctx sdk.Context, msg *types.MsgUnfarm) error { for i := len(queuedCoins) - 1; i >= 0; i-- { if queuedCoins[i].FarmedPoolCoin.Amount.GTE(msg.UnfarmingPoolCoin.Amount) { queuedCoins[i].FarmedPoolCoin.Amount = queuedCoins[i].FarmedPoolCoin.Amount.Sub(msg.UnfarmingPoolCoin.Amount) - msg.UnfarmingPoolCoin.Amount = sdk.NewInt(0) + msg.UnfarmingPoolCoin.Amount = sdkmath.NewInt(0) break } else { msg.UnfarmingPoolCoin.Amount = msg.UnfarmingPoolCoin.Amount.Sub(queuedCoins[i].FarmedPoolCoin.Amount) - queuedCoins[i].FarmedPoolCoin.Amount = sdk.NewInt(0) + queuedCoins[i].FarmedPoolCoin.Amount = sdkmath.NewInt(0) } } } @@ -506,7 +507,7 @@ func (k Keeper) ProcessQueuedFarmers(ctx sdk.Context, appID uint64) { for _, queuedFarmer := range queuedFarmers { activeFarmer, found := k.GetActiveFarmer(ctx, queuedFarmer.AppId, queuedFarmer.PoolId, sdk.MustAccAddressFromBech32(queuedFarmer.Farmer)) if !found { - activeFarmer = types.NewActivefarmer(queuedFarmer.AppId, queuedFarmer.PoolId, sdk.MustAccAddressFromBech32(queuedFarmer.Farmer), sdk.NewCoin(pool.PoolCoinDenom, sdk.NewInt(0))) + activeFarmer = types.NewActivefarmer(queuedFarmer.AppId, queuedFarmer.PoolId, sdk.MustAccAddressFromBech32(queuedFarmer.Farmer), sdk.NewCoin(pool.PoolCoinDenom, sdkmath.NewInt(0))) } updatedQueue := []*types.QueuedCoin{} @@ -529,8 +530,8 @@ func (k Keeper) ProcessQueuedFarmers(ctx sdk.Context, appID uint64) { } } -func (k Keeper) GetAmountFarmedForAssetID(ctx sdk.Context, appID, assetID uint64, farmer sdk.AccAddress) (sdk.Int, error) { - totalAmountFarmed := sdk.ZeroInt() +func (k Keeper) GetAmountFarmedForAssetID(ctx sdk.Context, appID, assetID uint64, farmer sdk.AccAddress) (sdkmath.Int, error) { + totalAmountFarmed := sdkmath.ZeroInt() asset, found := k.assetKeeper.GetAsset(ctx, assetID) if !found { return totalAmountFarmed, assettypes.ErrorAssetDoesNotExist diff --git a/x/liquidity/keeper/rewards_test.go b/x/liquidity/keeper/rewards_test.go index 9a2f711dd..85752b79d 100644 --- a/x/liquidity/keeper/rewards_test.go +++ b/x/liquidity/keeper/rewards_test.go @@ -3,6 +3,7 @@ package keeper_test import ( "time" + sdkmath "cosmossdk.io/math" utils "github.com/comdex-official/comdex/types" "github.com/comdex-official/comdex/x/liquidity/types" rewardtypes "github.com/comdex-official/comdex/x/rewards/types" @@ -1267,19 +1268,19 @@ func (s *KeeperTestSuite) TestGetAmountFarmedForAssetID() { quantityFarmed, err := s.keeper.GetAmountFarmedForAssetID(s.ctx, appID1, asset1.Id, liquidityProvider1) s.Require().NoError(err) - s.Require().Equal(sdk.NewInt(2999999997), quantityFarmed) + s.Require().Equal(sdkmath.NewInt(2999999997), quantityFarmed) quantityFarmed, err = s.keeper.GetAmountFarmedForAssetID(s.ctx, appID1, asset2.Id, liquidityProvider1) s.Require().NoError(err) - s.Require().Equal(sdk.NewInt(1999999998), quantityFarmed) + s.Require().Equal(sdkmath.NewInt(1999999998), quantityFarmed) quantityFarmed, err = s.keeper.GetAmountFarmedForAssetID(s.ctx, appID1, asset3.Id, liquidityProvider1) s.Require().NoError(err) - s.Require().Equal(sdk.NewInt(1999999998), quantityFarmed) + s.Require().Equal(sdkmath.NewInt(1999999998), quantityFarmed) quantityFarmed, err = s.keeper.GetAmountFarmedForAssetID(s.ctx, appID1, asset4.Id, liquidityProvider1) s.Require().NoError(err) - s.Require().Equal(sdk.NewInt(999999999), quantityFarmed) + s.Require().Equal(sdkmath.NewInt(999999999), quantityFarmed) } func (s *KeeperTestSuite) TestOraclePricForRewardDistrbution() { diff --git a/x/liquidity/keeper/swap.go b/x/liquidity/keeper/swap.go index f2b647d45..12e2c413e 100644 --- a/x/liquidity/keeper/swap.go +++ b/x/liquidity/keeper/swap.go @@ -6,6 +6,7 @@ import ( "strings" "time" + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -13,46 +14,46 @@ import ( "github.com/comdex-official/comdex/x/liquidity/types" ) -func CalculateSwapFeeAmount(ctx sdk.Context, params types.GenericParams, calculatedOfferCoinAmt sdk.Int) sdk.Int { - return sdk.NewDec(calculatedOfferCoinAmt.Int64()).MulTruncate(params.SwapFeeRate).TruncateInt() +func CalculateSwapFeeAmount(ctx sdk.Context, params types.GenericParams, calculatedOfferCoinAmt sdkmath.Int) sdkmath.Int { + return sdkmath.LegacyNewDec(calculatedOfferCoinAmt.Int64()).MulTruncate(params.SwapFeeRate).TruncateInt() } -func (k Keeper) PriceLimits(ctx sdk.Context, lastPrice sdk.Dec, params types.GenericParams) (lowest, highest sdk.Dec) { +func (k Keeper) PriceLimits(ctx sdk.Context, lastPrice sdkmath.LegacyDec, params types.GenericParams) (lowest, highest sdkmath.LegacyDec) { return types.PriceLimits(lastPrice, params.MaxPriceLimitRatio, int(params.TickPrecision)) } // ValidateMsgLimitOrder validates types.MsgLimitOrder with state and returns // calculated offer coin and price that is fit into ticks. -func (k Keeper) ValidateMsgLimitOrder(ctx sdk.Context, msg *types.MsgLimitOrder) (offerCoin sdk.Coin, swapFeeCoin sdk.Coin, price sdk.Dec, err error) { +func (k Keeper) ValidateMsgLimitOrder(ctx sdk.Context, msg *types.MsgLimitOrder) (offerCoin sdk.Coin, swapFeeCoin sdk.Coin, price sdkmath.LegacyDec, err error) { _, found := k.assetKeeper.GetApp(ctx, msg.AppId) if !found { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf(types.ErrInvalidAppID, "app id %d not found", msg.AppId) } params, err := k.GetGenericParams(ctx, msg.AppId) if err != nil { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, sdkerrors.Wrap(err, "params retreval failed") + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrap(err, "params retreval failed") } spendable := k.bankKeeper.SpendableCoins(ctx, msg.GetOrderer()) if spendableAmt := spendable.AmountOf(msg.OfferCoin.Denom); spendableAmt.LT(msg.OfferCoin.Amount) { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, sdkerrors.Wrapf( + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf( sdkerrors.ErrInsufficientFunds, "%s is smaller than %s", sdk.NewCoin(msg.OfferCoin.Denom, spendableAmt), msg.OfferCoin) } if msg.OrderLifespan > params.MaxOrderLifespan { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf(types.ErrTooLongOrderLifespan, "%s is longer than %s", msg.OrderLifespan, params.MaxOrderLifespan) } pair, found := k.GetPair(ctx, msg.AppId, msg.PairId) if !found { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, sdkerrors.Wrapf(sdkerrors.ErrNotFound, "pair %d not found", msg.PairId) + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf(sdkerrors.ErrNotFound, "pair %d not found", msg.PairId) } - var upperPriceLimit, lowerPriceLimit sdk.Dec + var upperPriceLimit, lowerPriceLimit sdkmath.LegacyDec if pair.LastPrice != nil { lowerPriceLimit, upperPriceLimit = k.PriceLimits(ctx, *pair.LastPrice, params) } else { @@ -61,15 +62,15 @@ func (k Keeper) ValidateMsgLimitOrder(ctx sdk.Context, msg *types.MsgLimitOrder) } switch { case msg.Price.GT(upperPriceLimit): - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, sdkerrors.Wrapf(types.ErrPriceOutOfRange, "%s is higher than %s", msg.Price, upperPriceLimit) + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf(types.ErrPriceOutOfRange, "%s is higher than %s", msg.Price, upperPriceLimit) case msg.Price.LT(lowerPriceLimit): - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, sdkerrors.Wrapf(types.ErrPriceOutOfRange, "%s is lower than %s", msg.Price, lowerPriceLimit) + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf(types.ErrPriceOutOfRange, "%s is lower than %s", msg.Price, lowerPriceLimit) } switch msg.Direction { case types.OrderDirectionBuy: if msg.OfferCoin.Denom != pair.QuoteCoinDenom || msg.DemandCoinDenom != pair.BaseCoinDenom { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf(types.ErrWrongPair, "denom pair (%s, %s) != (%s, %s)", msg.DemandCoinDenom, msg.OfferCoin.Denom, pair.BaseCoinDenom, pair.QuoteCoinDenom) } @@ -79,12 +80,12 @@ func (k Keeper) ValidateMsgLimitOrder(ctx sdk.Context, msg *types.MsgLimitOrder) swapFeeCoin = sdk.NewCoin(msg.OfferCoin.Denom, CalculateSwapFeeAmount(ctx, params, offerCoin.Amount)) if msg.OfferCoin.IsLT(offerCoin.Add(swapFeeCoin)) { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, sdkerrors.Wrapf( + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf( types.ErrInsufficientOfferCoin, "%s is smaller than %s", msg.OfferCoin, offerCoin.Add(swapFeeCoin)) } case types.OrderDirectionSell: if msg.OfferCoin.Denom != pair.BaseCoinDenom || msg.DemandCoinDenom != pair.QuoteCoinDenom { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf(types.ErrWrongPair, "denom pair (%s, %s) != (%s, %s)", msg.OfferCoin.Denom, msg.DemandCoinDenom, pair.BaseCoinDenom, pair.QuoteCoinDenom) } @@ -94,12 +95,12 @@ func (k Keeper) ValidateMsgLimitOrder(ctx sdk.Context, msg *types.MsgLimitOrder) swapFeeCoin = sdk.NewCoin(msg.OfferCoin.Denom, CalculateSwapFeeAmount(ctx, params, offerCoin.Amount)) if msg.OfferCoin.Amount.LT(swapFeeCoin.Amount.Add(offerCoin.Amount)) { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, sdkerrors.Wrapf( + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf( types.ErrInsufficientOfferCoin, "%s is smaller than %s", msg.OfferCoin, sdk.NewCoin(msg.OfferCoin.Denom, swapFeeCoin.Amount.Add(offerCoin.Amount))) } } if types.IsTooSmallOrderAmount(msg.Amount, price) { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, types.ErrTooSmallOrder + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, types.ErrTooSmallOrder } return offerCoin, swapFeeCoin, price, nil @@ -153,70 +154,70 @@ func (k Keeper) LimitOrder(ctx sdk.Context, msg *types.MsgLimitOrder) (types.Ord // ValidateMsgMarketOrder validates types.MsgMarketOrder with state and returns // calculated offer coin and price. -func (k Keeper) ValidateMsgMarketOrder(ctx sdk.Context, msg *types.MsgMarketOrder) (offerCoin sdk.Coin, swapFeeCoin sdk.Coin, price sdk.Dec, err error) { +func (k Keeper) ValidateMsgMarketOrder(ctx sdk.Context, msg *types.MsgMarketOrder) (offerCoin sdk.Coin, swapFeeCoin sdk.Coin, price sdkmath.LegacyDec, err error) { _, found := k.assetKeeper.GetApp(ctx, msg.AppId) if !found { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf(types.ErrInvalidAppID, "app id %d not found", msg.AppId) } params, err := k.GetGenericParams(ctx, msg.AppId) if err != nil { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, sdkerrors.Wrap(err, "params retreval failed") + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrap(err, "params retreval failed") } spendable := k.bankKeeper.SpendableCoins(ctx, msg.GetOrderer()) if spendableAmt := spendable.AmountOf(msg.OfferCoin.Denom); spendableAmt.LT(msg.OfferCoin.Amount) { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, sdkerrors.Wrapf( + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf( sdkerrors.ErrInsufficientFunds, "%s is smaller than %s", sdk.NewCoin(msg.OfferCoin.Denom, spendableAmt), msg.OfferCoin) } if msg.OrderLifespan > params.MaxOrderLifespan { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf(types.ErrTooLongOrderLifespan, "%s is longer than %s", msg.OrderLifespan, params.MaxOrderLifespan) } pair, found := k.GetPair(ctx, msg.AppId, msg.PairId) if !found { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, sdkerrors.Wrapf(sdkerrors.ErrNotFound, "pair %d not found", msg.PairId) + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf(sdkerrors.ErrNotFound, "pair %d not found", msg.PairId) } if pair.LastPrice == nil { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, types.ErrNoLastPrice + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, types.ErrNoLastPrice } lastPrice := *pair.LastPrice switch msg.Direction { case types.OrderDirectionBuy: if msg.OfferCoin.Denom != pair.QuoteCoinDenom || msg.DemandCoinDenom != pair.BaseCoinDenom { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf(types.ErrWrongPair, "denom pair (%s, %s) != (%s, %s)", msg.DemandCoinDenom, msg.OfferCoin.Denom, pair.BaseCoinDenom, pair.QuoteCoinDenom) } - price = amm.PriceToDownTick(lastPrice.Mul(sdk.OneDec().Add(params.MaxPriceLimitRatio)), int(params.TickPrecision)) + price = amm.PriceToDownTick(lastPrice.Mul(sdkmath.LegacyOneDec().Add(params.MaxPriceLimitRatio)), int(params.TickPrecision)) offerCoin = sdk.NewCoin(msg.OfferCoin.Denom, amm.OfferCoinAmount(amm.Buy, price, msg.Amount)) swapFeeCoin = sdk.NewCoin(msg.OfferCoin.Denom, CalculateSwapFeeAmount(ctx, params, offerCoin.Amount)) if msg.OfferCoin.IsLT(offerCoin.Add(swapFeeCoin)) { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, sdkerrors.Wrapf( + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf( types.ErrInsufficientOfferCoin, "%s is smaller than %s", msg.OfferCoin, offerCoin.Add(swapFeeCoin)) } case types.OrderDirectionSell: if msg.OfferCoin.Denom != pair.BaseCoinDenom || msg.DemandCoinDenom != pair.QuoteCoinDenom { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf(types.ErrWrongPair, "denom pair (%s, %s) != (%s, %s)", msg.OfferCoin.Denom, msg.DemandCoinDenom, pair.BaseCoinDenom, pair.QuoteCoinDenom) } - price = amm.PriceToUpTick(lastPrice.Mul(sdk.OneDec().Sub(params.MaxPriceLimitRatio)), int(params.TickPrecision)) + price = amm.PriceToUpTick(lastPrice.Mul(sdkmath.LegacyOneDec().Sub(params.MaxPriceLimitRatio)), int(params.TickPrecision)) offerCoin = sdk.NewCoin(msg.OfferCoin.Denom, msg.Amount) swapFeeCoin = sdk.NewCoin(msg.OfferCoin.Denom, CalculateSwapFeeAmount(ctx, params, offerCoin.Amount)) if msg.OfferCoin.Amount.LT(swapFeeCoin.Amount.Add(offerCoin.Amount)) { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, sdkerrors.Wrapf( + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, sdkerrors.Wrapf( types.ErrInsufficientOfferCoin, "%s is smaller than %s", msg.OfferCoin, sdk.NewCoin(msg.OfferCoin.Denom, swapFeeCoin.Amount.Add(offerCoin.Amount))) } } if types.IsTooSmallOrderAmount(msg.Amount, price) { - return sdk.Coin{}, sdk.Coin{}, sdk.Dec{}, types.ErrTooSmallOrder + return sdk.Coin{}, sdk.Coin{}, sdkmath.LegacyDec{}, types.ErrTooSmallOrder } return offerCoin, swapFeeCoin, price, nil @@ -303,7 +304,7 @@ func (k Keeper) MMOrder(ctx sdk.Context, msg *types.MsgMMOrder) (orders []types. return nil, sdkerrors.Wrapf(sdkerrors.ErrNotFound, "pair %d not found", msg.PairId) } - var lowestPrice, highestPrice sdk.Dec + var lowestPrice, highestPrice sdkmath.LegacyDec if pair.LastPrice != nil { lowestPrice, highestPrice = types.PriceLimits(*pair.LastPrice, params.MaxPriceLimitRatio, tickPrec) } else { @@ -668,7 +669,7 @@ func (k Keeper) ExecuteMatching(ctx sdk.Context, pair types.Pair) error { return nil } -func (k Keeper) Match(ctx sdk.Context, params types.GenericParams, ob *amm.OrderBook, pools []*types.PoolOrderer, lastPrice *sdk.Dec) (matchPrice sdk.Dec, quoteCoinDiff sdk.Int, matched bool) { +func (k Keeper) Match(ctx sdk.Context, params types.GenericParams, ob *amm.OrderBook, pools []*types.PoolOrderer, lastPrice *sdkmath.LegacyDec) (matchPrice sdkmath.LegacyDec, quoteCoinDiff sdkmath.Int, matched bool) { tickPrec := int(params.TickPrecision) if lastPrice == nil { ov := amm.MultipleOrderViews{ob.MakeView()} @@ -678,7 +679,7 @@ func (k Keeper) Match(ctx sdk.Context, params types.GenericParams, ob *amm.Order var found bool matchPrice, found = amm.FindMatchPrice(ov, tickPrec) if !found { - return sdk.Dec{}, sdk.Int{}, false + return sdkmath.LegacyDec{}, sdkmath.Int{}, false } for _, pool := range pools { buyAmt := pool.BuyAmountOver(matchPrice, true) @@ -702,7 +703,7 @@ func (k Keeper) Match(ctx sdk.Context, params types.GenericParams, ob *amm.Order return } -func (k Keeper) ApplyMatchResult(ctx sdk.Context, pair types.Pair, orders []amm.Order, quoteCoinDiff sdk.Int) error { +func (k Keeper) ApplyMatchResult(ctx sdk.Context, pair types.Pair, orders []amm.Order, quoteCoinDiff sdkmath.Int) error { params, err := k.GetGenericParams(ctx, pair.AppId) if err != nil { return sdkerrors.Wrap(err, "params retreval failed") @@ -728,7 +729,7 @@ func (k Keeper) ApplyMatchResult(ctx sdk.Context, pair types.Pair, orders []amm. OrderDirection types.OrderDirection PaidCoin sdk.Coin ReceivedCoin sdk.Coin - MatchedAmount sdk.Int + MatchedAmount sdkmath.Int } poolMatchResultByID := map[uint64]*PoolMatchResult{} var poolMatchResults []*PoolMatchResult @@ -782,9 +783,9 @@ func (k Keeper) ApplyMatchResult(ctx sdk.Context, pair types.Pair, orders []amm. r = &PoolMatchResult{ PoolID: order.PoolID, OrderDirection: types.OrderDirectionFromAMM(order.Direction), - PaidCoin: sdk.NewCoin(paidCoin.Denom, sdk.ZeroInt()), - ReceivedCoin: sdk.NewCoin(receivedCoin.Denom, sdk.ZeroInt()), - MatchedAmount: sdk.ZeroInt(), + PaidCoin: sdk.NewCoin(paidCoin.Denom, sdkmath.ZeroInt()), + ReceivedCoin: sdk.NewCoin(receivedCoin.Denom, sdkmath.ZeroInt()), + MatchedAmount: sdkmath.ZeroInt(), } poolMatchResultByID[order.PoolID] = r poolMatchResults = append(poolMatchResults, r) @@ -836,7 +837,7 @@ func (k Keeper) FinishOrder(ctx sdk.Context, order types.Order, status types.Ord pair, _ := k.GetPair(ctx, order.AppId, order.PairId) - accumulatedSwapFee := sdk.NewCoin(order.OfferCoin.Denom, sdk.NewInt(0)) + accumulatedSwapFee := sdk.NewCoin(order.OfferCoin.Denom, sdkmath.NewInt(0)) collectedSwapFeeAmountFromOrderer := CalculateSwapFeeAmount(ctx, params, order.OfferCoin.Amount) if order.RemainingOfferCoin.IsPositive() { @@ -984,7 +985,7 @@ func (k Keeper) ConvertAccumulatedSwapFeesWithSwapDistrToken(ctx sdk.Context, ap } swapFeeCoin := sdk.NewCoin(balance.Denom, CalculateSwapFeeAmount(ctx, params, balance.Amount)) - swapFeeCoin.Amount = swapFeeCoin.Amount.Mul(sdk.NewInt(3)) + swapFeeCoin.Amount = swapFeeCoin.Amount.Mul(sdkmath.NewInt(3)) // reserving extra for swap fee from the offer coin, i.e swapfee *3 offerCoin := sdk.NewCoin(balance.Denom, balance.Amount.Sub(swapFeeCoin.Amount)) @@ -996,12 +997,12 @@ func (k Keeper) ConvertAccumulatedSwapFeesWithSwapDistrToken(ctx sdk.Context, ap } lastPrice := *pair.LastPrice - var amount sdk.Int + var amount sdkmath.Int var demandCoinDenom string switch orderDirection { case types.OrderDirectionBuy: - maxPrice := lastPrice.Mul(sdk.OneDec().Add(params.MaxPriceLimitRatio)) - amount = sdk.NewDec(offerCoin.Amount.Int64()).Quo(maxPrice).TruncateInt() + maxPrice := lastPrice.Mul(sdkmath.LegacyOneDec().Add(params.MaxPriceLimitRatio)) + amount = sdkmath.LegacyNewDec(offerCoin.Amount.Int64()).Quo(maxPrice).TruncateInt() demandCoinDenom = swappablePair.BaseCoinDenom case types.OrderDirectionSell: amount = offerCoin.Amount diff --git a/x/liquidity/keeper/swap_test.go b/x/liquidity/keeper/swap_test.go index 6afb60742..aedab890c 100644 --- a/x/liquidity/keeper/swap_test.go +++ b/x/liquidity/keeper/swap_test.go @@ -4,6 +4,7 @@ import ( "math/rand" "time" + sdkmath "cosmossdk.io/math" utils "github.com/comdex-official/comdex/types" "github.com/comdex-official/comdex/x/liquidity" "github.com/comdex-official/comdex/x/liquidity/amm" @@ -444,7 +445,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithPoolSwap() { types.OrderDirectionBuy, utils.ParseCoin("1003000uasset2"), asset1.Denom, - sdk.MustNewDecFromStr("0.5"), + sdkmath.LegacyMustNewDecFromStr("0.5"), newInt(2000000), time.Minute*1, ), @@ -457,7 +458,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithPoolSwap() { OfferCoin: utils.ParseCoin("1000000uasset2"), RemainingOfferCoin: utils.ParseCoin("1000000uasset2"), ReceivedCoin: utils.ParseCoin("0uasset1"), - Price: sdk.MustNewDecFromStr("0.5"), + Price: sdkmath.LegacyMustNewDecFromStr("0.5"), Amount: newInt(2000000), OpenAmount: newInt(2000000), BatchId: 1, @@ -478,7 +479,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithPoolSwap() { types.OrderDirectionBuy, utils.ParseCoin("1005006uasset2"), asset1.Denom, - sdk.MustNewDecFromStr("0.501"), + sdkmath.LegacyMustNewDecFromStr("0.501"), newInt(2000000), time.Minute*1, ), @@ -491,7 +492,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithPoolSwap() { OfferCoin: utils.ParseCoin("1002000uasset2"), RemainingOfferCoin: utils.ParseCoin("1002000uasset2"), ReceivedCoin: utils.ParseCoin("0uasset1"), - Price: sdk.MustNewDecFromStr("0.501"), + Price: sdkmath.LegacyMustNewDecFromStr("0.501"), Amount: newInt(2000000), OpenAmount: newInt(2000000), BatchId: 3, @@ -512,7 +513,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithPoolSwap() { types.OrderDirectionBuy, utils.ParseCoin("1000994uasset2"), asset1.Denom, - sdk.MustNewDecFromStr("0.499"), + sdkmath.LegacyMustNewDecFromStr("0.499"), newInt(2000000), time.Minute*1, ), @@ -525,7 +526,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithPoolSwap() { OfferCoin: utils.ParseCoin("998000uasset2"), RemainingOfferCoin: utils.ParseCoin("998000uasset2"), ReceivedCoin: utils.ParseCoin("0uasset1"), - Price: sdk.MustNewDecFromStr("0.499"), + Price: sdkmath.LegacyMustNewDecFromStr("0.499"), Amount: newInt(2000000), OpenAmount: newInt(2000000), BatchId: 4, @@ -546,7 +547,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithPoolSwap() { types.OrderDirectionSell, utils.ParseCoin("2006000uasset1"), asset2.Denom, - sdk.MustNewDecFromStr("0.501"), + sdkmath.LegacyMustNewDecFromStr("0.501"), newInt(2000000), time.Minute*1, ), @@ -559,7 +560,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithPoolSwap() { OfferCoin: utils.ParseCoin("2000000uasset1"), RemainingOfferCoin: utils.ParseCoin("2000000uasset1"), ReceivedCoin: utils.ParseCoin("0uasset2"), - Price: sdk.MustNewDecFromStr("0.501"), + Price: sdkmath.LegacyMustNewDecFromStr("0.501"), Amount: newInt(2000000), OpenAmount: newInt(2000000), BatchId: 6, @@ -580,7 +581,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithPoolSwap() { types.OrderDirectionSell, utils.ParseCoin("2006000uasset1"), asset2.Denom, - sdk.MustNewDecFromStr("0.51"), + sdkmath.LegacyMustNewDecFromStr("0.51"), newInt(2000000), time.Minute*1, ), @@ -593,7 +594,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithPoolSwap() { OfferCoin: utils.ParseCoin("2000000uasset1"), RemainingOfferCoin: utils.ParseCoin("2000000uasset1"), ReceivedCoin: utils.ParseCoin("0uasset2"), - Price: sdk.MustNewDecFromStr("0.51"), + Price: sdkmath.LegacyMustNewDecFromStr("0.51"), Amount: newInt(2000000), OpenAmount: newInt(2000000), BatchId: 8, @@ -614,7 +615,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithPoolSwap() { types.OrderDirectionSell, utils.ParseCoin("2006000uasset1"), asset2.Denom, - sdk.MustNewDecFromStr("0.499980"), + sdkmath.LegacyMustNewDecFromStr("0.499980"), newInt(2000000), time.Minute*1, ), @@ -627,7 +628,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithPoolSwap() { OfferCoin: utils.ParseCoin("2000000uasset1"), RemainingOfferCoin: utils.ParseCoin("2000000uasset1"), ReceivedCoin: utils.ParseCoin("0uasset2"), - Price: sdk.MustNewDecFromStr("0.499980"), + Price: sdkmath.LegacyMustNewDecFromStr("0.499980"), Amount: newInt(2000000), OpenAmount: newInt(2000000), BatchId: 10, @@ -711,7 +712,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithoutPool() { types.OrderDirectionBuy, utils.ParseCoin("17552500uasset2"), asset1.Denom, - sdk.MustNewDecFromStr("0.5"), + sdkmath.LegacyMustNewDecFromStr("0.5"), newInt(35000000), time.Minute*1, ), @@ -725,7 +726,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithoutPool() { types.OrderDirectionSell, utils.ParseCoin("35105000uasset1"), asset2.Denom, - sdk.MustNewDecFromStr("0.5"), + sdkmath.LegacyMustNewDecFromStr("0.5"), newInt(35000000), time.Minute*1, ), @@ -742,7 +743,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithoutPool() { types.OrderDirectionBuy, utils.ParseCoin("17552500uasset2"), asset1.Denom, - sdk.MustNewDecFromStr("0.5"), + sdkmath.LegacyMustNewDecFromStr("0.5"), newInt(35000000), time.Minute*1, ), @@ -756,7 +757,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithoutPool() { types.OrderDirectionSell, utils.ParseCoin("20060000uasset1"), asset2.Denom, - sdk.MustNewDecFromStr("0.5"), + sdkmath.LegacyMustNewDecFromStr("0.5"), newInt(20000000), time.Minute*1, ), @@ -773,7 +774,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithoutPool() { types.OrderDirectionBuy, utils.ParseCoin("15045000uasset2"), asset1.Denom, - sdk.MustNewDecFromStr("0.5"), + sdkmath.LegacyMustNewDecFromStr("0.5"), newInt(30000000), time.Minute*1, ), @@ -787,7 +788,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithoutPool() { types.OrderDirectionSell, utils.ParseCoin("70210000uasset1"), asset2.Denom, - sdk.MustNewDecFromStr("0.5"), + sdkmath.LegacyMustNewDecFromStr("0.5"), newInt(70000000), time.Minute*1, ), @@ -804,7 +805,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithoutPool() { types.OrderDirectionBuy, utils.ParseCoin("15045000uasset2"), asset1.Denom, - sdk.MustNewDecFromStr("0.45"), + sdkmath.LegacyMustNewDecFromStr("0.45"), newInt(30000000), time.Minute*1, ), @@ -818,7 +819,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithoutPool() { types.OrderDirectionSell, utils.ParseCoin("70210000uasset1"), asset2.Denom, - sdk.MustNewDecFromStr("0.55"), + sdkmath.LegacyMustNewDecFromStr("0.55"), newInt(70000000), time.Minute*1, ), @@ -835,7 +836,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithoutPool() { types.OrderDirectionBuy, utils.ParseCoin("16549500uasset2"), asset1.Denom, - sdk.MustNewDecFromStr("0.55"), + sdkmath.LegacyMustNewDecFromStr("0.55"), newInt(30000000), time.Minute*1, ), @@ -849,7 +850,7 @@ func (s *KeeperTestSuite) TestLimitOrderWithoutPool() { types.OrderDirectionSell, utils.ParseCoin("30090000uasset1"), asset2.Denom, - sdk.MustNewDecFromStr("0.50"), + sdkmath.LegacyMustNewDecFromStr("0.50"), newInt(30000000), time.Minute*1, ), @@ -930,8 +931,8 @@ func (s *KeeperTestSuite) TestDustCollector() { pair := s.CreateNewLiquidityPair(appID1, s.addr(0), asset1.Denom, asset2.Denom) - s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.9005"), sdk.NewInt(1000), 0) - s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.9005"), sdk.NewInt(1000), 0) + s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.9005"), sdkmath.NewInt(1000), 0) + s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.9005"), sdkmath.NewInt(1000), 0) s.nextBlock() s.Require().True(coinsEq(utils.ParseCoins("1000denom1,1denom2"), s.getBalances(s.addr(1)))) @@ -951,16 +952,16 @@ func (s *KeeperTestSuite) TestInsufficientRemainingOfferCoin() { pair := s.CreateNewLiquidityPair(appID1, s.addr(0), asset1.Denom, asset2.Denom) - order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.5"), sdk.NewInt(10000), time.Minute) - s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.5"), sdk.NewInt(1001), 0) + order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.5"), sdkmath.NewInt(10000), time.Minute) + s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.5"), sdkmath.NewInt(1001), 0) s.nextBlock() - s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.5"), sdk.NewInt(8999), 0) + s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.5"), sdkmath.NewInt(8999), 0) liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) order, found := s.keeper.GetOrder(s.ctx, appID1, order.PairId, order.Id) s.Require().True(found) s.Require().Equal(types.OrderStatusExpired, order.Status) - s.Require().True(intEq(sdk.OneInt(), order.OpenAmount)) + s.Require().True(intEq(sdkmath.OneInt(), order.OpenAmount)) } func (s *KeeperTestSuite) TestNegativeOpenAmount() { @@ -973,8 +974,8 @@ func (s *KeeperTestSuite) TestNegativeOpenAmount() { pair := s.CreateNewLiquidityPair(appID1, s.addr(0), asset1.Denom, asset2.Denom) - order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.82"), sdk.NewInt(648744), 0) - s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.82"), sdk.NewInt(648745), 0) + order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.82"), sdkmath.NewInt(648744), 0) + s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.82"), sdkmath.NewInt(648745), 0) liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) order, found := s.keeper.GetOrder(s.ctx, appID1, order.PairId, order.Id) @@ -994,21 +995,21 @@ func (s *KeeperTestSuite) TestExpireSmallOrders() { asset2 := s.CreateNewAsset("ASSETTWO", "denom2", 1000000) pair := s.CreateNewLiquidityPair(appID1, s.addr(0), asset1.Denom, asset2.Denom) - s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.000018"), sdk.NewInt(10000000), 0) + s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.000018"), sdkmath.NewInt(10000000), 0) // This order should have 10000 open amount after matching. // If this order would be matched after that, then the orderer will receive // floor(10000*0.000018) demand coin, which is zero. // So the order must have been expired after matching. - order := s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.000018"), sdk.NewInt(10010000), time.Minute) + order := s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.000018"), sdkmath.NewInt(10010000), time.Minute) liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) order, found := s.keeper.GetOrder(s.ctx, appID1, order.PairId, order.Id) s.Require().True(found) s.Require().Equal(types.OrderStatusExpired, order.Status) liquidity.BeginBlocker(s.ctx, s.keeper, s.app.AssetKeeper) // Delete outdated states. - s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.000019"), sdk.NewInt(100000000), time.Minute) - s.LimitOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.000019"), sdk.NewInt(100000000), time.Minute) + s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.000019"), sdkmath.NewInt(100000000), time.Minute) + s.LimitOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.000019"), sdkmath.NewInt(100000000), time.Minute) liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) } @@ -1025,26 +1026,26 @@ func (s *KeeperTestSuite) TestRejectSmallOrders() { // Too small offer coin amount. msg := types.NewMsgLimitOrder( appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseCoin("99denom2"), - "denom1", utils.ParseDec("0.1"), sdk.NewInt(990), 0) + "denom1", utils.ParseDec("0.1"), sdkmath.NewInt(990), 0) s.Require().EqualError(msg.ValidateBasic(), "offer coin 99denom2 is smaller than the min amount 100: invalid request") // Too small order amount. msg = types.NewMsgLimitOrder( appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseCoin("990denom2"), - "denom1", utils.ParseDec("10.0"), sdk.NewInt(99), 0) + "denom1", utils.ParseDec("10.0"), sdkmath.NewInt(99), 0) s.Require().EqualError(msg.ValidateBasic(), "order amount 99 is smaller than the min amount 100: invalid request") // Too small orders. msg = types.NewMsgLimitOrder( appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseCoin("101denom2"), - "denom1", utils.ParseDec("0.00010001"), sdk.NewInt(999000), 0) + "denom1", utils.ParseDec("0.00010001"), sdkmath.NewInt(999000), 0) s.Require().NoError(msg.ValidateBasic()) _, err := s.keeper.LimitOrder(s.ctx, msg) s.Require().ErrorIs(err, types.ErrTooSmallOrder) msg = types.NewMsgLimitOrder( appID1, s.addr(1), pair.Id, types.OrderDirectionSell, utils.ParseCoin("1002999denom1"), - "denom2", utils.ParseDec("0.0001"), sdk.NewInt(999999), 0) + "denom2", utils.ParseDec("0.0001"), sdkmath.NewInt(999999), 0) s.Require().NoError(msg.ValidateBasic()) _, err = s.keeper.LimitOrder(s.ctx, msg) s.Require().ErrorIs(err, types.ErrTooSmallOrder) @@ -1052,13 +1053,13 @@ func (s *KeeperTestSuite) TestRejectSmallOrders() { // Too small offer coin amount. msg2 := types.NewMsgMarketOrder( appID1, s.addr(1), pair.Id, types.OrderDirectionSell, utils.ParseCoin("99denom1"), - "denom2", sdk.NewInt(99), 0) + "denom2", sdkmath.NewInt(99), 0) s.Require().EqualError(msg2.ValidateBasic(), "offer coin 99denom1 is smaller than the min amount 100: invalid request") // Too small order amount. msg2 = types.NewMsgMarketOrder( appID1, s.addr(1), pair.Id, types.OrderDirectionSell, utils.ParseCoin("100denom1"), - "denom2", sdk.NewInt(99), 0) + "denom2", sdkmath.NewInt(99), 0) s.Require().EqualError(msg2.ValidateBasic(), "order amount 99 is smaller than the min amount 100: invalid request") p := utils.ParseDec("0.0001") @@ -1068,14 +1069,14 @@ func (s *KeeperTestSuite) TestRejectSmallOrders() { // Too small orders. msg2 = types.NewMsgMarketOrder( appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseCoin("100denom2"), - "denom1", sdk.NewInt(909090), 0) + "denom1", sdkmath.NewInt(909090), 0) s.Require().NoError(msg2.ValidateBasic()) _, err = s.keeper.MarketOrder(s.ctx, msg2) s.Require().ErrorIs(err, types.ErrTooSmallOrder) msg2 = types.NewMsgMarketOrder( appID1, s.addr(1), pair.Id, types.OrderDirectionSell, utils.ParseCoin("1003denom1"), - "denom2", sdk.NewInt(1000), 0) + "denom2", sdkmath.NewInt(1000), 0) s.Require().NoError(msg2.ValidateBasic()) _, err = s.keeper.MarketOrder(s.ctx, msg2) s.Require().ErrorIs(err, types.ErrTooSmallOrder) @@ -1303,7 +1304,7 @@ func (s *KeeperTestSuite) TestMarketOrder() { OfferCoin: utils.ParseCoin("1100000uasset2"), RemainingOfferCoin: utils.ParseCoin("1100000uasset2"), ReceivedCoin: utils.ParseCoin("0uasset1"), - Price: sdk.MustNewDecFromStr("1.1"), + Price: sdkmath.LegacyMustNewDecFromStr("1.1"), Amount: newInt(1000000), OpenAmount: newInt(1000000), BatchId: 2, @@ -1336,7 +1337,7 @@ func (s *KeeperTestSuite) TestMarketOrder() { OfferCoin: utils.ParseCoin("1000000uasset1"), RemainingOfferCoin: utils.ParseCoin("1000000uasset1"), ReceivedCoin: utils.ParseCoin("0uasset2"), - Price: sdk.MustNewDecFromStr("0.9"), + Price: sdkmath.LegacyMustNewDecFromStr("0.9"), Amount: newInt(1000000), OpenAmount: newInt(1000000), BatchId: 2, @@ -1373,8 +1374,8 @@ func (s *KeeperTestSuite) TestMarketOrder() { if tc.ExpErr == types.ErrNoLastPrice { // When there is no last price in the pair, only limit orders can be made. // These two orders will be matched. - s.LimitOrder(tc.Msg.AppId, creator, tc.Msg.PairId, types.OrderDirectionBuy, utils.ParseDec("1"), sdk.NewInt(10000), 0) - s.LimitOrder(tc.Msg.AppId, creator, tc.Msg.PairId, types.OrderDirectionSell, utils.ParseDec("1"), sdk.NewInt(10000), 0) + s.LimitOrder(tc.Msg.AppId, creator, tc.Msg.PairId, types.OrderDirectionBuy, utils.ParseDec("1"), sdkmath.NewInt(10000), 0) + s.LimitOrder(tc.Msg.AppId, creator, tc.Msg.PairId, types.OrderDirectionSell, utils.ParseDec("1"), sdkmath.NewInt(10000), 0) s.nextBlock() } s.sendCoins(tc.Msg.GetOrderer(), dummyAcc, s.getBalances(tc.Msg.GetOrderer())) @@ -1392,16 +1393,16 @@ func (s *KeeperTestSuite) TestMarketOrderTwo() { // When there is no last price in the pair, only limit orders can be made. // These two orders will be matched. - s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdk.NewInt(10000), 0) - s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdk.NewInt(10000), 0) + s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdkmath.NewInt(10000), 0) + s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdkmath.NewInt(10000), 0) s.nextBlock() // Now users can make market orders. // In this case, addr(3) user's order takes higher priority than addr(4) user's, // because market buy orders have 10% higher price than the last price(1.0). - s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, sdk.NewInt(10000), 0) - s.LimitOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.08"), sdk.NewInt(10000), 0) - s.LimitOrder(appID1, s.addr(5), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.07"), sdk.NewInt(10000), 0) + s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(10000), 0) + s.LimitOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.08"), sdkmath.NewInt(10000), 0) + s.LimitOrder(appID1, s.addr(5), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.07"), sdkmath.NewInt(10000), 0) s.nextBlock() // Check the result. @@ -1472,7 +1473,7 @@ func (s *KeeperTestSuite) TestMarketOrderWithNoLastPrice() { offerCoin := utils.ParseCoin("10000denom2") s.fundAddr(s.addr(1), sdk.NewCoins(offerCoin)) msg := types.NewMsgMarketOrder( - appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, offerCoin, "denom1", sdk.NewInt(10000), 0) + appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, offerCoin, "denom1", sdkmath.NewInt(10000), 0) _, err := s.keeper.MarketOrder(s.ctx, msg) s.Require().ErrorIs(err, types.ErrNoLastPrice) } @@ -1487,7 +1488,7 @@ func (s *KeeperTestSuite) TestSingleOrderNoMatch() { pair := s.CreateNewLiquidityPair(appID1, s.addr(0), asset1.Denom, asset2.Denom) - order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdk.NewInt(1000000), 10*time.Second) + order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdkmath.NewInt(1000000), 10*time.Second) // Execute matching liquidity.EndBlocker(ctx, k, s.app.AssetKeeper) @@ -1541,8 +1542,8 @@ func (s *KeeperTestSuite) TestPartialMatch() { pair := s.CreateNewLiquidityPair(appID1, s.addr(0), asset1.Denom, asset2.Denom) - order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdk.NewInt(10000), time.Hour) - s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdk.NewInt(5000), 0) + order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdkmath.NewInt(10000), time.Hour) + s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdkmath.NewInt(5000), 0) s.nextBlock() order, found := s.keeper.GetOrder(s.ctx, appID1, order.PairId, order.Id) @@ -1550,9 +1551,9 @@ func (s *KeeperTestSuite) TestPartialMatch() { s.Require().Equal(types.OrderStatusPartiallyMatched, order.Status) s.Require().True(utils.ParseCoin("5000denom2").IsEqual(order.RemainingOfferCoin)) s.Require().True(utils.ParseCoin("5000denom1").IsEqual(order.ReceivedCoin)) - s.Require().True(sdk.NewInt(5000).Equal(order.OpenAmount)) + s.Require().True(sdkmath.NewInt(5000).Equal(order.OpenAmount)) - s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionSell, sdk.NewInt(5000), 0) + s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(5000), 0) s.nextBlock() // Now completely matched. @@ -1570,7 +1571,7 @@ func (s *KeeperTestSuite) TestMatchWithLowPricePool() { // Create a pool with very low price. s.CreateNewLiquidityPool(appID1, pair.Id, s.addr(0), "1000000000000000000000denom1,1000000denom2") - order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.000000000001000000"), sdk.NewInt(100000000000000000), 10*time.Second) + order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.000000000001000000"), sdkmath.NewInt(100000000000000000), 10*time.Second) liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) order, found := s.keeper.GetOrder(s.ctx, appID1, order.PairId, order.Id) s.Require().True(found) @@ -1592,8 +1593,8 @@ func (s *KeeperTestSuite) TestMMOrder() { orders := s.MarketMakingOrder( s.addr(1), appID1, pair.Id, - utils.ParseDec("1.1"), utils.ParseDec("1.03"), sdk.NewInt(1000_000000), - utils.ParseDec("0.97"), utils.ParseDec("0.9"), sdk.NewInt(1000_000000), + utils.ParseDec("1.1"), utils.ParseDec("1.03"), sdkmath.NewInt(1000_000000), + utils.ParseDec("0.97"), utils.ParseDec("0.9"), sdkmath.NewInt(1000_000000), 10*time.Second, true) maxNumTicks := int(params.MaxNumMarketMakingOrderTicks) s.Require().Len(orders, 2*maxNumTicks) @@ -1634,8 +1635,8 @@ func (s *KeeperTestSuite) TestMMOrderCancelPreviousOrders() { s.MarketMakingOrder( s.addr(1), appID1, pair.Id, - utils.ParseDec("1.1"), utils.ParseDec("1.03"), sdk.NewInt(1000_000000), - utils.ParseDec("0.97"), utils.ParseDec("0.9"), sdk.NewInt(1000_000000), + utils.ParseDec("1.1"), utils.ParseDec("1.03"), sdkmath.NewInt(1000_000000), + utils.ParseDec("0.97"), utils.ParseDec("0.9"), sdkmath.NewInt(1000_000000), 10*time.Second, true) // Cannot place MM orders again because it's not allowed to cancel previous @@ -1643,8 +1644,8 @@ func (s *KeeperTestSuite) TestMMOrderCancelPreviousOrders() { s.fundAddr(s.addr(1), utils.ParseCoins("1000000000denom1,1000000000denom2")) _, err := s.keeper.MMOrder(s.ctx, types.NewMsgMMOrder( appID1, s.addr(1), pair.Id, - utils.ParseDec("1.1"), utils.ParseDec("1.03"), sdk.NewInt(1000_000000), - utils.ParseDec("0.97"), utils.ParseDec("0.9"), sdk.NewInt(1000_000000), + utils.ParseDec("1.1"), utils.ParseDec("1.03"), sdkmath.NewInt(1000_000000), + utils.ParseDec("0.97"), utils.ParseDec("0.9"), sdkmath.NewInt(1000_000000), 10*time.Second)) s.Require().ErrorIs(err, types.ErrSameBatch) @@ -1652,8 +1653,8 @@ func (s *KeeperTestSuite) TestMMOrderCancelPreviousOrders() { s.nextBlock() s.MarketMakingOrder( s.addr(1), appID1, pair.Id, - utils.ParseDec("1.1"), utils.ParseDec("1.03"), sdk.NewInt(1000_000000), - utils.ParseDec("0.97"), utils.ParseDec("0.9"), sdk.NewInt(1000_000000), + utils.ParseDec("1.1"), utils.ParseDec("1.03"), sdkmath.NewInt(1000_000000), + utils.ParseDec("0.97"), utils.ParseDec("0.9"), sdkmath.NewInt(1000_000000), 10*time.Second, true) params, err := s.keeper.GetGenericParams(s.ctx, appID1) @@ -1802,7 +1803,7 @@ func (s *KeeperTestSuite) TestCancelAllOrders() { pair := s.CreateNewLiquidityPair(appID1, s.addr(0), asset1.Denom, asset2.Denom) - order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdk.NewInt(10000), time.Hour) + order := s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdkmath.NewInt(10000), time.Hour) msg := types.NewMsgCancelAllOrders(appID1, s.addr(1), nil) s.keeper.CancelAllOrders(s.ctx, msg) // CancelAllOrders doesn't cancel orders within in same batch s.nextBlock() @@ -1820,14 +1821,14 @@ func (s *KeeperTestSuite) TestCancelAllOrders() { // The order won't be matched with this market order, since the order is // already canceled. - s.LimitOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdk.NewInt(10000), 0) + s.LimitOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdkmath.NewInt(10000), 0) s.nextBlock() s.Require().True(utils.ParseCoins("10030denom2").IsEqual(s.getBalances(s.addr(1)))) pair2 := s.CreateNewLiquidityPair(appID1, s.addr(0), asset2.Denom, asset3.Denom) - s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdk.NewInt(10000), time.Hour) - s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.5"), sdk.NewInt(10000), time.Hour) - s.LimitOrder(appID1, s.addr(2), pair2.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdk.NewInt(10000), time.Hour) + s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.0"), sdkmath.NewInt(10000), time.Hour) + s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("1.5"), sdkmath.NewInt(10000), time.Hour) + s.LimitOrder(appID1, s.addr(2), pair2.Id, types.OrderDirectionSell, utils.ParseDec("1.0"), sdkmath.NewInt(10000), time.Hour) s.nextBlock() msg = types.NewMsgCancelAllOrders(appID1, s.addr(2), []uint64{pair.Id}) @@ -2017,17 +2018,17 @@ func (s *KeeperTestSuite) TestConvertAccumulatedSwapFeesWithSwapDistrToken_1() { s.keeper.SetPair(s.ctx, pair) _ = s.CreateNewLiquidityPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor") // the given deposit amount is not the actuall deposit amout, it will be decided by the protocal based on the min,max and initial prices of ranged pools - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdk.MustNewDecFromStr("0.95"), sdk.MustNewDecFromStr("1.05"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdk.MustNewDecFromStr("0.90"), sdk.MustNewDecFromStr("1.1"), sdk.MustNewDecFromStr("1")) - _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdk.MustNewDecFromStr("0.99"), sdk.MustNewDecFromStr("1.01"), sdk.MustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdkmath.LegacyMustNewDecFromStr("0.95"), sdkmath.LegacyMustNewDecFromStr("1.05"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdkmath.LegacyMustNewDecFromStr("0.90"), sdkmath.LegacyMustNewDecFromStr("1.1"), sdkmath.LegacyMustNewDecFromStr("1")) + _ = s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "100000000ucmdx,100000000uharbor", sdkmath.LegacyMustNewDecFromStr("0.99"), sdkmath.LegacyMustNewDecFromStr("1.01"), sdkmath.LegacyMustNewDecFromStr("1")) - s.MarketOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, sdk.NewInt(30_000000), 0) - s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, sdk.NewInt(54_000000), 0) - s.MarketOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, sdk.NewInt(17_000000), 0) + s.MarketOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(30_000000), 0) + s.MarketOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(54_000000), 0) + s.MarketOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(17_000000), 0) - s.MarketOrder(appID1, s.addr(5), pair.Id, types.OrderDirectionSell, sdk.NewInt(12_000000), 0) - s.MarketOrder(appID1, s.addr(6), pair.Id, types.OrderDirectionSell, sdk.NewInt(19_000000), 0) - s.MarketOrder(appID1, s.addr(7), pair.Id, types.OrderDirectionSell, sdk.NewInt(23_000000), 0) + s.MarketOrder(appID1, s.addr(5), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(12_000000), 0) + s.MarketOrder(appID1, s.addr(6), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(19_000000), 0) + s.MarketOrder(appID1, s.addr(7), pair.Id, types.OrderDirectionSell, sdkmath.NewInt(23_000000), 0) _, err := s.keeper.GetGenericParams(s.ctx, appID1) s.Require().NoError(err) @@ -2077,15 +2078,15 @@ func (s *KeeperTestSuite) TestConvertAccumulatedSwapFeesWithSwapDistrToken_2() { _ = s.CreateNewLiquidityPool(appID1, pair4.Id, addr1, "100000000stake,100000000ucmdx") // the given deposit amount is not the actuall deposit amout, it will be decided by the protocal based on the min,max and initial prices of ranged pools - s.MarketOrder(appID1, s.addr(2), pair1.Id, types.OrderDirectionBuy, sdk.NewInt(30_000000), 0) - s.MarketOrder(appID1, s.addr(3), pair2.Id, types.OrderDirectionBuy, sdk.NewInt(54_000000), 0) - s.MarketOrder(appID1, s.addr(4), pair3.Id, types.OrderDirectionBuy, sdk.NewInt(17_000000), 0) - s.MarketOrder(appID1, s.addr(4), pair4.Id, types.OrderDirectionBuy, sdk.NewInt(17_000000), 0) + s.MarketOrder(appID1, s.addr(2), pair1.Id, types.OrderDirectionBuy, sdkmath.NewInt(30_000000), 0) + s.MarketOrder(appID1, s.addr(3), pair2.Id, types.OrderDirectionBuy, sdkmath.NewInt(54_000000), 0) + s.MarketOrder(appID1, s.addr(4), pair3.Id, types.OrderDirectionBuy, sdkmath.NewInt(17_000000), 0) + s.MarketOrder(appID1, s.addr(4), pair4.Id, types.OrderDirectionBuy, sdkmath.NewInt(17_000000), 0) - s.MarketOrder(appID1, s.addr(6), pair1.Id, types.OrderDirectionSell, sdk.NewInt(19_000000), 0) - s.MarketOrder(appID1, s.addr(7), pair2.Id, types.OrderDirectionSell, sdk.NewInt(23_000000), 0) - s.MarketOrder(appID1, s.addr(5), pair3.Id, types.OrderDirectionSell, sdk.NewInt(12_000000), 0) - s.MarketOrder(appID1, s.addr(5), pair4.Id, types.OrderDirectionSell, sdk.NewInt(32_000000), 0) + s.MarketOrder(appID1, s.addr(6), pair1.Id, types.OrderDirectionSell, sdkmath.NewInt(19_000000), 0) + s.MarketOrder(appID1, s.addr(7), pair2.Id, types.OrderDirectionSell, sdkmath.NewInt(23_000000), 0) + s.MarketOrder(appID1, s.addr(5), pair3.Id, types.OrderDirectionSell, sdkmath.NewInt(12_000000), 0) + s.MarketOrder(appID1, s.addr(5), pair4.Id, types.OrderDirectionSell, sdkmath.NewInt(32_000000), 0) _, err := s.keeper.GetGenericParams(s.ctx, appID1) s.Require().NoError(err) @@ -2138,24 +2139,24 @@ func (s *KeeperTestSuite) TestPoolPreserveK() { } pools := s.keeper.GetAllPools(s.ctx, appID1) - ks := map[uint64]sdk.Dec{} + ks := map[uint64]sdkmath.LegacyDec{} for _, pool := range pools { rx, ry := s.keeper.GetPoolBalances(s.ctx, pool) - ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}).(*amm.RangedPool) + ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdkmath.Int{}).(*amm.RangedPool) transX, transY := ammPool.Translation() - ks[pool.Id] = sdk.NewDec(rx.Amount.Int64()).Add(transX).Mul(sdk.NewDec(ry.Amount.Int64()).Add(transY)) + ks[pool.Id] = sdkmath.LegacyNewDec(rx.Amount.Int64()).Add(transX).Mul(sdkmath.LegacyNewDec(ry.Amount.Int64()).Add(transY)) } for i := 0; i < 20; i++ { pair, _ = s.keeper.GetPair(s.ctx, appID1, pair.Id) for j := 0; j < 50; j++ { - var price sdk.Dec + var price sdkmath.LegacyDec if pair.LastPrice == nil { price = utils.RandomDec(r, utils.ParseDec("0.001"), utils.ParseDec("100.0")) } else { price = utils.RandomDec(r, utils.ParseDec("0.91"), utils.ParseDec("1.09")).Mul(*pair.LastPrice) } - amt := utils.RandomInt(r, sdk.NewInt(10000), sdk.NewInt(1000000)) + amt := utils.RandomInt(r, sdkmath.NewInt(10000), sdkmath.NewInt(1000000)) lifespan := time.Duration(r.Intn(60)) * time.Second if r.Intn(2) == 0 { s.LimitOrder(appID1, s.addr(j+2), pair.Id, types.OrderDirectionBuy, price, amt, lifespan) @@ -2170,9 +2171,9 @@ func (s *KeeperTestSuite) TestPoolPreserveK() { for _, pool := range pools { rx, ry := s.keeper.GetPoolBalances(s.ctx, pool) - ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}).(*amm.RangedPool) + ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdkmath.Int{}).(*amm.RangedPool) transX, transY := ammPool.Translation() - k := sdk.NewDec(rx.Amount.Int64()).Add(transX).Mul(sdk.NewDec(ry.Amount.Int64()).Add(transY)) + k := sdkmath.LegacyNewDec(rx.Amount.Int64()).Add(transX).Mul(sdkmath.LegacyNewDec(ry.Amount.Int64()).Add(transY)) s.Require().True(k.GTE(ks[pool.Id].Mul(utils.ParseDec("0.99999")))) // there may be a small error ks[pool.Id] = k } @@ -2188,7 +2189,7 @@ func (s *KeeperTestSuite) TestPoolOrderOverflow() { pair := s.CreateNewLiquidityPair(appID1, s.addr(0), asset1.Denom, asset2.Denom) s.CreateNewLiquidityPool(appID1, pair.Id, s.addr(0), "1000000denom1,10000000000000000000000000denom2") - s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.000000000000010000"), sdk.NewInt(1e17), 0) + s.LimitOrder(appID1, s.addr(1), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.000000000000010000"), sdkmath.NewInt(1e17), 0) s.Require().NotPanics(func() { liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) }) @@ -2196,7 +2197,7 @@ func (s *KeeperTestSuite) TestPoolOrderOverflow() { func (s *KeeperTestSuite) TestRangedLiquidity() { orderPrice := utils.ParseDec("1.05") - orderAmt := sdk.NewInt(100000) + orderAmt := sdkmath.NewInt(100000) appID1 := s.CreateNewApp("appone") @@ -2217,7 +2218,7 @@ func (s *KeeperTestSuite) TestRangedLiquidity() { paid := order.OfferCoin.Sub(order.RemainingOfferCoin).Amount received := order.ReceivedCoin.Amount s.Require().True(received.LT(orderAmt)) - s.Require().True(sdk.NewDec(paid.Int64()).QuoInt(received).LTE(orderPrice)) + s.Require().True(sdkmath.LegacyNewDec(paid.Int64()).QuoInt(received).LTE(orderPrice)) liquidity.BeginBlocker(s.ctx, s.keeper, s.app.AssetKeeper) pair = s.CreateNewLiquidityPair(appID1, s.addr(0), asset3.Denom, asset4.Denom) @@ -2231,7 +2232,7 @@ func (s *KeeperTestSuite) TestRangedLiquidity() { paid = order.OfferCoin.Sub(order.RemainingOfferCoin).Amount received = order.ReceivedCoin.Amount s.Require().True(intEq(orderAmt, received)) - s.Require().True(sdk.NewDec(paid.Int64()).QuoInt(received).LTE(orderPrice)) + s.Require().True(sdkmath.LegacyNewDec(paid.Int64()).QuoInt(received).LTE(orderPrice)) } func (s *KeeperTestSuite) TestOneSidedRangedPool() { @@ -2246,20 +2247,20 @@ func (s *KeeperTestSuite) TestOneSidedRangedPool() { pool := s.CreateNewLiquidityRangedPool(appID1, pair.Id, s.addr(1), "1000000denom1,1000000denom2", utils.ParseDec("1.0"), utils.ParseDec("1.2"), utils.ParseDec("1.0")) rx, ry := s.keeper.GetPoolBalances(s.ctx, pool) - ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}) + ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdkmath.Int{}) s.Require().True(utils.DecApproxEqual(utils.ParseDec("1.0"), ammPool.Price())) - s.Require().True(intEq(sdk.ZeroInt(), rx.Amount)) - s.Require().True(intEq(sdk.NewInt(1000000), ry.Amount)) + s.Require().True(intEq(sdkmath.ZeroInt(), rx.Amount)) + s.Require().True(intEq(sdkmath.NewInt(1000000), ry.Amount)) orderPrice := utils.ParseDec("1.1") - orderAmt := sdk.NewInt(100000) - order := s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.1"), sdk.NewInt(100000), 0) + orderAmt := sdkmath.NewInt(100000) + order := s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionBuy, utils.ParseDec("1.1"), sdkmath.NewInt(100000), 0) liquidity.EndBlocker(s.ctx, s.keeper, s.app.AssetKeeper) order, _ = s.keeper.GetOrder(s.ctx, appID1, order.PairId, order.Id) paid := order.OfferCoin.Sub(order.RemainingOfferCoin).Amount received := order.ReceivedCoin.Amount s.Require().True(intEq(orderAmt, received)) - s.Require().True(sdk.NewDec(paid.Int64()).QuoInt(received).LTE(orderPrice)) + s.Require().True(sdkmath.LegacyNewDec(paid.Int64()).QuoInt(received).LTE(orderPrice)) rx, _ = s.keeper.GetPoolBalances(s.ctx, pool) s.Require().True(rx.IsPositive()) @@ -2285,14 +2286,14 @@ func (s *KeeperTestSuite) TestExhaustRangedPool() { // Buy for { rx, ry := s.keeper.GetPoolBalances(s.ctx, pool) - ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}) + ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdkmath.Int{}) poolPrice := ammPool.Price() - if ry.Amount.LT(sdk.NewInt(100)) { + if ry.Amount.LT(sdkmath.NewInt(100)) { s.Require().True(utils.DecApproxEqual(maxPrice, poolPrice)) break } - orderPrice := utils.RandomDec(r, poolPrice, poolPrice.Mul(sdk.NewDecWithPrec(105, 2))) - amt := utils.RandomInt(r, sdk.NewInt(5000), sdk.NewInt(15000)) + orderPrice := utils.RandomDec(r, poolPrice, poolPrice.Mul(sdkmath.LegacyNewDecWithPrec(105, 2))) + amt := utils.RandomInt(r, sdkmath.NewInt(5000), sdkmath.NewInt(15000)) s.LimitOrder(appID1, orderer, pair.Id, types.OrderDirectionBuy, orderPrice, amt, 0) s.nextBlock() } @@ -2300,14 +2301,14 @@ func (s *KeeperTestSuite) TestExhaustRangedPool() { // Sell for { rx, ry := s.keeper.GetPoolBalances(s.ctx, pool) - ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}) + ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdkmath.Int{}) poolPrice := ammPool.Price() - if rx.Amount.LT(sdk.NewInt(100)) { + if rx.Amount.LT(sdkmath.NewInt(100)) { s.Require().True(utils.DecApproxEqual(minPrice, poolPrice)) break } - orderPrice := utils.RandomDec(r, poolPrice.Mul(sdk.NewDecWithPrec(95, 2)), poolPrice) - amt := utils.RandomInt(r, sdk.NewInt(5000), sdk.NewInt(15000)) + orderPrice := utils.RandomDec(r, poolPrice.Mul(sdkmath.LegacyNewDecWithPrec(95, 2)), poolPrice) + amt := utils.RandomInt(r, sdkmath.NewInt(5000), sdkmath.NewInt(15000)) s.LimitOrder(appID1, orderer, pair.Id, types.OrderDirectionSell, orderPrice, amt, 0) s.nextBlock() } @@ -2315,13 +2316,13 @@ func (s *KeeperTestSuite) TestExhaustRangedPool() { // Buy again for { rx, ry := s.keeper.GetPoolBalances(s.ctx, pool) - ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}) + ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdkmath.Int{}) poolPrice := ammPool.Price() if poolPrice.GTE(initialPrice) { break } - orderPrice := utils.RandomDec(r, poolPrice, poolPrice.Mul(sdk.NewDecWithPrec(105, 2))) - amt := utils.RandomInt(r, sdk.NewInt(5000), sdk.NewInt(15000)) + orderPrice := utils.RandomDec(r, poolPrice, poolPrice.Mul(sdkmath.LegacyNewDecWithPrec(105, 2))) + amt := utils.RandomInt(r, sdkmath.NewInt(5000), sdkmath.NewInt(15000)) s.LimitOrder(appID1, orderer, pair.Id, types.OrderDirectionBuy, orderPrice, amt, 0) s.nextBlock() } @@ -2330,7 +2331,7 @@ func (s *KeeperTestSuite) TestExhaustRangedPool() { s.Require().NoError(err) rx, ry := s.keeper.GetPoolBalances(s.ctx, pool) - ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdk.Int{}) + ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdkmath.Int{}) s.Require().True(coinEq(rx, utils.ParseCoin("997231denom2"))) s.Require().True(coinEq(ry, utils.ParseCoin("984671denom1"))) s.Require().True(decEq(ammPool.Price(), utils.ParseDec("1.003719250732340754"))) @@ -2366,9 +2367,9 @@ func (s *KeeperTestSuite) TestOrderBooks_edgecase1() { s.Require().Len(resp.Pairs[0].OrderBooks[0].Buys, 2) s.Require().True(decEq(utils.ParseDec("0.63219"), resp.Pairs[0].OrderBooks[0].Buys[0].Price)) - s.Require().True(intEq(sdk.NewInt(1178846737645), resp.Pairs[0].OrderBooks[0].Buys[0].UserOrderAmount)) + s.Require().True(intEq(sdkmath.NewInt(1178846737645), resp.Pairs[0].OrderBooks[0].Buys[0].UserOrderAmount)) s.Require().True(decEq(utils.ParseDec("0.5187"), resp.Pairs[0].OrderBooks[0].Buys[1].Price)) - s.Require().True(intEq(sdk.NewInt(13340086), resp.Pairs[0].OrderBooks[0].Buys[1].UserOrderAmount)) + s.Require().True(intEq(sdkmath.NewInt(13340086), resp.Pairs[0].OrderBooks[0].Buys[1].UserOrderAmount)) s.Require().Len(resp.Pairs[0].OrderBooks[0].Sells, 0) } @@ -2381,17 +2382,17 @@ func (s *KeeperTestSuite) TestSwap_edgecase1() { asset2 := s.CreateNewAsset("ASSETTWO", "denom2", 1000000) pair := s.CreateNewLiquidityPair(appID1, addr1, asset1.Denom, asset2.Denom) - s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.102"), sdk.NewInt(10000), 0) - s.LimitOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.101"), sdk.NewInt(9995), 0) - s.LimitOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.102"), sdk.NewInt(10000), 0) + s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.102"), sdkmath.NewInt(10000), 0) + s.LimitOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.101"), sdkmath.NewInt(9995), 0) + s.LimitOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.102"), sdkmath.NewInt(10000), 0) s.nextBlock() pair, _ = s.keeper.GetPair(s.ctx, appID1, pair.Id) s.Require().True(decEq(utils.ParseDec("0.102"), *pair.LastPrice)) - s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.102"), sdk.NewInt(10000), 0) - s.LimitOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.101"), sdk.NewInt(9995), 0) - s.LimitOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.102"), sdk.NewInt(10000), 0) + s.LimitOrder(appID1, s.addr(2), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.102"), sdkmath.NewInt(10000), 0) + s.LimitOrder(appID1, s.addr(3), pair.Id, types.OrderDirectionSell, utils.ParseDec("0.101"), sdkmath.NewInt(9995), 0) + s.LimitOrder(appID1, s.addr(4), pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.102"), sdkmath.NewInt(10000), 0) s.nextBlock() } @@ -2412,7 +2413,7 @@ func (s *KeeperTestSuite) TestSwap_edgecase2() { s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "17335058855denom2", utils.ParseDec("1.15"), utils.ParseDec("1.55"), utils.ParseDec("1.55")) s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "217771046279denom2", utils.ParseDec("1.25"), utils.ParseDec("1.45"), utils.ParseDec("1.45")) - s.MarketOrder(appID1, addr2, pair.Id, types.OrderDirectionSell, sdk.NewInt(4336_000000), 0) + s.MarketOrder(appID1, addr2, pair.Id, types.OrderDirectionSell, sdkmath.NewInt(4336_000000), 0) s.nextBlock() pair, _ = s.keeper.GetPair(s.ctx, appID1, pair.Id) @@ -2422,7 +2423,7 @@ func (s *KeeperTestSuite) TestSwap_edgecase2() { pair, _ = s.keeper.GetPair(s.ctx, appID1, pair.Id) s.Require().True(decEq(utils.ParseDec("1.6484"), *pair.LastPrice)) - s.MarketOrder(appID1, addr2, pair.Id, types.OrderDirectionSell, sdk.NewInt(4450_000000), 0) + s.MarketOrder(appID1, addr2, pair.Id, types.OrderDirectionSell, sdkmath.NewInt(4450_000000), 0) s.nextBlock() pair, _ = s.keeper.GetPair(s.ctx, appID1, pair.Id) @@ -2445,7 +2446,7 @@ func (s *KeeperTestSuite) TestSwap_edgecase3() { s.CreateNewLiquidityPool(appID1, pair.Id, addr1, "110001546090denom2,110013588106denom1") s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "140913832254denom2,130634675302denom1", utils.ParseDec("0.92"), utils.ParseDec("1.08"), utils.ParseDec("0.99989")) - s.MarketOrder(appID1, addr2, pair.Id, types.OrderDirectionBuy, sdk.NewInt(30_000000), 0) + s.MarketOrder(appID1, addr2, pair.Id, types.OrderDirectionBuy, sdkmath.NewInt(30_000000), 0) s.nextBlock() pair, _ = s.keeper.GetPair(s.ctx, appID1, pair.Id) @@ -2469,8 +2470,8 @@ func (s *KeeperTestSuite) TestSwap_edgecase4() { s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000_000000denom1,1000_000000denom2", utils.ParseDec("0.95"), utils.ParseDec("1.05"), utils.ParseDec("1.02")) s.CreateNewLiquidityRangedPool(appID1, pair.Id, addr1, "1000_000000denom1,1000_000000denom2", utils.ParseDec("0.9"), utils.ParseDec("1.2"), utils.ParseDec("0.98")) - s.LimitOrder(appID1, addr2, pair.Id, types.OrderDirectionSell, utils.ParseDec("1.05"), sdk.NewInt(50_000000), 0) - s.LimitOrder(appID1, addr2, pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.97"), sdk.NewInt(100_000000), 0) + s.LimitOrder(appID1, addr2, pair.Id, types.OrderDirectionSell, utils.ParseDec("1.05"), sdkmath.NewInt(50_000000), 0) + s.LimitOrder(appID1, addr2, pair.Id, types.OrderDirectionBuy, utils.ParseDec("0.97"), sdkmath.NewInt(100_000000), 0) s.nextBlock() s.Require().True(utils.ParseCoins("50150000denom1,97291000denom2").IsEqual(s.getBalances(addr2))) diff --git a/x/liquidity/types/liquidity.pb.go b/x/liquidity/types/liquidity.pb.go index d9e2a7d3f..b2c6fca9d 100644 --- a/x/liquidity/types/liquidity.pb.go +++ b/x/liquidity/types/liquidity.pb.go @@ -4,6 +4,7 @@ package types import ( + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" @@ -243,15 +244,15 @@ func (AddressType) EnumDescriptor() ([]byte, []int) { // Pair defines a coin pair. type Pair struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - BaseCoinDenom string `protobuf:"bytes,2,opt,name=base_coin_denom,json=baseCoinDenom,proto3" json:"base_coin_denom,omitempty"` - QuoteCoinDenom string `protobuf:"bytes,3,opt,name=quote_coin_denom,json=quoteCoinDenom,proto3" json:"quote_coin_denom,omitempty"` - EscrowAddress string `protobuf:"bytes,4,opt,name=escrow_address,json=escrowAddress,proto3" json:"escrow_address,omitempty"` - LastOrderId uint64 `protobuf:"varint,5,opt,name=last_order_id,json=lastOrderId,proto3" json:"last_order_id,omitempty"` - LastPrice *github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,6,opt,name=last_price,json=lastPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"last_price,omitempty"` - CurrentBatchId uint64 `protobuf:"varint,7,opt,name=current_batch_id,json=currentBatchId,proto3" json:"current_batch_id,omitempty"` - SwapFeeCollectorAddress string `protobuf:"bytes,8,opt,name=swap_fee_collector_address,json=swapFeeCollectorAddress,proto3" json:"swap_fee_collector_address,omitempty"` - AppId uint64 `protobuf:"varint,9,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + BaseCoinDenom string `protobuf:"bytes,2,opt,name=base_coin_denom,json=baseCoinDenom,proto3" json:"base_coin_denom,omitempty"` + QuoteCoinDenom string `protobuf:"bytes,3,opt,name=quote_coin_denom,json=quoteCoinDenom,proto3" json:"quote_coin_denom,omitempty"` + EscrowAddress string `protobuf:"bytes,4,opt,name=escrow_address,json=escrowAddress,proto3" json:"escrow_address,omitempty"` + LastOrderId uint64 `protobuf:"varint,5,opt,name=last_order_id,json=lastOrderId,proto3" json:"last_order_id,omitempty"` + LastPrice *cosmossdk_io_math.LegacyDec `protobuf:"bytes,6,opt,name=last_price,json=lastPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"last_price,omitempty"` + CurrentBatchId uint64 `protobuf:"varint,7,opt,name=current_batch_id,json=currentBatchId,proto3" json:"current_batch_id,omitempty"` + SwapFeeCollectorAddress string `protobuf:"bytes,8,opt,name=swap_fee_collector_address,json=swapFeeCollectorAddress,proto3" json:"swap_fee_collector_address,omitempty"` + AppId uint64 `protobuf:"varint,9,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` } func (m *Pair) Reset() { *m = Pair{} } @@ -289,18 +290,18 @@ var xxx_messageInfo_Pair proto.InternalMessageInfo // Pool defines a basic liquidity pool with no min-price and max-price. type Pool struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - PairId uint64 `protobuf:"varint,2,opt,name=pair_id,json=pairId,proto3" json:"pair_id,omitempty"` - ReserveAddress string `protobuf:"bytes,3,opt,name=reserve_address,json=reserveAddress,proto3" json:"reserve_address,omitempty"` - PoolCoinDenom string `protobuf:"bytes,4,opt,name=pool_coin_denom,json=poolCoinDenom,proto3" json:"pool_coin_denom,omitempty"` - LastDepositRequestId uint64 `protobuf:"varint,5,opt,name=last_deposit_request_id,json=lastDepositRequestId,proto3" json:"last_deposit_request_id,omitempty"` - LastWithdrawRequestId uint64 `protobuf:"varint,6,opt,name=last_withdraw_request_id,json=lastWithdrawRequestId,proto3" json:"last_withdraw_request_id,omitempty"` - Disabled bool `protobuf:"varint,7,opt,name=disabled,proto3" json:"disabled,omitempty"` - AppId uint64 `protobuf:"varint,8,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - Type PoolType `protobuf:"varint,9,opt,name=type,proto3,enum=comdex.liquidity.v1beta1.PoolType" json:"type,omitempty"` - Creator string `protobuf:"bytes,10,opt,name=creator,proto3" json:"creator,omitempty"` - MinPrice *github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,11,opt,name=min_price,json=minPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"min_price,omitempty"` - MaxPrice *github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,12,opt,name=max_price,json=maxPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_price,omitempty"` + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + PairId uint64 `protobuf:"varint,2,opt,name=pair_id,json=pairId,proto3" json:"pair_id,omitempty"` + ReserveAddress string `protobuf:"bytes,3,opt,name=reserve_address,json=reserveAddress,proto3" json:"reserve_address,omitempty"` + PoolCoinDenom string `protobuf:"bytes,4,opt,name=pool_coin_denom,json=poolCoinDenom,proto3" json:"pool_coin_denom,omitempty"` + LastDepositRequestId uint64 `protobuf:"varint,5,opt,name=last_deposit_request_id,json=lastDepositRequestId,proto3" json:"last_deposit_request_id,omitempty"` + LastWithdrawRequestId uint64 `protobuf:"varint,6,opt,name=last_withdraw_request_id,json=lastWithdrawRequestId,proto3" json:"last_withdraw_request_id,omitempty"` + Disabled bool `protobuf:"varint,7,opt,name=disabled,proto3" json:"disabled,omitempty"` + AppId uint64 `protobuf:"varint,8,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + Type PoolType `protobuf:"varint,9,opt,name=type,proto3,enum=comdex.liquidity.v1beta1.PoolType" json:"type,omitempty"` + Creator string `protobuf:"bytes,10,opt,name=creator,proto3" json:"creator,omitempty"` + MinPrice *cosmossdk_io_math.LegacyDec `protobuf:"bytes,11,opt,name=min_price,json=minPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"min_price,omitempty"` + MaxPrice *cosmossdk_io_math.LegacyDec `protobuf:"bytes,12,opt,name=max_price,json=maxPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"max_price,omitempty"` } func (m *Pool) Reset() { *m = Pool{} } @@ -457,9 +458,9 @@ type Order struct { // received_coin specifies the received coin after the swap ReceivedCoin types.Coin `protobuf:"bytes,8,opt,name=received_coin,json=receivedCoin,proto3" json:"received_coin"` // price specifies the price that an orderer is willing to swap - Price github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,9,opt,name=price,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"price"` - Amount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,10,opt,name=amount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"amount"` - OpenAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,11,opt,name=open_amount,json=openAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"open_amount"` + Price cosmossdk_io_math.LegacyDec `protobuf:"bytes,9,opt,name=price,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"price"` + Amount cosmossdk_io_math.Int `protobuf:"bytes,10,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` + OpenAmount cosmossdk_io_math.Int `protobuf:"bytes,11,opt,name=open_amount,json=openAmount,proto3,customtype=cosmossdk.io/math.Int" json:"open_amount"` // batch_id specifies the pair's batch id when the request is stored BatchId uint64 `protobuf:"varint,12,opt,name=batch_id,json=batchId,proto3" json:"batch_id,omitempty"` ExpireAt time.Time `protobuf:"bytes,13,opt,name=expire_at,json=expireAt,proto3,stdtime" json:"expire_at"` @@ -685,123 +686,124 @@ func init() { } var fileDescriptor_579dcc42096fa86d = []byte{ - // 1850 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0xcd, 0x73, 0x1a, 0xc9, - 0x15, 0xd7, 0x00, 0x42, 0xf0, 0x90, 0x10, 0x6e, 0x4b, 0x36, 0xc2, 0x6b, 0x44, 0x91, 0xac, 0x4d, - 0xb9, 0x6a, 0xc1, 0xc6, 0x49, 0x9c, 0x8f, 0xdd, 0x4d, 0xf1, 0x31, 0xda, 0x9d, 0x0a, 0x08, 0x3c, - 0xa0, 0x8a, 0x9d, 0x0b, 0x35, 0x9a, 0x69, 0xa1, 0xae, 0x05, 0x66, 0x3c, 0xd3, 0xd8, 0xd2, 0x2d, - 0x97, 0x54, 0x52, 0x9c, 0xf6, 0x94, 0x1b, 0x97, 0xe4, 0x96, 0xbf, 0x20, 0xd7, 0xdc, 0x7c, 0xc8, - 0x61, 0x4f, 0xa9, 0x54, 0x2a, 0xa5, 0x4d, 0xec, 0xff, 0x20, 0xc7, 0x54, 0xaa, 0x92, 0xea, 0xee, - 0x99, 0x61, 0x06, 0x4b, 0x91, 0xbc, 0x6b, 0x9f, 0xa4, 0x7e, 0xfd, 0x7e, 0xef, 0xfb, 0xf5, 0x7b, - 0x03, 0x94, 0x74, 0x73, 0x6c, 0xe0, 0x93, 0xca, 0x88, 0x3c, 0x9b, 0x12, 0x83, 0xd0, 0xd3, 0xca, - 0xf3, 0x07, 0x87, 0x98, 0x6a, 0x0f, 0x16, 0x94, 0xb2, 0x65, 0x9b, 0xd4, 0x44, 0x59, 0xc1, 0x59, - 0x5e, 0xd0, 0x5d, 0xce, 0xdc, 0xd6, 0xd0, 0x1c, 0x9a, 0x9c, 0xa9, 0xc2, 0xfe, 0x13, 0xfc, 0xb9, - 0xbc, 0x6e, 0x3a, 0x63, 0xd3, 0xa9, 0x1c, 0x6a, 0x0e, 0xf6, 0x85, 0xea, 0x26, 0x99, 0xb8, 0xf7, - 0xbb, 0x43, 0xd3, 0x1c, 0x8e, 0x70, 0x85, 0x9f, 0x0e, 0xa7, 0x47, 0x15, 0x4a, 0xc6, 0xd8, 0xa1, - 0xda, 0xd8, 0x12, 0x0c, 0xc5, 0xff, 0x44, 0x20, 0xd6, 0xd5, 0x88, 0x8d, 0xd2, 0x10, 0x21, 0x46, - 0x56, 0x2a, 0x48, 0xa5, 0x98, 0x1a, 0x21, 0x06, 0xba, 0x03, 0x9b, 0x4c, 0xe8, 0x80, 0x09, 0x1b, - 0x18, 0x78, 0x62, 0x8e, 0xb3, 0x91, 0x82, 0x54, 0x4a, 0xaa, 0x1b, 0x8c, 0xdc, 0x30, 0xc9, 0xa4, - 0xc9, 0x88, 0xa8, 0x04, 0x99, 0x67, 0x53, 0x93, 0x86, 0x18, 0xa3, 0x9c, 0x31, 0xcd, 0xe9, 0x0b, - 0xce, 0x0f, 0x21, 0x8d, 0x1d, 0xdd, 0x36, 0x5f, 0x0c, 0x34, 0xc3, 0xb0, 0xb1, 0xe3, 0x64, 0x63, - 0x42, 0xa0, 0xa0, 0xd6, 0x04, 0x11, 0x15, 0x61, 0x63, 0xa4, 0x39, 0x74, 0x60, 0xda, 0x06, 0xb6, - 0x07, 0xc4, 0xc8, 0xae, 0x72, 0x9b, 0x52, 0x8c, 0xd8, 0x61, 0x34, 0xc5, 0x40, 0x0a, 0x00, 0xe7, - 0xb1, 0x6c, 0xa2, 0xe3, 0x6c, 0x9c, 0x89, 0xa9, 0xdf, 0xfb, 0xdb, 0xd9, 0xee, 0x9d, 0x21, 0xa1, - 0xc7, 0xd3, 0xc3, 0xb2, 0x6e, 0x8e, 0x2b, 0x6e, 0x64, 0xc4, 0x9f, 0x8f, 0x1c, 0xe3, 0x8b, 0x0a, - 0x3d, 0xb5, 0xb0, 0x53, 0x6e, 0x62, 0x5d, 0x4d, 0x32, 0x74, 0x97, 0x81, 0x99, 0xfd, 0xfa, 0xd4, - 0xb6, 0xf1, 0x84, 0x0e, 0x0e, 0x35, 0xaa, 0x1f, 0x33, 0x8d, 0x6b, 0x5c, 0x63, 0xda, 0xa5, 0xd7, - 0x19, 0x59, 0x31, 0xd0, 0x4f, 0x20, 0xe7, 0xbc, 0xd0, 0xac, 0xc1, 0x11, 0x66, 0xce, 0x8e, 0x46, - 0x58, 0xa7, 0xa6, 0xed, 0xfb, 0x92, 0xe0, 0xbe, 0xdc, 0x64, 0x1c, 0x7b, 0x18, 0x37, 0xbc, 0x7b, - 0xcf, 0xab, 0x6d, 0x88, 0x6b, 0x96, 0xc5, 0x84, 0x27, 0xb9, 0xf0, 0x55, 0xcd, 0xb2, 0x14, 0xa3, - 0xf8, 0xeb, 0x18, 0xc4, 0xba, 0xa6, 0x39, 0x7a, 0x23, 0xfc, 0x37, 0x61, 0xcd, 0xd2, 0x08, 0xf7, - 0x3f, 0xc2, 0x89, 0x71, 0x76, 0x54, 0x0c, 0x74, 0x17, 0x36, 0x6d, 0xec, 0x60, 0xfb, 0x39, 0xf6, - 0x55, 0xbb, 0xe1, 0x76, 0xc9, 0x9e, 0xc6, 0x3b, 0xb0, 0x69, 0x99, 0xe6, 0x28, 0x98, 0x17, 0x37, - 0xde, 0x8c, 0xbc, 0x48, 0xcb, 0xf7, 0xe1, 0x26, 0x8f, 0xa5, 0x81, 0x2d, 0xd3, 0x21, 0x74, 0x60, - 0xe3, 0x67, 0x53, 0xec, 0xd0, 0x45, 0xe4, 0xb7, 0xd8, 0x75, 0x53, 0xdc, 0xaa, 0xe2, 0x52, 0x31, - 0xd0, 0x23, 0xc8, 0x72, 0xd8, 0x0b, 0x42, 0x8f, 0x0d, 0x5b, 0x7b, 0x11, 0xc4, 0xc5, 0x39, 0x6e, - 0x9b, 0xdd, 0xff, 0xdc, 0xbd, 0x5e, 0x00, 0x73, 0x90, 0x30, 0x88, 0xa3, 0x1d, 0x8e, 0xb0, 0x08, - 0x74, 0x42, 0xf5, 0xcf, 0x81, 0x28, 0x25, 0x02, 0x51, 0x42, 0x3f, 0x80, 0x18, 0xcb, 0x1d, 0x0f, - 0x5d, 0xba, 0x5a, 0x2c, 0x5f, 0xd4, 0x24, 0x65, 0x16, 0xca, 0xfe, 0xa9, 0x85, 0x55, 0xce, 0x8f, - 0xb2, 0xb0, 0xa6, 0xdb, 0x58, 0xa3, 0xa6, 0x9d, 0x05, 0xee, 0xba, 0x77, 0x44, 0x9f, 0x41, 0x72, - 0x4c, 0x26, 0x6e, 0xfd, 0xa4, 0xde, 0xba, 0x7e, 0x12, 0x63, 0x32, 0x11, 0xe5, 0xc3, 0x04, 0x69, - 0x27, 0xae, 0xa0, 0xf5, 0x6f, 0x20, 0x48, 0x3b, 0xe1, 0x82, 0x8a, 0xff, 0x8d, 0x42, 0x3a, 0x1c, - 0xe4, 0x73, 0x6b, 0x82, 0x65, 0x34, 0x50, 0x13, 0xa6, 0x39, 0x52, 0x0c, 0x74, 0x1b, 0x60, 0xec, - 0x0c, 0x07, 0xc7, 0x98, 0x0c, 0x8f, 0x29, 0x2f, 0x87, 0xa8, 0x9a, 0x1c, 0x3b, 0xc3, 0xcf, 0x39, - 0x01, 0x7d, 0x00, 0x49, 0x37, 0xb9, 0xa6, 0xed, 0xd6, 0xc0, 0x82, 0x80, 0x2c, 0xd8, 0xf0, 0x52, - 0xcf, 0x4a, 0xc5, 0xc9, 0xae, 0x16, 0xa2, 0xa5, 0x54, 0x75, 0xa7, 0x2c, 0x0c, 0x2e, 0xb3, 0x76, - 0xf7, 0x03, 0xcc, 0xca, 0xa6, 0x7e, 0xff, 0xe5, 0xd9, 0xee, 0xca, 0x1f, 0xbe, 0xde, 0x2d, 0x5d, - 0xc1, 0x49, 0x06, 0x70, 0xd4, 0x75, 0x57, 0x03, 0x3f, 0x21, 0x1b, 0xd2, 0x9a, 0xae, 0x63, 0x8b, - 0x62, 0xc3, 0x55, 0x19, 0x7f, 0xf7, 0x2a, 0x37, 0x3c, 0x15, 0x42, 0xa7, 0x02, 0x99, 0x31, 0x99, - 0x30, 0x8d, 0x7e, 0x53, 0xf0, 0xea, 0xfb, 0xbf, 0x5a, 0x63, 0x4c, 0xab, 0x9a, 0x16, 0xc0, 0xae, - 0xdb, 0x35, 0xe8, 0xa7, 0x10, 0x77, 0xa8, 0x46, 0xa7, 0xa2, 0xe7, 0xd3, 0xd5, 0xbb, 0x17, 0xd7, - 0xa3, 0x9b, 0xc9, 0x1e, 0x67, 0x57, 0x5d, 0xd8, 0x45, 0x6f, 0xc1, 0xaf, 0xa2, 0xb0, 0xb9, 0xd4, - 0x2e, 0xef, 0xac, 0x04, 0xf2, 0x00, 0x5e, 0xa3, 0x62, 0xaf, 0x06, 0x02, 0x14, 0xf4, 0x31, 0x24, - 0x17, 0x71, 0x59, 0xbd, 0x5a, 0x5c, 0x12, 0xde, 0x3b, 0x82, 0x28, 0x6c, 0x7a, 0xb2, 0x26, 0xef, - 0x2f, 0xa3, 0x69, 0x5f, 0x87, 0x48, 0xe9, 0x22, 0x0f, 0x6b, 0xdf, 0x36, 0x0f, 0xc1, 0xd7, 0xa6, - 0xf8, 0x97, 0x38, 0xac, 0xf2, 0x41, 0x73, 0xf5, 0x47, 0xf9, 0x92, 0xe8, 0x67, 0x61, 0x8d, 0x4f, - 0x33, 0x3f, 0xf4, 0xde, 0x11, 0xed, 0x41, 0xd2, 0x20, 0x36, 0xd6, 0x29, 0x31, 0x45, 0xdc, 0xd3, - 0xd5, 0xd2, 0xc5, 0x6e, 0x70, 0xab, 0x9a, 0x1e, 0xbf, 0xba, 0x80, 0xa2, 0x4f, 0x01, 0xcc, 0xa3, - 0x23, 0x6c, 0x8b, 0x04, 0xc6, 0xaf, 0x96, 0xc0, 0x24, 0x87, 0xf0, 0x0c, 0x3e, 0x86, 0x2d, 0x1b, - 0x8f, 0x35, 0x32, 0x21, 0x93, 0xe1, 0x20, 0x20, 0xe9, 0x8a, 0x2d, 0x82, 0x7c, 0x70, 0xc7, 0x17, - 0xd9, 0x84, 0x0d, 0x1b, 0xeb, 0x98, 0x3c, 0x77, 0xbb, 0x9c, 0x07, 0xf9, 0x0a, 0xb2, 0xd6, 0x3d, - 0x94, 0x2b, 0x65, 0x55, 0xbc, 0xad, 0x49, 0xfe, 0xb6, 0x96, 0x19, 0xcb, 0x5b, 0xbc, 0xaf, 0x02, - 0x8c, 0xf6, 0x20, 0xae, 0x8d, 0xcd, 0xe9, 0x84, 0x8a, 0x39, 0xf0, 0x56, 0x62, 0x94, 0x09, 0x55, - 0x5d, 0x34, 0xea, 0x40, 0xca, 0xb4, 0xf0, 0x64, 0xe0, 0x0a, 0x4b, 0x7d, 0x23, 0x61, 0xc0, 0x44, - 0xd4, 0x84, 0xc0, 0x1d, 0x48, 0xf8, 0x5b, 0xc7, 0x3a, 0x2f, 0xa9, 0xb5, 0x43, 0x77, 0xdd, 0xa8, - 0x41, 0x12, 0x9f, 0x58, 0xc4, 0xc6, 0x03, 0x8d, 0x66, 0x37, 0x78, 0xec, 0x72, 0x65, 0xb1, 0xce, - 0x95, 0xbd, 0x75, 0xae, 0xdc, 0xf7, 0xd6, 0xb9, 0x7a, 0x82, 0x59, 0xf1, 0xe5, 0xd7, 0xbb, 0x92, - 0x9a, 0x10, 0xb0, 0x1a, 0x45, 0x9f, 0xf8, 0x1d, 0x92, 0xe6, 0xa5, 0xf5, 0xe1, 0x25, 0xa5, 0x75, - 0x61, 0x7f, 0x6c, 0x06, 0xa7, 0xf1, 0x23, 0x77, 0x1a, 0x67, 0xb8, 0xcc, 0xef, 0x5c, 0x22, 0x73, - 0x31, 0x8e, 0x8b, 0x53, 0x58, 0x6f, 0xb7, 0xc5, 0x0a, 0x37, 0x31, 0xf0, 0x49, 0xb0, 0x2d, 0xa4, - 0x70, 0x5b, 0x2c, 0x34, 0x47, 0x82, 0x9a, 0x03, 0xfd, 0x17, 0x0d, 0xf5, 0xdf, 0x2d, 0x48, 0x7a, - 0xeb, 0x22, 0xdb, 0x2a, 0xa3, 0xa5, 0x98, 0x9a, 0x30, 0xc5, 0xae, 0xe8, 0x14, 0xff, 0x2c, 0xc1, - 0x7a, 0x4d, 0xa7, 0xe4, 0x39, 0xde, 0xd3, 0xec, 0x71, 0x48, 0xba, 0xb4, 0x2c, 0xfd, 0xdc, 0xb7, - 0xf5, 0x06, 0xc4, 0x8f, 0x38, 0xd2, 0xdd, 0xb4, 0xdc, 0x13, 0xa2, 0x90, 0xe1, 0xff, 0x05, 0x67, - 0x4a, 0xec, 0xb2, 0x22, 0xaf, 0xb0, 0x3c, 0xfd, 0xfb, 0x6c, 0xf7, 0xee, 0x15, 0xdf, 0x3d, 0x35, - 0x2d, 0x74, 0x78, 0xe3, 0xa7, 0xf8, 0x77, 0x09, 0xe0, 0xf1, 0x14, 0x4f, 0xdd, 0x06, 0x39, 0xcf, - 0x08, 0xe9, 0x7d, 0x1b, 0x81, 0x9e, 0x00, 0xf0, 0x55, 0x0a, 0x1b, 0xac, 0x3a, 0x23, 0x97, 0x56, - 0xe7, 0x6d, 0xa6, 0xf0, 0x5f, 0x67, 0xbb, 0xd7, 0x4e, 0xb5, 0xf1, 0xe8, 0xc7, 0xc5, 0x05, 0xb6, - 0xc8, 0x4b, 0x36, 0xe9, 0x12, 0x6a, 0xb4, 0x38, 0x97, 0x60, 0x5d, 0xb8, 0xf7, 0x8e, 0xb3, 0x25, - 0x43, 0xea, 0xd9, 0x14, 0x4f, 0xbd, 0x95, 0x23, 0xc6, 0x07, 0xd4, 0x77, 0x2f, 0xae, 0xde, 0x45, - 0x8c, 0x55, 0xe0, 0x40, 0x3e, 0x75, 0xee, 0xfd, 0x56, 0x82, 0x84, 0xb7, 0x66, 0xa2, 0x2a, 0x6c, - 0x77, 0x3b, 0x9d, 0xd6, 0xa0, 0xff, 0xb4, 0x2b, 0x0f, 0x0e, 0xf6, 0x7b, 0x5d, 0xb9, 0xa1, 0xec, - 0x29, 0x72, 0x33, 0xb3, 0x92, 0xbb, 0x39, 0x9b, 0x17, 0xae, 0x7b, 0x8c, 0x07, 0x13, 0xc7, 0xc2, - 0x3a, 0x39, 0x22, 0x98, 0x7f, 0x58, 0x2d, 0x30, 0xf5, 0x5a, 0x4f, 0x69, 0x64, 0xa4, 0xdc, 0xb5, - 0xd9, 0xbc, 0xb0, 0xe1, 0x71, 0xd7, 0x35, 0x87, 0xe8, 0xec, 0xc3, 0x64, 0xc1, 0xa7, 0xd6, 0xf6, - 0x3f, 0x93, 0x9b, 0x99, 0x48, 0x0e, 0xcd, 0xe6, 0x85, 0xb4, 0xbf, 0xe6, 0x6a, 0x93, 0x21, 0x36, - 0x72, 0xb1, 0xdf, 0xfc, 0x3e, 0xbf, 0x72, 0xef, 0x4f, 0x12, 0x24, 0xfd, 0x8e, 0x43, 0xdf, 0x83, - 0x1b, 0x1d, 0xb5, 0x29, 0xab, 0xe7, 0x99, 0x96, 0x9d, 0xcd, 0x0b, 0x5b, 0x3e, 0x6b, 0xd0, 0xb6, - 0x12, 0x64, 0x02, 0xa8, 0x96, 0xd2, 0x56, 0xfa, 0x19, 0x49, 0xe8, 0xf4, 0xf9, 0x5b, 0x64, 0x4c, - 0x28, 0xba, 0x07, 0xd7, 0x02, 0x9c, 0xed, 0x9a, 0xfa, 0x33, 0xb9, 0x9f, 0x89, 0xe4, 0xae, 0xcf, - 0xe6, 0x85, 0x4d, 0x9f, 0xb5, 0xad, 0xd9, 0x5f, 0x60, 0xca, 0xbe, 0xe8, 0x82, 0xbc, 0xed, 0x4c, - 0x34, 0xb7, 0x39, 0x9b, 0x17, 0x52, 0x0b, 0xbe, 0xb6, 0xeb, 0xc3, 0x1f, 0x25, 0x48, 0x87, 0x87, - 0x1c, 0xfa, 0x14, 0x6e, 0x09, 0x70, 0x53, 0x51, 0xe5, 0x46, 0x5f, 0xe9, 0xec, 0x2f, 0x79, 0x73, - 0x7b, 0x36, 0x2f, 0xec, 0x84, 0x41, 0x41, 0x97, 0xca, 0x70, 0x7d, 0x19, 0x5f, 0x3f, 0x78, 0x9a, - 0x91, 0x72, 0xdb, 0xb3, 0x79, 0xe1, 0x5a, 0x18, 0x57, 0x9f, 0x9e, 0xa2, 0xfb, 0xb0, 0xb5, 0xcc, - 0xdf, 0x93, 0x5b, 0xad, 0x4c, 0x24, 0x77, 0x63, 0x36, 0x2f, 0xa0, 0x30, 0xa0, 0x87, 0x47, 0x23, - 0xd7, 0xf4, 0x5f, 0x46, 0x60, 0x23, 0xb4, 0x66, 0xa0, 0x8f, 0x21, 0xa7, 0xca, 0x8f, 0x0f, 0xe4, - 0x5e, 0x7f, 0xd0, 0xeb, 0xd7, 0xfa, 0x07, 0xbd, 0x25, 0xc3, 0x3f, 0x98, 0xcd, 0x0b, 0xd9, 0x10, - 0x24, 0x68, 0xf7, 0x27, 0x70, 0x6b, 0x09, 0xbd, 0xdf, 0xe9, 0x0f, 0xe4, 0x27, 0x72, 0xe3, 0xa0, - 0x2f, 0x37, 0x33, 0xd2, 0x39, 0xf0, 0x7d, 0x93, 0xca, 0x27, 0x58, 0x9f, 0x52, 0x6c, 0xa0, 0x1f, - 0x42, 0x76, 0x09, 0xde, 0x3b, 0x68, 0x34, 0x64, 0xb9, 0xc9, 0xab, 0x28, 0x37, 0x9b, 0x17, 0x6e, - 0x84, 0xb0, 0xbd, 0xa9, 0xae, 0x63, 0x6c, 0x60, 0x83, 0xd5, 0xf4, 0x12, 0x72, 0xaf, 0xa6, 0xb4, - 0xe4, 0x66, 0x26, 0x2a, 0x6a, 0x3a, 0x04, 0xdb, 0xd3, 0xc8, 0xc8, 0xaf, 0xc0, 0xdf, 0x45, 0x21, - 0x15, 0x98, 0x23, 0xcc, 0x06, 0x11, 0xca, 0x73, 0xdd, 0xe7, 0x36, 0x04, 0xd8, 0x83, 0xce, 0xff, - 0x08, 0x76, 0x42, 0xc8, 0x25, 0xd7, 0x97, 0xa1, 0x41, 0xc7, 0x1f, 0x2d, 0x29, 0x65, 0xd0, 0x76, - 0xad, 0xdf, 0xf8, 0x9c, 0x3b, 0xbe, 0x33, 0x9b, 0x17, 0xb6, 0xc3, 0xc8, 0x36, 0x9b, 0xb7, 0xd8, - 0x40, 0x0d, 0xc8, 0x87, 0x80, 0xdd, 0x9a, 0xda, 0x57, 0x6a, 0xad, 0xd6, 0x53, 0x1f, 0x1e, 0xcd, - 0xed, 0xce, 0xe6, 0x85, 0x5b, 0x01, 0x78, 0x57, 0xb3, 0x29, 0xd1, 0x46, 0xa3, 0x53, 0x4f, 0x88, - 0xdf, 0x76, 0xae, 0x90, 0x46, 0xa7, 0xdd, 0x6d, 0xc9, 0xcc, 0xea, 0x58, 0xa0, 0xed, 0x04, 0xb8, - 0x61, 0x8e, 0xad, 0x11, 0xa6, 0x22, 0xe4, 0x61, 0x54, 0x6d, 0xbf, 0x21, 0xb3, 0x90, 0xaf, 0x8a, - 0x90, 0x07, 0x41, 0xda, 0x44, 0xc7, 0xec, 0x53, 0xd9, 0xaf, 0x53, 0x17, 0x23, 0x3f, 0xe9, 0x2a, - 0xaa, 0xdc, 0xcc, 0xc4, 0x03, 0x75, 0x2a, 0x20, 0x32, 0x5f, 0x07, 0xbc, 0x24, 0x9d, 0x42, 0xca, - 0xfd, 0x85, 0x80, 0xbf, 0x13, 0x0f, 0x60, 0xbb, 0xd6, 0x6c, 0xaa, 0x72, 0xaf, 0x27, 0xba, 0xf3, - 0x61, 0x75, 0x50, 0x7f, 0xda, 0x97, 0x7b, 0x99, 0x15, 0x21, 0x27, 0xc0, 0xfb, 0xb0, 0x5a, 0x3f, - 0xa5, 0xd8, 0x79, 0x03, 0x52, 0xbd, 0xef, 0x42, 0xa4, 0x37, 0x20, 0xd5, 0xfb, 0x1c, 0x22, 0x54, - 0xd7, 0x1f, 0xbf, 0xfc, 0x67, 0x7e, 0xe5, 0xe5, 0xab, 0xbc, 0xf4, 0xd5, 0xab, 0xbc, 0xf4, 0x8f, - 0x57, 0x79, 0xe9, 0xcb, 0xd7, 0xf9, 0x95, 0xaf, 0x5e, 0xe7, 0x57, 0xfe, 0xfa, 0x3a, 0xbf, 0xf2, - 0x8b, 0x87, 0xa1, 0x59, 0xc4, 0x1e, 0xe5, 0x8f, 0xcc, 0xa3, 0x23, 0xa2, 0x13, 0x6d, 0xe4, 0x9e, - 0x2b, 0xc1, 0x5f, 0xd0, 0xf8, 0x70, 0x3a, 0x8c, 0xf3, 0x59, 0xf3, 0xf0, 0x7f, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x8d, 0x52, 0xec, 0x37, 0x62, 0x13, 0x00, 0x00, + // 1863 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x4f, 0x73, 0x1a, 0xd9, + 0x11, 0xd7, 0x00, 0x42, 0xd0, 0x92, 0x10, 0x7e, 0xb6, 0x6c, 0x84, 0xd6, 0x40, 0xb1, 0xd9, 0x35, + 0xe5, 0xaa, 0x05, 0x1b, 0x67, 0xe3, 0x6c, 0xb2, 0xeb, 0x14, 0x7f, 0x46, 0xd9, 0xa9, 0x80, 0x84, + 0x07, 0x54, 0xb1, 0x73, 0xa1, 0x46, 0x33, 0x4f, 0xe8, 0x95, 0x81, 0x19, 0xcf, 0x3c, 0x6c, 0x71, + 0xcb, 0x25, 0x55, 0x29, 0x4e, 0x7b, 0xca, 0x8d, 0x4b, 0x72, 0x4a, 0x3e, 0x41, 0xae, 0xb9, 0xf9, + 0x90, 0xc3, 0x1e, 0x53, 0xa9, 0x94, 0x37, 0xb1, 0x3f, 0xc1, 0xe6, 0x98, 0x4b, 0x52, 0xef, 0xbd, + 0x99, 0x61, 0x06, 0x4b, 0x11, 0x55, 0xeb, 0x3d, 0x89, 0xe9, 0xe9, 0x5f, 0xf7, 0xeb, 0xee, 0x5f, + 0xbf, 0xee, 0x11, 0x94, 0x74, 0x73, 0x64, 0xe0, 0xf3, 0xca, 0x90, 0x3c, 0x9f, 0x10, 0x83, 0xd0, + 0x69, 0xe5, 0xc5, 0xfd, 0x13, 0x4c, 0xb5, 0xfb, 0x0b, 0x49, 0xd9, 0xb2, 0x4d, 0x6a, 0xa2, 0x8c, + 0xd0, 0x2c, 0x2f, 0xe4, 0xae, 0x66, 0xf6, 0xc6, 0xc0, 0x1c, 0x98, 0x5c, 0xa9, 0xc2, 0x7e, 0x09, + 0xfd, 0x6c, 0x4e, 0x37, 0x9d, 0x91, 0xe9, 0x54, 0x4e, 0x34, 0x07, 0xfb, 0x46, 0x75, 0x93, 0x8c, + 0xdd, 0xf7, 0xf9, 0x81, 0x69, 0x0e, 0x86, 0xb8, 0xc2, 0x9f, 0x4e, 0x26, 0xa7, 0x15, 0x4a, 0x46, + 0xd8, 0xa1, 0xda, 0xc8, 0x12, 0x0a, 0xc5, 0x6f, 0x23, 0x10, 0xeb, 0x68, 0xc4, 0x46, 0x29, 0x88, + 0x10, 0x23, 0x23, 0x15, 0xa4, 0x52, 0x4c, 0x8d, 0x10, 0x03, 0x7d, 0x0c, 0x3b, 0xcc, 0x68, 0x9f, + 0x19, 0xeb, 0x1b, 0x78, 0x6c, 0x8e, 0x32, 0x91, 0x82, 0x54, 0x4a, 0xaa, 0xdb, 0x4c, 0xdc, 0x30, + 0xc9, 0xb8, 0xc9, 0x84, 0xa8, 0x04, 0xe9, 0xe7, 0x13, 0x93, 0x86, 0x14, 0xa3, 0x5c, 0x31, 0xc5, + 0xe5, 0x0b, 0xcd, 0x8f, 0x20, 0x85, 0x1d, 0xdd, 0x36, 0x5f, 0xf6, 0x35, 0xc3, 0xb0, 0xb1, 0xe3, + 0x64, 0x62, 0xc2, 0xa0, 0x90, 0xd6, 0x84, 0x10, 0x15, 0x61, 0x7b, 0xa8, 0x39, 0xb4, 0x6f, 0xda, + 0x06, 0xb6, 0xfb, 0xc4, 0xc8, 0xac, 0xf3, 0x33, 0x6d, 0x32, 0xe1, 0x11, 0x93, 0x29, 0x06, 0x7a, + 0x04, 0xc0, 0x75, 0x2c, 0x9b, 0xe8, 0x38, 0x13, 0x67, 0x66, 0xea, 0xf9, 0xbf, 0xbf, 0xce, 0xef, + 0x8b, 0x74, 0x38, 0xc6, 0xb3, 0x32, 0x31, 0x2b, 0x23, 0x8d, 0x9e, 0x95, 0x5b, 0x78, 0xa0, 0xe9, + 0xd3, 0x26, 0xd6, 0xd5, 0x24, 0x83, 0x74, 0x18, 0x82, 0x1d, 0x5a, 0x9f, 0xd8, 0x36, 0x1e, 0xd3, + 0xfe, 0x89, 0x46, 0xf5, 0x33, 0xe6, 0x66, 0x83, 0xbb, 0x49, 0xb9, 0xf2, 0x3a, 0x13, 0x2b, 0x06, + 0xfa, 0x29, 0x64, 0x9d, 0x97, 0x9a, 0xd5, 0x3f, 0xc5, 0x2c, 0xc2, 0xe1, 0x10, 0xeb, 0xd4, 0xb4, + 0xfd, 0x00, 0x12, 0x3c, 0x80, 0x5b, 0x4c, 0xe3, 0x00, 0xe3, 0x86, 0xf7, 0xde, 0x0b, 0x65, 0x17, + 0xe2, 0x9a, 0x65, 0x31, 0xe3, 0x49, 0x6e, 0x7c, 0x5d, 0xb3, 0x2c, 0xc5, 0x28, 0x7e, 0x1b, 0x85, + 0x58, 0xc7, 0x34, 0x87, 0xef, 0xe4, 0xfc, 0x16, 0x6c, 0x58, 0x1a, 0xe1, 0x41, 0x47, 0xb8, 0x30, + 0xce, 0x1e, 0x15, 0x03, 0xdd, 0x81, 0x1d, 0x1b, 0x3b, 0xd8, 0x7e, 0x81, 0x7d, 0xd7, 0x6e, 0x8e, + 0x5d, 0xb1, 0xe7, 0xf1, 0x63, 0xd8, 0xb1, 0x4c, 0x73, 0x18, 0x2c, 0x86, 0x9b, 0x64, 0x26, 0x5e, + 0xd4, 0xe2, 0x53, 0xb8, 0xc5, 0x13, 0x68, 0x60, 0xcb, 0x74, 0x08, 0xed, 0xdb, 0xf8, 0xf9, 0x04, + 0x3b, 0x74, 0x91, 0xee, 0x1b, 0xec, 0x75, 0x53, 0xbc, 0x55, 0xc5, 0x4b, 0xc5, 0x40, 0x0f, 0x21, + 0xc3, 0x61, 0x2f, 0x09, 0x3d, 0x33, 0x6c, 0xed, 0x65, 0x10, 0x17, 0xe7, 0xb8, 0x5d, 0xf6, 0xfe, + 0x97, 0xee, 0xeb, 0x05, 0x30, 0x0b, 0x09, 0x83, 0x38, 0xda, 0xc9, 0x10, 0x8b, 0x44, 0x27, 0x54, + 0xff, 0x39, 0x90, 0xa5, 0x44, 0x20, 0x4b, 0xe8, 0x47, 0x10, 0xa3, 0x53, 0x0b, 0xf3, 0xd4, 0xa5, + 0xaa, 0xc5, 0xf2, 0x65, 0x9d, 0x51, 0x66, 0xa9, 0xec, 0x4d, 0x2d, 0xac, 0x72, 0x7d, 0x94, 0x81, + 0x0d, 0xdd, 0xc6, 0x1a, 0x35, 0xed, 0x0c, 0xf0, 0xd0, 0xbd, 0x47, 0xf4, 0x39, 0x24, 0x47, 0x64, + 0xec, 0x92, 0x66, 0x73, 0x35, 0xd2, 0x24, 0x46, 0x64, 0x2c, 0x38, 0xc3, 0xd0, 0xda, 0xb9, 0x8b, + 0xde, 0x5a, 0x15, 0xad, 0x9d, 0x73, 0x74, 0xf1, 0xbf, 0x51, 0x48, 0x85, 0xd3, 0x79, 0x61, 0xf5, + 0x59, 0xed, 0x02, 0xd5, 0x37, 0xcd, 0xa1, 0x62, 0xa0, 0xdb, 0x00, 0x23, 0x67, 0xd0, 0x3f, 0xc3, + 0x64, 0x70, 0x46, 0x79, 0xe1, 0xa3, 0x6a, 0x72, 0xe4, 0x0c, 0xbe, 0xe4, 0x02, 0xf4, 0x01, 0x24, + 0xdd, 0x32, 0x9a, 0xb6, 0x5b, 0xed, 0x85, 0x00, 0x59, 0xb0, 0xed, 0x15, 0x99, 0x91, 0xc2, 0xc9, + 0xac, 0x17, 0xa2, 0xa5, 0xcd, 0xea, 0x5e, 0x59, 0x9c, 0xbb, 0xcc, 0xba, 0xd9, 0x4f, 0x25, 0x23, + 0x48, 0xfd, 0xde, 0xab, 0xd7, 0xf9, 0xb5, 0x3f, 0x7d, 0x93, 0x2f, 0x0d, 0x08, 0x3d, 0x9b, 0x9c, + 0xb0, 0xc4, 0x57, 0xdc, 0x6b, 0x46, 0xfc, 0xf9, 0xc4, 0x31, 0x9e, 0x55, 0x58, 0xae, 0x1d, 0x0e, + 0x70, 0xd4, 0x2d, 0xd7, 0x03, 0x7f, 0x42, 0x36, 0xa4, 0x34, 0x5d, 0xc7, 0x16, 0xc5, 0x86, 0xeb, + 0x32, 0xfe, 0xfe, 0x5d, 0x6e, 0x7b, 0x2e, 0x84, 0x4f, 0x05, 0xd2, 0x23, 0x32, 0x66, 0x1e, 0x7d, + 0xfa, 0x73, 0x9e, 0xfd, 0x5f, 0xaf, 0x31, 0xe6, 0x55, 0x4d, 0x09, 0x60, 0xc7, 0xed, 0x0f, 0xf4, + 0x33, 0x88, 0x3b, 0x54, 0xa3, 0x13, 0xd1, 0xdd, 0xa9, 0xea, 0x9d, 0xcb, 0x99, 0xe7, 0x56, 0xb2, + 0xcb, 0xd5, 0x55, 0x17, 0x76, 0x59, 0xd7, 0xff, 0x26, 0x0a, 0x3b, 0x4b, 0x8d, 0xf1, 0xde, 0x28, + 0x90, 0x03, 0xf0, 0x5a, 0x12, 0x7b, 0x1c, 0x08, 0x48, 0x18, 0x77, 0x17, 0x79, 0x59, 0x5f, 0x2d, + 0x2f, 0x09, 0xef, 0xc6, 0x40, 0x14, 0x76, 0x3c, 0x5b, 0xe3, 0xef, 0xaf, 0xa2, 0x29, 0xdf, 0x87, + 0x28, 0xe9, 0xa2, 0x0e, 0x1b, 0xdf, 0xb5, 0x0e, 0xc1, 0x7b, 0xa5, 0xf8, 0xc7, 0x38, 0xac, 0xf3, + 0x39, 0xb2, 0xfa, 0xf5, 0x7b, 0x45, 0xf6, 0x33, 0xb0, 0xc1, 0x87, 0x95, 0x9f, 0x7a, 0xef, 0x11, + 0x1d, 0x40, 0xd2, 0x20, 0x36, 0xd6, 0x29, 0x31, 0x45, 0xde, 0x53, 0xd5, 0xd2, 0xe5, 0x61, 0xf0, + 0x53, 0x35, 0x3d, 0x7d, 0x75, 0x01, 0x65, 0xf3, 0xce, 0x3c, 0x3d, 0xc5, 0xb6, 0x28, 0x60, 0x7c, + 0xb5, 0x02, 0x26, 0x39, 0x84, 0x57, 0xf0, 0x31, 0xdc, 0xb0, 0xf1, 0x48, 0x23, 0x63, 0x32, 0x1e, + 0xf4, 0x03, 0x96, 0x56, 0x6c, 0x11, 0xe4, 0x83, 0x8f, 0x7c, 0x93, 0x4d, 0xd8, 0xb6, 0xb1, 0x8e, + 0xc9, 0x0b, 0xb7, 0xcb, 0x79, 0x92, 0x57, 0xb0, 0xb5, 0xe5, 0xa1, 0xb8, 0x95, 0xcf, 0x60, 0x5d, + 0x5c, 0xa8, 0x49, 0x7e, 0xa1, 0x7e, 0xc8, 0x54, 0xae, 0xba, 0x54, 0x05, 0x02, 0x7d, 0x0a, 0x71, + 0x6d, 0x64, 0x4e, 0xc6, 0x54, 0x5c, 0xf3, 0xf5, 0xdb, 0x2e, 0x76, 0xf7, 0x5d, 0xac, 0x32, 0xa6, + 0xaa, 0xab, 0x8c, 0x1e, 0xc1, 0xa6, 0x69, 0xe1, 0x71, 0xdf, 0xc5, 0x6e, 0xae, 0x82, 0x05, 0x86, + 0xa8, 0x09, 0xfc, 0x1e, 0x24, 0xfc, 0x95, 0x61, 0x8b, 0xb3, 0x64, 0xe3, 0xc4, 0xdd, 0x15, 0x6a, + 0x90, 0xc4, 0xe7, 0x16, 0xb1, 0x71, 0x5f, 0xa3, 0x99, 0x6d, 0x9e, 0x8e, 0x6c, 0x59, 0x2c, 0x60, + 0x65, 0x6f, 0x01, 0x2b, 0xf7, 0xbc, 0x05, 0xac, 0x9e, 0x60, 0x4e, 0xbf, 0xfa, 0x26, 0x2f, 0xa9, + 0x09, 0x01, 0xab, 0x51, 0xf4, 0x85, 0x4f, 0xfa, 0x14, 0x67, 0xcb, 0x47, 0x57, 0xb0, 0xe5, 0x52, + 0xca, 0xef, 0x04, 0x47, 0xe9, 0x43, 0x77, 0x94, 0xa6, 0xb9, 0xcd, 0x0f, 0xaf, 0xb0, 0xb9, 0x98, + 0xa5, 0xc5, 0x09, 0x6c, 0xb5, 0xdb, 0x62, 0xe9, 0x1a, 0x1b, 0xf8, 0x3c, 0xc8, 0x74, 0x29, 0xcc, + 0xf4, 0x85, 0xe7, 0x48, 0xd0, 0x73, 0xa0, 0xa5, 0xa2, 0xa1, 0x96, 0xda, 0x87, 0xa4, 0xb7, 0xe0, + 0xb1, 0x3d, 0x30, 0x5a, 0x8a, 0xa9, 0x09, 0x53, 0x6c, 0x77, 0x4e, 0xf1, 0xaf, 0x12, 0x6c, 0xd5, + 0x74, 0x4a, 0x5e, 0xe0, 0x03, 0xcd, 0x1e, 0x85, 0xac, 0x4b, 0xcb, 0xd6, 0x2f, 0xbc, 0x2e, 0x6f, + 0x42, 0xfc, 0x94, 0x23, 0xdd, 0x35, 0xc9, 0x7d, 0x42, 0x14, 0xd2, 0xfc, 0x57, 0x70, 0x4c, 0xc4, + 0xae, 0xe2, 0x6d, 0x85, 0xd5, 0xe9, 0x3f, 0xaf, 0xf3, 0x77, 0x56, 0xbc, 0xca, 0xd4, 0x94, 0xf0, + 0xe1, 0x4d, 0x94, 0xe2, 0x3f, 0x24, 0x80, 0xc7, 0x13, 0x3c, 0x71, 0x39, 0x7f, 0xd1, 0x21, 0xa4, + 0xef, 0xfb, 0x10, 0xe8, 0x09, 0x00, 0xdf, 0x83, 0xb0, 0xc1, 0xd8, 0x19, 0xb9, 0x92, 0x9d, 0xbc, + 0x25, 0xfe, 0xfd, 0x3a, 0x7f, 0x6d, 0xaa, 0x8d, 0x86, 0x3f, 0x29, 0x2e, 0xb0, 0x45, 0x4e, 0xd9, + 0xa4, 0x2b, 0xa8, 0xd1, 0xe2, 0x5c, 0x82, 0x2d, 0x11, 0xde, 0x7b, 0xae, 0x96, 0x0c, 0x9b, 0xcf, + 0x27, 0x78, 0xe2, 0x6d, 0x11, 0x31, 0x3e, 0x73, 0x7e, 0x70, 0x39, 0x7b, 0x17, 0x39, 0x56, 0x81, + 0x03, 0xf9, 0x20, 0xb9, 0xfb, 0x3b, 0x09, 0x12, 0xde, 0x8e, 0x88, 0xaa, 0xb0, 0xdb, 0x39, 0x3a, + 0x6a, 0xf5, 0x7b, 0x4f, 0x3b, 0x72, 0xff, 0xf8, 0xb0, 0xdb, 0x91, 0x1b, 0xca, 0x81, 0x22, 0x37, + 0xd3, 0x6b, 0xd9, 0x5b, 0xb3, 0x79, 0xe1, 0xba, 0xa7, 0x78, 0x3c, 0x76, 0x2c, 0xac, 0x93, 0x53, + 0x82, 0xf9, 0xa7, 0xd0, 0x02, 0x53, 0xaf, 0x75, 0x95, 0x46, 0x5a, 0xca, 0x5e, 0x9b, 0xcd, 0x0b, + 0xdb, 0x9e, 0x76, 0x5d, 0x73, 0x88, 0xce, 0xbe, 0x2a, 0x16, 0x7a, 0x6a, 0xed, 0xf0, 0xe7, 0x72, + 0x33, 0x1d, 0xc9, 0xa2, 0xd9, 0xbc, 0x90, 0xf2, 0x77, 0x54, 0x6d, 0x3c, 0xc0, 0x46, 0x36, 0xf6, + 0xdb, 0x3f, 0xe4, 0xd6, 0xee, 0xfe, 0x45, 0x82, 0xa4, 0xdf, 0x71, 0xe8, 0x87, 0x70, 0xf3, 0x48, + 0x6d, 0xca, 0xea, 0x45, 0x47, 0xcb, 0xcc, 0xe6, 0x85, 0x1b, 0xbe, 0x6a, 0xf0, 0x6c, 0x25, 0x48, + 0x07, 0x50, 0x2d, 0xa5, 0xad, 0xf4, 0xd2, 0x92, 0xf0, 0xe9, 0xeb, 0xb7, 0xc8, 0x88, 0x50, 0x74, + 0x17, 0xae, 0x05, 0x34, 0xdb, 0x35, 0xf5, 0x17, 0x72, 0x2f, 0x1d, 0xc9, 0x5e, 0x9f, 0xcd, 0x0b, + 0x3b, 0xbe, 0x6a, 0x5b, 0xb3, 0x9f, 0x61, 0xca, 0xbe, 0xc1, 0x82, 0xba, 0xed, 0x74, 0x34, 0xbb, + 0x33, 0x9b, 0x17, 0x36, 0x17, 0x7a, 0x6d, 0x37, 0x86, 0x3f, 0x4b, 0x90, 0x0a, 0xcf, 0x2d, 0xf4, + 0x08, 0xf6, 0x05, 0xb8, 0xa9, 0xa8, 0x72, 0xa3, 0xa7, 0x1c, 0x1d, 0x2e, 0x45, 0x73, 0x7b, 0x36, + 0x2f, 0xec, 0x85, 0x41, 0xc1, 0x90, 0xca, 0x70, 0x7d, 0x19, 0x5f, 0x3f, 0x7e, 0x9a, 0x96, 0xb2, + 0xbb, 0xb3, 0x79, 0xe1, 0x5a, 0x18, 0x57, 0x9f, 0x4c, 0xd1, 0x3d, 0xb8, 0xb1, 0xac, 0xdf, 0x95, + 0x5b, 0xad, 0x74, 0x24, 0x7b, 0x73, 0x36, 0x2f, 0xa0, 0x30, 0xa0, 0x8b, 0x87, 0x43, 0xf7, 0xe8, + 0xbf, 0x8e, 0xc0, 0x76, 0x68, 0x73, 0x40, 0x9f, 0x43, 0x56, 0x95, 0x1f, 0x1f, 0xcb, 0xdd, 0x5e, + 0xbf, 0xdb, 0xab, 0xf5, 0x8e, 0xbb, 0x4b, 0x07, 0xff, 0x60, 0x36, 0x2f, 0x64, 0x42, 0x90, 0xe0, + 0xb9, 0xbf, 0x80, 0xfd, 0x25, 0xf4, 0xe1, 0x51, 0xaf, 0x2f, 0x3f, 0x91, 0x1b, 0xc7, 0x3d, 0xb9, + 0x99, 0x96, 0x2e, 0x80, 0x1f, 0x9a, 0x54, 0x3e, 0xc7, 0xfa, 0x84, 0x62, 0x03, 0xfd, 0x18, 0x32, + 0x4b, 0xf0, 0xee, 0x71, 0xa3, 0x21, 0xcb, 0x4d, 0xce, 0xa2, 0xec, 0x6c, 0x5e, 0xb8, 0x19, 0xc2, + 0x76, 0x27, 0xba, 0x8e, 0xb1, 0x81, 0x0d, 0xc6, 0xe9, 0x25, 0xe4, 0x41, 0x4d, 0x69, 0xc9, 0xcd, + 0x74, 0x54, 0x70, 0x3a, 0x04, 0x3b, 0xd0, 0xc8, 0xd0, 0x67, 0xe0, 0xef, 0xa3, 0xb0, 0x19, 0x98, + 0x23, 0xec, 0x0c, 0x22, 0x95, 0x17, 0x86, 0xcf, 0xcf, 0x10, 0x50, 0x0f, 0x06, 0xff, 0x19, 0xec, + 0x85, 0x90, 0x4b, 0xa1, 0x2f, 0x43, 0x83, 0x81, 0x3f, 0x5c, 0x72, 0xca, 0xa0, 0xed, 0x5a, 0xaf, + 0xf1, 0x25, 0x0f, 0x7c, 0x6f, 0x36, 0x2f, 0xec, 0x86, 0x91, 0x6d, 0x36, 0x6f, 0xb1, 0x81, 0x1a, + 0x90, 0x0b, 0x01, 0x3b, 0x35, 0xb5, 0xa7, 0xd4, 0x5a, 0xad, 0xa7, 0x3e, 0x3c, 0x9a, 0xcd, 0xcf, + 0xe6, 0x85, 0xfd, 0x00, 0xbc, 0xa3, 0xd9, 0x94, 0x68, 0xc3, 0xe1, 0xd4, 0x33, 0xe2, 0xb7, 0x9d, + 0x6b, 0xa4, 0x71, 0xd4, 0xee, 0xb4, 0x64, 0x76, 0xea, 0x58, 0xa0, 0xed, 0x04, 0xb8, 0x61, 0x8e, + 0xac, 0x21, 0xa6, 0x22, 0xe5, 0x61, 0x54, 0xed, 0xb0, 0x21, 0xb3, 0x94, 0xaf, 0x8b, 0x94, 0x07, + 0x41, 0xda, 0x58, 0xc7, 0xec, 0x3b, 0xd7, 0xe7, 0xa9, 0x8b, 0x91, 0x9f, 0x74, 0x14, 0x55, 0x6e, + 0xa6, 0xe3, 0x01, 0x9e, 0x0a, 0x88, 0xcc, 0xd7, 0x01, 0xaf, 0x48, 0x53, 0xd8, 0x74, 0x3f, 0xef, + 0xf9, 0x3d, 0x71, 0x1f, 0x76, 0x6b, 0xcd, 0xa6, 0x2a, 0x77, 0xbb, 0xa2, 0x3b, 0x1f, 0x54, 0xfb, + 0xf5, 0xa7, 0x3d, 0xb9, 0x9b, 0x5e, 0x13, 0x76, 0x02, 0xba, 0x0f, 0xaa, 0xf5, 0x29, 0xc5, 0xce, + 0x3b, 0x90, 0xea, 0x3d, 0x17, 0x22, 0xbd, 0x03, 0xa9, 0xde, 0xe3, 0x10, 0xe1, 0xba, 0xfe, 0xf8, + 0xd5, 0xbf, 0x72, 0x6b, 0xaf, 0xde, 0xe4, 0xa4, 0xaf, 0xdf, 0xe4, 0xa4, 0x7f, 0xbe, 0xc9, 0x49, + 0x5f, 0xbd, 0xcd, 0xad, 0x7d, 0xfd, 0x36, 0xb7, 0xf6, 0xb7, 0xb7, 0xb9, 0xb5, 0x5f, 0x3d, 0x08, + 0xcd, 0x22, 0x76, 0x29, 0x7f, 0x62, 0x9e, 0x9e, 0x12, 0x9d, 0x68, 0x43, 0xf7, 0xb9, 0x12, 0xfc, + 0x9f, 0x17, 0x1f, 0x4e, 0x27, 0x71, 0x3e, 0x6b, 0x1e, 0xfc, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x2b, + 0xb5, 0xed, 0x6d, 0x14, 0x13, 0x00, 0x00, } func (m *Pair) Marshal() (dAtA []byte, err error) { @@ -2025,7 +2027,7 @@ func (m *Pair) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var v github_com_cosmos_cosmos_sdk_types.Dec + var v cosmossdk_io_math.LegacyDec m.LastPrice = &v if err := m.LastPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -2411,7 +2413,7 @@ func (m *Pool) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var v github_com_cosmos_cosmos_sdk_types.Dec + var v cosmossdk_io_math.LegacyDec m.MinPrice = &v if err := m.MinPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -2447,7 +2449,7 @@ func (m *Pool) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var v github_com_cosmos_cosmos_sdk_types.Dec + var v cosmossdk_io_math.LegacyDec m.MaxPrice = &v if err := m.MaxPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err diff --git a/x/liquidity/types/params.pb.go b/x/liquidity/types/params.pb.go index 163c8e635..d8237db64 100644 --- a/x/liquidity/types/params.pb.go +++ b/x/liquidity/types/params.pb.go @@ -4,6 +4,7 @@ package types import ( + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" @@ -72,19 +73,19 @@ type GenericParams struct { TickPrecision uint64 `protobuf:"varint,2,opt,name=tick_precision,json=tickPrecision,proto3" json:"tick_precision,omitempty"` FeeCollectorAddress string `protobuf:"bytes,3,opt,name=fee_collector_address,json=feeCollectorAddress,proto3" json:"fee_collector_address,omitempty"` DustCollectorAddress string `protobuf:"bytes,4,opt,name=dust_collector_address,json=dustCollectorAddress,proto3" json:"dust_collector_address,omitempty"` - MinInitialPoolCoinSupply github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,5,opt,name=min_initial_pool_coin_supply,json=minInitialPoolCoinSupply,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_initial_pool_coin_supply"` + MinInitialPoolCoinSupply cosmossdk_io_math.Int `protobuf:"bytes,5,opt,name=min_initial_pool_coin_supply,json=minInitialPoolCoinSupply,proto3,customtype=cosmossdk.io/math.Int" json:"min_initial_pool_coin_supply"` PairCreationFee github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,6,rep,name=pair_creation_fee,json=pairCreationFee,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"pair_creation_fee"` PoolCreationFee github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,7,rep,name=pool_creation_fee,json=poolCreationFee,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"pool_creation_fee"` - MinInitialDepositAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,8,opt,name=min_initial_deposit_amount,json=minInitialDepositAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_initial_deposit_amount"` - MaxPriceLimitRatio github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,9,opt,name=max_price_limit_ratio,json=maxPriceLimitRatio,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_price_limit_ratio"` + MinInitialDepositAmount cosmossdk_io_math.Int `protobuf:"bytes,8,opt,name=min_initial_deposit_amount,json=minInitialDepositAmount,proto3,customtype=cosmossdk.io/math.Int" json:"min_initial_deposit_amount"` + MaxPriceLimitRatio cosmossdk_io_math.LegacyDec `protobuf:"bytes,9,opt,name=max_price_limit_ratio,json=maxPriceLimitRatio,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"max_price_limit_ratio"` MaxOrderLifespan time.Duration `protobuf:"bytes,10,opt,name=max_order_lifespan,json=maxOrderLifespan,proto3,stdduration" json:"max_order_lifespan"` - SwapFeeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,11,opt,name=swap_fee_rate,json=swapFeeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"swap_fee_rate"` - WithdrawFeeRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,12,opt,name=withdraw_fee_rate,json=withdrawFeeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"withdraw_fee_rate"` + SwapFeeRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,11,opt,name=swap_fee_rate,json=swapFeeRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"swap_fee_rate"` + WithdrawFeeRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,12,opt,name=withdraw_fee_rate,json=withdrawFeeRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"withdraw_fee_rate"` DepositExtraGas github_com_cosmos_cosmos_sdk_types.Gas `protobuf:"varint,13,opt,name=deposit_extra_gas,json=depositExtraGas,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Gas" json:"deposit_extra_gas"` WithdrawExtraGas github_com_cosmos_cosmos_sdk_types.Gas `protobuf:"varint,14,opt,name=withdraw_extra_gas,json=withdrawExtraGas,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Gas" json:"withdraw_extra_gas"` OrderExtraGas github_com_cosmos_cosmos_sdk_types.Gas `protobuf:"varint,15,opt,name=order_extra_gas,json=orderExtraGas,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Gas" json:"order_extra_gas"` SwapFeeDistrDenom string `protobuf:"bytes,16,opt,name=swap_fee_distr_denom,json=swapFeeDistrDenom,proto3" json:"swap_fee_distr_denom,omitempty"` - SwapFeeBurnRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,17,opt,name=swap_fee_burn_rate,json=swapFeeBurnRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"swap_fee_burn_rate"` + SwapFeeBurnRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,17,opt,name=swap_fee_burn_rate,json=swapFeeBurnRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"swap_fee_burn_rate"` AppId uint64 `protobuf:"varint,18,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` MaxNumMarketMakingOrderTicks uint64 `protobuf:"varint,19,opt,name=max_num_market_making_order_ticks,json=maxNumMarketMakingOrderTicks,proto3" json:"max_num_market_making_order_ticks,omitempty"` MaxNumActivePoolsPerPair uint64 `protobuf:"varint,20,opt,name=max_num_active_pools_per_pair,json=maxNumActivePoolsPerPair,proto3" json:"max_num_active_pools_per_pair,omitempty"` @@ -133,59 +134,60 @@ func init() { } var fileDescriptor_babec35f52b1356c = []byte{ - // 821 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x95, 0x41, 0x6f, 0x1b, 0x45, - 0x14, 0xc7, 0x6d, 0xda, 0x86, 0x64, 0x52, 0xd7, 0xc9, 0x34, 0x81, 0x21, 0x6a, 0x9d, 0x50, 0xa9, - 0x28, 0x97, 0xee, 0xd2, 0x96, 0x3b, 0x8a, 0x63, 0x1a, 0x45, 0x6a, 0xc1, 0xdd, 0x22, 0x0e, 0x05, - 0x69, 0x34, 0xde, 0x7d, 0x76, 0x9e, 0xbc, 0xb3, 0x33, 0xcc, 0xcc, 0x36, 0x4e, 0x3f, 0x05, 0x47, - 0x3e, 0x03, 0x77, 0xbe, 0x43, 0x8e, 0x3d, 0x22, 0x0e, 0x2d, 0x24, 0x5f, 0x04, 0xcd, 0xec, 0xae, - 0x63, 0x04, 0x07, 0x6a, 0x89, 0x93, 0xbd, 0xf3, 0xde, 0xfb, 0xfd, 0x77, 0xde, 0x7f, 0xe6, 0x2d, - 0xb9, 0x9f, 0x2a, 0x99, 0xc1, 0x2c, 0xce, 0xf1, 0xc7, 0x12, 0x33, 0x74, 0x67, 0xf1, 0xab, 0x87, - 0x23, 0x70, 0xe2, 0x61, 0xac, 0x85, 0x11, 0xd2, 0x46, 0xda, 0x28, 0xa7, 0x28, 0xab, 0xd2, 0xa2, - 0x79, 0x5a, 0x54, 0xa7, 0xed, 0x6c, 0x4d, 0xd4, 0x44, 0x85, 0xa4, 0xd8, 0xff, 0xab, 0xf2, 0x77, - 0x7a, 0xa9, 0xb2, 0x52, 0xd9, 0x78, 0x24, 0x2c, 0xcc, 0x89, 0xa9, 0xc2, 0xa2, 0x89, 0x4f, 0x94, - 0x9a, 0xe4, 0x10, 0x87, 0xa7, 0x51, 0x39, 0x8e, 0xb3, 0xd2, 0x08, 0x87, 0xaa, 0x8e, 0xdf, 0x5b, - 0x25, 0x2b, 0xc3, 0xa0, 0x7f, 0xef, 0xd7, 0x9b, 0xa4, 0x73, 0x04, 0x05, 0x18, 0x4c, 0xab, 0x15, - 0x7a, 0x97, 0x90, 0x91, 0x70, 0xe9, 0x09, 0xb7, 0xf8, 0x1a, 0x58, 0x7b, 0xaf, 0xbd, 0x7f, 0x3d, - 0x59, 0x0b, 0x2b, 0x2f, 0xf0, 0x35, 0xd0, 0xfb, 0xe4, 0x96, 0xc3, 0x74, 0xca, 0xb5, 0x81, 0x14, - 0x2d, 0xaa, 0x82, 0x7d, 0x10, 0x52, 0x3a, 0x7e, 0x75, 0xd8, 0x2c, 0xd2, 0x47, 0x64, 0x7b, 0x0c, - 0xc0, 0x53, 0x95, 0xe7, 0x90, 0x3a, 0x65, 0xb8, 0xc8, 0x32, 0x03, 0xd6, 0xb2, 0x6b, 0x7b, 0xed, - 0xfd, 0xb5, 0xe4, 0xf6, 0x18, 0xe0, 0xb0, 0x89, 0x1d, 0x54, 0x21, 0xfa, 0x05, 0xf9, 0x28, 0x2b, - 0xad, 0xfb, 0x97, 0xa2, 0xeb, 0xa1, 0x68, 0xcb, 0x47, 0xff, 0x51, 0x55, 0x90, 0x3b, 0x12, 0x0b, - 0x8e, 0x05, 0x3a, 0x14, 0x39, 0xd7, 0x4a, 0xe5, 0xdc, 0xb7, 0x82, 0xdb, 0x52, 0xeb, 0xfc, 0x8c, - 0xdd, 0xf0, 0xb5, 0xfd, 0xe8, 0xfc, 0xed, 0x6e, 0xeb, 0xf7, 0xb7, 0xbb, 0x9f, 0x4d, 0xd0, 0x9d, - 0x94, 0xa3, 0x28, 0x55, 0x32, 0xae, 0x9b, 0x58, 0xfd, 0x3c, 0xb0, 0xd9, 0x34, 0x76, 0x67, 0x1a, - 0x6c, 0x74, 0x5c, 0xb8, 0x84, 0x49, 0x2c, 0x8e, 0x2b, 0xe4, 0x50, 0xa9, 0xfc, 0x50, 0x61, 0xf1, - 0x22, 0xf0, 0xe8, 0x29, 0xd9, 0xd4, 0x02, 0x0d, 0x4f, 0x0d, 0x84, 0x96, 0xf2, 0x31, 0x00, 0x5b, - 0xd9, 0xbb, 0xb6, 0xbf, 0xfe, 0xe8, 0x93, 0xa8, 0x62, 0x45, 0xde, 0x97, 0xc6, 0xc2, 0xc8, 0xd7, - 0xf6, 0x3f, 0xf7, 0xfa, 0xbf, 0xbc, 0xdb, 0xdd, 0xff, 0x0f, 0xfa, 0xbe, 0xc0, 0x26, 0x5d, 0xaf, - 0x72, 0x58, 0x8b, 0x3c, 0x01, 0x08, 0xc2, 0x61, 0x73, 0x8b, 0xc2, 0x1f, 0xfe, 0x1f, 0xc2, 0x7e, - 0xc3, 0x0b, 0xc2, 0x53, 0xb2, 0xb3, 0xd8, 0xe1, 0x0c, 0xb4, 0xb2, 0xe8, 0xb8, 0x90, 0xaa, 0x2c, - 0x1c, 0x5b, 0x5d, 0xaa, 0xbf, 0x1f, 0x5f, 0xf5, 0x77, 0x50, 0xf1, 0x0e, 0x02, 0x8e, 0x0a, 0xb2, - 0x2d, 0xc5, 0x8c, 0x6b, 0x83, 0x29, 0xf0, 0x1c, 0x25, 0x3a, 0x1e, 0x8e, 0x2e, 0x5b, 0x7b, 0x6f, - 0x9d, 0x01, 0xa4, 0x09, 0x95, 0x62, 0x36, 0xf4, 0xac, 0xa7, 0x1e, 0x95, 0x78, 0x12, 0x7d, 0x4e, - 0xfc, 0x2a, 0x57, 0x26, 0x03, 0xc3, 0x73, 0x1c, 0x83, 0xd5, 0xa2, 0x60, 0x64, 0xaf, 0x1d, 0x3a, - 0x59, 0x5d, 0x9d, 0xa8, 0xb9, 0x3a, 0xd1, 0xa0, 0xbe, 0x3a, 0xfd, 0x55, 0x2f, 0xfd, 0xf3, 0xbb, - 0xdd, 0x76, 0xb2, 0x21, 0xc5, 0xec, 0x1b, 0x5f, 0xfd, 0xb4, 0x2e, 0xa6, 0x09, 0xe9, 0xd8, 0x53, - 0xa1, 0xbd, 0x25, 0xfe, 0x75, 0x81, 0xad, 0x2f, 0xf5, 0xb6, 0xeb, 0x1e, 0xf2, 0x04, 0x20, 0x11, - 0x0e, 0xe8, 0x4b, 0xb2, 0x79, 0x8a, 0xee, 0x24, 0x33, 0xe2, 0xf4, 0x8a, 0x7b, 0x73, 0x29, 0x6e, - 0xb7, 0x01, 0x2d, 0xb0, 0x1b, 0x1b, 0x61, 0xe6, 0x8c, 0xe0, 0x13, 0x61, 0x59, 0xc7, 0x5f, 0xe4, - 0xf7, 0x62, 0x1f, 0x09, 0x9b, 0x74, 0x6b, 0xd0, 0x57, 0x9e, 0x73, 0x24, 0x2c, 0xfd, 0x81, 0xd0, - 0xf9, 0x7b, 0x5f, 0xc1, 0x6f, 0x2d, 0x05, 0xdf, 0x68, 0x48, 0x73, 0xfa, 0x77, 0xa4, 0x5b, 0x19, - 0x77, 0x85, 0xee, 0x2e, 0x85, 0xee, 0x04, 0xcc, 0x9c, 0x1b, 0x93, 0xad, 0xb9, 0x83, 0x19, 0x5a, - 0x67, 0x78, 0x06, 0x85, 0x92, 0x6c, 0x23, 0x8c, 0x9e, 0xcd, 0xda, 0x98, 0x81, 0x8f, 0x0c, 0x7c, - 0x80, 0x7e, 0x4f, 0xe8, 0xbc, 0x60, 0x54, 0x9a, 0xa2, 0xf2, 0x67, 0x73, 0x39, 0x7f, 0x6a, 0x7c, - 0xbf, 0x34, 0x45, 0xf0, 0x67, 0x9b, 0xac, 0x08, 0xad, 0x39, 0x66, 0x8c, 0x86, 0xe9, 0x7a, 0x43, - 0x68, 0x7d, 0x9c, 0xd1, 0x23, 0xf2, 0xa9, 0x3f, 0xb9, 0x45, 0x29, 0xb9, 0x14, 0x66, 0x0a, 0x8e, - 0x4b, 0x31, 0xc5, 0x62, 0x52, 0x9f, 0x65, 0x3f, 0x82, 0x2d, 0xbb, 0x1d, 0x2a, 0xee, 0x48, 0x31, - 0xfb, 0xba, 0x94, 0xcf, 0x42, 0xda, 0xb3, 0x90, 0x15, 0x8e, 0xec, 0xb7, 0x3e, 0x87, 0x7e, 0x49, - 0xee, 0x36, 0x20, 0x91, 0x3a, 0x7c, 0x05, 0x61, 0x6e, 0x5a, 0xae, 0xc1, 0x70, 0x3f, 0x77, 0xd8, - 0x56, 0x80, 0xb0, 0x0a, 0x72, 0x10, 0x52, 0xfc, 0x1c, 0xb4, 0x43, 0x30, 0x43, 0x81, 0xa6, 0xff, - 0xfc, 0xfc, 0xcf, 0x5e, 0xeb, 0xfc, 0xa2, 0xd7, 0x7e, 0x73, 0xd1, 0x6b, 0xff, 0x71, 0xd1, 0x6b, - 0xff, 0x74, 0xd9, 0x6b, 0xbd, 0xb9, 0xec, 0xb5, 0x7e, 0xbb, 0xec, 0xb5, 0x5e, 0x3e, 0xfe, 0xdb, - 0xbe, 0xfd, 0xa7, 0xed, 0x81, 0x1a, 0x8f, 0x31, 0x45, 0x91, 0xd7, 0xcf, 0xf1, 0xe2, 0x37, 0x31, - 0x34, 0x62, 0xb4, 0x12, 0xae, 0xdc, 0xe3, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x51, 0xea, 0x47, - 0xa8, 0x34, 0x07, 0x00, 0x00, + // 847 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x95, 0x41, 0x73, 0x1b, 0x35, + 0x14, 0xc7, 0x6d, 0xda, 0x86, 0x44, 0xc1, 0x75, 0xac, 0x26, 0xb0, 0x84, 0xc6, 0x09, 0x65, 0xca, + 0xe4, 0xd2, 0x5d, 0xda, 0x72, 0x67, 0xe2, 0x98, 0x7a, 0x32, 0x93, 0x52, 0x77, 0xcb, 0xf4, 0x90, + 0x81, 0xd1, 0xc8, 0xbb, 0xcf, 0xce, 0x1b, 0xaf, 0x56, 0x42, 0xd2, 0x36, 0x4e, 0x3f, 0x05, 0x47, + 0x3e, 0x03, 0x9f, 0x24, 0xc7, 0x1e, 0x19, 0x0e, 0x2d, 0x24, 0x07, 0xbe, 0x06, 0x23, 0xed, 0xae, + 0x13, 0xa6, 0x1c, 0x4c, 0x66, 0x38, 0xd9, 0xab, 0xf7, 0xfe, 0xbf, 0xa7, 0x7d, 0x7f, 0xe9, 0x2d, + 0xb9, 0x9f, 0x48, 0x91, 0xc2, 0x2c, 0xca, 0xf0, 0xa7, 0x02, 0x53, 0xb4, 0xa7, 0xd1, 0xab, 0x87, + 0x23, 0xb0, 0xfc, 0x61, 0xa4, 0xb8, 0xe6, 0xc2, 0x84, 0x4a, 0x4b, 0x2b, 0x69, 0x50, 0xa6, 0x85, + 0xf3, 0xb4, 0xb0, 0x4a, 0xdb, 0x5c, 0x9f, 0xc8, 0x89, 0xf4, 0x49, 0x91, 0xfb, 0x57, 0xe6, 0x6f, + 0x76, 0x13, 0x69, 0x84, 0x34, 0xd1, 0x88, 0x1b, 0x98, 0x13, 0x13, 0x89, 0x79, 0x1d, 0x9f, 0x48, + 0x39, 0xc9, 0x20, 0xf2, 0x4f, 0xa3, 0x62, 0x1c, 0xa5, 0x85, 0xe6, 0x16, 0x65, 0x15, 0xbf, 0xb7, + 0x4c, 0x96, 0x86, 0xbe, 0xfe, 0xbd, 0xbf, 0x56, 0x49, 0x6b, 0x00, 0x39, 0x68, 0x4c, 0xca, 0x15, + 0xba, 0x45, 0xc8, 0x88, 0xdb, 0xe4, 0x98, 0x19, 0x7c, 0x0d, 0x41, 0x73, 0xa7, 0xb9, 0x7b, 0x33, + 0x5e, 0xf1, 0x2b, 0x2f, 0xf0, 0x35, 0xd0, 0xfb, 0xe4, 0xb6, 0xc5, 0x64, 0xca, 0x94, 0x86, 0x04, + 0x0d, 0xca, 0x3c, 0xf8, 0xc0, 0xa7, 0xb4, 0xdc, 0xea, 0xb0, 0x5e, 0xa4, 0x8f, 0xc8, 0xc6, 0x18, + 0x80, 0x25, 0x32, 0xcb, 0x20, 0xb1, 0x52, 0x33, 0x9e, 0xa6, 0x1a, 0x8c, 0x09, 0x6e, 0xec, 0x34, + 0x77, 0x57, 0xe2, 0x3b, 0x63, 0x80, 0xfd, 0x3a, 0xb6, 0x57, 0x86, 0xe8, 0xd7, 0xe4, 0xe3, 0xb4, + 0x30, 0xf6, 0x5f, 0x44, 0x37, 0xbd, 0x68, 0xdd, 0x45, 0xdf, 0x53, 0xfd, 0x48, 0xee, 0x0a, 0xcc, + 0x19, 0xe6, 0x68, 0x91, 0x67, 0x4c, 0x49, 0x99, 0x31, 0xd7, 0x0a, 0x66, 0x0a, 0xa5, 0xb2, 0xd3, + 0xe0, 0x96, 0xd3, 0xf6, 0xb6, 0xce, 0xde, 0x6e, 0x37, 0x7e, 0x7f, 0xbb, 0xbd, 0x51, 0x76, 0xce, + 0xa4, 0xd3, 0x10, 0x65, 0x24, 0xb8, 0x3d, 0x0e, 0x0f, 0x72, 0x1b, 0x07, 0x02, 0xf3, 0x83, 0x92, + 0x30, 0x94, 0x32, 0xdb, 0x97, 0x98, 0xbf, 0xf0, 0x72, 0x7a, 0x42, 0x3a, 0x8a, 0xa3, 0x66, 0x89, + 0x06, 0xdf, 0x41, 0x36, 0x06, 0x08, 0x96, 0x76, 0x6e, 0xec, 0xae, 0x3e, 0xfa, 0x34, 0x2c, 0x61, + 0xa1, 0xb3, 0xa1, 0x76, 0x2c, 0x74, 0xda, 0xde, 0x57, 0xae, 0xdc, 0xaf, 0xef, 0xb6, 0x77, 0x27, + 0x68, 0x8f, 0x8b, 0x51, 0x98, 0x48, 0x11, 0x55, 0x9e, 0x95, 0x3f, 0x0f, 0x4c, 0x3a, 0x8d, 0xec, + 0xa9, 0x02, 0xe3, 0x05, 0x26, 0x6e, 0xbb, 0x2a, 0xfb, 0x55, 0x91, 0x27, 0x00, 0xbe, 0xb0, 0x7f, + 0x97, 0xab, 0x85, 0x3f, 0xfc, 0x3f, 0x0a, 0xbb, 0x17, 0xbe, 0x52, 0xf8, 0x88, 0x6c, 0x5e, 0x6d, + 0x68, 0x0a, 0x4a, 0x1a, 0xb4, 0x8c, 0x0b, 0x59, 0xe4, 0x36, 0x58, 0x5e, 0xa4, 0x9d, 0x9f, 0x5c, + 0xb6, 0xb3, 0x5f, 0xca, 0xf7, 0xbc, 0x9a, 0xbe, 0x24, 0x1b, 0x82, 0xcf, 0x98, 0xd2, 0x98, 0x00, + 0xcb, 0x50, 0xa0, 0x65, 0xfe, 0x60, 0x06, 0x2b, 0x1e, 0xfb, 0x45, 0x85, 0xfd, 0xec, 0x7d, 0xec, + 0x21, 0x4c, 0x78, 0x72, 0xda, 0x87, 0x24, 0xa6, 0x82, 0xcf, 0x86, 0x0e, 0x70, 0xe8, 0xf4, 0xb1, + 0x93, 0xd3, 0xe7, 0xc4, 0xad, 0x32, 0xa9, 0x53, 0xd0, 0x2c, 0xc3, 0x31, 0x18, 0xc5, 0xf3, 0x80, + 0xec, 0x34, 0x7d, 0xb7, 0xca, 0xdb, 0x10, 0xd6, 0xb7, 0x21, 0xec, 0x57, 0xb7, 0xa1, 0xb7, 0xec, + 0xea, 0xfd, 0xf2, 0x6e, 0xbb, 0x19, 0xaf, 0x09, 0x3e, 0x7b, 0xe6, 0xd4, 0x87, 0x95, 0x98, 0x0e, + 0x48, 0xcb, 0x9c, 0x70, 0xe5, 0xda, 0xee, 0xf6, 0x08, 0xc1, 0xea, 0xe2, 0x5b, 0x5c, 0x75, 0xca, + 0x27, 0x00, 0x31, 0xb7, 0x40, 0x9f, 0x91, 0xce, 0x09, 0xda, 0xe3, 0x54, 0xf3, 0x93, 0x4b, 0xd8, + 0x47, 0x8b, 0xc3, 0xda, 0xb5, 0xba, 0x06, 0x1e, 0x91, 0x4e, 0x6d, 0x0a, 0xcc, 0xac, 0xe6, 0x6c, + 0xc2, 0x4d, 0xd0, 0x72, 0xb7, 0xb0, 0x17, 0x56, 0xc0, 0x2f, 0x17, 0xb0, 0x7f, 0xc0, 0x4d, 0xdc, + 0xae, 0x40, 0xdf, 0x3a, 0xce, 0x80, 0x1b, 0xfa, 0x03, 0xa1, 0xf3, 0xcd, 0x5e, 0xc2, 0x6f, 0x5f, + 0x0b, 0xbe, 0x56, 0x93, 0xe6, 0xf4, 0x97, 0xa4, 0x5d, 0x5a, 0x74, 0x89, 0x6e, 0x5f, 0x0b, 0xdd, + 0xf2, 0x98, 0x39, 0x37, 0x22, 0xeb, 0x73, 0xaf, 0x52, 0x34, 0x56, 0xb3, 0x14, 0x72, 0x29, 0x82, + 0x35, 0x3f, 0x37, 0x3a, 0x95, 0x1b, 0x7d, 0x17, 0xe9, 0xbb, 0x00, 0x1d, 0x12, 0x3a, 0x17, 0x8c, + 0x0a, 0x9d, 0x97, 0xa6, 0x74, 0xfe, 0x83, 0x29, 0x15, 0xb3, 0x57, 0xe8, 0xdc, 0x9b, 0xb2, 0x41, + 0x96, 0xb8, 0x52, 0x0c, 0xd3, 0x80, 0xfa, 0x79, 0x78, 0x8b, 0x2b, 0x75, 0x90, 0xd2, 0x01, 0xf9, + 0xdc, 0x1d, 0xcc, 0xbc, 0x10, 0x4c, 0x70, 0x3d, 0x05, 0xcb, 0x04, 0x9f, 0x62, 0x3e, 0xa9, 0x8e, + 0xaa, 0x1b, 0x9a, 0x26, 0xb8, 0xe3, 0x15, 0x77, 0x05, 0x9f, 0x7d, 0x57, 0x88, 0xa7, 0x3e, 0xed, + 0xa9, 0xcf, 0xf2, 0x27, 0xf2, 0x7b, 0x97, 0x43, 0xbf, 0x21, 0x5b, 0x35, 0x88, 0x27, 0x16, 0x5f, + 0x81, 0x9f, 0x74, 0x86, 0x29, 0xd0, 0xcc, 0x8d, 0x8e, 0x60, 0xdd, 0x43, 0x82, 0x12, 0xb2, 0xe7, + 0x53, 0xdc, 0x28, 0x33, 0x43, 0xd0, 0x43, 0x8e, 0xba, 0xf7, 0xfc, 0xec, 0xcf, 0x6e, 0xe3, 0xec, + 0xbc, 0xdb, 0x7c, 0x73, 0xde, 0x6d, 0xfe, 0x71, 0xde, 0x6d, 0xfe, 0x7c, 0xd1, 0x6d, 0xbc, 0xb9, + 0xe8, 0x36, 0x7e, 0xbb, 0xe8, 0x36, 0x8e, 0x1e, 0xff, 0xa3, 0xf1, 0xee, 0x63, 0xf4, 0x40, 0x8e, + 0xc7, 0x98, 0x20, 0xcf, 0xaa, 0xe7, 0xe8, 0xea, 0x57, 0xcc, 0x3b, 0x31, 0x5a, 0xf2, 0x37, 0xea, + 0xf1, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb3, 0xae, 0x91, 0x14, 0xe6, 0x06, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/liquidity/types/query.pb.go b/x/liquidity/types/query.pb.go index 462baab10..01f73d336 100644 --- a/x/liquidity/types/query.pb.go +++ b/x/liquidity/types/query.pb.go @@ -5,6 +5,7 @@ package types import ( context "context" + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" @@ -1478,21 +1479,21 @@ func (m *QueryOrdersByOrdererRequest) GetAppId() uint64 { // PoolResponse defines a custom pool response message. type PoolResponse struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - PairId uint64 `protobuf:"varint,2,opt,name=pair_id,json=pairId,proto3" json:"pair_id,omitempty"` - ReserveAddress string `protobuf:"bytes,3,opt,name=reserve_address,json=reserveAddress,proto3" json:"reserve_address,omitempty"` - PoolCoinDenom string `protobuf:"bytes,4,opt,name=pool_coin_denom,json=poolCoinDenom,proto3" json:"pool_coin_denom,omitempty"` - Balances PoolBalances `protobuf:"bytes,5,opt,name=balances,proto3" json:"balances"` - LastDepositRequestId uint64 `protobuf:"varint,6,opt,name=last_deposit_request_id,json=lastDepositRequestId,proto3" json:"last_deposit_request_id,omitempty"` - LastWithdrawRequestId uint64 `protobuf:"varint,7,opt,name=last_withdraw_request_id,json=lastWithdrawRequestId,proto3" json:"last_withdraw_request_id,omitempty"` - AppId uint64 `protobuf:"varint,8,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - Type PoolType `protobuf:"varint,9,opt,name=type,proto3,enum=comdex.liquidity.v1beta1.PoolType" json:"type,omitempty"` - Creator string `protobuf:"bytes,10,opt,name=creator,proto3" json:"creator,omitempty"` - PoolCoinSupply github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,11,opt,name=pool_coin_supply,json=poolCoinSupply,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"pool_coin_supply"` - MinPrice *github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,12,opt,name=min_price,json=minPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"min_price,omitempty"` - MaxPrice *github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,13,opt,name=max_price,json=maxPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_price,omitempty"` - Price *github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,14,opt,name=price,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"price,omitempty"` - Disabled bool `protobuf:"varint,15,opt,name=disabled,proto3" json:"disabled,omitempty"` + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + PairId uint64 `protobuf:"varint,2,opt,name=pair_id,json=pairId,proto3" json:"pair_id,omitempty"` + ReserveAddress string `protobuf:"bytes,3,opt,name=reserve_address,json=reserveAddress,proto3" json:"reserve_address,omitempty"` + PoolCoinDenom string `protobuf:"bytes,4,opt,name=pool_coin_denom,json=poolCoinDenom,proto3" json:"pool_coin_denom,omitempty"` + Balances PoolBalances `protobuf:"bytes,5,opt,name=balances,proto3" json:"balances"` + LastDepositRequestId uint64 `protobuf:"varint,6,opt,name=last_deposit_request_id,json=lastDepositRequestId,proto3" json:"last_deposit_request_id,omitempty"` + LastWithdrawRequestId uint64 `protobuf:"varint,7,opt,name=last_withdraw_request_id,json=lastWithdrawRequestId,proto3" json:"last_withdraw_request_id,omitempty"` + AppId uint64 `protobuf:"varint,8,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + Type PoolType `protobuf:"varint,9,opt,name=type,proto3,enum=comdex.liquidity.v1beta1.PoolType" json:"type,omitempty"` + Creator string `protobuf:"bytes,10,opt,name=creator,proto3" json:"creator,omitempty"` + PoolCoinSupply cosmossdk_io_math.Int `protobuf:"bytes,11,opt,name=pool_coin_supply,json=poolCoinSupply,proto3,customtype=cosmossdk.io/math.Int" json:"pool_coin_supply"` + MinPrice *cosmossdk_io_math.LegacyDec `protobuf:"bytes,12,opt,name=min_price,json=minPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"min_price,omitempty"` + MaxPrice *cosmossdk_io_math.LegacyDec `protobuf:"bytes,13,opt,name=max_price,json=maxPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"max_price,omitempty"` + Price *cosmossdk_io_math.LegacyDec `protobuf:"bytes,14,opt,name=price,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"price,omitempty"` + Disabled bool `protobuf:"varint,15,opt,name=disabled,proto3" json:"disabled,omitempty"` } func (m *PoolResponse) Reset() { *m = PoolResponse{} } @@ -2354,9 +2355,9 @@ func (m *QueryOrderBooksResponse) GetPairs() []OrderBookPairResponse { } type OrderBookPairResponse struct { - PairId uint64 `protobuf:"varint,1,opt,name=pair_id,json=pairId,proto3" json:"pair_id,omitempty"` - BasePrice github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,2,opt,name=base_price,json=basePrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"base_price"` - OrderBooks []OrderBookResponse `protobuf:"bytes,3,rep,name=order_books,json=orderBooks,proto3" json:"order_books"` + PairId uint64 `protobuf:"varint,1,opt,name=pair_id,json=pairId,proto3" json:"pair_id,omitempty"` + BasePrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,2,opt,name=base_price,json=basePrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"base_price"` + OrderBooks []OrderBookResponse `protobuf:"bytes,3,rep,name=order_books,json=orderBooks,proto3" json:"order_books"` } func (m *OrderBookPairResponse) Reset() { *m = OrderBookPairResponse{} } @@ -2407,9 +2408,9 @@ func (m *OrderBookPairResponse) GetOrderBooks() []OrderBookResponse { } type OrderBookResponse struct { - PriceUnit github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=price_unit,json=priceUnit,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"price_unit"` - Sells []OrderBookTickResponse `protobuf:"bytes,2,rep,name=sells,proto3" json:"sells"` - Buys []OrderBookTickResponse `protobuf:"bytes,3,rep,name=buys,proto3" json:"buys"` + PriceUnit cosmossdk_io_math.LegacyDec `protobuf:"bytes,1,opt,name=price_unit,json=priceUnit,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"price_unit"` + Sells []OrderBookTickResponse `protobuf:"bytes,2,rep,name=sells,proto3" json:"sells"` + Buys []OrderBookTickResponse `protobuf:"bytes,3,rep,name=buys,proto3" json:"buys"` } func (m *OrderBookResponse) Reset() { *m = OrderBookResponse{} } @@ -2460,9 +2461,9 @@ func (m *OrderBookResponse) GetBuys() []OrderBookTickResponse { } type OrderBookTickResponse struct { - Price github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=price,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"price"` - UserOrderAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=user_order_amount,json=userOrderAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"user_order_amount"` - PoolOrderAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=pool_order_amount,json=poolOrderAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"pool_order_amount"` + Price cosmossdk_io_math.LegacyDec `protobuf:"bytes,1,opt,name=price,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"price"` + UserOrderAmount cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=user_order_amount,json=userOrderAmount,proto3,customtype=cosmossdk.io/math.Int" json:"user_order_amount"` + PoolOrderAmount cosmossdk_io_math.Int `protobuf:"bytes,3,opt,name=pool_order_amount,json=poolOrderAmount,proto3,customtype=cosmossdk.io/math.Int" json:"pool_order_amount"` } func (m *OrderBookTickResponse) Reset() { *m = OrderBookTickResponse{} } @@ -2709,179 +2710,181 @@ func init() { } var fileDescriptor_d297ec7fcddea2d4 = []byte{ - // 2752 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x4d, 0x6c, 0x1c, 0x49, - 0xf5, 0x4f, 0x8f, 0x67, 0x1c, 0xfb, 0xd9, 0x9e, 0xb1, 0x2b, 0x5f, 0x93, 0x49, 0x32, 0xe3, 0x7f, - 0xff, 0x43, 0x32, 0xe4, 0x63, 0x26, 0x71, 0xbe, 0xbd, 0xbb, 0x51, 0x3c, 0xeb, 0x24, 0xeb, 0x4d, - 0x22, 0x92, 0x4e, 0xa2, 0x5d, 0xa2, 0xc0, 0xd0, 0x33, 0x5d, 0x76, 0x5a, 0xe9, 0xe9, 0x6e, 0x77, - 0xf7, 0xc4, 0xf1, 0x5a, 0xd6, 0x4a, 0x48, 0x5c, 0x10, 0x12, 0x2b, 0x2d, 0x8b, 0x40, 0x88, 0x03, - 0x08, 0x09, 0x01, 0x07, 0x0e, 0xc0, 0x65, 0x2f, 0x48, 0x20, 0xa1, 0x3d, 0xb0, 0xda, 0x5d, 0xe5, - 0x82, 0x38, 0x64, 0x21, 0x81, 0x0b, 0xc7, 0x95, 0xb8, 0x70, 0x42, 0xf5, 0xd1, 0x3d, 0xdd, 0xed, - 0x6e, 0x77, 0x8f, 0x35, 0xe6, 0xe2, 0x71, 0x57, 0xd5, 0x7b, 0xef, 0xf7, 0x3e, 0xea, 0xd5, 0xab, - 0x7a, 0x70, 0xb8, 0x6d, 0x74, 0x14, 0xfc, 0xb4, 0xae, 0xa9, 0xcb, 0x5d, 0x55, 0x51, 0x9d, 0xd5, - 0xfa, 0x93, 0xd3, 0x2d, 0xec, 0xc8, 0xa7, 0xeb, 0xcb, 0x5d, 0x6c, 0xad, 0xd6, 0x4c, 0xcb, 0x70, - 0x0c, 0x54, 0x64, 0xab, 0x6a, 0xde, 0xaa, 0x1a, 0x5f, 0x55, 0xda, 0xbd, 0x64, 0x2c, 0x19, 0x74, - 0x51, 0x9d, 0xfc, 0xc7, 0xd6, 0x97, 0x0e, 0x2e, 0x19, 0xc6, 0x92, 0x86, 0xeb, 0xb2, 0xa9, 0xd6, - 0x65, 0x5d, 0x37, 0x1c, 0xd9, 0x51, 0x0d, 0xdd, 0xe6, 0xb3, 0xe5, 0xb6, 0x61, 0x77, 0x0c, 0xbb, - 0xde, 0x92, 0x6d, 0xec, 0x89, 0x6b, 0x1b, 0xaa, 0xce, 0xe7, 0x8f, 0xf9, 0xe7, 0x29, 0x0c, 0x6f, - 0x95, 0x29, 0x2f, 0xa9, 0x3a, 0x65, 0xc6, 0xd7, 0x56, 0x63, 0xf1, 0xf7, 0xb0, 0xb2, 0x95, 0x5f, - 0x8a, 0x5d, 0x69, 0xca, 0x96, 0xdc, 0x71, 0xc1, 0x55, 0x38, 0x74, 0xfa, 0xd5, 0xea, 0x2e, 0xd6, - 0x1d, 0xb5, 0x83, 0x6d, 0x47, 0xee, 0x98, 0x2e, 0xfa, 0xf0, 0x02, 0xa5, 0x6b, 0xf9, 0x10, 0x89, - 0xbb, 0x01, 0xdd, 0x21, 0x98, 0x6f, 0x53, 0xae, 0x12, 0x5e, 0xee, 0x62, 0xdb, 0x11, 0xef, 0xc3, - 0xae, 0xc0, 0xa8, 0x6d, 0x1a, 0xba, 0x8d, 0xd1, 0x65, 0x18, 0x66, 0xd2, 0x8b, 0xc2, 0xb4, 0x50, - 0x1d, 0x9b, 0x99, 0xae, 0xc5, 0x59, 0xba, 0xc6, 0x28, 0x1b, 0xd9, 0x8f, 0x9e, 0x57, 0x76, 0x48, - 0x9c, 0x4a, 0x9c, 0x81, 0xfd, 0x94, 0xed, 0x75, 0xac, 0x63, 0x4b, 0x6d, 0x07, 0x64, 0xa2, 0x3d, - 0x30, 0x2c, 0x9b, 0x66, 0x53, 0x55, 0x28, 0xf3, 0xac, 0x94, 0x93, 0x4d, 0x73, 0x41, 0x11, 0xdb, - 0x50, 0x8a, 0xa2, 0xe1, 0x88, 0xae, 0x86, 0x10, 0x1d, 0x8d, 0x47, 0x14, 0x60, 0x10, 0x02, 0xf6, - 0x73, 0x01, 0xa6, 0x98, 0xc2, 0x86, 0xa1, 0x79, 0x88, 0xf6, 0xc1, 0x4e, 0x53, 0x56, 0xad, 0x1e, - 0xa4, 0x61, 0xf2, 0xb9, 0xa0, 0xa0, 0x12, 0x8c, 0x28, 0xaa, 0x2d, 0xb7, 0x34, 0xac, 0x14, 0x33, - 0xd3, 0x42, 0x75, 0x54, 0xf2, 0xbe, 0xd1, 0x35, 0x80, 0x9e, 0xdb, 0x8b, 0x43, 0x14, 0xd5, 0x91, - 0x1a, 0x8b, 0x91, 0x1a, 0x89, 0x91, 0x1a, 0x0b, 0xd5, 0x9e, 0xa1, 0x96, 0x30, 0x17, 0x28, 0xf9, - 0x28, 0x7d, 0xe6, 0xc8, 0xfa, 0xcd, 0xf1, 0x13, 0xc1, 0x75, 0x18, 0x43, 0xca, 0xed, 0xd0, 0x80, - 0x9c, 0x49, 0x06, 0x8a, 0xc2, 0xf4, 0x10, 0x17, 0x18, 0xe7, 0x18, 0xc3, 0xd0, 0x5c, 0x32, 0x6e, - 0x05, 0x46, 0x8a, 0xae, 0x07, 0x90, 0x67, 0x3c, 0x7b, 0x6e, 0x8e, 0x9c, 0x71, 0xf2, 0x43, 0x17, - 0x1b, 0x30, 0xe9, 0x41, 0xf4, 0xdb, 0xd2, 0x30, 0x34, 0xbf, 0x2d, 0x0d, 0x43, 0x5b, 0x50, 0x7c, - 0x7a, 0x66, 0xfc, 0x7a, 0xde, 0xf7, 0x39, 0xc4, 0xd3, 0xf2, 0x0a, 0x64, 0x09, 0x15, 0xf7, 0x75, - 0x7f, 0x4a, 0x52, 0x4a, 0xb1, 0x05, 0xd3, 0x1e, 0xdb, 0xc6, 0xaa, 0x84, 0x6d, 0x6c, 0x3d, 0xc1, - 0x73, 0x8a, 0x62, 0x61, 0xdb, 0x73, 0xfb, 0x51, 0x28, 0x58, 0x6c, 0xa2, 0x29, 0xb3, 0x19, 0x2a, - 0x70, 0x54, 0xca, 0x5b, 0x81, 0xf5, 0x71, 0xd0, 0xbf, 0x01, 0x15, 0x9f, 0x0c, 0xf2, 0xf7, 0x75, - 0x43, 0xd5, 0xe7, 0xb1, 0x6e, 0x74, 0x5c, 0x11, 0x47, 0xa0, 0x40, 0xad, 0x41, 0xd2, 0x48, 0x53, - 0x21, 0x33, 0x5c, 0xc4, 0x84, 0xe9, 0x5f, 0x1e, 0x27, 0xe1, 0xdb, 0x5e, 0xb8, 0xca, 0xaa, 0xe5, - 0xe1, 0xde, 0x0b, 0xc3, 0x94, 0x15, 0x0b, 0x82, 0x51, 0x89, 0x7f, 0x85, 0x22, 0x32, 0x33, 0x80, - 0x88, 0x1c, 0xf2, 0x83, 0xf9, 0xa1, 0x17, 0x91, 0x0c, 0x0c, 0xf7, 0xd5, 0x2c, 0xe4, 0xc8, 0x6e, - 0x71, 0x23, 0xb2, 0xbc, 0x59, 0xaa, 0x50, 0x2d, 0x2f, 0x12, 0x09, 0xc9, 0x36, 0x44, 0xa2, 0xac, - 0x5a, 0x89, 0xbb, 0x3a, 0xc6, 0xd8, 0xb7, 0x7c, 0xb6, 0xf6, 0xb4, 0xbb, 0x08, 0x59, 0x42, 0xc5, - 0x23, 0x31, 0x9d, 0x72, 0x94, 0x42, 0xfc, 0x40, 0x80, 0x03, 0x94, 0xdf, 0x3c, 0x36, 0x0d, 0x5b, - 0x75, 0x38, 0x2c, 0x7b, 0x8b, 0x1b, 0x65, 0x50, 0xf9, 0x46, 0xfc, 0x83, 0x00, 0x07, 0xa3, 0x71, - 0x71, 0x95, 0xbf, 0x0a, 0x93, 0x0a, 0x9b, 0x6a, 0x5a, 0x7c, 0x8e, 0xfb, 0xb6, 0x1a, 0xaf, 0x7e, - 0x90, 0x19, 0x37, 0x44, 0x41, 0x09, 0x8a, 0x18, 0x9c, 0xbf, 0x1f, 0xf2, 0xc3, 0x22, 0x28, 0x36, - 0xd1, 0xb4, 0x79, 0xc8, 0x78, 0x66, 0xcd, 0xa8, 0x4a, 0x5c, 0xa4, 0x3f, 0x89, 0xf4, 0x9c, 0x67, - 0xa0, 0xb7, 0xa0, 0x10, 0x32, 0x10, 0x0f, 0x8f, 0x7e, 0xed, 0x93, 0x0f, 0xda, 0x47, 0xfc, 0xbe, - 0xeb, 0x9a, 0xb7, 0x54, 0xe7, 0x91, 0x62, 0xc9, 0x2b, 0xa9, 0x63, 0x66, 0x9b, 0xb7, 0xfe, 0x9f, - 0x04, 0x38, 0x14, 0x03, 0x8c, 0xdb, 0xe4, 0x21, 0x4c, 0xad, 0xf0, 0xb9, 0x70, 0xd4, 0x7c, 0x39, - 0xde, 0x2a, 0x21, 0x76, 0xdc, 0x2c, 0x93, 0x2b, 0x21, 0x29, 0x83, 0x8b, 0x9b, 0xaf, 0x71, 0xcf, - 0x86, 0x04, 0x0f, 0x2a, 0x70, 0xde, 0x89, 0xf6, 0x9f, 0x67, 0xa5, 0x07, 0x30, 0x19, 0xb6, 0x12, - 0x0f, 0x9d, 0xbe, 0x8d, 0x54, 0x08, 0x19, 0x49, 0xfc, 0x8e, 0x9b, 0x9e, 0xbf, 0x62, 0x29, 0xd8, - 0x4a, 0xae, 0x6d, 0xb6, 0x39, 0x64, 0x7e, 0x2c, 0xf0, 0xd2, 0xd2, 0x85, 0xc3, 0x4d, 0xf0, 0x1a, - 0x0c, 0x1b, 0x74, 0x84, 0x47, 0x47, 0x25, 0x5e, 0x71, 0x4a, 0xe9, 0x16, 0x70, 0x8c, 0x68, 0x70, - 0x91, 0x70, 0x97, 0x67, 0x7b, 0x2a, 0x24, 0xd1, 0x58, 0x29, 0xfd, 0x7f, 0xc7, 0xef, 0x02, 0x4f, - 0xe5, 0x57, 0x20, 0x47, 0xd1, 0x73, 0x57, 0xa7, 0xd4, 0x98, 0xd1, 0x88, 0xbf, 0x76, 0x8f, 0x11, - 0x66, 0xc7, 0x06, 0xfb, 0xed, 0x41, 0x2e, 0xc2, 0x4e, 0x83, 0x8d, 0xf0, 0xca, 0xc2, 0xfd, 0xf4, - 0x2b, 0x93, 0xd9, 0xc4, 0xf3, 0x03, 0xaf, 0x5c, 0xff, 0x9d, 0x83, 0xf1, 0x40, 0x35, 0xc7, 0x8c, - 0x27, 0x78, 0xc6, 0x8b, 0x05, 0x16, 0x51, 0x90, 0x0d, 0x45, 0x16, 0x64, 0x11, 0x65, 0x55, 0x36, - 0xaa, 0xac, 0x7a, 0x03, 0x46, 0x5a, 0xb2, 0x26, 0xeb, 0x6d, 0x6c, 0x17, 0x73, 0x69, 0x6a, 0xc9, - 0x06, 0x5f, 0xcd, 0x7d, 0xe0, 0x51, 0xa3, 0x73, 0xb0, 0x4f, 0x93, 0x6d, 0xa7, 0x19, 0x4a, 0xfc, - 0x44, 0x87, 0x61, 0xaa, 0xc3, 0x6e, 0x32, 0x1d, 0xcc, 0xf2, 0x0b, 0x0a, 0xba, 0x00, 0x45, 0x4a, - 0x16, 0xde, 0xf5, 0x84, 0x6e, 0x27, 0xa5, 0xdb, 0x43, 0xe6, 0x43, 0x5b, 0x3c, 0x50, 0x04, 0x8c, - 0xf8, 0x8b, 0x80, 0xf3, 0x90, 0x75, 0x56, 0x4d, 0x5c, 0x1c, 0x9d, 0x16, 0xaa, 0xf9, 0x19, 0x71, - 0x73, 0x65, 0xee, 0xad, 0x9a, 0x58, 0xa2, 0xeb, 0x49, 0x94, 0xb4, 0x2d, 0x2c, 0x3b, 0x86, 0x55, - 0x04, 0x16, 0x25, 0xfc, 0x13, 0xbd, 0x0d, 0x93, 0x3d, 0x53, 0xda, 0x5d, 0xd3, 0xd4, 0x56, 0x8b, - 0x63, 0x64, 0x49, 0xa3, 0x46, 0x4c, 0xf0, 0xd7, 0xe7, 0x95, 0x23, 0x4b, 0xaa, 0xf3, 0xa8, 0xdb, - 0x22, 0xb2, 0xea, 0xfc, 0x0a, 0xcc, 0x7e, 0x4e, 0xda, 0xca, 0xe3, 0x3a, 0x61, 0x6f, 0xd7, 0x16, - 0x74, 0x47, 0xca, 0xbb, 0xb6, 0xbf, 0x4b, 0xb9, 0xa0, 0xeb, 0x30, 0xda, 0x51, 0xf5, 0xa6, 0x69, - 0xa9, 0x6d, 0x5c, 0x1c, 0xa7, 0x2c, 0x8f, 0xa5, 0x64, 0x37, 0x8f, 0xdb, 0xd2, 0x48, 0x47, 0xd5, - 0x6f, 0x13, 0x5a, 0xca, 0x48, 0x7e, 0xca, 0x19, 0x4d, 0x6c, 0x81, 0x91, 0xfc, 0x94, 0x31, 0xba, - 0x02, 0x39, 0xc6, 0x24, 0xdf, 0x37, 0x13, 0x46, 0x18, 0xb8, 0x10, 0x16, 0xa6, 0x85, 0xea, 0x48, - 0xef, 0x42, 0x48, 0x12, 0xf0, 0xb8, 0x3f, 0x86, 0xd0, 0xab, 0x30, 0x4a, 0x76, 0x13, 0x35, 0x2d, - 0xdf, 0xfb, 0xfb, 0x03, 0xdb, 0xcc, 0x75, 0x16, 0x31, 0x5a, 0x2f, 0xe2, 0x6c, 0x4c, 0xbe, 0xd1, - 0x65, 0x80, 0xe5, 0xae, 0xe1, 0x70, 0xf2, 0x4c, 0x3a, 0xf2, 0x51, 0x4a, 0x42, 0x06, 0xc4, 0x87, - 0x3c, 0x17, 0x5d, 0x93, 0xad, 0x4e, 0x2f, 0x5d, 0x44, 0x5f, 0xbe, 0xfd, 0x07, 0x5f, 0x26, 0x70, - 0xf0, 0xed, 0x85, 0xe1, 0x45, 0xca, 0x80, 0xef, 0x44, 0xfe, 0x25, 0x7e, 0x2c, 0x40, 0xfe, 0x4e, - 0x17, 0x77, 0xb1, 0xe2, 0xde, 0x7b, 0xd0, 0x12, 0x8c, 0x7a, 0x91, 0x94, 0xac, 0x6e, 0x9d, 0xe0, - 0xfd, 0xe5, 0xe7, 0x95, 0xa3, 0x29, 0x1c, 0x40, 0x08, 0xa4, 0x11, 0x37, 0xbc, 0x90, 0x04, 0x23, - 0x0a, 0x51, 0xa7, 0x29, 0x3b, 0xdc, 0x2e, 0xa5, 0x1a, 0x7b, 0xfd, 0xa8, 0xb9, 0xaf, 0x1f, 0xb5, - 0x7b, 0xee, 0xf3, 0x48, 0xe3, 0x00, 0x11, 0xf4, 0xc5, 0xf3, 0x4a, 0x61, 0x55, 0xee, 0x68, 0xb3, - 0xa2, 0x4b, 0x29, 0xbe, 0xf7, 0x79, 0x45, 0x90, 0x76, 0xd2, 0xcf, 0x39, 0x47, 0xfc, 0xa7, 0x7b, - 0x5c, 0xb9, 0xe6, 0xe2, 0xb9, 0xcb, 0x81, 0x49, 0xb9, 0xed, 0xa8, 0x4f, 0x70, 0x73, 0x3b, 0x75, - 0xcb, 0x33, 0x19, 0x9e, 0x29, 0xdf, 0x86, 0xc9, 0x65, 0x6a, 0x5c, 0x9f, 0xd4, 0x4c, 0x52, 0x09, - 0x1e, 0x74, 0x87, 0x5b, 0x62, 0x2e, 0x07, 0x46, 0xc5, 0x35, 0x7e, 0x67, 0x9d, 0x27, 0x09, 0x55, - 0x95, 0x35, 0xf5, 0x1d, 0x4f, 0x6a, 0x62, 0x11, 0x54, 0xf5, 0xa7, 0x0a, 0xb9, 0x63, 0x74, 0x75, - 0x87, 0x47, 0x8b, 0xb7, 0xf5, 0xe7, 0xe8, 0x68, 0xdc, 0xf1, 0xf8, 0x2d, 0x81, 0xdf, 0xca, 0x23, - 0xa5, 0x73, 0x8b, 0xcb, 0x90, 0x23, 0x02, 0xdc, 0xfa, 0x60, 0x13, 0x33, 0x9f, 0xe2, 0x66, 0xae, - 0xa6, 0x34, 0xb3, 0x2d, 0x31, 0xce, 0xe2, 0x59, 0x7e, 0xa4, 0xd2, 0xa7, 0x95, 0x05, 0xbd, 0x8d, - 0x75, 0x62, 0xfd, 0xa4, 0x07, 0xaa, 0x3f, 0xe7, 0x60, 0x82, 0x50, 0x78, 0x04, 0xf1, 0x96, 0xaa, - 0xc0, 0x58, 0x47, 0xb6, 0x1d, 0x6c, 0x51, 0xff, 0x51, 0x23, 0x8d, 0x48, 0xc0, 0x86, 0x08, 0x0b, - 0x74, 0x18, 0xf2, 0xed, 0x47, 0xaa, 0xc6, 0xfd, 0xab, 0x2a, 0xe4, 0xa0, 0x1b, 0xaa, 0x66, 0xa5, - 0x71, 0x3a, 0x4a, 0xa5, 0x28, 0x36, 0x32, 0x60, 0xc2, 0x31, 0x1c, 0x59, 0x6b, 0x5a, 0x78, 0x45, - 0xb6, 0x14, 0x9b, 0x1e, 0x72, 0x83, 0x8d, 0xbc, 0x71, 0x2a, 0x40, 0x62, 0xfc, 0xd1, 0x1a, 0xec, - 0x52, 0x54, 0xdb, 0xb1, 0xd4, 0x56, 0xd7, 0xc1, 0x8a, 0x27, 0x36, 0x37, 0x70, 0xb1, 0xc8, 0x27, - 0xc6, 0x15, 0xfe, 0x7f, 0xc0, 0xc0, 0x34, 0xb1, 0x69, 0xb4, 0x1f, 0xd9, 0xfc, 0x5c, 0x1d, 0xa3, - 0x63, 0x57, 0xe9, 0x10, 0xfa, 0x7f, 0x98, 0x58, 0x54, 0x35, 0x0d, 0x2b, 0xee, 0x1a, 0x76, 0x86, - 0x8e, 0xb3, 0x41, 0xbe, 0xe8, 0x5d, 0xc8, 0xd3, 0xd9, 0xa6, 0xfb, 0x02, 0x4a, 0x8f, 0x50, 0x82, - 0x3f, 0x9c, 0x24, 0xe6, 0xf9, 0x82, 0xc6, 0x6b, 0x04, 0xff, 0xbf, 0x9e, 0x57, 0x8a, 0x41, 0xc2, - 0x13, 0x46, 0x47, 0x75, 0x70, 0xc7, 0x74, 0x56, 0xbf, 0x78, 0x5e, 0xd9, 0xc3, 0xf2, 0x47, 0x70, - 0x85, 0xf8, 0x03, 0x92, 0x45, 0x26, 0xe8, 0xa0, 0xcb, 0x0d, 0x75, 0x60, 0x4a, 0xc7, 0x4f, 0x9d, - 0xa6, 0xa7, 0x23, 0xc1, 0x30, 0x9a, 0x98, 0xa8, 0x0e, 0xf3, 0x44, 0x55, 0x64, 0x82, 0x36, 0xb0, - 0x60, 0x19, 0x6b, 0x92, 0x8c, 0xcf, 0xfb, 0x86, 0x51, 0x19, 0xc6, 0x54, 0xbb, 0x69, 0xaf, 0xc8, - 0x66, 0x73, 0x11, 0x63, 0x7a, 0xbe, 0x8f, 0x48, 0xa3, 0xaa, 0x7d, 0x77, 0x45, 0x36, 0xaf, 0x61, - 0xec, 0x0b, 0xe7, 0x31, 0x7f, 0x38, 0x1b, 0xbe, 0x4d, 0xe0, 0xdf, 0x03, 0x7c, 0x1b, 0xde, 0xe6, - 0x25, 0x96, 0xea, 0x4d, 0xf1, 0x0d, 0x79, 0x74, 0xf3, 0xa2, 0xc3, 0x63, 0xc5, 0x92, 0x42, 0x8f, - 0xb3, 0x78, 0x93, 0xdf, 0xd9, 0x69, 0x86, 0x55, 0x52, 0x67, 0x9d, 0x98, 0xd7, 0x9a, 0x75, 0x0e, - 0x3f, 0xcc, 0x8d, 0xc3, 0xff, 0x3a, 0x64, 0xb7, 0x29, 0x57, 0x53, 0xbe, 0xe2, 0xfb, 0x02, 0xec, - 0xed, 0x95, 0xe5, 0x0d, 0xc3, 0x78, 0x9c, 0x90, 0x3e, 0xd0, 0x7e, 0x18, 0xe1, 0x55, 0xaf, 0x4d, - 0x73, 0x79, 0x56, 0xda, 0xc9, 0xca, 0x5e, 0x1b, 0x1d, 0x83, 0x29, 0x5a, 0x5e, 0x34, 0xbb, 0xba, - 0xea, 0x34, 0x4d, 0x63, 0x85, 0x5c, 0x8f, 0x48, 0x42, 0x98, 0x90, 0x0a, 0x74, 0xe2, 0xbe, 0xae, - 0x3a, 0xb7, 0xe9, 0x30, 0x3a, 0x00, 0xa3, 0x7a, 0xb7, 0xd3, 0x74, 0xd4, 0xf6, 0x63, 0x96, 0x0f, - 0x26, 0xa4, 0x11, 0xbd, 0xdb, 0xb9, 0x47, 0xbe, 0xc5, 0x45, 0xd8, 0xb7, 0x01, 0x14, 0x37, 0xc8, - 0x0d, 0xf7, 0x99, 0x8e, 0x9d, 0x23, 0xf5, 0xa4, 0x4b, 0x88, 0x61, 0x3c, 0xf6, 0x3f, 0x84, 0x05, - 0xde, 0xed, 0xc4, 0x67, 0x02, 0xec, 0x89, 0x5c, 0x16, 0x7f, 0x83, 0xba, 0x05, 0x40, 0x8b, 0x21, - 0x56, 0x80, 0x65, 0xfa, 0xae, 0x30, 0x49, 0x11, 0x46, 0xcb, 0x29, 0x56, 0xca, 0x49, 0x30, 0x46, - 0xef, 0x39, 0xcd, 0x16, 0xd1, 0x92, 0x1a, 0x6b, 0x6c, 0xe6, 0x78, 0x0a, 0xa5, 0x42, 0x0a, 0x81, - 0xe1, 0x99, 0x4a, 0xfc, 0x8f, 0x00, 0x53, 0x1b, 0xd6, 0x11, 0xe0, 0x3d, 0xe7, 0xb0, 0x3b, 0x56, - 0xff, 0xc0, 0x3d, 0x2f, 0x12, 0x3f, 0xd8, 0x58, 0xd3, 0xfa, 0xf1, 0x03, 0xf1, 0x6d, 0xd8, 0x0f, - 0x94, 0x07, 0x5a, 0x80, 0x6c, 0xab, 0xbb, 0xea, 0xaa, 0xbf, 0x45, 0x5e, 0x94, 0x85, 0xf8, 0x41, - 0xc6, 0xe7, 0x52, 0xff, 0x2a, 0x34, 0xef, 0x56, 0xcd, 0x5b, 0xd3, 0x9d, 0x57, 0xce, 0x0f, 0x60, - 0xaa, 0x6b, 0x63, 0xab, 0xc9, 0xbc, 0xe6, 0xab, 0x1e, 0xfa, 0xbf, 0x68, 0x14, 0x08, 0x23, 0x8a, - 0x95, 0x97, 0x1b, 0x0f, 0x60, 0x8a, 0xe6, 0x8e, 0x00, 0xef, 0xa1, 0xad, 0xf1, 0x26, 0x8c, 0x7c, - 0xbc, 0xc5, 0x0f, 0x33, 0x70, 0xe8, 0x1e, 0x39, 0x82, 0xe6, 0x68, 0x89, 0x36, 0xa7, 0x2b, 0xc1, - 0x3a, 0xcb, 0x8e, 0xcf, 0x5c, 0xef, 0xc2, 0x5e, 0x76, 0xa0, 0x6d, 0xa8, 0x20, 0x33, 0x03, 0xcf, - 0x4a, 0xbb, 0x9c, 0x1e, 0x46, 0xaf, 0x8c, 0xf4, 0x00, 0x6c, 0x28, 0x26, 0x87, 0xb6, 0x09, 0x40, - 0xd0, 0x36, 0xe2, 0x05, 0x28, 0xd3, 0x7c, 0x34, 0xa7, 0x69, 0xc1, 0x3c, 0x9d, 0x54, 0x6b, 0xfd, - 0x46, 0xe0, 0x75, 0x6a, 0x14, 0x25, 0x8f, 0xcb, 0x98, 0x3c, 0xbb, 0x0a, 0x87, 0x02, 0x56, 0x97, - 0x75, 0xc5, 0xd5, 0x9f, 0xd5, 0x95, 0x6c, 0xe3, 0x5d, 0x88, 0xdf, 0x2c, 0x9b, 0xba, 0x5b, 0xda, - 0xef, 0x44, 0x4c, 0xd3, 0xa9, 0x99, 0x3f, 0x96, 0x21, 0x47, 0x51, 0xa3, 0xef, 0x0a, 0x30, 0xcc, - 0x1a, 0x90, 0xe8, 0xc4, 0xa6, 0x15, 0x7b, 0xa8, 0x21, 0x5b, 0x3a, 0x99, 0x72, 0x35, 0xb3, 0x81, - 0x58, 0xfd, 0xe6, 0xb3, 0x7f, 0xbc, 0x9f, 0x11, 0xd1, 0x74, 0x3d, 0xa1, 0x8d, 0x8c, 0x7e, 0x27, - 0xc0, 0x44, 0xa0, 0x33, 0x8a, 0xce, 0x24, 0x88, 0x8a, 0x6a, 0xde, 0x96, 0xce, 0xf6, 0x47, 0xc4, - 0x61, 0x5e, 0xa2, 0x30, 0xcf, 0xa0, 0xd3, 0xf1, 0x30, 0x97, 0x18, 0x61, 0x93, 0xc1, 0xad, 0xaf, - 0x31, 0xd7, 0xae, 0xa3, 0xef, 0x09, 0x90, 0xa3, 0x75, 0x3a, 0x3a, 0x9e, 0x64, 0x1a, 0x5f, 0x4b, - 0xb7, 0x74, 0x22, 0xdd, 0x62, 0x8e, 0xef, 0x14, 0xc5, 0x77, 0x0c, 0x55, 0x37, 0x31, 0x23, 0x21, - 0xe8, 0xc1, 0xfa, 0x91, 0x00, 0x59, 0x5a, 0xc9, 0x1f, 0x4b, 0x21, 0xc8, 0x05, 0x75, 0x3c, 0xd5, - 0x5a, 0x8e, 0x69, 0x96, 0x62, 0x3a, 0x8b, 0x66, 0xd2, 0x62, 0xaa, 0xaf, 0xf1, 0x34, 0xb4, 0x8e, - 0x9e, 0x09, 0xb0, 0x3b, 0xaa, 0xf3, 0x89, 0x66, 0x53, 0x20, 0x88, 0x69, 0x97, 0xf6, 0x87, 0x5e, - 0xa2, 0xe8, 0x6f, 0xa2, 0x37, 0x53, 0xa3, 0x0f, 0xbd, 0xfc, 0xd5, 0xd7, 0x42, 0x03, 0xeb, 0xe8, - 0x33, 0x01, 0x76, 0x45, 0xf4, 0x5a, 0xd1, 0xa5, 0x54, 0x4a, 0x45, 0xf5, 0x67, 0xb7, 0x5b, 0xa7, - 0xd0, 0x23, 0x25, 0xf7, 0x50, 0x6f, 0x80, 0x87, 0x37, 0xed, 0x85, 0x26, 0x42, 0xf1, 0xb5, 0x80, - 0x93, 0xc3, 0xdb, 0xdf, 0xa2, 0x4d, 0x15, 0xde, 0x84, 0x20, 0x14, 0xde, 0xb2, 0x6a, 0x25, 0x87, - 0x77, 0xaf, 0xe1, 0x5a, 0x3a, 0x9e, 0x6a, 0x6d, 0x1f, 0xe1, 0x1d, 0xc0, 0x54, 0x5f, 0xe3, 0x85, - 0xe5, 0x3a, 0xfa, 0x58, 0x80, 0x42, 0xa8, 0x7b, 0x89, 0xce, 0x25, 0x08, 0x8f, 0xee, 0xc2, 0x96, - 0xce, 0xf7, 0x4b, 0xc6, 0xe1, 0xdf, 0xa0, 0xf0, 0xaf, 0xa2, 0xd7, 0xfb, 0xdf, 0x9d, 0xf5, 0x70, - 0x77, 0x15, 0x7d, 0x22, 0x40, 0x3e, 0x28, 0x08, 0x9d, 0xed, 0x0b, 0x97, 0xab, 0xcd, 0xb9, 0x3e, - 0xa9, 0xb8, 0x32, 0xb7, 0xa9, 0x32, 0x6f, 0xa2, 0x37, 0x06, 0xa0, 0x4c, 0x7d, 0x8d, 0x78, 0xe8, - 0x33, 0x01, 0x26, 0xc3, 0xbd, 0x42, 0x94, 0x64, 0xeb, 0x98, 0xae, 0x67, 0xe9, 0x42, 0xdf, 0x74, - 0x5c, 0xaf, 0x9b, 0x54, 0xaf, 0x6b, 0x68, 0x7e, 0x0b, 0x7a, 0x6d, 0xe8, 0x66, 0x92, 0xa4, 0x5a, - 0x08, 0x89, 0x4a, 0x8c, 0xba, 0xe8, 0x3e, 0x63, 0xe9, 0x7c, 0xbf, 0x64, 0x5c, 0xa1, 0x3b, 0x54, - 0xa1, 0x1b, 0x68, 0x61, 0x10, 0x0a, 0x31, 0x4f, 0xfd, 0x54, 0x80, 0x61, 0xd6, 0x5a, 0x4a, 0xac, - 0x54, 0x02, 0x8d, 0xc5, 0xc4, 0x4a, 0x25, 0xd8, 0xf7, 0x13, 0x5f, 0xa1, 0xd0, 0xcf, 0xa1, 0x33, - 0xf1, 0xd0, 0x59, 0x8b, 0x2f, 0x6a, 0xc3, 0xff, 0x4c, 0x80, 0x1c, 0xe5, 0x97, 0x98, 0x25, 0xfd, - 0xed, 0xbc, 0xd2, 0x89, 0x74, 0x8b, 0x39, 0xc2, 0x2b, 0x14, 0xe1, 0x2c, 0xba, 0xb8, 0x05, 0x84, - 0xcc, 0x96, 0xbf, 0x15, 0xa0, 0x10, 0x6a, 0xd3, 0x25, 0x46, 0x48, 0x74, 0x5b, 0xef, 0x7f, 0x61, - 0x5d, 0xde, 0x27, 0x5c, 0x47, 0xbf, 0x12, 0x60, 0x98, 0x3d, 0x7b, 0x27, 0x86, 0x40, 0xa0, 0x99, - 0x90, 0x08, 0x32, 0xf8, 0x96, 0x2e, 0xce, 0x53, 0x90, 0x97, 0xd1, 0xab, 0xf1, 0x20, 0x59, 0x77, - 0x21, 0x2a, 0x7c, 0xd7, 0xd8, 0xd4, 0x3a, 0xfa, 0xbb, 0x00, 0xbb, 0x22, 0xde, 0x8f, 0x13, 0xab, - 0x80, 0xf8, 0x17, 0xef, 0xd2, 0xec, 0x56, 0x48, 0xb9, 0x52, 0x77, 0xa9, 0x52, 0xb7, 0xd0, 0x8d, - 0x78, 0xa5, 0x94, 0x1e, 0x79, 0xa4, 0x66, 0xe1, 0x47, 0xf5, 0x75, 0xf4, 0xa1, 0x00, 0xf9, 0xe0, - 0xbb, 0x5c, 0x62, 0x1c, 0x45, 0xbf, 0x65, 0x97, 0xd2, 0x90, 0x6d, 0x7c, 0xfd, 0x4b, 0x5b, 0x7c, - 0xfa, 0x5e, 0x07, 0x7b, 0xb5, 0xc3, 0xef, 0x05, 0xc8, 0x07, 0xef, 0x6c, 0x89, 0xa7, 0x59, 0xe4, - 0x93, 0x60, 0x22, 0xf6, 0xe8, 0xa7, 0xbf, 0x34, 0xfb, 0x98, 0xc6, 0x12, 0xbb, 0x0f, 0x46, 0x95, - 0xcf, 0x9f, 0x08, 0x70, 0x70, 0xb3, 0x4b, 0x20, 0xba, 0x98, 0x80, 0x2c, 0xf6, 0xbe, 0x5b, 0xba, - 0xb4, 0x05, 0xca, 0xf4, 0x3e, 0x91, 0x35, 0xad, 0x19, 0xa5, 0x1b, 0xfa, 0x85, 0x00, 0xd0, 0x7b, - 0x14, 0x44, 0xa7, 0xd2, 0x64, 0x17, 0xff, 0xa3, 0x66, 0xe9, 0x74, 0x1f, 0x14, 0x1c, 0xef, 0x79, - 0x8a, 0xf7, 0x14, 0xaa, 0x25, 0xe4, 0x24, 0xf6, 0x84, 0xe7, 0x61, 0x6d, 0xdc, 0xfa, 0xe8, 0x45, - 0x59, 0xf8, 0xf4, 0x45, 0x59, 0xf8, 0xdb, 0x8b, 0xb2, 0xf0, 0xde, 0xcb, 0xf2, 0x8e, 0x4f, 0x5f, - 0x96, 0x77, 0xfc, 0xe5, 0x65, 0x79, 0xc7, 0x83, 0x33, 0x81, 0xc7, 0x08, 0xc2, 0xf3, 0xa4, 0xb1, - 0xb8, 0xa8, 0xb6, 0x55, 0x59, 0x73, 0x65, 0xf8, 0xa5, 0xd0, 0xd7, 0x89, 0xd6, 0x30, 0x7d, 0x6a, - 0x3f, 0xf3, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1c, 0xc2, 0x6a, 0x91, 0x53, 0x2e, 0x00, 0x00, + // 2769 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xdd, 0x6f, 0x1c, 0x57, + 0x15, 0xcf, 0xac, 0x77, 0x1d, 0xfb, 0xd8, 0xde, 0xb5, 0x6f, 0xbe, 0x36, 0x9b, 0xc4, 0x6b, 0xa6, + 0xa1, 0x31, 0xf9, 0xd8, 0x4d, 0x9c, 0x6f, 0xb7, 0x8d, 0xea, 0xad, 0x93, 0xd4, 0x4d, 0x22, 0x92, + 0x49, 0xa2, 0x42, 0x15, 0x58, 0x66, 0x77, 0xae, 0x9d, 0x51, 0x66, 0x67, 0xc6, 0x33, 0xb3, 0x71, + 0xb6, 0x96, 0x55, 0x09, 0x89, 0x17, 0x84, 0x44, 0xa5, 0x02, 0x02, 0x21, 0x1e, 0x40, 0x48, 0x08, + 0x78, 0xe0, 0x01, 0x78, 0xe9, 0x0b, 0x12, 0x95, 0x50, 0x1e, 0xa8, 0xda, 0xaa, 0x2f, 0xa8, 0x0f, + 0x2e, 0x24, 0x20, 0x21, 0x5e, 0x90, 0xfa, 0x17, 0xa0, 0xfb, 0x31, 0xb3, 0x33, 0xe3, 0x99, 0x9d, + 0x59, 0x6b, 0xcd, 0x4b, 0x9c, 0xbd, 0x73, 0xcf, 0x3d, 0xbf, 0xf3, 0x3b, 0xe7, 0x9e, 0x7b, 0xee, + 0x3d, 0x70, 0xb4, 0x69, 0xb4, 0x14, 0xfc, 0xa4, 0xaa, 0xa9, 0xab, 0x6d, 0x55, 0x51, 0x9d, 0x4e, + 0xf5, 0xf1, 0x99, 0x06, 0x76, 0xe4, 0x33, 0xd5, 0xd5, 0x36, 0xb6, 0x3a, 0x15, 0xd3, 0x32, 0x1c, + 0x03, 0x15, 0xd9, 0xac, 0x8a, 0x37, 0xab, 0xc2, 0x67, 0x95, 0xf6, 0xae, 0x18, 0x2b, 0x06, 0x9d, + 0x54, 0x25, 0xff, 0x63, 0xf3, 0x4b, 0x87, 0x57, 0x0c, 0x63, 0x45, 0xc3, 0x55, 0xd9, 0x54, 0xab, + 0xb2, 0xae, 0x1b, 0x8e, 0xec, 0xa8, 0x86, 0x6e, 0xf3, 0xaf, 0xd3, 0x4d, 0xc3, 0x6e, 0x19, 0x76, + 0xb5, 0x21, 0xdb, 0xd8, 0x53, 0xd7, 0x34, 0x54, 0x9d, 0x7f, 0x3f, 0xee, 0xff, 0x4e, 0x61, 0x78, + 0xb3, 0x4c, 0x79, 0x45, 0xd5, 0xe9, 0x62, 0x7c, 0xee, 0x6c, 0x2c, 0xfe, 0x2e, 0x56, 0x36, 0xf3, + 0xcb, 0xb1, 0x33, 0x4d, 0xd9, 0x92, 0x5b, 0x2e, 0xb8, 0x32, 0x87, 0x4e, 0x7f, 0x35, 0xda, 0xcb, + 0x55, 0x47, 0x6d, 0x61, 0xdb, 0x91, 0x5b, 0xa6, 0x8b, 0x3e, 0x3c, 0x41, 0x69, 0x5b, 0x3e, 0x44, + 0xe2, 0x5e, 0x40, 0x77, 0x08, 0xe6, 0xdb, 0x74, 0x55, 0x09, 0xaf, 0xb6, 0xb1, 0xed, 0x88, 0xf7, + 0x61, 0x4f, 0x60, 0xd4, 0x36, 0x0d, 0xdd, 0xc6, 0xe8, 0x0a, 0x0c, 0x33, 0xed, 0x45, 0x61, 0x46, + 0x98, 0x1d, 0x9b, 0x9b, 0xa9, 0xc4, 0x31, 0x5d, 0x61, 0x92, 0xb5, 0xec, 0xd3, 0xcd, 0xf2, 0x2e, + 0x89, 0x4b, 0x89, 0x73, 0x70, 0x90, 0x2e, 0x7b, 0x1d, 0xeb, 0xd8, 0x52, 0x9b, 0x01, 0x9d, 0x68, + 0x1f, 0x0c, 0xcb, 0xa6, 0x59, 0x57, 0x15, 0xba, 0x78, 0x56, 0xca, 0xc9, 0xa6, 0xb9, 0xa4, 0x88, + 0x4d, 0x28, 0x45, 0xc9, 0x70, 0x44, 0x57, 0x43, 0x88, 0x8e, 0xc5, 0x23, 0x0a, 0x2c, 0x10, 0x02, + 0xf6, 0x2b, 0x01, 0xa6, 0x98, 0xc1, 0x86, 0xa1, 0x79, 0x88, 0x0e, 0xc0, 0x6e, 0x53, 0x56, 0xad, + 0x2e, 0xa4, 0x61, 0xf2, 0x73, 0x49, 0x41, 0x25, 0x18, 0x51, 0x54, 0x5b, 0x6e, 0x68, 0x58, 0x29, + 0x66, 0x66, 0x84, 0xd9, 0x51, 0xc9, 0xfb, 0x8d, 0xae, 0x01, 0x74, 0xdd, 0x5e, 0x1c, 0xa2, 0xa8, + 0x5e, 0xac, 0xb0, 0x18, 0xa9, 0x90, 0x18, 0xa9, 0xb0, 0x50, 0xed, 0x12, 0xb5, 0x82, 0xb9, 0x42, + 0xc9, 0x27, 0xe9, 0xa3, 0x23, 0xeb, 0xa7, 0xe3, 0xe7, 0x82, 0xeb, 0x30, 0x86, 0x94, 0xf3, 0x50, + 0x83, 0x9c, 0x49, 0x06, 0x8a, 0xc2, 0xcc, 0x10, 0x57, 0x18, 0xe7, 0x18, 0xc3, 0xd0, 0x5c, 0x31, + 0xce, 0x02, 0x13, 0x45, 0xd7, 0x03, 0xc8, 0x33, 0x1e, 0x9f, 0xbd, 0x91, 0xb3, 0x95, 0xfc, 0xd0, + 0xc5, 0x1a, 0x4c, 0x7a, 0x10, 0xfd, 0x5c, 0x1a, 0x86, 0xe6, 0xe7, 0xd2, 0x30, 0xb4, 0x25, 0xc5, + 0x67, 0x67, 0xc6, 0x6f, 0xe7, 0x7d, 0x9f, 0x43, 0x3c, 0x2b, 0x5f, 0x85, 0x2c, 0x91, 0xe2, 0xbe, + 0xee, 0xcf, 0x48, 0x2a, 0x29, 0x36, 0x60, 0xc6, 0x5b, 0xb6, 0xd6, 0x91, 0xb0, 0x8d, 0xad, 0xc7, + 0x78, 0x41, 0x51, 0x2c, 0x6c, 0x7b, 0x6e, 0x3f, 0x06, 0x05, 0x8b, 0x7d, 0xa8, 0xcb, 0xec, 0x0b, + 0x55, 0x38, 0x2a, 0xe5, 0xad, 0xc0, 0xfc, 0x38, 0xe8, 0xdf, 0x82, 0xb2, 0x4f, 0x07, 0xf9, 0xf7, + 0x35, 0x43, 0xd5, 0x17, 0xb1, 0x6e, 0xb4, 0x5c, 0x15, 0x2f, 0x42, 0x81, 0xb2, 0x41, 0xd2, 0x48, + 0x5d, 0x21, 0x5f, 0xb8, 0x8a, 0x09, 0xd3, 0x3f, 0x3d, 0x4e, 0xc3, 0x77, 0xbd, 0x70, 0x95, 0x55, + 0xcb, 0xc3, 0xbd, 0x1f, 0x86, 0xe9, 0x52, 0x2c, 0x08, 0x46, 0x25, 0xfe, 0x2b, 0x14, 0x91, 0x99, + 0x01, 0x44, 0xe4, 0x90, 0x1f, 0xcc, 0x4f, 0xbc, 0x88, 0x64, 0x60, 0xb8, 0xaf, 0xe6, 0x21, 0x47, + 0x76, 0x8b, 0x1b, 0x91, 0xd3, 0xbd, 0x52, 0x85, 0x6a, 0x79, 0x91, 0x48, 0x44, 0x76, 0x20, 0x12, + 0x65, 0xd5, 0x4a, 0xdc, 0xd5, 0x31, 0x64, 0xdf, 0xf2, 0x71, 0xed, 0x59, 0x77, 0x09, 0xb2, 0x44, + 0x8a, 0x47, 0x62, 0x3a, 0xe3, 0xa8, 0x84, 0xf8, 0x43, 0x01, 0x0e, 0xd1, 0xf5, 0x16, 0xb1, 0x69, + 0xd8, 0xaa, 0xc3, 0x61, 0xd9, 0xdb, 0xdc, 0x28, 0x83, 0xca, 0x37, 0xe2, 0x9f, 0x05, 0x38, 0x1c, + 0x8d, 0x8b, 0x9b, 0xfc, 0x75, 0x98, 0x54, 0xd8, 0xa7, 0xba, 0xc5, 0xbf, 0x71, 0xdf, 0xce, 0xc6, + 0x9b, 0x1f, 0x5c, 0x8c, 0x13, 0x51, 0x50, 0x82, 0x2a, 0x06, 0xe7, 0xef, 0x07, 0xfc, 0xb0, 0x08, + 0xaa, 0x4d, 0xa4, 0x36, 0x0f, 0x19, 0x8f, 0xd6, 0x8c, 0xaa, 0xc4, 0x45, 0xfa, 0xe3, 0x48, 0xcf, + 0x79, 0x04, 0xbd, 0x09, 0x85, 0x10, 0x41, 0x3c, 0x3c, 0xfa, 0xe5, 0x27, 0x1f, 0xe4, 0x47, 0xfc, + 0x91, 0xeb, 0x9a, 0x37, 0x55, 0xe7, 0xa1, 0x62, 0xc9, 0x6b, 0xa9, 0x63, 0x66, 0x87, 0xb7, 0xfe, + 0x5f, 0x04, 0x38, 0x12, 0x03, 0x8c, 0x73, 0xf2, 0x00, 0xa6, 0xd6, 0xf8, 0xb7, 0x70, 0xd4, 0x7c, + 0x25, 0x9e, 0x95, 0xd0, 0x72, 0x9c, 0x96, 0xc9, 0xb5, 0x90, 0x96, 0xc1, 0xc5, 0xcd, 0x37, 0xb8, + 0x67, 0x43, 0x8a, 0x07, 0x15, 0x38, 0x6f, 0x47, 0xfb, 0xcf, 0x63, 0xe9, 0x2d, 0x98, 0x0c, 0xb3, + 0xc4, 0x43, 0xa7, 0x6f, 0x92, 0x0a, 0x21, 0x92, 0xc4, 0xef, 0xb9, 0xe9, 0xf9, 0xab, 0x96, 0x82, + 0xad, 0xe4, 0xda, 0x66, 0x87, 0x43, 0xe6, 0x67, 0x02, 0x2f, 0x2d, 0x5d, 0x38, 0x9c, 0x82, 0x57, + 0x60, 0xd8, 0xa0, 0x23, 0x3c, 0x3a, 0xca, 0xf1, 0x86, 0x53, 0x49, 0xb7, 0x80, 0x63, 0x42, 0x83, + 0x8b, 0x84, 0xbb, 0x3c, 0xdb, 0x53, 0x25, 0x89, 0x64, 0xa5, 0xf4, 0xff, 0x1d, 0xbf, 0x0b, 0x3c, + 0x93, 0x5f, 0x82, 0x1c, 0x45, 0xcf, 0x5d, 0x9d, 0xd2, 0x62, 0x26, 0x23, 0xfe, 0xce, 0x3d, 0x46, + 0x18, 0x8f, 0x35, 0xf6, 0xb7, 0x0b, 0xb9, 0x08, 0xbb, 0x0d, 0x36, 0xc2, 0x2b, 0x0b, 0xf7, 0xa7, + 0xdf, 0x98, 0x4c, 0x0f, 0xcf, 0x0f, 0xbc, 0x72, 0xfd, 0x20, 0x07, 0xe3, 0x81, 0x6a, 0x8e, 0x91, + 0x27, 0x78, 0xe4, 0xc5, 0x02, 0x8b, 0x28, 0xc8, 0x86, 0x22, 0x0b, 0xb2, 0x88, 0xb2, 0x2a, 0x1b, + 0x55, 0x56, 0xbd, 0x0e, 0x23, 0x0d, 0x59, 0x93, 0xf5, 0x26, 0xb6, 0x8b, 0xb9, 0x34, 0xb5, 0x64, + 0x8d, 0xcf, 0xe6, 0x3e, 0xf0, 0xa4, 0xd1, 0x79, 0x38, 0xa0, 0xc9, 0xb6, 0x53, 0x0f, 0x25, 0x7e, + 0x62, 0xc3, 0x30, 0xb5, 0x61, 0x2f, 0xf9, 0x1c, 0xcc, 0xf2, 0x4b, 0x0a, 0xba, 0x08, 0x45, 0x2a, + 0x16, 0xde, 0xf5, 0x44, 0x6e, 0x37, 0x95, 0xdb, 0x47, 0xbe, 0x87, 0xb6, 0x78, 0xa0, 0x08, 0x18, + 0xf1, 0x17, 0x01, 0x17, 0x20, 0xeb, 0x74, 0x4c, 0x5c, 0x1c, 0x9d, 0x11, 0x66, 0xf3, 0x73, 0x62, + 0x6f, 0x63, 0xee, 0x75, 0x4c, 0x2c, 0xd1, 0xf9, 0x24, 0x4a, 0x9a, 0x16, 0x96, 0x1d, 0xc3, 0x2a, + 0x02, 0x8b, 0x12, 0xfe, 0x13, 0x5d, 0x87, 0xc9, 0x2e, 0x95, 0x76, 0xdb, 0x34, 0xb5, 0x4e, 0x71, + 0x8c, 0x4c, 0xa9, 0x1d, 0x21, 0x14, 0x7c, 0xb6, 0x59, 0xde, 0xc7, 0x22, 0xc3, 0x56, 0x1e, 0x55, + 0x54, 0xa3, 0xda, 0x92, 0x9d, 0x87, 0x95, 0x25, 0xdd, 0x91, 0xf2, 0x2e, 0xd5, 0x77, 0xa9, 0x10, + 0x7a, 0x19, 0x46, 0x5b, 0xaa, 0x5e, 0x37, 0x2d, 0xb5, 0x89, 0x8b, 0xe3, 0x74, 0x85, 0xf2, 0x67, + 0x9b, 0xe5, 0x43, 0x5b, 0xa5, 0x6f, 0xe2, 0x15, 0xb9, 0xd9, 0x59, 0xc4, 0x4d, 0x69, 0xa4, 0xa5, + 0xea, 0xb7, 0x89, 0x00, 0x95, 0x96, 0x9f, 0x70, 0xe9, 0x89, 0xb4, 0xd2, 0xf2, 0x13, 0x26, 0x7d, + 0x1e, 0x72, 0x4c, 0x32, 0x9f, 0x4e, 0x92, 0xcd, 0x0e, 0x5c, 0xef, 0x0a, 0x33, 0xc2, 0xec, 0x48, + 0xf7, 0x7a, 0x47, 0xd2, 0xe9, 0xb8, 0x3f, 0x22, 0x08, 0x42, 0xb2, 0x37, 0x28, 0x51, 0x7c, 0x27, + 0x1f, 0x0c, 0x6c, 0x1a, 0x97, 0x7a, 0xc2, 0x49, 0x37, 0x7e, 0x6c, 0x4c, 0x7e, 0xa3, 0x2b, 0x00, + 0xab, 0x6d, 0xc3, 0xe1, 0xe2, 0x99, 0x74, 0xe2, 0xa3, 0x54, 0x84, 0x0c, 0x88, 0x0f, 0x78, 0x66, + 0xb9, 0x26, 0x5b, 0xad, 0xee, 0xe6, 0x8f, 0xbe, 0x4a, 0xfb, 0x8f, 0xb1, 0x4c, 0xe0, 0x18, 0xdb, + 0x0f, 0xc3, 0xcb, 0x74, 0x01, 0xbe, 0xaf, 0xf8, 0x2f, 0xf1, 0x43, 0x01, 0xf2, 0x77, 0xda, 0xb8, + 0x8d, 0x15, 0xf7, 0x16, 0x83, 0x56, 0x60, 0xd4, 0x8b, 0x8b, 0x64, 0x73, 0xab, 0x04, 0xef, 0x6f, + 0x3e, 0x2f, 0x1f, 0x5b, 0x51, 0x9d, 0x87, 0xed, 0x06, 0x89, 0xcb, 0x2a, 0x7f, 0x2e, 0x61, 0x7f, + 0x4e, 0xd9, 0xca, 0xa3, 0x2a, 0x09, 0x45, 0x9b, 0x0a, 0x48, 0x23, 0x6e, 0xf4, 0x20, 0x09, 0x46, + 0x14, 0x62, 0x4e, 0x5d, 0x76, 0x38, 0x2f, 0xa5, 0x0a, 0x7b, 0xcb, 0xa8, 0xb8, 0x6f, 0x19, 0x95, + 0x7b, 0xee, 0x63, 0x47, 0xed, 0x10, 0x51, 0xf4, 0xc5, 0x66, 0xb9, 0xd0, 0x91, 0x5b, 0xda, 0xbc, + 0xe8, 0x4a, 0x8a, 0xef, 0x7e, 0x5e, 0x16, 0xa4, 0xdd, 0xf4, 0xe7, 0x82, 0x23, 0xfe, 0xcb, 0x3d, + 0x7c, 0x5c, 0xba, 0x78, 0x26, 0x72, 0x60, 0x52, 0x6e, 0x3a, 0xea, 0x63, 0x5c, 0xdf, 0x49, 0xdb, + 0xf2, 0x4c, 0x87, 0x47, 0xe5, 0xd7, 0x60, 0x72, 0x95, 0x92, 0xeb, 0xd3, 0x9a, 0x49, 0x2a, 0xa8, + 0x83, 0xee, 0x70, 0x0b, 0xc6, 0xd5, 0xc0, 0xa8, 0xb8, 0xce, 0x6f, 0xa0, 0x8b, 0x24, 0x3d, 0xaa, + 0xb2, 0xa6, 0xbe, 0xed, 0x69, 0x4d, 0x2c, 0x69, 0x66, 0xfd, 0x1b, 0x5f, 0x6e, 0x19, 0x6d, 0xdd, + 0xe1, 0xd1, 0xe2, 0xed, 0xec, 0x05, 0x3a, 0x1a, 0x77, 0xd8, 0x7d, 0x47, 0xe0, 0x77, 0xec, 0x48, + 0xed, 0x9c, 0x71, 0x19, 0x72, 0x44, 0x81, 0x7b, 0xda, 0xf7, 0xa0, 0xf9, 0x34, 0xa7, 0x79, 0x36, + 0x25, 0xcd, 0xb6, 0xc4, 0x56, 0x16, 0xcf, 0xf1, 0x03, 0x92, 0x3e, 0x94, 0x2c, 0xe9, 0x4d, 0xac, + 0x13, 0xf6, 0x93, 0x9e, 0x9b, 0xfe, 0x9a, 0x83, 0x09, 0x22, 0xe1, 0x09, 0xc4, 0x33, 0x55, 0x86, + 0xb1, 0x96, 0x6c, 0x3b, 0xd8, 0xa2, 0xfe, 0xa3, 0x24, 0x8d, 0x48, 0xc0, 0x86, 0xc8, 0x12, 0xe8, + 0x28, 0xe4, 0x9b, 0x0f, 0x55, 0x8d, 0xfb, 0x57, 0x55, 0xc8, 0xb1, 0x35, 0x34, 0x9b, 0x95, 0xc6, + 0xe9, 0x28, 0xd5, 0xa2, 0xd8, 0xc8, 0x80, 0x09, 0xc7, 0x70, 0x64, 0xad, 0x6e, 0xe1, 0x35, 0xd9, + 0x52, 0x6c, 0x7a, 0x64, 0x0d, 0x36, 0xf2, 0xc6, 0xa9, 0x02, 0x89, 0xad, 0x8f, 0xd6, 0x61, 0x8f, + 0xa2, 0xda, 0x8e, 0xa5, 0x36, 0xda, 0x0e, 0x56, 0x3c, 0xb5, 0xb9, 0x81, 0xab, 0x45, 0x3e, 0x35, + 0xae, 0xf2, 0x2f, 0x01, 0x03, 0x53, 0xc7, 0xa6, 0xd1, 0x7c, 0x68, 0xf3, 0x53, 0x72, 0x8c, 0x8e, + 0x5d, 0xa5, 0x43, 0xe8, 0x05, 0x98, 0x58, 0x56, 0x35, 0x0d, 0x2b, 0xee, 0x1c, 0x76, 0x22, 0x8e, + 0xb3, 0x41, 0x3e, 0xe9, 0x1d, 0xc8, 0xd3, 0xaf, 0x75, 0xf7, 0x3d, 0x93, 0x1e, 0x88, 0x04, 0x7f, + 0x38, 0x49, 0x2c, 0xf2, 0x09, 0xb5, 0x57, 0x08, 0xfe, 0xff, 0x6c, 0x96, 0x8b, 0x41, 0xc1, 0x93, + 0x46, 0x4b, 0x75, 0x70, 0xcb, 0x74, 0x3a, 0x5f, 0x6c, 0x96, 0xf7, 0xb1, 0xfc, 0x11, 0x9c, 0x21, + 0xfe, 0x98, 0x64, 0x91, 0x09, 0x3a, 0xe8, 0xae, 0x86, 0x5a, 0x30, 0xa5, 0xe3, 0x27, 0x4e, 0xdd, + 0xb3, 0x91, 0x60, 0x18, 0x4d, 0x4c, 0x54, 0x47, 0x79, 0xa2, 0x2a, 0x32, 0x45, 0x5b, 0x96, 0x60, + 0x19, 0x6b, 0x92, 0x8c, 0x2f, 0xfa, 0x86, 0xd1, 0x34, 0x8c, 0xa9, 0x76, 0xdd, 0x5e, 0x93, 0xcd, + 0xfa, 0x32, 0xc6, 0xf4, 0xb4, 0x1e, 0x91, 0x46, 0x55, 0xfb, 0xee, 0x9a, 0x6c, 0x5e, 0xc3, 0xd8, + 0x17, 0xce, 0x63, 0xfe, 0x70, 0x36, 0x7c, 0x9b, 0xc0, 0xbf, 0x07, 0xf8, 0x36, 0xbc, 0xcd, 0x0b, + 0x26, 0xd5, 0xfb, 0xc4, 0x37, 0xe4, 0xb1, 0xde, 0x25, 0x84, 0xb7, 0x14, 0x4b, 0x0a, 0xdd, 0x95, + 0xc5, 0x9b, 0xfc, 0x06, 0x4e, 0x33, 0xac, 0x92, 0x3a, 0xeb, 0xc4, 0xbc, 0xbd, 0x6c, 0x70, 0xf8, + 0xe1, 0xd5, 0x38, 0xfc, 0x6f, 0x42, 0x76, 0x87, 0x72, 0x35, 0x5d, 0x57, 0x7c, 0x4f, 0x80, 0xfd, + 0xdd, 0x22, 0xbb, 0x66, 0x18, 0x8f, 0x12, 0xd2, 0x07, 0x3a, 0x08, 0x23, 0xbc, 0x86, 0xb5, 0x69, + 0x2e, 0xcf, 0x4a, 0xbb, 0x59, 0x11, 0x6b, 0xa3, 0xe3, 0x30, 0x45, 0xcb, 0x8b, 0x7a, 0x5b, 0x57, + 0x9d, 0xba, 0x69, 0xac, 0x91, 0xcb, 0x0e, 0x49, 0x08, 0x13, 0x52, 0x81, 0x7e, 0xb8, 0xaf, 0xab, + 0xce, 0x6d, 0x3a, 0x8c, 0x0e, 0xc1, 0xa8, 0xde, 0x6e, 0xd5, 0x1d, 0xb5, 0xf9, 0x88, 0xe5, 0x83, + 0x09, 0x69, 0x44, 0x6f, 0xb7, 0xee, 0x91, 0xdf, 0xe2, 0x32, 0x1c, 0xd8, 0x02, 0x8a, 0x13, 0x72, + 0xc3, 0x7d, 0x74, 0x63, 0xe7, 0x48, 0x35, 0xe9, 0x4a, 0x61, 0x18, 0x8f, 0xfc, 0xcf, 0x5a, 0x81, + 0x57, 0x38, 0xf1, 0xa9, 0x00, 0xfb, 0x22, 0xa7, 0xc5, 0xdf, 0x87, 0x6a, 0x00, 0xb4, 0x18, 0x62, + 0x55, 0x17, 0x7d, 0x1a, 0xaf, 0xbd, 0xc0, 0xeb, 0xc5, 0x9e, 0x95, 0x17, 0xad, 0xa1, 0x58, 0xd1, + 0x26, 0xc1, 0x18, 0xbd, 0xaa, 0xd4, 0x1b, 0xc4, 0x34, 0xca, 0xd0, 0xd8, 0xdc, 0x89, 0x14, 0x96, + 0x84, 0xac, 0x00, 0xc3, 0xe3, 0x47, 0xfc, 0xaf, 0x00, 0x53, 0x5b, 0xe6, 0x11, 0xb4, 0x5d, 0x8f, + 0xb0, 0x6b, 0x52, 0x4a, 0xb4, 0x9e, 0xbf, 0x08, 0xe3, 0x36, 0xd6, 0xb4, 0x7e, 0x18, 0x27, 0x5e, + 0x0c, 0x33, 0x4e, 0xd7, 0x40, 0x4b, 0x90, 0x6d, 0xb4, 0x3b, 0xae, 0xcd, 0xdb, 0x5c, 0x8b, 0x2e, + 0x21, 0xfe, 0xdb, 0xef, 0x3c, 0xff, 0x2c, 0x74, 0xd9, 0x2d, 0x8a, 0xfb, 0x30, 0x98, 0x17, 0xc6, + 0x4b, 0x30, 0xd5, 0xb6, 0xb1, 0x55, 0x67, 0xfe, 0xf1, 0x15, 0x07, 0x89, 0xb7, 0x82, 0x02, 0x91, + 0xa3, 0x78, 0x78, 0xf1, 0xb0, 0x04, 0x53, 0x34, 0x13, 0x04, 0x96, 0x1a, 0x4a, 0xb5, 0x14, 0x91, + 0xf3, 0x2d, 0x25, 0xbe, 0x9f, 0x81, 0x23, 0xf7, 0xc8, 0xf9, 0xb1, 0x40, 0xeb, 0xab, 0x05, 0x5d, + 0x09, 0x16, 0x49, 0x76, 0x7c, 0xda, 0x79, 0x07, 0xf6, 0xb3, 0xd3, 0x68, 0x4b, 0xf9, 0x97, 0x19, + 0x78, 0x4a, 0xd9, 0xe3, 0x74, 0x31, 0x7a, 0x35, 0xa0, 0x07, 0x60, 0x4b, 0x25, 0x38, 0xb4, 0x43, + 0x00, 0x82, 0xdc, 0x88, 0x17, 0x61, 0x9a, 0x26, 0x93, 0x05, 0x4d, 0x0b, 0x26, 0xd9, 0xa4, 0x42, + 0xe9, 0xf7, 0x02, 0x2f, 0x32, 0xa3, 0x24, 0x79, 0xa8, 0xc5, 0x24, 0xc9, 0x0e, 0x1c, 0x09, 0xb0, + 0x2e, 0xeb, 0x8a, 0x6b, 0x3f, 0x2b, 0x0a, 0xd9, 0x5e, 0xba, 0x18, 0x1f, 0xff, 0x3d, 0xdd, 0x2d, + 0x1d, 0x74, 0x22, 0x3e, 0xd3, 0x4f, 0x73, 0x1f, 0x4c, 0x43, 0x8e, 0xa2, 0x46, 0xdf, 0x17, 0x60, + 0x98, 0xf5, 0x02, 0xd1, 0xc9, 0x9e, 0xe5, 0x76, 0xa8, 0x37, 0x5a, 0x3a, 0x95, 0x72, 0x36, 0xe3, + 0x40, 0x9c, 0xfd, 0xf6, 0xa7, 0xff, 0x7c, 0x2f, 0x23, 0xa2, 0x99, 0x6a, 0x42, 0x47, 0x17, 0xfd, + 0x51, 0x80, 0x89, 0x40, 0x93, 0x12, 0x9d, 0x4d, 0x50, 0x15, 0xd5, 0x47, 0x2d, 0x9d, 0xeb, 0x4f, + 0x88, 0xc3, 0xbc, 0x4c, 0x61, 0x9e, 0x45, 0x67, 0xe2, 0x61, 0xae, 0x30, 0xc1, 0x3a, 0x83, 0x5b, + 0x5d, 0x67, 0xae, 0xdd, 0x40, 0x3f, 0x10, 0x20, 0x47, 0x8b, 0x6c, 0x74, 0x22, 0x89, 0x1a, 0x5f, + 0x77, 0xb5, 0x74, 0x32, 0xdd, 0x64, 0x8e, 0xef, 0x34, 0xc5, 0x77, 0x1c, 0xcd, 0xf6, 0xa0, 0x91, + 0x08, 0x74, 0x61, 0xfd, 0x54, 0x80, 0x2c, 0x2d, 0xc3, 0x8f, 0xa7, 0x50, 0xe4, 0x82, 0x3a, 0x91, + 0x6a, 0x2e, 0xc7, 0x34, 0x4f, 0x31, 0x9d, 0x43, 0x73, 0x69, 0x31, 0x55, 0xd7, 0x79, 0x1a, 0xda, + 0x40, 0x9f, 0x0a, 0xb0, 0x37, 0xaa, 0x09, 0x89, 0xe6, 0x53, 0x20, 0x88, 0xe9, 0x5c, 0xf6, 0x87, + 0x5e, 0xa2, 0xe8, 0x6f, 0xa2, 0x37, 0x52, 0xa3, 0x0f, 0x3d, 0xc2, 0x55, 0xd7, 0x43, 0x03, 0x1b, + 0xe8, 0x13, 0x01, 0xf6, 0x44, 0xb4, 0x3d, 0xd1, 0xe5, 0x54, 0x46, 0x45, 0xb5, 0x4a, 0x77, 0xda, + 0xa6, 0xd0, 0x7b, 0x21, 0xf7, 0x50, 0x77, 0x80, 0x87, 0x37, 0x6d, 0x4b, 0x26, 0x42, 0xf1, 0x75, + 0x63, 0x93, 0xc3, 0xdb, 0xdf, 0x2d, 0x4d, 0x15, 0xde, 0x44, 0x20, 0x14, 0xde, 0xb2, 0x6a, 0x25, + 0x87, 0x77, 0xb7, 0xf7, 0x59, 0x3a, 0x91, 0x6a, 0x6e, 0x1f, 0xe1, 0x1d, 0xc0, 0x54, 0x5d, 0xe7, + 0x55, 0xe1, 0x06, 0xfa, 0x50, 0x80, 0x42, 0xa8, 0x91, 0x88, 0xce, 0x27, 0x28, 0x8f, 0x6e, 0x88, + 0x96, 0x2e, 0xf4, 0x2b, 0xc6, 0xe1, 0xdf, 0xa0, 0xf0, 0xaf, 0xa2, 0xd7, 0xfa, 0xdf, 0x9d, 0xd5, + 0x70, 0xa3, 0x13, 0x7d, 0x24, 0x40, 0x3e, 0xa8, 0x08, 0x9d, 0xeb, 0x0b, 0x97, 0x6b, 0xcd, 0xf9, + 0x3e, 0xa5, 0xb8, 0x31, 0xb7, 0xa9, 0x31, 0x6f, 0xa0, 0xd7, 0x07, 0x60, 0x4c, 0x75, 0x9d, 0x78, + 0xe8, 0x13, 0x01, 0x26, 0xc3, 0x6d, 0x3b, 0x94, 0xc4, 0x75, 0x4c, 0x03, 0xb2, 0x74, 0xb1, 0x6f, + 0x39, 0x6e, 0xd7, 0x4d, 0x6a, 0xd7, 0x35, 0xb4, 0xb8, 0x0d, 0xbb, 0xb6, 0x34, 0x16, 0x49, 0x52, + 0x2d, 0x84, 0x54, 0x25, 0x46, 0x5d, 0x74, 0xcb, 0xaf, 0x74, 0xa1, 0x5f, 0x31, 0x6e, 0xd0, 0x1d, + 0x6a, 0xd0, 0x0d, 0xb4, 0x34, 0x08, 0x83, 0x98, 0xa7, 0x7e, 0x21, 0xc0, 0x30, 0xeb, 0xf2, 0x24, + 0x56, 0x2a, 0x81, 0x1e, 0x5f, 0x62, 0xa5, 0x12, 0x6c, 0xc1, 0x89, 0x2f, 0x51, 0xe8, 0xe7, 0xd1, + 0xd9, 0x78, 0xe8, 0xac, 0xdb, 0x16, 0xb5, 0xe1, 0x7f, 0x29, 0x40, 0x8e, 0xae, 0x97, 0x98, 0x25, + 0xfd, 0x9d, 0xb5, 0xd2, 0xc9, 0x74, 0x93, 0x39, 0xc2, 0x57, 0x29, 0xc2, 0x79, 0x74, 0x69, 0x1b, + 0x08, 0x19, 0x97, 0x7f, 0x10, 0xa0, 0x10, 0xea, 0x98, 0x25, 0x46, 0x48, 0x74, 0x87, 0xed, 0xff, + 0xc1, 0x2e, 0x6f, 0xd9, 0x6d, 0xa0, 0xdf, 0x0a, 0x30, 0xcc, 0xde, 0xac, 0x13, 0x43, 0x20, 0xd0, + 0x09, 0x48, 0x04, 0x19, 0x7c, 0x08, 0x17, 0x17, 0x29, 0xc8, 0x2b, 0xe8, 0xe5, 0x78, 0x90, 0xac, + 0x35, 0x10, 0x15, 0xbe, 0xeb, 0xec, 0xd3, 0x06, 0xfa, 0x87, 0x00, 0x7b, 0x22, 0x1e, 0x7f, 0x13, + 0xab, 0x80, 0xf8, 0xe7, 0xea, 0xd2, 0xfc, 0x76, 0x44, 0xb9, 0x51, 0x77, 0xa9, 0x51, 0xb7, 0xd0, + 0x8d, 0x78, 0xa3, 0x94, 0xae, 0x78, 0xa4, 0x65, 0xe1, 0x17, 0xf1, 0x0d, 0xf4, 0xbe, 0x00, 0xf9, + 0xe0, 0xa3, 0x5a, 0x62, 0x1c, 0x45, 0x3f, 0x44, 0x97, 0xd2, 0x88, 0x6d, 0x7d, 0xba, 0x4b, 0x5b, + 0x7c, 0xfa, 0x9e, 0xf6, 0xba, 0xb5, 0xc3, 0x9f, 0x04, 0xc8, 0x07, 0xef, 0x6c, 0x89, 0xa7, 0x59, + 0xe4, 0x7b, 0x5e, 0x22, 0xf6, 0xe8, 0x77, 0xbb, 0x34, 0xfb, 0x98, 0xc6, 0x12, 0xbb, 0x0f, 0x46, + 0x95, 0xcf, 0x1f, 0x09, 0x70, 0xb8, 0xd7, 0x25, 0x10, 0x5d, 0x4a, 0x40, 0x16, 0x7b, 0xdf, 0x2d, + 0x5d, 0xde, 0x86, 0x64, 0x7a, 0x9f, 0xc8, 0x9a, 0x56, 0x8f, 0xb2, 0x0d, 0xfd, 0x5a, 0x00, 0xe8, + 0xbe, 0xe8, 0xa1, 0xd3, 0x69, 0xb2, 0x8b, 0xff, 0x45, 0xb2, 0x74, 0xa6, 0x0f, 0x09, 0x8e, 0xf7, + 0x02, 0xc5, 0x7b, 0x1a, 0x55, 0x12, 0x72, 0x12, 0x7b, 0x8a, 0xf3, 0xb0, 0xd6, 0x6e, 0x3d, 0x7d, + 0x36, 0x2d, 0x7c, 0xfc, 0x6c, 0x5a, 0xf8, 0xfb, 0xb3, 0x69, 0xe1, 0xdd, 0xe7, 0xd3, 0xbb, 0x3e, + 0x7e, 0x3e, 0xbd, 0xeb, 0x6f, 0xcf, 0xa7, 0x77, 0xbd, 0x75, 0x36, 0xf0, 0x18, 0x41, 0xd6, 0x3c, + 0x65, 0x2c, 0x2f, 0xab, 0x4d, 0x55, 0xd6, 0x5c, 0x1d, 0x7e, 0x2d, 0xf4, 0x75, 0xa2, 0x31, 0x4c, + 0xdf, 0xc9, 0xcf, 0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x18, 0x73, 0xd9, 0xfc, 0xde, 0x2d, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -9816,7 +9819,7 @@ func (m *PoolResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var v github_com_cosmos_cosmos_sdk_types.Dec + var v cosmossdk_io_math.LegacyDec m.MinPrice = &v if err := m.MinPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -9852,7 +9855,7 @@ func (m *PoolResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var v github_com_cosmos_cosmos_sdk_types.Dec + var v cosmossdk_io_math.LegacyDec m.MaxPrice = &v if err := m.MaxPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -9888,7 +9891,7 @@ func (m *PoolResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var v github_com_cosmos_cosmos_sdk_types.Dec + var v cosmossdk_io_math.LegacyDec m.Price = &v if err := m.Price.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err diff --git a/x/liquidity/types/tx.pb.go b/x/liquidity/types/tx.pb.go index e85abd7d2..47f6ae112 100644 --- a/x/liquidity/types/tx.pb.go +++ b/x/liquidity/types/tx.pb.go @@ -5,6 +5,7 @@ package types import ( context "context" + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" @@ -204,9 +205,9 @@ type MsgCreateRangedPool struct { PairId uint64 `protobuf:"varint,3,opt,name=pair_id,json=pairId,proto3" json:"pair_id,omitempty"` // deposit_coins specifies the amount of coins to deposit. DepositCoins github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,4,rep,name=deposit_coins,json=depositCoins,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"deposit_coins"` - MinPrice github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,5,opt,name=min_price,json=minPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"min_price"` - MaxPrice github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,6,opt,name=max_price,json=maxPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_price"` - InitialPrice github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,7,opt,name=initial_price,json=initialPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"initial_price"` + MinPrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,5,opt,name=min_price,json=minPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"min_price"` + MaxPrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,6,opt,name=max_price,json=maxPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"max_price"` + InitialPrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,7,opt,name=initial_price,json=initialPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"initial_price"` } func (m *MsgCreateRangedPool) Reset() { *m = MsgCreateRangedPool{} } @@ -454,9 +455,9 @@ type MsgLimitOrder struct { // demand_coin_denom specifies the demand coin denom DemandCoinDenom string `protobuf:"bytes,5,opt,name=demand_coin_denom,json=demandCoinDenom,proto3" json:"demand_coin_denom,omitempty"` // price specifies the order price - Price github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,6,opt,name=price,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"price"` + Price cosmossdk_io_math.LegacyDec `protobuf:"bytes,6,opt,name=price,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"price"` // amount specifies the amount of base coin the orderer wants to buy or sell - Amount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,7,opt,name=amount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"amount"` + Amount cosmossdk_io_math.Int `protobuf:"bytes,7,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` // order_lifespan specifies the order lifespan OrderLifespan time.Duration `protobuf:"bytes,8,opt,name=order_lifespan,json=orderLifespan,proto3,stdduration" json:"order_lifespan"` AppId uint64 `protobuf:"varint,9,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` @@ -545,7 +546,7 @@ type MsgMarketOrder struct { // demand_coin_denom specifies the demand coin denom DemandCoinDenom string `protobuf:"bytes,5,opt,name=demand_coin_denom,json=demandCoinDenom,proto3" json:"demand_coin_denom,omitempty"` // amount specifies the amount of base coin the orderer wants to buy or sell - Amount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,6,opt,name=amount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"amount"` + Amount cosmossdk_io_math.Int `protobuf:"bytes,6,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` // order_lifespan specifies the order lifespan OrderLifespan time.Duration `protobuf:"bytes,7,opt,name=order_lifespan,json=orderLifespan,proto3,stdduration" json:"order_lifespan"` AppId uint64 `protobuf:"varint,8,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` @@ -629,17 +630,17 @@ type MsgMMOrder struct { // pair_id specifies the pair id PairId uint64 `protobuf:"varint,3,opt,name=pair_id,json=pairId,proto3" json:"pair_id,omitempty"` // max_sell_price specifies the maximum sell price - MaxSellPrice github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,4,opt,name=max_sell_price,json=maxSellPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_sell_price"` + MaxSellPrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,4,opt,name=max_sell_price,json=maxSellPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"max_sell_price"` // min_sell_price specifies the minimum sell price - MinSellPrice github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,5,opt,name=min_sell_price,json=minSellPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"min_sell_price"` + MinSellPrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,5,opt,name=min_sell_price,json=minSellPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"min_sell_price"` // sell_amount specifies the total amount of base coin of sell orders - SellAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,6,opt,name=sell_amount,json=sellAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"sell_amount"` + SellAmount cosmossdk_io_math.Int `protobuf:"bytes,6,opt,name=sell_amount,json=sellAmount,proto3,customtype=cosmossdk.io/math.Int" json:"sell_amount"` // max_buy_price specifies the maximum buy price - MaxBuyPrice github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,7,opt,name=max_buy_price,json=maxBuyPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_buy_price"` + MaxBuyPrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,7,opt,name=max_buy_price,json=maxBuyPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"max_buy_price"` // min_buy_price specifies the minimum buy price - MinBuyPrice github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,8,opt,name=min_buy_price,json=minBuyPrice,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"min_buy_price"` + MinBuyPrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,8,opt,name=min_buy_price,json=minBuyPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"min_buy_price"` // buy_amount specifies the total amount of base coin of buy orders - BuyAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,9,opt,name=buy_amount,json=buyAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"buy_amount"` + BuyAmount cosmossdk_io_math.Int `protobuf:"bytes,9,opt,name=buy_amount,json=buyAmount,proto3,customtype=cosmossdk.io/math.Int" json:"buy_amount"` // order_lifespan specifies the order lifespan OrderLifespan time.Duration `protobuf:"bytes,10,opt,name=order_lifespan,json=orderLifespan,proto3,stdduration" json:"order_lifespan"` } @@ -1302,96 +1303,97 @@ func init() { func init() { proto.RegisterFile("comdex/liquidity/v1beta1/tx.proto", fileDescriptor_2d6c7fd717524583) } var fileDescriptor_2d6c7fd717524583 = []byte{ - // 1425 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcf, 0x6f, 0x1b, 0xc5, - 0x17, 0xcf, 0xc6, 0x8e, 0x63, 0xbf, 0xd4, 0x49, 0xb3, 0xfd, 0xe5, 0x6c, 0xfb, 0x75, 0x52, 0x7f, - 0xa1, 0x35, 0x6d, 0xb3, 0x6e, 0x53, 0xe0, 0x80, 0x10, 0x52, 0xd2, 0xa8, 0x52, 0x68, 0xad, 0x96, - 0x6d, 0x11, 0x52, 0x05, 0x4a, 0xd7, 0xde, 0xf1, 0x76, 0xd4, 0xdd, 0x1d, 0x77, 0x77, 0x4d, 0x1d, - 0xf1, 0x4f, 0xa0, 0x1e, 0x50, 0x25, 0x6e, 0x1c, 0xf9, 0x0b, 0x38, 0x72, 0xac, 0x04, 0x87, 0x4a, - 0x5c, 0x10, 0x87, 0x14, 0x5a, 0x09, 0x6e, 0x1c, 0xb8, 0xc1, 0x09, 0xcd, 0xec, 0xec, 0xec, 0x38, - 0x8e, 0xed, 0xb5, 0x1b, 0x24, 0x50, 0x4f, 0xf6, 0xec, 0x7c, 0xde, 0xe7, 0xbd, 0xcf, 0xbc, 0xb7, - 0xf3, 0x66, 0x16, 0x4e, 0x37, 0x89, 0x6b, 0xa1, 0x6e, 0xcd, 0xc1, 0x0f, 0x3a, 0xd8, 0xc2, 0xe1, - 0x4e, 0xed, 0xd3, 0x4b, 0x0d, 0x14, 0x9a, 0x97, 0x6a, 0x61, 0x57, 0x6f, 0xfb, 0x24, 0x24, 0x6a, - 0x29, 0x82, 0xe8, 0x02, 0xa2, 0x73, 0x88, 0x76, 0xd4, 0x26, 0x36, 0x61, 0xa0, 0x1a, 0xfd, 0x17, - 0xe1, 0xb5, 0x72, 0x93, 0x04, 0x2e, 0x09, 0x6a, 0x0d, 0x33, 0x40, 0x82, 0xad, 0x49, 0xb0, 0x17, - 0xcf, 0xdb, 0x84, 0xd8, 0x0e, 0xaa, 0xb1, 0x51, 0xa3, 0xd3, 0xaa, 0x59, 0x1d, 0xdf, 0x0c, 0x31, - 0x89, 0xe7, 0xab, 0x03, 0x43, 0x4a, 0x22, 0x60, 0xc8, 0xca, 0x23, 0x05, 0x8a, 0xf5, 0xc0, 0xbe, - 0xe2, 0x23, 0x33, 0x44, 0x37, 0x4d, 0xec, 0xab, 0x25, 0x98, 0x6d, 0xd2, 0x11, 0xf1, 0x4b, 0xca, - 0x8a, 0x52, 0x2d, 0x18, 0xf1, 0x50, 0x3d, 0x03, 0x0b, 0x34, 0xa0, 0x6d, 0x1a, 0xc8, 0xb6, 0x85, - 0x3c, 0xe2, 0x96, 0xa6, 0x19, 0xa2, 0x48, 0x1f, 0x5f, 0x21, 0xd8, 0xdb, 0xa4, 0x0f, 0xd5, 0x2a, - 0x1c, 0x7e, 0xd0, 0x21, 0x61, 0x0f, 0x30, 0xc3, 0x80, 0xf3, 0xec, 0x79, 0x82, 0x3c, 0x06, 0x39, - 0xb3, 0xdd, 0xde, 0xc6, 0x56, 0x29, 0xbb, 0xa2, 0x54, 0xb3, 0xc6, 0x8c, 0xd9, 0x6e, 0x6f, 0x59, - 0x95, 0x13, 0x70, 0xac, 0x27, 0x26, 0x03, 0x05, 0x6d, 0xe2, 0x05, 0xa8, 0xf2, 0x5d, 0x4f, 0xb4, - 0x84, 0x38, 0x43, 0xa2, 0x3d, 0x01, 0xb3, 0x6d, 0x13, 0xfb, 0x94, 0x7c, 0x9a, 0x91, 0xe7, 0xe8, - 0x70, 0xcb, 0x52, 0xdb, 0x50, 0xb4, 0x50, 0x9b, 0x04, 0x38, 0x64, 0x01, 0x06, 0xa5, 0xcc, 0x4a, - 0xa6, 0x3a, 0xb7, 0xb6, 0xa4, 0x47, 0x8b, 0xae, 0x53, 0x31, 0x71, 0x7e, 0x74, 0x1a, 0xeb, 0xc6, - 0xc5, 0x27, 0xbb, 0xcb, 0x53, 0x5f, 0x3f, 0x5b, 0xae, 0xda, 0x38, 0xbc, 0xd7, 0x69, 0xe8, 0x4d, - 0xe2, 0xd6, 0x78, 0x86, 0xa2, 0x9f, 0xd5, 0xc0, 0xba, 0x5f, 0x0b, 0x77, 0xda, 0x28, 0x60, 0x06, - 0x81, 0x71, 0x88, 0x7b, 0x60, 0xa3, 0x54, 0x32, 0x09, 0x71, 0x84, 0xcc, 0x6f, 0x33, 0x70, 0x44, - 0xcc, 0x18, 0xa6, 0x67, 0x23, 0x6b, 0x84, 0xd8, 0xc4, 0xc3, 0xb4, 0xe4, 0x41, 0x5e, 0x83, 0xcc, - 0xf0, 0x35, 0xc8, 0xfe, 0xd3, 0x6b, 0x70, 0x0d, 0x0a, 0x2e, 0xf6, 0xb6, 0xdb, 0x3e, 0x6e, 0xa2, - 0xd2, 0x0c, 0x8d, 0x7e, 0x43, 0xa7, 0x94, 0x3f, 0xed, 0x2e, 0x9f, 0x49, 0x41, 0xb9, 0x89, 0x9a, - 0x46, 0xde, 0xc5, 0xde, 0x4d, 0x6a, 0xcf, 0xc8, 0xcc, 0x2e, 0x27, 0xcb, 0x4d, 0x48, 0x66, 0x76, - 0x23, 0xb2, 0x5b, 0x50, 0xc4, 0x1e, 0x0e, 0xb1, 0xe9, 0x70, 0xc2, 0xd9, 0x89, 0x08, 0x0f, 0x71, - 0x12, 0x46, 0x5a, 0xf9, 0x1f, 0x9c, 0xdc, 0x27, 0x83, 0x22, 0xc3, 0xdf, 0x2b, 0x00, 0xf5, 0xc0, - 0xde, 0x8c, 0x56, 0x48, 0x3d, 0x05, 0x05, 0xbe, 0x58, 0x22, 0xb5, 0xc9, 0x03, 0x96, 0x45, 0x42, - 0x1c, 0xb9, 0x92, 0x09, 0x71, 0xfe, 0x4d, 0x95, 0x7c, 0x14, 0xd4, 0x44, 0x8d, 0x10, 0xf9, 0xa5, - 0x02, 0x73, 0xf5, 0xc0, 0xfe, 0x08, 0x87, 0xf7, 0x2c, 0xdf, 0x7c, 0xa8, 0x96, 0x01, 0x1e, 0xf2, - 0xff, 0x28, 0x96, 0x29, 0x3d, 0x19, 0xac, 0xf3, 0x5d, 0x28, 0xb0, 0x09, 0x2a, 0x92, 0x15, 0xf2, - 0x50, 0x8d, 0x59, 0xaa, 0xd1, 0xc8, 0x53, 0x0b, 0x3a, 0x1e, 0x14, 0xf3, 0x31, 0xf6, 0x8e, 0xc5, - 0xc1, 0x89, 0xa0, 0x7f, 0xcb, 0xb0, 0x2d, 0xe6, 0x3a, 0x76, 0x71, 0x78, 0xc3, 0xb7, 0x10, 0xdb, - 0x10, 0x09, 0xfd, 0x23, 0x62, 0x8e, 0x87, 0x83, 0xb7, 0x98, 0xab, 0x50, 0xb0, 0xb0, 0x8f, 0x9a, - 0x74, 0x4b, 0x66, 0x01, 0xcf, 0xaf, 0x55, 0xf5, 0x41, 0x3d, 0x40, 0x67, 0x6e, 0x36, 0x63, 0xbc, - 0x91, 0x98, 0xaa, 0xef, 0x01, 0x90, 0x56, 0x0b, 0xf9, 0x91, 0xf2, 0x6c, 0x3a, 0xe5, 0x05, 0x66, - 0xc2, 0xa4, 0x9f, 0x83, 0x45, 0x0b, 0xb9, 0xa6, 0x67, 0xc9, 0x5b, 0x31, 0x7b, 0xf9, 0x8c, 0x85, - 0x68, 0x22, 0xd9, 0x8b, 0x37, 0x61, 0xe6, 0x65, 0xde, 0xa7, 0xc8, 0x58, 0xbd, 0x0a, 0x39, 0xd3, - 0x25, 0x1d, 0x2f, 0x9c, 0xe0, 0x2d, 0xda, 0xf2, 0x42, 0x83, 0x5b, 0xab, 0xef, 0xc3, 0x3c, 0x5b, - 0xe5, 0x6d, 0x07, 0xb7, 0x50, 0xd0, 0x36, 0xbd, 0x52, 0x9e, 0xab, 0x8f, 0x5a, 0x9f, 0x1e, 0xb7, - 0x3e, 0x7d, 0x93, 0xb7, 0xbe, 0x8d, 0x3c, 0x75, 0xf5, 0xf8, 0xd9, 0xb2, 0x62, 0x14, 0x99, 0xe9, - 0x75, 0x6e, 0x29, 0x15, 0x40, 0xa1, 0x7f, 0xfb, 0x4d, 0x12, 0x2d, 0x4a, 0xe0, 0xab, 0x0c, 0xcc, - 0xd7, 0x03, 0xbb, 0x6e, 0xfa, 0xf7, 0xd1, 0xab, 0x55, 0x03, 0x49, 0xf6, 0x72, 0x07, 0x9c, 0xbd, - 0xd9, 0x03, 0xc8, 0x5e, 0x5e, 0xce, 0x5e, 0x09, 0x8e, 0xf7, 0xe6, 0x48, 0xa4, 0xef, 0x8b, 0x19, - 0xb6, 0xb7, 0xd6, 0xeb, 0xa3, 0x52, 0x37, 0x6e, 0xd3, 0xbc, 0x0d, 0xf3, 0xb4, 0xeb, 0x04, 0xc8, - 0x89, 0x3b, 0x45, 0x76, 0xb2, 0x4e, 0xe1, 0x9a, 0xdd, 0x5b, 0xc8, 0x89, 0x3a, 0x05, 0x63, 0xc5, - 0x9e, 0xcc, 0x3a, 0x33, 0x21, 0x2b, 0xf6, 0x12, 0xd6, 0x1b, 0x30, 0xc7, 0x18, 0x5f, 0x2a, 0x9d, - 0x40, 0x29, 0xd6, 0xa3, 0x94, 0x1a, 0x50, 0xa4, 0xe2, 0x1b, 0x9d, 0x9d, 0x97, 0xea, 0x92, 0x73, - 0xae, 0xd9, 0xdd, 0xe8, 0xec, 0x44, 0x41, 0x52, 0x4e, 0xec, 0x49, 0x9c, 0xf9, 0x09, 0x39, 0xb1, - 0x27, 0x38, 0xeb, 0x00, 0x94, 0x8f, 0xeb, 0x2e, 0x4c, 0xa4, 0xbb, 0xd0, 0xe8, 0xec, 0xac, 0x0f, - 0xaa, 0x64, 0x98, 0xb4, 0x92, 0x79, 0x97, 0xe4, 0x75, 0x29, 0xca, 0xb5, 0xc3, 0x36, 0x9b, 0x2b, - 0xa6, 0xd7, 0x44, 0xce, 0xc4, 0x9b, 0xcd, 0x12, 0xe4, 0xa3, 0x30, 0x45, 0xd1, 0x46, 0x36, 0x5b, - 0xd6, 0xa0, 0xf6, 0x17, 0xbd, 0x3f, 0x92, 0x5b, 0x11, 0xd0, 0x5d, 0x16, 0x66, 0x34, 0xb3, 0xee, - 0x44, 0x93, 0xc1, 0x90, 0xa0, 0x96, 0x20, 0xcf, 0x83, 0x0a, 0x4a, 0xd3, 0x2b, 0x19, 0xea, 0x3b, - 0x8a, 0x4a, 0x3e, 0x2e, 0x64, 0x64, 0xdf, 0xa7, 0x40, 0xeb, 0xf7, 0x20, 0xfc, 0x7f, 0x0c, 0x87, - 0xc5, 0xec, 0x81, 0xbf, 0xc4, 0x15, 0x0d, 0x4a, 0x7b, 0xd9, 0x85, 0xe7, 0x5f, 0x15, 0x98, 0xad, - 0x07, 0xf6, 0x55, 0xd3, 0x97, 0xaf, 0x26, 0xca, 0x5e, 0xde, 0x7d, 0xcf, 0x28, 0xc7, 0x21, 0xd7, - 0x32, 0x7d, 0x17, 0xf9, 0xfc, 0xaa, 0xc3, 0x47, 0xea, 0x23, 0x05, 0x16, 0xe9, 0x5f, 0xec, 0xd9, - 0xdb, 0xc9, 0x21, 0x66, 0xe4, 0x36, 0x7e, 0x8d, 0x16, 0xd1, 0x1f, 0xbb, 0xcb, 0xa5, 0x1d, 0xd3, - 0x75, 0xde, 0xa9, 0xf4, 0x31, 0x54, 0xfe, 0xda, 0x5d, 0x3e, 0x9b, 0xf2, 0x10, 0x67, 0x2c, 0x70, - 0xf3, 0x9b, 0xfc, 0x48, 0x54, 0x59, 0x84, 0x05, 0xae, 0x53, 0x68, 0xff, 0x5d, 0x81, 0x42, 0x3d, - 0xb0, 0x3f, 0xf4, 0x5a, 0x07, 0xa9, 0xfe, 0xb1, 0x02, 0x47, 0x3a, 0xde, 0x04, 0xfa, 0xeb, 0x5c, - 0xbf, 0x16, 0xe9, 0xdf, 0x87, 0x63, 0xac, 0x15, 0x58, 0x14, 0x04, 0x62, 0x0d, 0x8e, 0xc0, 0xa2, - 0xd0, 0x2b, 0x56, 0xe1, 0x07, 0x85, 0x3d, 0xe5, 0x27, 0xd9, 0x75, 0xcf, 0x62, 0xb5, 0xf0, 0x5f, - 0x3f, 0x9e, 0x9f, 0x84, 0xa5, 0x3e, 0x51, 0x42, 0xf2, 0x9f, 0x0a, 0x1c, 0x15, 0x0b, 0xb1, 0xee, - 0x59, 0xe2, 0xb8, 0xfe, 0x0a, 0xd4, 0x40, 0x19, 0x4e, 0xed, 0x27, 0x3d, 0x5e, 0x9b, 0xb5, 0x6f, - 0x0e, 0x41, 0xa6, 0x1e, 0xd8, 0x6a, 0x0b, 0x40, 0xfa, 0x42, 0x72, 0x76, 0xf0, 0x31, 0xae, 0xe7, - 0xb3, 0x85, 0x56, 0x4b, 0x09, 0x8c, 0xfd, 0x49, 0x7e, 0xe8, 0x75, 0x3f, 0x95, 0x1f, 0x42, 0x9c, - 0x74, 0x7e, 0xa4, 0xeb, 0xa7, 0xda, 0x85, 0xc3, 0x7d, 0x1f, 0x17, 0x56, 0x53, 0x90, 0x24, 0x70, - 0xed, 0xad, 0xb1, 0xe0, 0xc2, 0xf3, 0x27, 0x30, 0x1b, 0x5f, 0x7a, 0x5f, 0x1b, 0xca, 0xc0, 0x51, - 0xda, 0x85, 0x34, 0x28, 0x41, 0x7f, 0x17, 0xf2, 0xa2, 0x7e, 0x5f, 0x1f, 0x6a, 0x19, 0xc3, 0xb4, - 0xd5, 0x54, 0x30, 0x39, 0x45, 0xd2, 0xdd, 0x70, 0x78, 0x8a, 0x12, 0xe0, 0x88, 0x14, 0xf5, 0x5f, - 0x42, 0x54, 0x0c, 0x73, 0xf2, 0x05, 0xa4, 0x3a, 0xd4, 0x5e, 0x42, 0x6a, 0x17, 0xd3, 0x22, 0xe5, - 0x9c, 0xc4, 0x7d, 0x76, 0x78, 0x4e, 0x38, 0x6a, 0x44, 0x4e, 0xf6, 0x74, 0x55, 0xaa, 0x44, 0x3e, - 0xdd, 0x0c, 0x57, 0x22, 0x21, 0x47, 0x28, 0xd9, 0xe7, 0xe8, 0xa2, 0x76, 0x60, 0x61, 0xef, 0xb9, - 0xe5, 0x42, 0x0a, 0x12, 0x81, 0xd6, 0xde, 0x1c, 0x07, 0x2d, 0xdc, 0x12, 0x28, 0xf6, 0x1e, 0x57, - 0xce, 0xa5, 0xa0, 0x89, 0x17, 0x73, 0x2d, 0x3d, 0x56, 0x38, 0xbc, 0x0d, 0x59, 0xd6, 0x98, 0x4e, - 0x0f, 0xb5, 0xa5, 0x10, 0xed, 0x8d, 0x91, 0x10, 0xc1, 0x7a, 0x07, 0x72, 0xbc, 0xfd, 0xff, 0x7f, - 0xa8, 0x51, 0x04, 0xd2, 0xce, 0xa7, 0x00, 0x09, 0x6e, 0x1f, 0xe6, 0xf7, 0x34, 0xd5, 0xf3, 0x69, - 0x5e, 0x6c, 0x0e, 0xd6, 0x2e, 0x8f, 0x01, 0x16, 0x3e, 0x3f, 0x83, 0xc5, 0xfe, 0xae, 0xa6, 0xa7, - 0x88, 0x5a, 0xc2, 0x6b, 0x6f, 0x8f, 0x87, 0x8f, 0x9d, 0x6f, 0x7c, 0xf0, 0xe4, 0x97, 0xf2, 0xd4, - 0x93, 0xe7, 0x65, 0xe5, 0xe9, 0xf3, 0xb2, 0xf2, 0xf3, 0xf3, 0xb2, 0xf2, 0xf9, 0x8b, 0xf2, 0xd4, - 0xd3, 0x17, 0xe5, 0xa9, 0x1f, 0x5f, 0x94, 0xa7, 0xee, 0x5c, 0xee, 0x69, 0x5a, 0x94, 0x7f, 0x95, - 0xb4, 0x5a, 0xb8, 0x89, 0x4d, 0x87, 0x8f, 0x6b, 0xf2, 0xd7, 0x7b, 0xd6, 0xc5, 0x1a, 0x39, 0x76, - 0xd7, 0xb8, 0xfc, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xe3, 0x8f, 0xe0, 0x71, 0x18, 0x00, + // 1441 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xc1, 0x6f, 0x1b, 0x45, + 0x17, 0xcf, 0xc6, 0x8e, 0x63, 0xbf, 0xd4, 0x49, 0xb3, 0x6d, 0x5a, 0x67, 0xdb, 0x3a, 0xa9, 0xfb, + 0x7d, 0x5f, 0xfd, 0xb5, 0xcd, 0xba, 0x4d, 0x29, 0x12, 0xa8, 0xaa, 0x48, 0x1a, 0x15, 0x02, 0xb5, + 0x28, 0x06, 0x84, 0x54, 0x81, 0xd2, 0xb1, 0x77, 0xbc, 0x1d, 0x75, 0x77, 0xc7, 0xdd, 0x5d, 0x53, + 0x5b, 0xfc, 0x13, 0xd0, 0x53, 0x25, 0x0e, 0xdc, 0xf9, 0x0b, 0xf8, 0x13, 0x22, 0xc1, 0xa1, 0x12, + 0x17, 0xc4, 0x21, 0x85, 0x56, 0xe2, 0xc8, 0x81, 0x1b, 0x9c, 0xd0, 0xcc, 0xce, 0xce, 0xae, 0xe3, + 0xd8, 0xde, 0x2d, 0x45, 0x02, 0xf5, 0xe4, 0x9d, 0x9d, 0xdf, 0xfb, 0xbd, 0xf7, 0x9b, 0x37, 0xfb, + 0xde, 0x8c, 0xe1, 0x74, 0x8b, 0xda, 0x06, 0xee, 0xd5, 0x2c, 0x72, 0xbf, 0x4b, 0x0c, 0xe2, 0xf7, + 0x6b, 0x9f, 0x5e, 0x6a, 0x62, 0x1f, 0x5d, 0xaa, 0xf9, 0x3d, 0xbd, 0xe3, 0x52, 0x9f, 0xaa, 0xa5, + 0x00, 0xa2, 0x4b, 0x88, 0x2e, 0x20, 0xda, 0x51, 0x93, 0x9a, 0x94, 0x83, 0x6a, 0xec, 0x29, 0xc0, + 0x6b, 0xe5, 0x16, 0xf5, 0x6c, 0xea, 0xd5, 0x9a, 0xc8, 0xc3, 0x92, 0xad, 0x45, 0x89, 0x13, 0xce, + 0x9b, 0x94, 0x9a, 0x16, 0xae, 0xf1, 0x51, 0xb3, 0xdb, 0xae, 0x19, 0x5d, 0x17, 0xf9, 0x84, 0x86, + 0xf3, 0xd5, 0x91, 0x21, 0x45, 0x11, 0x70, 0x64, 0xe5, 0xa1, 0x02, 0xc5, 0xba, 0x67, 0x5e, 0x77, + 0x31, 0xf2, 0xf1, 0x2d, 0x44, 0x5c, 0xb5, 0x04, 0xb3, 0x2d, 0x36, 0xa2, 0x6e, 0x49, 0x59, 0x55, + 0xaa, 0x85, 0x46, 0x38, 0x54, 0xff, 0x07, 0x0b, 0x2c, 0xa0, 0x1d, 0x16, 0xc8, 0x8e, 0x81, 0x1d, + 0x6a, 0x97, 0xa6, 0x39, 0xa2, 0xc8, 0x5e, 0x5f, 0xa7, 0xc4, 0xd9, 0x62, 0x2f, 0xd5, 0x2a, 0x1c, + 0xbe, 0xdf, 0xa5, 0xfe, 0x00, 0x30, 0xc3, 0x81, 0xf3, 0xfc, 0x7d, 0x84, 0x5c, 0x82, 0x1c, 0xea, + 0x74, 0x76, 0x88, 0x51, 0xca, 0xae, 0x2a, 0xd5, 0x6c, 0x63, 0x06, 0x75, 0x3a, 0xdb, 0x46, 0xe5, + 0x38, 0x2c, 0x0d, 0xc4, 0xd4, 0xc0, 0x5e, 0x87, 0x3a, 0x1e, 0xae, 0x7c, 0x3b, 0x10, 0x2d, 0xa5, + 0xd6, 0x98, 0x68, 0x8f, 0xc3, 0x6c, 0x07, 0x11, 0x97, 0x91, 0x4f, 0x73, 0xf2, 0x1c, 0x1b, 0x6e, + 0x1b, 0x6a, 0x07, 0x8a, 0x06, 0xee, 0x50, 0x8f, 0xf8, 0x3c, 0x40, 0xaf, 0x94, 0x59, 0xcd, 0x54, + 0xe7, 0xd6, 0x97, 0xf5, 0x60, 0xd1, 0x75, 0x26, 0x26, 0xcc, 0x8f, 0xce, 0x62, 0xdd, 0xbc, 0xb8, + 0xbb, 0xb7, 0x32, 0xf5, 0xf5, 0x93, 0x95, 0xaa, 0x49, 0xfc, 0xbb, 0xdd, 0xa6, 0xde, 0xa2, 0x76, + 0x4d, 0x64, 0x28, 0xf8, 0x59, 0xf3, 0x8c, 0x7b, 0x35, 0xbf, 0xdf, 0xc1, 0x1e, 0x37, 0xf0, 0x1a, + 0x87, 0x84, 0x07, 0x3e, 0x4a, 0x24, 0x93, 0x52, 0x4b, 0xca, 0xfc, 0x2a, 0x03, 0x47, 0xe4, 0x4c, + 0x03, 0x39, 0x26, 0x36, 0x26, 0x88, 0x8d, 0x3c, 0x4c, 0xc7, 0x3c, 0xc4, 0xd7, 0x20, 0x33, 0x7e, + 0x0d, 0xb2, 0x7f, 0xf7, 0x1a, 0xbc, 0x01, 0x05, 0x9b, 0x38, 0x3b, 0x1d, 0x97, 0xb4, 0x70, 0x69, + 0x86, 0x45, 0xbf, 0x79, 0x86, 0x51, 0xfe, 0xb8, 0xb7, 0x72, 0x22, 0x20, 0xf0, 0x8c, 0x7b, 0x3a, + 0xa1, 0x35, 0x1b, 0xf9, 0x77, 0xf5, 0x9b, 0xd8, 0x44, 0xad, 0xfe, 0x16, 0x6e, 0x35, 0xf2, 0x36, + 0x71, 0x6e, 0x31, 0x23, 0xce, 0x80, 0x7a, 0x82, 0x21, 0x97, 0x86, 0x01, 0xf5, 0x02, 0x86, 0xb7, + 0xa0, 0x48, 0x1c, 0xe2, 0x13, 0x64, 0x09, 0x96, 0xd9, 0xe4, 0x2c, 0x87, 0x84, 0x25, 0x67, 0xaa, + 0x9c, 0x82, 0x13, 0x07, 0x24, 0x48, 0x26, 0xf0, 0x3b, 0x05, 0xa0, 0xee, 0x99, 0x5b, 0xc1, 0x02, + 0xa8, 0x27, 0xa1, 0x20, 0xd6, 0x42, 0x66, 0x2e, 0x7a, 0xc1, 0x93, 0x44, 0xa9, 0x15, 0xdf, 0xa8, + 0x94, 0x5a, 0xff, 0xa4, 0x8d, 0x7a, 0x14, 0xd4, 0x48, 0x8d, 0x14, 0xf9, 0xa5, 0x02, 0x73, 0x75, + 0xcf, 0xfc, 0x88, 0xf8, 0x77, 0x0d, 0x17, 0x3d, 0x50, 0xcb, 0x00, 0x0f, 0xc4, 0x33, 0x0e, 0x65, + 0xc6, 0xde, 0x8c, 0xd6, 0x79, 0x15, 0x0a, 0x7c, 0x82, 0x89, 0xe4, 0xfb, 0x74, 0xac, 0xc6, 0x2c, + 0xd3, 0xd8, 0xc8, 0x33, 0x0b, 0x36, 0x1e, 0x15, 0xf3, 0x12, 0xff, 0x84, 0xc2, 0xe0, 0xa2, 0x0a, + 0x92, 0xe1, 0x15, 0xe4, 0x26, 0xb1, 0x89, 0xff, 0xae, 0x6b, 0x60, 0x5e, 0xef, 0x28, 0x7b, 0x90, + 0x31, 0x87, 0xc3, 0xd1, 0x15, 0xe4, 0x06, 0x14, 0x0c, 0xe2, 0xe2, 0x16, 0xab, 0xb8, 0x3c, 0xe0, + 0xf9, 0xf5, 0xaa, 0x3e, 0xaa, 0xc4, 0xeb, 0xdc, 0xcd, 0x56, 0x88, 0x6f, 0x44, 0xa6, 0xea, 0x35, + 0x00, 0xda, 0x6e, 0x63, 0x37, 0x50, 0x9e, 0x4d, 0xa6, 0xbc, 0xc0, 0x4d, 0xb8, 0xf4, 0x73, 0xb0, + 0x68, 0x60, 0x1b, 0x39, 0x46, 0xbc, 0xd2, 0xf2, 0x6f, 0xab, 0xb1, 0x10, 0x4c, 0x44, 0xa5, 0xf6, + 0x35, 0x98, 0x49, 0xfd, 0xe5, 0x04, 0x16, 0xea, 0x15, 0xc8, 0x21, 0x9b, 0x76, 0x1d, 0x5f, 0x7c, + 0x2f, 0xa7, 0x84, 0xed, 0xd2, 0xb0, 0xed, 0xb6, 0xe3, 0x37, 0x04, 0x58, 0x7d, 0x1b, 0xe6, 0xf9, + 0x4a, 0xee, 0x58, 0xa4, 0x8d, 0xbd, 0x0e, 0x72, 0x4a, 0x79, 0xa1, 0x30, 0xe8, 0x5e, 0x7a, 0xd8, + 0xbd, 0xf4, 0x2d, 0xd1, 0xbd, 0x36, 0xf3, 0x8c, 0xf9, 0xd1, 0x93, 0x15, 0xa5, 0x51, 0xe4, 0xa6, + 0x37, 0x85, 0x65, 0x2c, 0xc9, 0x85, 0xe1, 0x0a, 0x1a, 0x25, 0x53, 0xa6, 0xf9, 0x8b, 0x0c, 0xcc, + 0xd7, 0x3d, 0xb3, 0x8e, 0xdc, 0x7b, 0xf8, 0xe5, 0xca, 0x73, 0x94, 0xac, 0xdc, 0x5f, 0x4b, 0xd6, + 0xec, 0x0b, 0x48, 0x56, 0x3e, 0x9e, 0xac, 0x12, 0x1c, 0x1b, 0x4c, 0x89, 0xcc, 0xd6, 0x6e, 0x96, + 0x97, 0xcb, 0x7a, 0x7d, 0x52, 0xa6, 0xd2, 0xb6, 0xb9, 0x6d, 0x98, 0x67, 0x2d, 0xc3, 0xc3, 0x56, + 0x58, 0xf1, 0xb3, 0x29, 0x2a, 0xbe, 0x8d, 0x7a, 0xef, 0x63, 0x2b, 0xa8, 0xf8, 0x9c, 0x8a, 0x38, + 0x71, 0xaa, 0x99, 0x34, 0x54, 0xc4, 0x89, 0xa8, 0xae, 0xc1, 0x1c, 0xa7, 0x49, 0x93, 0x27, 0x60, + 0x16, 0x1b, 0x41, 0xae, 0xde, 0x84, 0x22, 0x53, 0xd5, 0xec, 0xf6, 0xd3, 0xb7, 0xb1, 0x39, 0x1b, + 0xf5, 0x36, 0xbb, 0xfd, 0x20, 0x10, 0x46, 0x44, 0x9c, 0x18, 0x51, 0x3e, 0x0d, 0x11, 0x71, 0x24, + 0xd1, 0x55, 0x00, 0x46, 0x22, 0x04, 0x15, 0x92, 0x08, 0x2a, 0x34, 0xbb, 0xfd, 0x8d, 0x51, 0x7b, + 0x0f, 0x9e, 0x77, 0xef, 0x89, 0x56, 0x25, 0x76, 0x92, 0xdc, 0x60, 0x5d, 0x5e, 0x0d, 0xae, 0x23, + 0xa7, 0x85, 0xad, 0xe7, 0xae, 0x06, 0xcb, 0x90, 0x0f, 0xc2, 0x94, 0xdb, 0x2c, 0xb0, 0xd9, 0x36, + 0x46, 0xf5, 0xa0, 0x60, 0xc7, 0xc7, 0xdc, 0xca, 0x80, 0xee, 0xf0, 0x30, 0x83, 0x99, 0x0d, 0x2b, + 0x98, 0xf4, 0xc6, 0x04, 0xb5, 0x0c, 0x79, 0x11, 0x94, 0x57, 0x9a, 0x5e, 0xcd, 0x30, 0xdf, 0x41, + 0x54, 0xf1, 0x9e, 0x9d, 0x89, 0xfb, 0x3e, 0x09, 0xda, 0xb0, 0x07, 0xe9, 0xff, 0x63, 0x38, 0x2c, + 0x67, 0x5f, 0xf8, 0x67, 0x57, 0xd1, 0xa0, 0xb4, 0x9f, 0x5d, 0x7a, 0xfe, 0x45, 0x81, 0xd9, 0xba, + 0x67, 0xde, 0x40, 0x6e, 0xfc, 0xf8, 0xaf, 0xec, 0xe7, 0x3d, 0xf0, 0xa0, 0x70, 0x0c, 0x72, 0x6d, + 0xe4, 0xda, 0xd8, 0x15, 0xd7, 0x09, 0x31, 0x52, 0x1f, 0x2a, 0xb0, 0xc8, 0x1e, 0x89, 0x63, 0xee, + 0x44, 0x27, 0x89, 0x89, 0x75, 0xf6, 0x1d, 0xb6, 0x89, 0x7e, 0xdb, 0x5b, 0x29, 0xf5, 0x91, 0x6d, + 0xbd, 0x5e, 0x19, 0x62, 0xa8, 0xfc, 0xb1, 0xb7, 0x72, 0x36, 0xe1, 0x49, 0xaa, 0xb1, 0x20, 0xcc, + 0x6f, 0x89, 0x73, 0x49, 0x65, 0x11, 0x16, 0x84, 0x4e, 0xa9, 0xfd, 0x57, 0x05, 0x0a, 0x75, 0xcf, + 0xfc, 0xd0, 0x69, 0xbf, 0x48, 0xf5, 0x8f, 0x14, 0x38, 0xd2, 0x75, 0x9e, 0x43, 0x7f, 0x5d, 0xe8, + 0xd7, 0x02, 0xfd, 0x07, 0x70, 0xa4, 0x5a, 0x81, 0x45, 0x49, 0x20, 0xd7, 0xe0, 0x08, 0x2c, 0x4a, + 0xbd, 0x72, 0x15, 0xbe, 0x57, 0xf8, 0x5b, 0x71, 0x9c, 0xdc, 0x70, 0x0c, 0xbe, 0x17, 0xfe, 0xed, + 0x67, 0xe4, 0x13, 0xb0, 0x3c, 0x24, 0x4a, 0x4a, 0xfe, 0x5d, 0x81, 0xa3, 0x72, 0x21, 0x36, 0x1c, + 0x43, 0x9e, 0x99, 0x5f, 0x82, 0x3d, 0x50, 0x86, 0x93, 0x07, 0x49, 0x0f, 0xd7, 0x66, 0xfd, 0x9b, + 0x43, 0x90, 0xa9, 0x7b, 0xa6, 0xda, 0x06, 0x88, 0xfd, 0x0b, 0x71, 0x76, 0xf4, 0x39, 0x6b, 0xe0, + 0xaf, 0x01, 0xad, 0x96, 0x10, 0x18, 0xfa, 0x8b, 0xf9, 0x61, 0x57, 0xea, 0x44, 0x7e, 0x28, 0xb5, + 0x92, 0xf9, 0x89, 0xdd, 0x01, 0xd5, 0x1e, 0x1c, 0x1e, 0xba, 0xc0, 0xaf, 0x25, 0x20, 0x89, 0xe0, + 0xda, 0x95, 0x54, 0x70, 0xe9, 0xf9, 0x13, 0x98, 0x0d, 0x6f, 0x9e, 0xff, 0x19, 0xcb, 0x20, 0x50, + 0xda, 0x85, 0x24, 0x28, 0x49, 0x7f, 0x07, 0xf2, 0x72, 0xff, 0xfe, 0x77, 0xac, 0x65, 0x08, 0xd3, + 0xd6, 0x12, 0xc1, 0xe2, 0x29, 0x8a, 0x5d, 0xd0, 0xc6, 0xa7, 0x28, 0x02, 0x4e, 0x48, 0xd1, 0xf0, + 0x2d, 0x41, 0x25, 0x30, 0x17, 0xbf, 0x21, 0x54, 0xc7, 0xda, 0xc7, 0x90, 0xda, 0xc5, 0xa4, 0xc8, + 0x78, 0x4e, 0xc2, 0x3e, 0x3b, 0x3e, 0x27, 0x02, 0x35, 0x21, 0x27, 0xfb, 0xba, 0x2a, 0x53, 0x12, + 0x3f, 0xdd, 0x8c, 0x57, 0x12, 0x43, 0x4e, 0x50, 0x72, 0xc0, 0xd1, 0x45, 0xed, 0xc2, 0xc2, 0xfe, + 0x73, 0xcb, 0x85, 0x04, 0x24, 0x12, 0xad, 0xbd, 0x92, 0x06, 0x2d, 0xdd, 0x52, 0x28, 0x0e, 0x1e, + 0x57, 0xce, 0x25, 0xa0, 0x09, 0x17, 0x73, 0x3d, 0x39, 0x56, 0x3a, 0xfc, 0x00, 0xb2, 0xbc, 0x31, + 0x9d, 0x1e, 0x6b, 0xcb, 0x20, 0xda, 0xff, 0x27, 0x42, 0x24, 0xeb, 0x6d, 0xc8, 0x89, 0xf6, 0x7f, + 0x66, 0xac, 0x51, 0x00, 0xd2, 0xce, 0x27, 0x00, 0x49, 0x6e, 0x17, 0xe6, 0xf7, 0x35, 0xd5, 0xf3, + 0x49, 0x3e, 0x6c, 0x01, 0xd6, 0x2e, 0xa7, 0x00, 0x4b, 0x9f, 0x9f, 0xc1, 0xe2, 0x70, 0x57, 0xd3, + 0x13, 0x44, 0x1d, 0xc3, 0x6b, 0xaf, 0xa6, 0xc3, 0x87, 0xce, 0x37, 0xdf, 0xdb, 0xfd, 0xb9, 0x3c, + 0xb5, 0xfb, 0xb4, 0xac, 0x3c, 0x7e, 0x5a, 0x56, 0x7e, 0x7a, 0x5a, 0x56, 0x3e, 0x7f, 0x56, 0x9e, + 0x7a, 0xfc, 0xac, 0x3c, 0xf5, 0xc3, 0xb3, 0xf2, 0xd4, 0xed, 0xcb, 0x03, 0x4d, 0x8b, 0xf1, 0xaf, + 0xd1, 0x76, 0x9b, 0xb4, 0x08, 0xb2, 0xc4, 0xb8, 0x16, 0xff, 0x87, 0x9c, 0x77, 0xb1, 0x66, 0x8e, + 0xdf, 0x35, 0x2e, 0xff, 0x19, 0x00, 0x00, 0xff, 0xff, 0x78, 0x24, 0xce, 0x28, 0xd5, 0x17, 0x00, 0x00, } From acdcac9067e9dfb0ff18d959ce418593909fdbab Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 16 Oct 2023 17:24:54 +0530 Subject: [PATCH 72/90] 20 block price feed changed to 40 --- x/bandoracle/abci.go | 4 ++-- x/bandoracle/types/params.go | 1 + x/market/abci.go | 4 ++-- x/market/types/params.go | 1 + 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/x/bandoracle/abci.go b/x/bandoracle/abci.go index 5b80f7e63..270093bc0 100644 --- a/x/bandoracle/abci.go +++ b/x/bandoracle/abci.go @@ -14,8 +14,8 @@ func BeginBlocker(ctx sdk.Context, _ abci.RequestBeginBlock, k keeper.Keeper) { block := k.GetLastBlockHeight(ctx) if block != types.Int64Zero { - // if ctx.BlockHeight()%types.Int64Twenty == types.Int64Zero && ctx.BlockHeight() != block { - if ctx.BlockHeight()%types.Int64Twenty == types.Int64Zero { + // if ctx.BlockHeight()%types.Int64Forty == types.Int64Zero && ctx.BlockHeight() != block { + if ctx.BlockHeight()%types.Int64Forty == types.Int64Zero { if !k.GetCheckFlag(ctx) { msg := k.GetFetchPriceMsg(ctx) _, err := k.FetchPrice(ctx, msg) diff --git a/x/bandoracle/types/params.go b/x/bandoracle/types/params.go index 77bff3522..4fdcb7707 100644 --- a/x/bandoracle/types/params.go +++ b/x/bandoracle/types/params.go @@ -7,6 +7,7 @@ import ( var _ paramtypes.ParamSet = (*Params)(nil) const ( + Int64Forty = int64(40) Int64Twenty = int64(20) Int64TwentyOne = int64(21) Int64One = int64(1) diff --git a/x/market/abci.go b/x/market/abci.go index f94063ab3..4cfdfdc47 100644 --- a/x/market/abci.go +++ b/x/market/abci.go @@ -17,8 +17,8 @@ func BeginBlocker(ctx sdk.Context, _ abci.RequestBeginBlock, k keeper.Keeper, ba if bandKeeper.GetOracleValidationResult(ctx) { block := bandKeeper.GetLastBlockHeight(ctx) if block != types.Int64Zero { - // if ctx.BlockHeight()%types.Int64Twenty == types.Int64Zero && ctx.BlockHeight() != block && bandKeeper.GetCheckFlag(ctx) { - if ctx.BlockHeight()%types.Int64Twenty == types.Int64Zero { + // if ctx.BlockHeight()%types.Int64Forty == types.Int64Zero && ctx.BlockHeight() != block && bandKeeper.GetCheckFlag(ctx) { + if ctx.BlockHeight()%types.Int64Forty == types.Int64Zero { discardData := bandKeeper.GetDiscardData(ctx) if discardData.DiscardBool { allTwa := k.GetAllTwa(ctx) diff --git a/x/market/types/params.go b/x/market/types/params.go index 64a21c639..e5db92736 100644 --- a/x/market/types/params.go +++ b/x/market/types/params.go @@ -7,6 +7,7 @@ import ( var _ paramstypes.ParamSet = (*Params)(nil) const ( + Int64Forty = int64(40) Int64Twenty = int64(20) Int64TwentyOne = int64(21) Int64Ten = int64(10) From a911ff6efdbcbfc344cc01b177db3cc5618748f2 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Tue, 17 Oct 2023 23:26:21 +0530 Subject: [PATCH 73/90] ibc client fix --- app/app.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/app.go b/app/app.go index 5b962996d..8342d97a6 100644 --- a/app/app.go +++ b/app/app.go @@ -44,6 +44,7 @@ import ( icahostkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper" icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" + ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/cosmos/cosmos-sdk/baseapp" @@ -286,6 +287,7 @@ var ( slashing.AppModuleBasic{}, authzmodule.AppModuleBasic{}, ibc.AppModuleBasic{}, + ibctm.AppModuleBasic{}, upgrade.AppModuleBasic{}, evidence.AppModuleBasic{}, ibctransfer.AppModuleBasic{}, From 300b56fb188dd817c4fa770063b2b43c7c5dfea6 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 19 Oct 2023 14:04:14 +0530 Subject: [PATCH 74/90] refactored app.go --- app/app.go | 236 ++++++++++++++++++++++------------------------------- 1 file changed, 99 insertions(+), 137 deletions(-) diff --git a/app/app.go b/app/app.go index 8342d97a6..3845a41fd 100644 --- a/app/app.go +++ b/app/app.go @@ -24,15 +24,6 @@ import ( consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" - // bump47: uncomment below 3 - // ibcratelimit "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit" - // "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/ibcratelimitmodule" - // ibcratelimittypes "github.com/osmosis-labs/osmosis/v15/x/ibc-rate-limit/types" - - // ibcratelimit "github.com/comdex-official/comdex/x/ibcratelimit" - // "github.com/comdex-official/comdex/x/ibcratelimit/ibcratelimitmodule" - // ibcratelimittypes "github.com/comdex-official/comdex/x/ibcratelimit/types" - packetforward "github.com/strangelove-ventures/packet-forward-middleware/v7/router" packetforwardkeeper "github.com/strangelove-ventures/packet-forward-middleware/v7/router/keeper" packetforwardtypes "github.com/strangelove-ventures/packet-forward-middleware/v7/router/types" @@ -109,6 +100,9 @@ import ( upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + ibcfee "github.com/cosmos/ibc-go/v7/modules/apps/29-fee" + ibcfeekeeper "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/keeper" + ibcfeetypes "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types" ibctransfer "github.com/cosmos/ibc-go/v7/modules/apps/transfer" ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" @@ -309,10 +303,10 @@ var ( liquidity.AppModuleBasic{}, rewards.AppModuleBasic{}, ica.AppModuleBasic{}, + ibcfee.AppModuleBasic{}, liquidationsV2.AppModuleBasic{}, auctionsV2.AppModuleBasic{}, ibchooks.AppModuleBasic{}, - // ibcratelimitmodule.AppModuleBasic{}, packetforward.AppModuleBasic{}, ) ) @@ -362,6 +356,7 @@ type App struct { UpgradeKeeper *upgradekeeper.Keeper ParamsKeeper paramskeeper.Keeper IbcKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + IBCFeeKeeper ibcfeekeeper.Keeper IbcHooksKeeper *ibchookskeeper.Keeper ICAHostKeeper icahostkeeper.Keeper EvidenceKeeper evidencekeeper.Keeper @@ -395,13 +390,10 @@ type App struct { // IBC modules // transfer module - RawIcs20TransferAppModule ibctransfer.AppModule - // RateLimitingICS4Wrapper *ibcratelimit.ICS4Wrapper - TransferStack *ibchooks.IBCMiddleware - Ics20WasmHooks *ibchooks.WasmHooks - HooksICS4Wrapper ibchooks.ICS4Middleware - PacketForwardKeeper *packetforwardkeeper.Keeper - ICQKeeper *icqkeeper.Keeper + Ics20WasmHooks *ibchooks.WasmHooks + HooksICS4Wrapper ibchooks.ICS4Middleware + PacketForwardKeeper *packetforwardkeeper.Keeper + ICQKeeper *icqkeeper.Keeper ConsensusParamsKeeper consensusparamkeeper.Keeper @@ -436,7 +428,7 @@ func New( authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, icahosttypes.StoreKey, upgradetypes.StoreKey, - evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey, + evidencetypes.StoreKey, ibctransfertypes.StoreKey, ibcfeetypes.StoreKey, capabilitytypes.StoreKey, vaulttypes.StoreKey, assettypes.StoreKey, collectortypes.StoreKey, liquidationtypes.StoreKey, markettypes.StoreKey, bandoraclemoduletypes.StoreKey, lockertypes.StoreKey, wasm.StoreKey, authzkeeper.StoreKey, auctiontypes.StoreKey, tokenminttypes.StoreKey, @@ -496,7 +488,6 @@ func New( app.ParamsKeeper.Subspace(rewardstypes.ModuleName) app.ParamsKeeper.Subspace(liquidationsV2types.ModuleName) app.ParamsKeeper.Subspace(auctionsV2types.ModuleName) - // app.ParamsKeeper.Subspace(ibcratelimittypes.ModuleName) app.ParamsKeeper.Subspace(icqtypes.ModuleName) app.ParamsKeeper.Subspace(packetforwardtypes.ModuleName).WithKeyTable(packetforwardtypes.ParamKeyTable()) @@ -520,7 +511,7 @@ func New( var ( scopedIBCKeeper = app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName) scopedTransferKeeper = app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) - scopedIBCOracleKeeper = app.CapabilityKeeper.ScopeToModule(markettypes.ModuleName) + scopedIBCOracleKeeper = app.CapabilityKeeper.ScopeToModule(markettypes.ModuleName) // can remove it scopedWasmKeeper = app.CapabilityKeeper.ScopeToModule(wasm.ModuleName) scopedICAHostKeeper = app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) scopedBandoracleKeeper = app.CapabilityKeeper.ScopeToModule(bandoraclemoduletypes.ModuleName) @@ -629,12 +620,56 @@ func New( ) app.IbcHooksKeeper = &hooksKeeper - app.WireICS20PreWasmKeeper(appCodec, baseApp, app.IbcHooksKeeper, scopedTransferKeeper) + cmdxPrefix := sdk.GetConfig().GetBech32AccountAddrPrefix() + wasmHooks := ibchooks.NewWasmHooks(app.IbcHooksKeeper, &app.WasmKeeper, cmdxPrefix) // The contract keeper needs to be set later + app.Ics20WasmHooks = &wasmHooks + app.HooksICS4Wrapper = ibchooks.NewICS4Middleware( + app.IbcKeeper.ChannelKeeper, + app.Ics20WasmHooks, + ) + + // Do not use this middleware for anything except x/wasm requirement. + // The spec currently requires new channels to be created, to use it. + // We need to wait for Channel Upgradability before we can use this for any other middleware. + app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( + appCodec, + app.keys[ibcfeetypes.StoreKey], + app.HooksICS4Wrapper, // replaced with IBC middleware + app.IbcKeeper.ChannelKeeper, + &app.IbcKeeper.PortKeeper, + app.AccountKeeper, + app.BankKeeper, + ) + + app.PacketForwardKeeper = packetforwardkeeper.NewKeeper( + appCodec, + app.keys[packetforwardtypes.StoreKey], + app.GetSubspace(packetforwardtypes.ModuleName), + app.IbcTransferKeeper, // Will be zero-value here. Reference is set later on with SetTransferKeeper. + app.IbcKeeper.ChannelKeeper, + app.DistrKeeper, + app.BankKeeper, + app.IbcKeeper.ChannelKeeper, + ) + + app.IbcTransferKeeper = ibctransferkeeper.NewKeeper( + appCodec, + app.keys[ibctransfertypes.StoreKey], + app.GetSubspace(ibctransfertypes.ModuleName), + app.PacketForwardKeeper, + app.IbcKeeper.ChannelKeeper, + &app.IbcKeeper.PortKeeper, + app.AccountKeeper, + app.BankKeeper, + scopedTransferKeeper, + ) + + app.PacketForwardKeeper.SetTransferKeeper(app.IbcTransferKeeper) app.ICAHostKeeper = icahostkeeper.NewKeeper( appCodec, app.keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), - app.IbcKeeper.ChannelKeeper, // ICS4Wrapper + app.HooksICS4Wrapper, app.IbcKeeper.ChannelKeeper, &app.IbcKeeper.PortKeeper, app.AccountKeeper, @@ -642,7 +677,6 @@ func New( app.MsgServiceRouter(), ) - icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) app.AssetKeeper = assetkeeper.NewKeeper( app.cdc, app.keys[assettypes.StoreKey], @@ -870,7 +904,7 @@ func New( if err != nil { panic(fmt.Sprintf("error while reading wasm config: %s", err)) } - supportedFeatures := "iterator,staking,stargate,comdex,cosmwasm_1_1,cosmwasm_1_2" + supportedFeatures := "iterator,staking,stargate,comdex,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_3" //TODO: cosmwasm_1_3 juno has added but its not there in wasmd changelog wasmOpts = append(cwasm.RegisterCustomPlugins(&app.LockerKeeper, &app.TokenmintKeeper, &app.AssetKeeper, &app.Rewardskeeper, &app.CollectorKeeper, &app.LiquidationKeeper, &app.AuctionKeeper, &app.EsmKeeper, &app.VaultKeeper, &app.LendKeeper, &app.LiquidityKeeper, &app.MarketKeeper), wasmOpts...) @@ -881,7 +915,7 @@ func New( app.BankKeeper, app.StakingKeeper, distrkeeper.NewQuerier(app.DistrKeeper), - app.IbcKeeper.ChannelKeeper, // ICS4Wrapper + app.IBCFeeKeeper, app.IbcKeeper.ChannelKeeper, &app.IbcKeeper.PortKeeper, scopedWasmKeeper, @@ -895,10 +929,9 @@ func New( wasmOpts..., ) - // Pass the contract keeper to all the structs (generally ICS4Wrappers for ibc middlewares) that need it - // app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) - // app.RateLimitingICS4Wrapper.ContractKeeper = app.ContractKeeper - // app.Ics20WasmHooks.ContractKeeper = &app.WasmKeeper + // set the contract keeper for the Ics20WasmHooks + app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) + app.Ics20WasmHooks.ContractKeeper = &app.WasmKeeper // register the proposal types govRouter := govtypesv1beta1.NewRouter() @@ -926,30 +959,41 @@ func New( govKeeper.SetLegacyRouter(govRouter) app.GovKeeper = *govKeeper - // app.GovKeeper = govkeeper.NewKeeper( - // app.cdc, - // app.keys[govtypes.StoreKey], - // app.GetSubspace(govtypes.ModuleName), - // app.AccountKeeper, - // app.BankKeeper, - // &stakingKeeper, - // govRouter, - // ) + // Create Transfer Stack + var transferStack ibcporttypes.IBCModule + transferStack = ibctransfer.NewIBCModule(app.IbcTransferKeeper) + transferStack = ibcfee.NewIBCMiddleware(transferStack, app.IBCFeeKeeper) + transferStack = ibchooks.NewIBCMiddleware(transferStack, &app.HooksICS4Wrapper) + transferStack = packetforward.NewIBCMiddleware( + transferStack, + app.PacketForwardKeeper, + 0, + packetforwardkeeper.DefaultForwardTransferPacketTimeoutTimestamp, + packetforwardkeeper.DefaultRefundTransferPacketTimeoutTimestamp, + ) var ( - evidenceRouter = evidencetypes.NewRouter() - ibcRouter = ibcporttypes.NewRouter() - // transferModule = ibctransfer.NewAppModule(app.IbcTransferKeeper) - // transferIBCModule = ibctransfer.NewIBCModule(app.IbcTransferKeeper) + evidenceRouter = evidencetypes.NewRouter() + ibcRouter = ibcporttypes.NewRouter() oracleModule = market.NewAppModule(app.cdc, app.MarketKeeper, app.BandoracleKeeper, app.AssetKeeper) bandOracleIBCModule = bandoraclemodule.NewIBCModule(app.BandoracleKeeper) ) - // ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferIBCModule) - ibcRouter.AddRoute(ibctransfertypes.ModuleName, app.TransferStack) + // RecvPacket, message that originates from core IBC and goes down to app, the flow is: + // channel.RecvPacket -> fee.OnRecvPacket -> icaHost.OnRecvPacket + var icaHostStack ibcporttypes.IBCModule + icaHostStack = icahost.NewIBCModule(app.ICAHostKeeper) + icaHostStack = ibcfee.NewIBCMiddleware(icaHostStack, app.IBCFeeKeeper) + + // Create fee enabled wasm ibc Stack + var wasmStack ibcporttypes.IBCModule + wasmStack = wasm.NewIBCHandler(app.WasmKeeper, app.IbcKeeper.ChannelKeeper, app.IBCFeeKeeper) + wasmStack = ibcfee.NewIBCMiddleware(wasmStack, app.IBCFeeKeeper) + + ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack) ibcRouter.AddRoute(bandoraclemoduletypes.ModuleName, bandOracleIBCModule) - ibcRouter.AddRoute(wasm.ModuleName, wasm.NewIBCHandler(app.WasmKeeper, app.IbcKeeper.ChannelKeeper, app.IbcKeeper.ChannelKeeper)) - ibcRouter.AddRoute(icahosttypes.SubModuleName, icaHostIBCModule) + ibcRouter.AddRoute(wasm.ModuleName, wasmStack) + ibcRouter.AddRoute(icahosttypes.SubModuleName, icaHostStack) ibcRouter.AddRoute(icqtypes.ModuleName, icqModule) app.IbcKeeper.SetRouter(ibcRouter) // Create evidence Keeper for to register the IBC light client misbehaviour evidence route @@ -978,7 +1022,7 @@ func New( capability.NewAppModule(app.cdc, *app.CapabilityKeeper, false), crisis.NewAppModule(app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), gov.NewAppModule(app.cdc, &app.GovKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(govtypes.ModuleName)), - mint.NewAppModule(app.cdc, app.MintKeeper, app.AccountKeeper, nil, app.GetSubspace(minttypes.ModuleName)), + mint.NewAppModule(app.cdc, app.MintKeeper, app.AccountKeeper, nil, app.GetSubspace(minttypes.ModuleName)), // nil -> SDK's default inflation function. slashing.NewAppModule(app.cdc, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName)), distr.NewAppModule(app.cdc, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)), staking.NewAppModule(app.cdc, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)), @@ -986,9 +1030,11 @@ func New( evidence.NewAppModule(app.EvidenceKeeper), authzmodule.NewAppModule(app.cdc, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), ibc.NewAppModule(app.IbcKeeper), + ibcfee.NewAppModule(app.IBCFeeKeeper), ica.NewAppModule(nil, &app.ICAHostKeeper), params.NewAppModule(app.ParamsKeeper), - app.RawIcs20TransferAppModule, + // app.RawIcs20TransferAppModule, + ibctransfer.NewAppModule(app.IbcTransferKeeper), asset.NewAppModule(app.cdc, app.AssetKeeper), vault.NewAppModule(app.cdc, app.VaultKeeper), oracleModule, @@ -1005,7 +1051,6 @@ func New( rewards.NewAppModule(app.cdc, app.Rewardskeeper, app.AccountKeeper, app.BankKeeper), liquidationsV2.NewAppModule(app.cdc, app.NewliqKeeper, app.AccountKeeper, app.BankKeeper), auctionsV2.NewAppModule(app.cdc, app.NewaucKeeper, app.BankKeeper), - // ibcratelimitmodule.NewAppModule(*app.RateLimitingICS4Wrapper), ibchooks.NewAppModule(app.AccountKeeper), icq.NewAppModule(*app.ICQKeeper), packetforward.NewAppModule(app.PacketForwardKeeper), @@ -1051,10 +1096,10 @@ func New( esmtypes.ModuleName, liquidationsV2types.ModuleName, auctionsV2types.ModuleName, - // ibcratelimittypes.ModuleName, ibchookstypes.ModuleName, icqtypes.ModuleName, packetforwardtypes.ModuleName, + ibcfeetypes.ModuleName, consensusparamtypes.ModuleName, ) @@ -1094,10 +1139,10 @@ func New( esmtypes.ModuleName, liquidationsV2types.ModuleName, auctionsV2types.ModuleName, - // ibcratelimittypes.ModuleName, ibchookstypes.ModuleName, icqtypes.ModuleName, packetforwardtypes.ModuleName, + ibcfeetypes.ModuleName, consensusparamtypes.ModuleName, ) @@ -1141,10 +1186,10 @@ func New( crisistypes.ModuleName, liquidationsV2types.ModuleName, auctionsV2types.ModuleName, - // ibcratelimittypes.ModuleName, ibchookstypes.ModuleName, icqtypes.ModuleName, packetforwardtypes.ModuleName, + ibcfeetypes.ModuleName, consensusparamtypes.ModuleName, ) @@ -1228,91 +1273,6 @@ func New( return app } -// WireICS20PreWasmKeeper Create the IBC Transfer Stack from bottom to top: -// -// * SendPacket. Originates from the transferKeeper and goes up the stack: -// transferKeeper.SendPacket -> ibc_rate_limit.SendPacket -> ibc_hooks.SendPacket -> channel.SendPacket -// * RecvPacket, message that originates from core IBC and goes down to app, the flow is the other way -// channel.RecvPacket -> ibc_hooks.OnRecvPacket -> ibc_rate_limit.OnRecvPacket -> forward.OnRecvPacket -> transfer.OnRecvPacket -// -// Note that the forward middleware is only integrated on the "reveive" direction. It can be safely skipped when sending. -// Note also that the forward middleware is called "router", but we are using the name "forward" for clarity -// This may later be renamed upstream: https://github.com/strangelove-ventures/packet-forward-middleware/issues/10 -// -// After this, the wasm keeper is required to be set on both -// a.WasmHooks AND a.RateLimitingICS4Wrapper -func (a *App) WireICS20PreWasmKeeper( - appCodec codec.Codec, - bApp *baseapp.BaseApp, - hooksKeeper *ibchookskeeper.Keeper, - scopedTransferKeeper capabilitykeeper.ScopedKeeper, -) { - // Setup the ICS4Wrapper used by the hooks middleware - cmdxPrefix := sdk.GetConfig().GetBech32AccountAddrPrefix() - wasmHooks := ibchooks.NewWasmHooks(hooksKeeper, nil, cmdxPrefix) // The contract keeper needs to be set later - a.Ics20WasmHooks = &wasmHooks - a.HooksICS4Wrapper = ibchooks.NewICS4Middleware( - a.IbcKeeper.ChannelKeeper, - a.Ics20WasmHooks, - ) - - // ChannelKeeper wrapper for rate limiting SendPacket(). The wasmKeeper needs to be added after it's created - // rateLimitingICS4Wrapper := ibcratelimit.NewICS4Middleware( - // a.HooksICS4Wrapper, - // &a.AccountKeeper, - // // wasm keeper we set later. - // nil, - // a.BankBaseKeeper, - // a.GetSubspace(ibcratelimittypes.ModuleName), - // ) - // a.RateLimitingICS4Wrapper = &rateLimitingICS4Wrapper - - // Create Transfer Keepers - transferKeeper := ibctransferkeeper.NewKeeper( - appCodec, - a.keys[ibctransfertypes.StoreKey], - a.GetSubspace(ibctransfertypes.ModuleName), - // The ICS4Wrapper is replaced by the rateLimitingICS4Wrapper instead of the channel - // a.RateLimitingICS4Wrapper, - a.PacketForwardKeeper, - a.IbcKeeper.ChannelKeeper, - &a.IbcKeeper.PortKeeper, - a.AccountKeeper, - a.BankKeeper, - scopedTransferKeeper, - ) - a.IbcTransferKeeper = transferKeeper - a.RawIcs20TransferAppModule = ibctransfer.NewAppModule(a.IbcTransferKeeper) - // Packet Forward Middleware - // Initialize packet forward middleware router - a.PacketForwardKeeper = packetforwardkeeper.NewKeeper( - appCodec, - a.keys[packetforwardtypes.StoreKey], - a.GetSubspace(packetforwardtypes.ModuleName), - a.IbcTransferKeeper, - a.IbcKeeper.ChannelKeeper, - a.DistrKeeper, - a.BankKeeper, - // The ICS4Wrapper is replaced by the HooksICS4Wrapper instead of the channel so that sending can be overridden by the middleware - a.HooksICS4Wrapper, - ) - a.PacketForwardKeeper.SetTransferKeeper(transferKeeper) - packetForwardMiddleware := packetforward.NewIBCMiddleware( - ibctransfer.NewIBCModule(a.IbcTransferKeeper), - a.PacketForwardKeeper, - 0, - packetforwardkeeper.DefaultForwardTransferPacketTimeoutTimestamp, - packetforwardkeeper.DefaultRefundTransferPacketTimeoutTimestamp, - ) - - // RateLimiting IBC Middleware - // rateLimitingTransferModule := ibcratelimit.NewIBCModule(packetForwardMiddleware, a.RateLimitingICS4Wrapper) - - // Hooks Middleware - hooksTransferModule := ibchooks.NewIBCMiddleware(&packetForwardMiddleware, &a.HooksICS4Wrapper) - a.TransferStack = &hooksTransferModule -} - // Name returns the name of the App func (a *App) Name() string { return a.BaseApp.Name() } @@ -1487,6 +1447,7 @@ func (a *App) ModuleAccountsPermissions() map[string][]string { liquidationsV2types.ModuleName: {authtypes.Minter, authtypes.Burner}, auctionsV2types.ModuleName: {authtypes.Minter, authtypes.Burner}, icatypes.ModuleName: nil, + ibcfeetypes.ModuleName: nil, assettypes.ModuleName: nil, icqtypes.ModuleName: nil, } @@ -1540,6 +1501,7 @@ func upgradeHandlers(upgradeInfo upgradetypes.Plan, a *App, storeUpgrades *store Added: []string{ crisistypes.StoreKey, consensusparamtypes.StoreKey, + ibcfeetypes.StoreKey, }, } } From 8dbf8f81cc9a5679515b213a2919604111bc828a Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 19 Oct 2023 14:04:47 +0530 Subject: [PATCH 75/90] upgrade refactored --- app/upgrades/testnet/v13/upgrades.go | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/app/upgrades/testnet/v13/upgrades.go b/app/upgrades/testnet/v13/upgrades.go index adeed5657..0b1e69ac9 100644 --- a/app/upgrades/testnet/v13/upgrades.go +++ b/app/upgrades/testnet/v13/upgrades.go @@ -4,7 +4,6 @@ import ( "fmt" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" - bandoraclemoduletypes "github.com/comdex-official/comdex/x/bandoracle/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" storetypes "github.com/cosmos/cosmos-sdk/store/types" @@ -19,9 +18,9 @@ import ( slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - icacontrollermigrations "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/migrations/v6" exported "github.com/cosmos/ibc-go/v7/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + ibctmmigrations "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/migrations" ) func CreateUpgradeHandlerV13( @@ -49,19 +48,23 @@ func CreateUpgradeHandlerV13( legacyParamSubspace := paramsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable()) baseapp.MigrateParams(ctx, legacyParamSubspace, &consensusParamsKeeper) + // ibc v4-to-v5 + // https://github.com/cosmos/ibc-go/blob/v7.1.0/docs/migrations/v4-to-v5.md + // -- nothing -- + // TODO: check if v5-v6 is required ?? - ctx.Logger().Info("Migrating ICA channel capabilities for ibc-go v5 to v6 migration...") - if err := icacontrollermigrations.MigrateICS27ChannelCapability( - ctx, - cdc, - capabilityStoreKey, - capabilityKeeper, - bandoraclemoduletypes.ModuleName, - ); err != nil { + // https://github.com/cosmos/ibc-go/blob/v7.1.0/docs/migrations/v5-to-v6.md + + // ibc v6-to-v7 + // https://github.com/cosmos/ibc-go/blob/v7.1.0/docs/migrations/v6-to-v7.md#chains + // (optional) prune expired tendermint consensus states to save storage space + ctx.Logger().Info("Pruning expired tendermint consensus states...") + if _, err := ibctmmigrations.PruneExpiredConsensusStates(ctx, cdc, IBCKeeper.ClientKeeper); err != nil { return nil, err } - // https://github.com/cosmos/ibc-go/blob/v7.1.0/docs/migrations/v7-to-v7_1.md + // ibc v7-to-v7.1 + // https://github.com/cosmos/ibc-go/blob/v7.1.0/docs/migrations/v7-to-v7_1.md#09-localhost-migration // explicitly update the IBC 02-client params, adding the localhost client type params := IBCKeeper.ClientKeeper.GetParams(ctx) params.AllowedClients = append(params.AllowedClients, exported.Localhost) From 811cf6f4174be5f2f697b82eb287c7edd1fadf11 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 19 Oct 2023 14:05:49 +0530 Subject: [PATCH 76/90] ibc changed to v7.2.0 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index ebbb73fdb..52fb12a2b 100644 --- a/go.mod +++ b/go.mod @@ -28,7 +28,7 @@ require ( ) require ( - github.com/cosmos/ibc-go/v7 v7.3.0 + github.com/cosmos/ibc-go/v7 v7.2.0 github.com/cosmos/ics23/go v0.10.0 // indirect github.com/golangci/golangci-lint v1.51.2 github.com/rakyll/statik v0.1.7 diff --git a/go.sum b/go.sum index 2c10df44f..8e3f444a3 100644 --- a/go.sum +++ b/go.sum @@ -498,8 +498,8 @@ github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.0.0-20230726182236-3a9d46a7c2 github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4 h1:NuFmpHnENcTtZDEQf2vZzZluk5rQl3f7J4tqo9FlH/c= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= github.com/cosmos/ibc-go v1.0.0/go.mod h1:2wHKQUa+BLJMEyN635KrHfmTTwSNHBtXcqdY8JWGuXA= -github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= -github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= +github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= +github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= From 61b8b8ca640611b44853ee077b59c73ba3f5380c Mon Sep 17 00:00:00 2001 From: Pratik Date: Fri, 20 Oct 2023 10:58:43 +0530 Subject: [PATCH 77/90] updated logic for removing bad debt from commodo --- app/upgrades/mainnet/v12/upgrades.go | 56 +--------------------------- x/lend/expected/keeper.go | 9 ++++- x/lend/keeper/keeper.go | 53 ++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 56 deletions(-) diff --git a/app/upgrades/mainnet/v12/upgrades.go b/app/upgrades/mainnet/v12/upgrades.go index f1b85e06e..91a06b3bf 100644 --- a/app/upgrades/mainnet/v12/upgrades.go +++ b/app/upgrades/mainnet/v12/upgrades.go @@ -5,7 +5,6 @@ import ( assetkeeper "github.com/comdex-official/comdex/x/asset/keeper" assettypes "github.com/comdex-official/comdex/x/asset/types" auctionkeeperold "github.com/comdex-official/comdex/x/auction/keeper" - auctiontypes "github.com/comdex-official/comdex/x/auction/types" auctionkeeper "github.com/comdex-official/comdex/x/auctionsV2/keeper" auctionsV2types "github.com/comdex-official/comdex/x/auctionsV2/types" collectorkeeper "github.com/comdex-official/comdex/x/collector/keeper" @@ -55,7 +54,7 @@ func CreateUpgradeHandlerV12( UpdateLendParams(ctx, lendKeeper, assetKeeper) InitializeStates(ctx, liquidationKeeper, auctionKeeper) //Refund(ctx, bankKeeper, collectorKeeper) - RemoveFaultyAuctions(ctx, lendKeeper, auctionKeeperOld, liquidationKeeperOld, bankKeeper) + //RemoveFaultyAuctions(ctx, lendKeeper, auctionKeeperOld, liquidationKeeperOld, bankKeeper) return vm, err } } @@ -192,59 +191,6 @@ func InitializeStates( } -func RemoveFaultyAuctions( - ctx sdk.Context, - lendKeeper lendkeeper.Keeper, - auctionKeeper auctionkeeperold.Keeper, - liquidationKeeper liquidationkeeperold.Keeper, - bankKeeper bankkeeper.Keeper, -) { - //Send Inflow_token_target_amount to the pool - //Subtract Inflow_token_target_amount from borrow Position - //Add the Borrowed amount in poolLBMapping - //Delete Auction - //Update BorrowPosition Is liquidated -> false - - // get all the current auctions - dutchAuctions := auctionKeeper.GetDutchLendAuctions(ctx, 3) - for _, dutchAuction := range dutchAuctions { - cPoolModuleName := lendtypes.ModuleAcc1 - reserveModuleName := lendtypes.ModuleName - //send debt from reserve to the pool - err := bankKeeper.SendCoinsFromModuleToModule(ctx, reserveModuleName, cPoolModuleName, sdk.NewCoins(dutchAuction.InflowTokenTargetAmount)) - if err != nil { - fmt.Println(err) - } - //send collateral to the reserve from auction module outflow_token_current_amount - err = bankKeeper.SendCoinsFromModuleToModule(ctx, auctiontypes.ModuleName, reserveModuleName, sdk.NewCoins(dutchAuction.OutflowTokenCurrentAmount)) - if err != nil { - fmt.Println(err) - } - - borrowPos := lendKeeper.GetBorrowByUserAndAssetID(ctx, dutchAuction.VaultOwner.String(), dutchAuction.InflowTokenTargetAmount.Denom, dutchAuction.AssetOutId) - borrowPos.AmountOut.Amount = borrowPos.AmountOut.Amount.Sub(dutchAuction.InflowTokenTargetAmount.Amount) - borrowPos.IsLiquidated = false - lendKeeper.SetBorrow(ctx, borrowPos) - - poolAssetLBMappingData, _ := lendKeeper.GetAssetStatsByPoolIDAndAssetID(ctx, 1, dutchAuction.AssetInId) - - poolAssetLBMappingData.TotalBorrowed = poolAssetLBMappingData.TotalBorrowed.Add(borrowPos.AmountOut.Amount) - lendKeeper.SetAssetStatsByPoolIDAndAssetID(ctx, poolAssetLBMappingData) - lockedVault, found := liquidationKeeper.GetLockedVault(ctx, 3, dutchAuction.LockedVaultId) - if found { - liquidationKeeper.DeleteLockedVault(ctx, lockedVault.AppId, lockedVault.LockedVaultId) - } - err = auctionKeeper.SetHistoryDutchLendAuction(ctx, dutchAuction) - if err != nil { - fmt.Println(err) - } - err = auctionKeeper.DeleteDutchLendAuction(ctx, dutchAuction) - if err != nil { - fmt.Println(err) - } - } -} - func newDec(i string) sdk.Dec { dec, _ := sdk.NewDecFromStr(i) return dec diff --git a/x/lend/expected/keeper.go b/x/lend/expected/keeper.go index fd82cae2c..b375eb935 100644 --- a/x/lend/expected/keeper.go +++ b/x/lend/expected/keeper.go @@ -1,6 +1,7 @@ package expected import ( + auctiontypes "github.com/comdex-official/comdex/x/auction/types" "github.com/comdex-official/comdex/x/liquidation/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -51,6 +52,12 @@ type EsmKeeper interface { type LiquidationKeeper interface { GetLockedVaultByApp(ctx sdk.Context, appID uint64) (lockedVault []types.LockedVault) + GetLockedVault(ctx sdk.Context, appID, id uint64) (lockedVault types.LockedVault, found bool) + DeleteLockedVault(ctx sdk.Context, appID, id uint64) } -type AuctionKeeper interface{} +type AuctionKeeper interface { + GetDutchLendAuctions(ctx sdk.Context, appID uint64) (auctions []auctiontypes.DutchAuction) + SetHistoryDutchLendAuction(ctx sdk.Context, auction auctiontypes.DutchAuction) error + DeleteDutchLendAuction(ctx sdk.Context, auction auctiontypes.DutchAuction) error +} diff --git a/x/lend/keeper/keeper.go b/x/lend/keeper/keeper.go index 6d36c0cf6..ff09f8d0c 100644 --- a/x/lend/keeper/keeper.go +++ b/x/lend/keeper/keeper.go @@ -2,6 +2,7 @@ package keeper import ( "fmt" + auctiontypes "github.com/comdex-official/comdex/x/auction/types" "strconv" liquidationtypes "github.com/comdex-official/comdex/x/liquidation/types" @@ -1609,7 +1610,59 @@ func (k Keeper) FundReserveAcc(ctx sdk.Context, assetID uint64, lender string, p } resBals.FundReserveBalance = append(resBals.FundReserveBalance, resBal) k.SetFundReserveBal(ctx, resBals) + err = k.RemoveFaultyAuctions(ctx) + if err != nil { + return err + } + + return nil +} + +func (k Keeper) RemoveFaultyAuctions(ctx sdk.Context) error { + //Send Inflow_token_target_amount to the pool + //Subtract Inflow_token_target_amount from borrow Position + //Add the Borrowed amount in poolLBMapping + //Delete Auction + //Update BorrowPosition Is liquidated -> false + + // get all the current auctions + dutchAuctions := k.Auction.GetDutchLendAuctions(ctx, 3) + for _, dutchAuction := range dutchAuctions { + cPoolModuleName := types.ModuleAcc1 + reserveModuleName := types.ModuleName + //send debt from reserve to the pool + err := k.bank.SendCoinsFromModuleToModule(ctx, reserveModuleName, cPoolModuleName, sdk.NewCoins(dutchAuction.InflowTokenTargetAmount)) + if err != nil { + return err + } + //send collateral to the reserve from auction module outflow_token_current_amount + err = k.bank.SendCoinsFromModuleToModule(ctx, auctiontypes.ModuleName, reserveModuleName, sdk.NewCoins(dutchAuction.OutflowTokenCurrentAmount)) + if err != nil { + return err + } + borrowPos := k.GetBorrowByUserAndAssetID(ctx, dutchAuction.VaultOwner.String(), dutchAuction.InflowTokenTargetAmount.Denom, dutchAuction.AssetOutId) + borrowPos.AmountOut.Amount = borrowPos.AmountOut.Amount.Sub(dutchAuction.InflowTokenTargetAmount.Amount) + borrowPos.IsLiquidated = false + k.SetBorrow(ctx, borrowPos) + + poolAssetLBMappingData, _ := k.GetAssetStatsByPoolIDAndAssetID(ctx, 1, dutchAuction.AssetInId) + + poolAssetLBMappingData.TotalBorrowed = poolAssetLBMappingData.TotalBorrowed.Add(borrowPos.AmountOut.Amount) + k.SetAssetStatsByPoolIDAndAssetID(ctx, poolAssetLBMappingData) + lockedVault, found := k.Liquidation.GetLockedVault(ctx, 3, dutchAuction.LockedVaultId) + if found { + k.Liquidation.DeleteLockedVault(ctx, lockedVault.AppId, lockedVault.LockedVaultId) + } + err = k.Auction.SetHistoryDutchLendAuction(ctx, dutchAuction) + if err != nil { + return err + } + err = k.Auction.DeleteDutchLendAuction(ctx, dutchAuction) + if err != nil { + return err + } + } return nil } From 3831922448e13f0eb278ac4d644c854824c135f8 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Tue, 24 Oct 2023 22:43:54 +0530 Subject: [PATCH 78/90] upgrade test-case added --- app/test_suite.go | 314 +++++++++++++++++++++++ app/upgrades/testnet/v13/upgrade_test.go | 64 +++++ 2 files changed, 378 insertions(+) create mode 100644 app/test_suite.go create mode 100644 app/upgrades/testnet/v13/upgrade_test.go diff --git a/app/test_suite.go b/app/test_suite.go new file mode 100644 index 000000000..bf171433e --- /dev/null +++ b/app/test_suite.go @@ -0,0 +1,314 @@ +package app + +import ( + "encoding/json" + "fmt" + "testing" + "time" + + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" + + dbm "github.com/cometbft/cometbft-db" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/crypto/ed25519" + "github.com/cometbft/cometbft/libs/log" + tmtypes "github.com/cometbft/cometbft/proto/tendermint/types" + + "cosmossdk.io/math" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + "github.com/cosmos/cosmos-sdk/store/rootmulti" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/tx/signing" + authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" + "github.com/cosmos/cosmos-sdk/x/authz" + authzcodec "github.com/cosmos/cosmos-sdk/x/authz/codec" + banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" + distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" + slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + + // "github.com/comdex-official/comdex/app" +) + +type KeeperTestHelper struct { + suite.Suite + + App *App + Ctx sdk.Context + QueryHelper *baseapp.QueryServiceTestHelper + TestAccs []sdk.AccAddress +} + +// Setup sets up basic environment for suite (App, Ctx, and test accounts) +func (s *KeeperTestHelper) Setup() { + t := s.T() + s.App = Setup(t, true) + s.Ctx = s.App.BaseApp.NewContext(false, tmtypes.Header{Height: 1, ChainID: "testing", Time: time.Now().UTC()}) + s.QueryHelper = &baseapp.QueryServiceTestHelper{ + GRPCQueryRouter: s.App.GRPCQueryRouter(), + Ctx: s.Ctx, + } + s.TestAccs = CreateRandomAccounts(3) +} + +func (s *KeeperTestHelper) SetupTestForInitGenesis() { + t := s.T() + // Setting to True, leads to init genesis not running + s.App = Setup(t, true) + s.Ctx = s.App.BaseApp.NewContext(true, tmtypes.Header{ + ChainID: "testing", + }) +} + +// CreateTestContext creates a test context. +func (s *KeeperTestHelper) CreateTestContext() sdk.Context { + ctx, _ := s.CreateTestContextWithMultiStore() + return ctx +} + +// CreateTestContextWithMultiStore creates a test context and returns it together with multi store. +func (s *KeeperTestHelper) CreateTestContextWithMultiStore() (sdk.Context, sdk.CommitMultiStore) { + db := dbm.NewMemDB() + logger := log.NewNopLogger() + + ms := rootmulti.NewStore(db, logger) + + return sdk.NewContext(ms, tmtypes.Header{}, false, logger), ms +} + +// CreateTestContext creates a test context. +func (s *KeeperTestHelper) Commit() { + oldHeight := s.Ctx.BlockHeight() + oldHeader := s.Ctx.BlockHeader() + s.App.Commit() + newHeader := tmtypes.Header{Height: oldHeight + 1, ChainID: "testing", Time: oldHeader.Time.Add(time.Second)} + s.App.BeginBlock(abci.RequestBeginBlock{Header: newHeader}) + s.Ctx = s.App.NewContext(false, newHeader) +} + +// FundAcc funds target address with specified amount. +func (s *KeeperTestHelper) FundAcc(acc sdk.AccAddress, amounts sdk.Coins) { + err := banktestutil.FundAccount(s.App.BankKeeper, s.Ctx, acc, amounts) + s.Require().NoError(err) +} + +// FundModuleAcc funds target modules with specified amount. +func (s *KeeperTestHelper) FundModuleAcc(moduleName string, amounts sdk.Coins) { + err := banktestutil.FundModuleAccount(s.App.BankKeeper, s.Ctx, moduleName, amounts) + s.Require().NoError(err) +} + +func (s *KeeperTestHelper) MintCoins(coins sdk.Coins) { + err := s.App.BankKeeper.MintCoins(s.Ctx, minttypes.ModuleName, coins) + s.Require().NoError(err) +} + +// SetupValidator sets up a validator and returns the ValAddress. +func (s *KeeperTestHelper) SetupValidator(bondStatus stakingtypes.BondStatus) sdk.ValAddress { + valPub := secp256k1.GenPrivKey().PubKey() + valAddr := sdk.ValAddress(valPub.Address()) + bondDenom := s.App.StakingKeeper.GetParams(s.Ctx).BondDenom + selfBond := sdk.NewCoins(sdk.Coin{Amount: sdk.NewInt(100), Denom: bondDenom}) + + s.FundAcc(sdk.AccAddress(valAddr), selfBond) + + // stakingHandler := staking.NewHandler(s.App.StakingKeeper) + stakingCoin := sdk.NewCoin("ucmdx", selfBond[0].Amount) + ZeroCommission := stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()) + _, err := stakingtypes.NewMsgCreateValidator(valAddr, valPub, stakingCoin, stakingtypes.Description{}, ZeroCommission, sdk.OneInt()) + s.Require().NoError(err) + // res, err := stakingHandler(s.Ctx, msg) + // s.Require().NoError(err) + // s.Require().NotNil(res) + + val, found := s.App.StakingKeeper.GetValidator(s.Ctx, valAddr) + s.Require().True(found) + + val = val.UpdateStatus(bondStatus) + s.App.StakingKeeper.SetValidator(s.Ctx, val) + + consAddr, err := val.GetConsAddr() + s.Suite.Require().NoError(err) + + signingInfo := slashingtypes.NewValidatorSigningInfo( + consAddr, + s.Ctx.BlockHeight(), + 0, + time.Unix(0, 0), + false, + 0, + ) + s.App.SlashingKeeper.SetValidatorSigningInfo(s.Ctx, consAddr, signingInfo) + + return valAddr +} + +// BeginNewBlock starts a new block. +func (s *KeeperTestHelper) BeginNewBlock() { + var valAddr []byte + + validators := s.App.StakingKeeper.GetAllValidators(s.Ctx) + if len(validators) >= 1 { + valAddrFancy, err := validators[0].GetConsAddr() + s.Require().NoError(err) + valAddr = valAddrFancy.Bytes() + } else { + valAddrFancy := s.SetupValidator(stakingtypes.Bonded) + validator, _ := s.App.StakingKeeper.GetValidator(s.Ctx, valAddrFancy) + valAddr2, _ := validator.GetConsAddr() + valAddr = valAddr2.Bytes() + } + + s.BeginNewBlockWithProposer(valAddr) +} + +// BeginNewBlockWithProposer begins a new block with a proposer. +func (s *KeeperTestHelper) BeginNewBlockWithProposer(proposer sdk.ValAddress) { + validator, found := s.App.StakingKeeper.GetValidator(s.Ctx, proposer) + s.Assert().True(found) + + valConsAddr, err := validator.GetConsAddr() + s.Require().NoError(err) + + valAddr := valConsAddr.Bytes() + + newBlockTime := s.Ctx.BlockTime().Add(5 * time.Second) + + header := tmtypes.Header{Height: s.Ctx.BlockHeight() + 1, Time: newBlockTime} + newCtx := s.Ctx.WithBlockTime(newBlockTime).WithBlockHeight(s.Ctx.BlockHeight() + 1) + s.Ctx = newCtx + lastCommitInfo := abci.CommitInfo{ + Votes: []abci.VoteInfo{{ + Validator: abci.Validator{Address: valAddr, Power: 1000}, + SignedLastBlock: true, + }}, + Round: 0, + } + reqBeginBlock := abci.RequestBeginBlock{Header: header, LastCommitInfo: lastCommitInfo} + + fmt.Println("beginning block ", s.Ctx.BlockHeight()) + s.App.BeginBlocker(s.Ctx, reqBeginBlock) +} + +// EndBlock ends the block. +func (s *KeeperTestHelper) EndBlock() { + reqEndBlock := abci.RequestEndBlock{Height: s.Ctx.BlockHeight()} + s.App.EndBlocker(s.Ctx, reqEndBlock) +} + +// AllocateRewardsToValidator allocates reward tokens to a distribution module then allocates rewards to the validator address. +func (s *KeeperTestHelper) AllocateRewardsToValidator(valAddr sdk.ValAddress, rewardAmt math.Int) { + validator, found := s.App.StakingKeeper.GetValidator(s.Ctx, valAddr) + s.Require().True(found) + + // allocate reward tokens to distribution module + coins := sdk.Coins{sdk.NewCoin("ucmdx", rewardAmt)} + err := banktestutil.FundModuleAccount(s.App.BankKeeper, s.Ctx, distrtypes.ModuleName, coins) + s.Require().NoError(err) + + // allocate rewards to validator + s.Ctx = s.Ctx.WithBlockHeight(s.Ctx.BlockHeight() + 1) + decTokens := sdk.DecCoins{{Denom: "ucmdx", Amount: sdk.NewDec(20000)}} + s.App.DistrKeeper.AllocateTokensToValidator(s.Ctx, validator, decTokens) +} + +// BuildTx builds a transaction. +func (s *KeeperTestHelper) BuildTx( + txBuilder client.TxBuilder, + msgs []sdk.Msg, + sigV2 signing.SignatureV2, + memo string, txFee sdk.Coins, + gasLimit uint64, +) authsigning.Tx { + err := txBuilder.SetMsgs(msgs[0]) + s.Require().NoError(err) + + err = txBuilder.SetSignatures(sigV2) + s.Require().NoError(err) + + txBuilder.SetMemo(memo) + txBuilder.SetFeeAmount(txFee) + txBuilder.SetGasLimit(gasLimit) + + return txBuilder.GetTx() +} + +func (s *KeeperTestHelper) ConfirmUpgradeSucceeded(upgradeName string, upgradeHeight int64) { + s.Ctx = s.Ctx.WithBlockHeight(upgradeHeight - 1) + plan := upgradetypes.Plan{Name: upgradeName, Height: upgradeHeight} + err := s.App.UpgradeKeeper.ScheduleUpgrade(s.Ctx, plan) + s.Require().NoError(err) + _, exists := s.App.UpgradeKeeper.GetUpgradePlan(s.Ctx) + s.Require().True(exists) + + s.Ctx = s.Ctx.WithBlockHeight(upgradeHeight) + s.Require().NotPanics(func() { + beginBlockRequest := abci.RequestBeginBlock{} + s.App.BeginBlocker(s.Ctx, beginBlockRequest) + }) +} + +// CreateRandomAccounts is a function return a list of randomly generated AccAddresses +func CreateRandomAccounts(numAccts int) []sdk.AccAddress { + testAddrs := make([]sdk.AccAddress, numAccts) + for i := 0; i < numAccts; i++ { + pk := ed25519.GenPrivKey().PubKey() + testAddrs[i] = sdk.AccAddress(pk.Address()) + } + + return testAddrs +} + +func TestMessageAuthzSerialization(t *testing.T, msg sdk.Msg) { + someDate := time.Date(1, 1, 1, 1, 1, 1, 1, time.UTC) + const ( + mockGranter string = "cosmos1abc" + mockGrantee string = "cosmos1xyz" + ) + + var ( + mockMsgGrant authz.MsgGrant + mockMsgRevoke authz.MsgRevoke + mockMsgExec authz.MsgExec + ) + + // Authz: Grant Msg + typeURL := sdk.MsgTypeURL(msg) + later := someDate.Add(time.Hour) + grant, err := authz.NewGrant(someDate, authz.NewGenericAuthorization(typeURL), &later) + require.NoError(t, err) + + msgGrant := authz.MsgGrant{Granter: mockGranter, Grantee: mockGrantee, Grant: grant} + msgGrantBytes := json.RawMessage(sdk.MustSortJSON(authzcodec.ModuleCdc.MustMarshalJSON(&msgGrant))) + err = authzcodec.ModuleCdc.UnmarshalJSON(msgGrantBytes, &mockMsgGrant) + require.NoError(t, err) + + // Authz: Revoke Msg + msgRevoke := authz.MsgRevoke{Granter: mockGranter, Grantee: mockGrantee, MsgTypeUrl: typeURL} + msgRevokeByte := json.RawMessage(sdk.MustSortJSON(authzcodec.ModuleCdc.MustMarshalJSON(&msgRevoke))) + err = authzcodec.ModuleCdc.UnmarshalJSON(msgRevokeByte, &mockMsgRevoke) + require.NoError(t, err) + + // Authz: Exec Msg + msgAny, err := cdctypes.NewAnyWithValue(msg) + require.NoError(t, err) + msgExec := authz.MsgExec{Grantee: mockGrantee, Msgs: []*cdctypes.Any{msgAny}} + execMsgByte := json.RawMessage(sdk.MustSortJSON(authzcodec.ModuleCdc.MustMarshalJSON(&msgExec))) + err = authzcodec.ModuleCdc.UnmarshalJSON(execMsgByte, &mockMsgExec) + require.NoError(t, err) + require.Equal(t, msgExec.Msgs[0].Value, mockMsgExec.Msgs[0].Value) +} + +func GenerateTestAddrs() (string, string) { + pk1 := ed25519.GenPrivKey().PubKey() + validAddr := sdk.AccAddress(pk1.Address()).String() + invalidAddr := sdk.AccAddress("invalid").String() + return validAddr, invalidAddr +} diff --git a/app/upgrades/testnet/v13/upgrade_test.go b/app/upgrades/testnet/v13/upgrade_test.go new file mode 100644 index 000000000..be9f1a70f --- /dev/null +++ b/app/upgrades/testnet/v13/upgrade_test.go @@ -0,0 +1,64 @@ +package v13_test + +import ( + "testing" + + "github.com/stretchr/testify/suite" + + "github.com/comdex-official/comdex/app" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + v13 "github.com/comdex-official/comdex/app/upgrades/testnet/v13" +) + +type UpgradeTestSuite struct { + app.KeeperTestHelper +} + +func (s *UpgradeTestSuite) SetupTest() { + s.Setup() +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(UpgradeTestSuite)) +} + +// Ensures the test does not error out. +func (s *UpgradeTestSuite) TestUpgrade() { + s.Setup() + + preUpgradeChecks(s) + + upgradeHeight := int64(5) + s.ConfirmUpgradeSucceeded(v13.UpgradeName, upgradeHeight) + + postUpgradeChecks(s) +} + +func preUpgradeChecks(s *UpgradeTestSuite) { + + mp := s.App.MintKeeper.GetParams(s.Ctx) + s.Require().Equal(mp.BlocksPerYear, uint64(6311520)) + + sp := s.App.SlashingKeeper.GetParams(s.Ctx) + s.Require().Equal(sp.SignedBlocksWindow, int64(100)) + +} + +func postUpgradeChecks(s *UpgradeTestSuite) { + + // Ensure the gov params have MinInitialDepositRatio added + gp := s.App.GovKeeper.GetParams(s.Ctx) + s.Require().Equal(gp.MinInitialDepositRatio, "0.200000000000000000") + + // Ensure the mint params have doubled + mp := s.App.MintKeeper.GetParams(s.Ctx) + s.Require().Equal(mp.BlocksPerYear, uint64(6311520*2)) + + // Ensure the slashing params have doubled + sp := s.App.SlashingKeeper.GetParams(s.Ctx) + s.Require().Equal(sp.SignedBlocksWindow, int64(100*2)) + + // Ensure the wasm Permissionless + wp := s.App.WasmKeeper.GetParams(s.Ctx) + s.Require().Equal(wp.CodeUploadAccess, wasmtypes.AllowEverybody) +} From 354db97e7f14972f918bae3b301dde3d2eec86b9 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Tue, 24 Oct 2023 22:45:01 +0530 Subject: [PATCH 79/90] bandchain temp fork added --- go.mod | 7 +- go.sum | 2145 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 2040 insertions(+), 112 deletions(-) diff --git a/go.mod b/go.mod index 52fb12a2b..2ebff17b6 100644 --- a/go.mod +++ b/go.mod @@ -138,7 +138,7 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/googleapis v1.4.1 // indirect - github.com/gogo/protobuf v1.3.3 // indirect + github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/glog v1.1.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect @@ -325,6 +325,9 @@ require ( replace ( // use cosmos fork of keyring github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 - github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + //TODO: to be replaced from comdex fork of bandchain-packet + github.com/bandprotocol/bandchain-packet => github.com/InjectiveLabs/bandchain-packet v0.0.4-0.20230327115226-35199d4659d5 + // https://github.com/cosmos/cosmos-sdk/blob/v0.47.5/UPGRADING.md#protobuf + // github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) diff --git a/go.sum b/go.sum index 8e3f444a3..cc4671bf4 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,19 @@ 4d63.com/gocheckcompilerdirectives v1.2.1 h1:AHcMYuw56NPjq/2y615IGg2kYkBdTvOaojYCBcRE7MA= 4d63.com/gocheckcompilerdirectives v1.2.1/go.mod h1:yjDJSxmDTtIHHCqX0ufRYZDL6vQtMG7tJdKVeWwsqvs= +4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= 4d63.com/gochecknoglobals v0.2.1 h1:1eiorGsgHOFOuoOiJDy2psSrQbRdIHrlge0IJIkUgDc= 4d63.com/gochecknoglobals v0.2.1/go.mod h1:KRE8wtJB3CXCsb1xy421JfTHIIbmT3U5ruxw2Qu8fSU= +bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= +bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= +cloud.google.com/go v0.25.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.37.2/go.mod h1:H8IAquKe2L30IxoupDgqTaQvKSwF/c8prYHynGIWQbA= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= @@ -18,6 +27,7 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= @@ -33,29 +43,61 @@ cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aD cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -63,13 +105,29 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= @@ -77,102 +135,243 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= +cloud.google.com/go/firestore v1.8.0/go.mod h1:r3KB8cAdRIe8znzoPWLw8S6gpDVd9treohhn8b09424= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -182,67 +381,167 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +code.gitea.io/sdk/gitea v0.12.0/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= +contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= +contrib.go.opencensus.io/exporter/ocagent v0.5.0/go.mod h1:ImxhfLRpxoYiSq891pBrLVhN+qmP8BTVvdH2YLs7Gl0= +contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= +contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= +contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= +contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= +cosmossdk.io/api v0.2.1/go.mod h1:kNpfY0UY7Cz4ZuLJ4hm9auUGfmj23UFpOQ/Bo8IKCFw= +cosmossdk.io/api v0.2.5/go.mod h1:vxhlMTeKWgQUaanTHPq7/vR3dkhhJ6pOgXK0EIBrBYw= +cosmossdk.io/api v0.3.0/go.mod h1:2HDRQHwVIyklENrrXko0E/waZrRFZWHhPyhcBO4qHq4= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= +cosmossdk.io/core v0.3.2/go.mod h1:CO7vbe+evrBvHc0setFHL/u7nlY7HJGzdRSBkT/sirc= cosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s= cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= +cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= +cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= +cosmossdk.io/math v1.0.0-beta.3/go.mod h1:3LYasri3Zna4XpbrTNdKsWmD5fHHkaNAod/mNT9XdE4= +cosmossdk.io/math v1.0.0-beta.4/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp9NnaM= +cosmossdk.io/math v1.0.0-beta.6/go.mod h1:gUVtWwIzfSXqcOT+lBVz2jyjfua8DoBdzRsIyaUAT/8= +cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= cosmossdk.io/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM= cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= +cosmossdk.io/tools/rosetta v0.2.0/go.mod h1:3mn8QuE2wLUdTi77/gbDXdFqXZdBdiBJhgAWUTSXPv8= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw= git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= 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/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= github.com/Abirdcfly/dupword v0.0.9 h1:MxprGjKq3yDBICXDgEEsyGirIXfMYXkLNT/agPsE1tk= github.com/Abirdcfly/dupword v0.0.9/go.mod h1:PzmHVLLZ27MvHSzV7eFmMXSFArWXZPZmfuuziuUrf2g= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= +github.com/AkihiroSuda/containerd-fuse-overlayfs v1.0.0/go.mod h1:0mMDvQFeLbbn1Wy8P2j3hwFhqBq+FKn8OZPno8WLmp8= +github.com/Antonboom/errname v0.1.6/go.mod h1:7lz79JAnuoMNDAWE9MeeIr1/c/VpSUWatBv2FH9NYpI= github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= +github.com/Azure/azure-amqp-common-go/v2 v2.1.0/go.mod h1:R8rea+gJRuJR6QxTir/XuEd+YuKoUiazDC/N96FiDEU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= +github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v19.1.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v29.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v30.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v35.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v38.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v42.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= -github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= +github.com/Azure/azure-service-bus-go v0.9.1/go.mod h1:yzBx6/BUGfjfeqbRZny9AQIbIe3AcV9WZbAdpkoXOa0= +github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v10.15.5+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v12.0.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v14.1.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= +github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest v0.10.2/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= +github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= +github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= +github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= +github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= +github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= +github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -253,83 +552,187 @@ github.com/CosmWasm/wasmd v0.40.2/go.mod h1:vqI238yb4D6aNuigS8mCqTyyCV9HN5eBEZAR github.com/CosmWasm/wasmvm v1.3.0 h1:x12X4bKlUPS7TT9QQP45+fJo2sp30GEbiSSgb9jsec8= github.com/CosmWasm/wasmvm v1.3.0/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/Djarvur/go-err113 v0.0.0-20200410182137-af658d038157/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/Djarvur/go-err113 v0.1.0 h1:uCRZZOdMQ0TZPHYTdYpoC0bLYJKPEHPUJ8MeAa51lNU= github.com/Djarvur/go-err113 v0.1.0/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.1.0/go.mod h1:LGOGuvEgCfCQsy3JF2tRmpGDpzA53iZfyGEWSPwQ6/4= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= +github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= +github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/InjectiveLabs/bandchain-packet v0.0.4-0.20230327115226-35199d4659d5 h1:RN7PycNsQ1z59I3Fjms4blM++qS8eMMX03zZbC2DwmU= +github.com/InjectiveLabs/bandchain-packet v0.0.4-0.20230327115226-35199d4659d5/go.mod h1:VoNDHSybdPQ35/3zxNwjewaGpzWHhYyTgV7cJzFglEE= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.0.3/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/go-winio v0.4.15-0.20200908182639-5b44b70ab3ab/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= 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/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= +github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= +github.com/Microsoft/hcsshim v0.8.10/go.mod h1:g5uw8EV2mAlzqe94tfNBNdr89fnbD/n3HV0OhsddkmM= +github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= +github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= +github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= +github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= +github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= +github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= +github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim v0.9.3/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim v0.9.4/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim/test v0.0.0-20200826032352-301c83a30e7c/go.mod h1:30A5igQ91GEmhYJF8TaRP79pMBOYynRsyOByfVV0dU4= +github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= +github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= 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/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= +github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= 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/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= +github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= +github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/adlio/schema v1.1.13/go.mod h1:L5Z7tw+7lRK1Fnpi/LT/ooCP1elkXn0krMWBQHUhEDE= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= +github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= +github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= 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= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= +github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= +github.com/apex/log v1.1.4/go.mod h1:AlpoD9aScyQfJDVHmLMEcx4oU6LqzkWp4Mg9GdAcEvQ= +github.com/apex/log v1.3.0/go.mod h1:jd8Vpsr46WAe3EZSQ/IUMs2qQD/GOycT5rPWCO1yGcs= +github.com/apex/logs v0.0.4/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= +github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= +github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= github.com/ashanbrown/forbidigo v1.5.3 h1:jfg+fkm/snMx+V9FBwsl1d340BV/99kZGv5jN9hBoXk= github.com/ashanbrown/forbidigo v1.5.3/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU= github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= +github.com/aws/aws-sdk-go v1.15.90/go.mod h1:es1KtYUFs7le0xQ3rOihkuoVD90z7D0fR2Qm4S00/gU= +github.com/aws/aws-sdk-go v1.16.26/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.19.45/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.11/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.27.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.31.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= 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/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= +github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= -github.com/bandprotocol/bandchain-packet v0.0.3 h1:Mo2xVmjOSfc//0z1lskNkxrkpcxeU2nIwfHb2rHFLLg= -github.com/bandprotocol/bandchain-packet v0.0.3/go.mod h1:6mU33VjEShPvWYoTIQywRPxyS+HXcgnm0e7mlJwiTnQ= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= +github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +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-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= 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= @@ -339,38 +742,58 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= +github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= github.com/bkielbasa/cyclop v1.2.1 h1:AeF71HZDob1P2/pRm1so9cd1alZnrpyc4q2uP2l0gJY= github.com/bkielbasa/cyclop v1.2.1/go.mod h1:K/dT/M0FPAiYjBgQGau7tz+3TMh4FWAEqlMhzFWCrgM= +github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/bombsimon/wsl/v2 v2.0.0/go.mod h1:mf25kr/SqFEPhhcxW1+7pxzGlW+hIl/hYTKY95VwV8U= +github.com/bombsimon/wsl/v2 v2.2.0/go.mod h1:Azh8c3XGEJl9LyX0/sFC+CKMc7Ssgua0g+6abzXN4Pg= +github.com/bombsimon/wsl/v3 v3.0.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/bombsimon/wsl/v3 v3.1.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= github.com/bombsimon/wsl/v3 v3.4.0 h1:RkSxjT3tmlptwfgEgTgU+KYKLI35p/tviNXNXiL2aNU= github.com/bombsimon/wsl/v3 v3.4.0/go.mod h1:KkIB+TXkqy6MvK9BDZVbZxKNYsE1/oLRJbIFtf14qqo= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= -github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= -github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= +github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401/go.mod h1:Sv4JPQ3/M+teHz9Bo5jBpkNcP0x6r7rdihlNL/7tTAs= github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= -github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= +github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +github.com/btcsuite/btcd v0.23.0 h1:V2/ZgjfDFIygAX3ZapeigkVBoVUtOJKSwrhZdlpSvaA= +github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= +github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= 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.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= +github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= +github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= 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/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= @@ -382,19 +805,41 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/bufbuild/buf v1.4.0/go.mod h1:mwHG7klTHnX+rM/ym8LXGl7vYpVmnwT96xWoRB4H5QI= +github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0qLq0= +github.com/bufbuild/buf v1.9.0/go.mod h1:1Q+rMHiMVcfgScEF/GOldxmu4o9TrQ2sQQh58K6MscE= +github.com/bufbuild/connect-go v0.2.0/go.mod h1:4efZ2eXFENwd4p7tuLaL9m0qtTsCOzuBvrohvRGevDM= +github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= +github.com/bufbuild/protocompile v0.1.0/go.mod h1:ix/MMMdsT3fzxfw91dvbfzKW3fRRnuPCP47kpAm5m/4= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/bwesterb/go-ristretto v1.2.2/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= +github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= +github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= +github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e/go.mod h1:oDpT4efm8tSYHXV5tHSdRvBet/b/QzxZ+XyyPehvm3A= 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.2/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/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= +github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -404,8 +849,13 @@ github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= +github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8 h1:W9o46d2kbNL06lq7UNDPV0zYLzkrde/bjIqO02eoll0= github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8/go.mod h1:gakxgyXaaPkxvLw1XQxNGK4I37ys9iBRzNUx/B7pUCo= +github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= @@ -417,120 +867,292 @@ github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObk github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= +github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= +github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= +github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= +github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/circl v1.3.1/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= +github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= +github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/codahale/hdrhistogram v0.0.0-20160425231609-f8ad88b59a58/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= -github.com/coinbase/rosetta-sdk-go v0.6.10/go.mod h1:J/JFMsfcePrjJZkwQFLh+hJErkAmdm9Iyy3D5Y0LfXo= github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= +github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= +github.com/cometbft/cometbft v0.34.27-alpha.1/go.mod h1:hct3hasQ2hIF3HoD7foVw4RaqTNSSeJ/lgcrVK6uDvs= +github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= -github.com/confio/ics23/go v0.0.0-20200817220745-f173e6211efb/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= -github.com/confio/ics23/go v0.6.3/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= -github.com/confio/ics23/go v0.6.6/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= +github.com/confio/ics23/go v0.7.0/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= 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/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0= +github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= +github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= +github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= +github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= +github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= +github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= +github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= +github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= +github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= +github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= +github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= +github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= +github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.1-0.20201117152358-0edc412565dc/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= +github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= +github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= +github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= +github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= +github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= +github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= +github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE= +github.com/containerd/containerd v1.6.3-0.20220401172941-5ff8fce1fcc6/go.mod h1:WSt2SnDLAGWlu+Vl+EWay37seZLKqgRt6XLjIMy8SYM= +github.com/containerd/containerd v1.6.6/go.mod h1:ZoP1geJldzCVY3Tonoz7b1IXk8rIX0Nltt5QE4OMNk0= +github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= +github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= +github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= +github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= +github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= +github.com/containerd/continuity v0.2.3-0.20220330195504-d132b287edc8/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/fuse-overlayfs-snapshotter v1.0.2/go.mod h1:nRZceC8a7dRm3Ao6cJAwuJWPFiBPaibHiFntRUnzhwU= +github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= +github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= +github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= +github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= +github.com/containerd/go-cni v1.1.4/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= +github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= +github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= +github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= +github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= +github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= +github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4= +github.com/containerd/imgcrypt v1.1.4/go.mod h1:LorQnPtzL/T0IyCeftcsMEO7AqxUDbdO8j/tSUpgxvo= +github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= +github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/stargz-snapshotter v0.0.0-20201027054423-3a04e4c2c116/go.mod h1:o59b3PCKVAf9jjiKtCc/9hLAd+5p/rfhBfm6aBcTEr4= +github.com/containerd/stargz-snapshotter v0.11.3/go.mod h1:2j2EAUyvrLU4D9unYlTIwGhDKQIk74KJ9E71lJsQCVM= +github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= +github.com/containerd/stargz-snapshotter/estargz v0.11.3/go.mod h1:7vRJIcImfY8bpifnMjt+HTJoQxASq7T28MYbP15/Nf0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= +github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= +github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= +github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= +github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= +github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y= +github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= +github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= +github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= +github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE= +github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8= +github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= +github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= +github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= +github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= +github.com/containers/ocicrypt v1.1.3/go.mod h1:xpdkbVAuaH3WzbEabUd5yDsl9SwJA5pABH85425Es2g= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= +github.com/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= +github.com/cosmos/cosmos-proto v1.0.0-alpha8/go.mod h1:6/p+Bc4O8JKeZqe0VqUGTX31eoYqemTT4C1hLCWsO7I= +github.com/cosmos/cosmos-proto v1.0.0-beta.1/go.mod h1:8k2GNZghi5sDRFw/scPL8gMSowT1vDA+5ouxL8GjaUE= +github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.43.0/go.mod h1:ctcrTEAhei9s8O3KSNvL0dxe+fVQGp07QyRb/7H9JYE= +github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20221207001918-ed5124f932fd/go.mod h1:dmCp0cYz6/S5KWKJ9QzePRwWNEbcSu+jbBTRgnzPnPo= +github.com/cosmos/cosmos-sdk v0.47.0-rc2.0.20230220103612-f094a0c33410/go.mod h1:SNeHakoKi9YlfhI53+ijEZZIHp90NrB1By4NgWN0KZ0= +github.com/cosmos/cosmos-sdk v0.47.1/go.mod h1:14tO5KQaTrl2q3OxBnDRfue7TRN9zkXS0cLutrSqkOo= github.com/cosmos/cosmos-sdk v0.47.5 h1:n1+WjP/VM/gAEOx3TqU2/Ny734rj/MX1kpUnn7zVJP8= github.com/cosmos/cosmos-sdk v0.47.5/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c= +github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= +github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q9p+LoCr4= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= +github.com/cosmos/gogoproto v1.4.3/go.mod h1:0hLIG5TR7IvV1fme1HCFKjfzW9X2x0Mo+RooWXCnOWU= +github.com/cosmos/gogoproto v1.4.4/go.mod h1:/yl6/nLwsZcZ2JY3OrqjRqvqCG9InUMcXRfRjQiF9DU= +github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= -github.com/cosmos/iavl v0.15.0-rc3.0.20201009144442-230e9bdf52cd/go.mod h1:3xOIaNNX19p0QrX0VqWa6voPRoJRGGYtny+DH8NEPvE= -github.com/cosmos/iavl v0.15.0-rc5/go.mod h1:WqoPL9yPTQ85QBMT45OOUzPxG/U/JcJoN7uMjgxke/I= -github.com/cosmos/iavl v0.15.3/go.mod h1:OLjQiAQ4fGD2KDZooyJG9yz+p2ao2IAYSbke8mVvSA4= -github.com/cosmos/iavl v0.16.0/go.mod h1:2A8O/Jz9YwtjqXMO0CjnnbTYEEaovE8jWcwrakH3PoE= +github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= +github.com/cosmos/iavl v0.19.4/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= +github.com/cosmos/iavl v0.20.0-alpha4/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.0.0-20230726182236-3a9d46a7c2a4 h1:AKzCfYLsVG9DtNzjya12u+OO0sUQpcXlecqnD/2rqGg= github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.0.0-20230726182236-3a9d46a7c2a4/go.mod h1:/P6l2bWo2AR3rrsfs0DHuFZO3Imzb93sxFD3ihrIgw4= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4 h1:NuFmpHnENcTtZDEQf2vZzZluk5rQl3f7J4tqo9FlH/c= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= -github.com/cosmos/ibc-go v1.0.0/go.mod h1:2wHKQUa+BLJMEyN635KrHfmTTwSNHBtXcqdY8JWGuXA= github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= +github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= -github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= +github.com/cosmos/rosetta-sdk-go v0.9.0/go.mod h1:2v41yXL25xxAXrczVSnbDHcQH9CgildruDlGQGKW/JU= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cristalhq/acmd v0.7.0/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= +github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= +github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= +github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= +github.com/curioswitch/go-reassign v0.1.2/go.mod h1:bFJIHgtTM3hRm2sKXSPkbwNjSFyGURQXyn4IXD2qwfQ= github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= +github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= +github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= +github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= +github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= +github.com/daixiang0/gci v0.3.3/go.mod h1:1Xr2bxnQbDxCqqulUOv8qpGqkgRw9RSCGGjEC2LjF8o= +github.com/daixiang0/gci v0.6.3/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= +github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= github.com/daixiang0/gci v0.10.1 h1:eheNA3ljF6SxnPD/vE4lCBusVHmV3Rs3dkKvFrJ7MR0= github.com/daixiang0/gci v0.10.1/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI= +github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= 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= @@ -542,32 +1164,74 @@ github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= +github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= +github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.2007.1/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= +github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= +github.com/dgraph-io/badger/v3 v3.2103.2/go.mod h1:RHo4/GmYcKKh5Lxu63wLEMHJ70Pac2JqZRYGhlyAo2M= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/docker/cli v0.0.0-20190925022749-754388324470/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.0-beta1.0.20201029214301-1d20b15adc38+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.13+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= +github.com/docker/distribution v2.6.0-rc.1.0.20180327202408-83389a148052+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.8.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= 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/docker v0.0.0-20200511152416-a93e9eb0e95c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.4.2-0.20180531152204-71cd53e4a197/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v17.12.0-ce-rc1.0.20200730172259-9f28837c1d93+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.0-beta1.0.20201110211921-af34b94a78a1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.3-0.20211208011758-87521affb077+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= 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-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.8.0-dev.2.0.20200917202933-d0951081b35f/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -576,14 +1240,16 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25/go.mod h1:hTr8+TLQmkUkgcuh3mcr5fjrT9c64ZzsBCdCEC6UppY= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -593,20 +1259,32 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= -github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= @@ -615,59 +1293,116 @@ github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4 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/firefart/nonamedreturns v1.0.1/go.mod h1:D3dpIBojGGNh5UfElmwPu73SwDCm+VKhHYqwlNOk2uQ= github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= -github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/fortytw2/leaktest v1.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= 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/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= 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.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= +github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= +github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= +github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= +github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8= github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-critic/go-critic v0.4.1/go.mod h1:7/14rZGnZbY6E38VEGk2kVhoq6itzc1E68facVDK23g= +github.com/go-critic/go-critic v0.4.3/go.mod h1:j4O3D4RoIwRqlZw5jJpx0BNfXWWbpcJoKu5cYSe4YmQ= +github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= +github.com/go-critic/go-critic v0.6.4/go.mod h1:qL5SOlk7NtY6sJPoVCTKDIgzNOxHkkkOCVDyi9wJe1U= +github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= github.com/go-critic/go-critic v0.8.1 h1:16omCF1gN3gTzt4j4J6fKI/HnRojhEp+Eks6EuKw3vw= github.com/go-critic/go-critic v0.8.1/go.mod h1:kpzXl09SIJX1cr9TB/g/sAG+eFEl7ZS9f9cqvZtyNl0= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= +github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= +github.com/go-git/go-git/v5 v5.5.1/go.mod h1:uz5PQ3d0gz7mSgzZhSJToM6ALPaKCdSnl58/Xb5hzr8= +github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= 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= +github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -675,31 +1410,54 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU= -github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= github.com/go-toolsmith/astcast v1.1.0 h1:+JN9xZV1A+Re+95pgnMgDboWNVnIMMQXwfBwLRPgSC8= github.com/go-toolsmith/astcast v1.1.0/go.mod h1:qdcuFWeGGS2xX5bLM/c3U9lewg7+Zu4mr+xPwZIB4ZU= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astcopy v1.0.1/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= +github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= github.com/go-toolsmith/astcopy v1.1.0 h1:YGwBN0WM+ekI/6SS6+52zLDEf8Yvp3n2seZITCUBt5s= github.com/go-toolsmith/astcopy v1.1.0/go.mod h1:hXM6gan18VA1T/daUEHCFcYiW8Ai1tIwIzHY6srfEAw= +github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= +github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= github.com/go-toolsmith/astequal v1.1.0 h1:kHKm1AWqClYn15R0K1KKE4RG614D46n+nqUQ06E1dTw= github.com/go-toolsmith/astequal v1.1.0/go.mod h1:sedf7VIdCL22LD8qIvv7Nn9MuWJruQA/ysswh64lffQ= +github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= github.com/go-toolsmith/astfmt v1.1.0 h1:iJVPDPp6/7AaeLJEruMsBUlOYCmvg0MoCfJprsOmcco= github.com/go-toolsmith/astfmt v1.1.0/go.mod h1:OrcLlRwu0CuiIBp/8b5PYF9ktGVZUjlNMV634mhwuQ4= +github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= +github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= github.com/go-toolsmith/astp v1.1.0 h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA= github.com/go-toolsmith/astp v1.1.0/go.mod h1:0T1xFGz9hicKs8Z5MfAqSUitoUYS30pDMsRVIDHs8CA= +github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= +github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= github.com/go-toolsmith/pkgload v1.2.2 h1:0CtmHq/02QhxcF7E9N5LIFcYFsMR5rdovfqTtRKkgIk= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQiyP2Bvw= github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= +github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus= github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U= github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= @@ -709,21 +1467,46 @@ github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6Wezm github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= +github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= 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.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/flock v0.7.3/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= +github.com/gogo/googleapis v1.3.2/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.1.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -733,6 +1516,7 @@ github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= @@ -743,6 +1527,8 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -765,7 +1551,6 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= @@ -774,28 +1559,53 @@ github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5 github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= +github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= +github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= +github.com/golangci/golangci-lint v1.23.7/go.mod h1:g/38bxfhp4rI7zeWSxcdIeHTQGS58TCak8FYcyCmavQ= +github.com/golangci/golangci-lint v1.27.0/go.mod h1:+eZALfxIuthdrHPtfM7w/R3POJLjHDfJJw8XZl9xOng= +github.com/golangci/golangci-lint v1.46.2/go.mod h1:3DkdHnxn9eoTTrpT2gB0TEv8KSziuoqe9FitgQLHvAY= +github.com/golangci/golangci-lint v1.49.0/go.mod h1:+V/7lLv449R6w9mQ3WdV0EKh7Je/jTylMeSwBZcLeWE= +github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= github.com/golangci/golangci-lint v1.51.2 h1:yIcsT1X9ZYHdSpeWXRT1ORC/FPGSqDHbHsu9uk4FK7M= github.com/golangci/golangci-lint v1.51.2/go.mod h1:KH9Q7/3glwpYSknxUgUyLlAv46A8fsSKo1hH2wDvkr8= +github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= github.com/golangci/misspell v0.4.0 h1:KtVB/hTK4bbL/S6bs64rYyk8adjmh1BygbBiaAiX+a0= github.com/golangci/misspell v0.4.0/go.mod h1:W6O/bwV6lGDxUCChm2ykw9NQdd5bYd1Xkjo88UcWyJc= +github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= +github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= +github.com/google/crfs v0.0.0-20191108021818-71d77da419c9/go.mod h1:etGhoOqfwPkooV6aqoX3eBGQOJblqdoc9XvWOeuxpPw= github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v2.0.0+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -812,17 +1622,29 @@ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8 github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.0.0-20191010200024-a3d713f9b7f8/go.mod h1:KyKXa9ciM8+lgMXwOVsXi7UxGrsf9mM61Mzs+xKUrKE= +github.com/google/go-containerregistry v0.1.2/go.mod h1:GPivBPgdAyd2SU+vf6EpsgOtWDuPqjW0hJZt4rNdTZ4= +github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= +github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= +github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= +github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= 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= @@ -831,30 +1653,42 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/rpmpack v0.0.0-20191226140753-aa36bfddb3a0/go.mod h1:RaTPr0KUf2K7fnZYLNDrr8rxAamWs3iNywJLtQ2AzBg= github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/wire v0.3.0/go.mod h1:i1DMg/Lu8Sz5yYl25iOdmc5CT5qusaa+zmRWs16741s= +github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= +github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -864,30 +1698,51 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= +github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gookit/color v1.2.4/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= +github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= +github.com/gookit/color v1.5.1/go.mod h1:wZFzea4X8qN6vHOSP2apMb4/+w/orMznEzYsIHPaqKM= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28 h1:9alfqbrhuD+9fLZ4iaAVwhlp5PEhmnBt7yvK2Oy5C1U= github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/goreleaser/goreleaser v0.136.0/go.mod h1:wiKrPUeSNh6Wu8nUHxZydSOVQ/OZvOaO7DTtFqie904= +github.com/goreleaser/nfpm v1.2.1/go.mod h1:TtWrABZozuLOttX2uDlYyECfQX7x5XYkVxhjYcR6G9w= +github.com/goreleaser/nfpm v1.3.0/go.mod h1:w0p7Kc9TAUgWMyrub63ex3M2Mgw88M4GZXoTq5UCb40= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= @@ -897,21 +1752,31 @@ github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3 github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY= -github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= +github.com/gotestyourself/gotestyourself v1.4.0/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= +github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.1/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.2/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.14.7/go.mod h1:oYZKL012gGh6LMyg/xA7Q2yq6j8bu0wa+9w14EEthWU= +github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= @@ -919,10 +1784,20 @@ github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= +github.com/hanwen/go-fuse v1.0.0/go.mod h1:unqXarDXqzAk0rt98O2tVndEPIpUgLD9+rwFisZH3Ok= +github.com/hanwen/go-fuse/v2 v2.0.3/go.mod h1:0EQM6aH2ctVpvZ6a+onrQ/vaykxh2GH7hy3e13vzTUY= +github.com/hanwen/go-fuse/v2 v2.1.1-0.20220112183258-f57e95bda82d/go.mod h1:B1nGE/6RBFyBRC1RRnf23UpwCdyJ31eukw34oAKukAc= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= +github.com/hashicorp/consul/api v1.15.3/go.mod h1:/g/qgcoBcEXALCNZgRRisyTW0nY86++L0KbeAMXYCeY= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/consul/sdk v0.11.0/go.mod h1:yPkX5Q6CsxTFMjQQDJwzeNmUUF5NUGGbrDsv9wTb8cw= +github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -931,31 +1806,52 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-getter v1.6.2/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= +github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-retryablehttp v0.6.4/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= 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.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.4.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= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= @@ -963,40 +1859,60 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.8/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/uuid v0.0.0-20160311170451-ebb0a03e909c/go.mod h1:fHzc09UnyJyqyW+bFuq864eh+wC7dj65aXmXLRe5to0= +github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= +github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/improbable-eng/grpc-web v0.14.0/go.mod h1:6hRR09jOEG81ADP5wCQju1z71g6OL4eEvELdran/3cs= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= -github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= @@ -1005,29 +1921,65 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/informalsystems/tm-load-test v1.0.0/go.mod h1:WVaSKaQdfZK3v0C74EMzn7//+3aeCZF8wkIKBz2/M74= +github.com/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= +github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= +github.com/ishidawataru/sctp v0.0.0-20191218070446-00ab2ac2db07/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= +github.com/ishidawataru/sctp v0.0.0-20210226210310-f2269e66cdee/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= +github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= +github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jaguilar/vt100 v0.0.0-20150826170717-2703a27b14ea/go.mod h1:QMdK4dGB3YhEW2BmA1wgGpPYI3HZy/5gD705PXKUVSg= +github.com/jarcoal/httpmock v1.0.5/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/protoreflect v1.8.2/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= +github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= +github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= +github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= +github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/jhump/protoreflect v1.13.1-0.20220928232736-101791cb1b4c/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a/go.mod h1:xRskid8CManxVta/ALEhJha/pweKBaVG6fWgc0yH25s= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= 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= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/jmoiron/sqlx v1.2.1-0.20190826204134-d7d95172beb5/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -1040,7 +1992,7 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= @@ -1049,9 +2001,14 @@ github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E github.com/junk1tm/musttag v0.4.5 h1:d+mpJ1vn6WFEVKHwkgJiIedis1u/EawKOuUTygAUtCo= github.com/junk1tm/musttag v0.4.5/go.mod h1:XkcL/9O6RmD88JBXb+I15nYRl9W4ExhgQeCBEhfMC8U= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8= github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= @@ -1059,51 +2016,85 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/kkdai/bstream v1.0.0/go.mod h1:FDnDOHt5Yx4p3FaHcioFT0QjDOtgUpvjeZqAs+NVZZA= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.6.2/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= +github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= +github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= github.com/kunwardeep/paralleltest v1.0.7 h1:2uCk94js0+nVNQoHZNLBkAR1DQJrVzw6T0RMzJn55dQ= github.com/kunwardeep/paralleltest v1.0.7/go.mod h1:2C7s65hONVqY7Q5Efj5aLzRCNLjw2h4eMc9EcypGjcY= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= github.com/kyoh86/exportloopref v0.1.11 h1:1Z0bcmTypkL3Q4k+IDHMWTcnCliEZcaPiIe0/ymEyhQ= github.com/kyoh86/exportloopref v0.1.11/go.mod h1:qkV4UF1zGl6EkF1ox8L5t9SwyeBAZ3qLMd6up458uqA= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/ldez/tagliatelle v0.5.0 h1:epgfuYt9v0CG3fms0pEgIMNPuFf/LpPIfjk4kyqSioo= github.com/ldez/tagliatelle v0.5.0/go.mod h1:rj1HmWiL1MiKQuOONhd09iySTEkUuE/8+5jtPYz9xa4= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= github.com/leonklingele/grouper v1.1.1 h1:suWXRU57D4/Enn6pXR0QVqqWWrnJ9Osrz+5rjt8ivzU= github.com/leonklingele/grouper v1.1.1/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= +github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= @@ -1111,33 +2102,53 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magefile/mage v1.13.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= +github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= +github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= +github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1rNTU04= github.com/maratori/testpackage v1.1.1/go.mod h1:s4gRK/ym6AMrqpOa/kEbQTV4Q4jb7WeLZzVhVVVOQMc= +github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= +github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 h1:gWg6ZQ4JhDfJPqlo2srm/LN17lpybq15AryXIRcWYLE= github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -1146,13 +2157,15 @@ github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxec github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= +github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= @@ -1160,173 +2173,364 @@ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg= github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-shellwords v1.0.10/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= +github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= +github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= +github.com/mgechev/revive v1.2.3/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= +github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= github.com/mgechev/revive v1.3.2 h1:Wb8NQKBaALBJ3xrrj4zpwJwqwNA6nDpyJSEQWcCka6U= github.com/mgechev/revive v1.3.2/go.mod h1:UCLtc7o5vg5aXCwdUTU1kEBQ1v+YXPAkYDIDXbrs5I0= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= +github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/buildkit v0.8.1/go.mod h1:/kyU1hKy/aYCuP39GZA9MaKioovHku57N6cqlKZIaiQ= +github.com/moby/buildkit v0.10.3/go.mod h1:jxeOuly98l9gWHai0Ojrbnczrk/rf+o9/JqNhY+UCSo= +github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= +github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/sys/mount v0.1.0/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= +github.com/moby/sys/mount v0.1.1/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= +github.com/moby/sys/mount v0.3.0/go.mod h1:U2Z3ur2rXPFrFmy4q6WMwWrBOAQGYtYTRVM8BIvzbwk= +github.com/moby/sys/mountinfo v0.1.0/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= +github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= +github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/sys/mountinfo v0.6.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= +github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= +github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= +github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= +github.com/moby/term v0.0.0-20200915141129-7f0af18e79f2/go.mod h1:TjQg8pa4iejrUrjiz0MCtMV38jdMNW4doKSiBrEvCQQ= +github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= +github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= +github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= github.com/moricho/tparallel v0.3.1 h1:fQKD4U1wRMAYNngDonW5XupoB/ZGJHdpzrWqgyg9krA= github.com/moricho/tparallel v0.3.1/go.mod h1:leENX2cUv7Sv2qDgdi0D0fCftN8fRC67Bcn8pqzeYNI= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= +github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= +github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= +github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= +github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= +github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nakabonne/nestif v0.3.0/go.mod h1:dI314BppzXjJ4HsCnbo7XzrJHPszZsjnk5wEBSYHI2c= github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= +github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= +github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= -github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= +github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= +github.com/networkplumbing/go-nft v0.2.0/go.mod h1:HnnM+tYvlGAsMU7yoYwXEVLLiDW9gdMmb5HoGcwpuQs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nishanths/exhaustive v0.7.11/go.mod h1:gX+MP7DWMKJmNa1HfMozK+u04hQd3na9i0hyqf3/dOI= +github.com/nishanths/exhaustive v0.8.1/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= +github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= github.com/nishanths/exhaustive v0.11.0 h1:T3I8nUGhl/Cwu5Z2hfc92l0e04D2GEW6e0l8pzda2l0= github.com/nishanths/exhaustive v0.11.0/go.mod h1:RqwDsZ1xY0dNdqHho2z6X+bgzizwbLYOWnZbbl2wLB4= -github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= +github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nunnatsa/ginkgolinter v0.12.1 h1:vwOqb5Nu05OikTXqhvLdHCGcx5uthIYIl0t79UVrERQ= github.com/nunnatsa/ginkgolinter v0.12.1/go.mod h1:AK8Ab1PypVrcGUusuKD8RDcl2KgsIwvNaaxAlyHSzso= 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/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= +github.com/oklog/ulid/v2 v2.1.0/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= 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/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= github.com/onsi/ginkgo/v2 v2.9.4 h1:xR7vG4IXt5RWx6FfIjyAtsoMAtnc3C/rFXBBd2AjZwE= +github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= +github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= +github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= 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.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= 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 v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc10/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc92/go.mod h1:X1zlU4p7wOlX4+WRCz+hvlRv8phdL7UqbYD+vQwNMmE= +github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= +github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= +github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +github.com/opencontainers/runc v1.1.1/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= 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/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200728170252-4d89ac9fbff6/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= +github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= +github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= +github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing-contrib/go-stdlib v1.0.0/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= 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/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= 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/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= +github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= -github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= 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= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= -github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= +github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= +github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.0/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= +github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= 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/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= +github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= 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-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/profile v1.5.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= +github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3/go.mod h1:q5NXNGzqj5uPnVuhGkZfmgHqNUhf15VLi6L9kW0VEc0= +github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4/go.mod h1:RdR1j20Aj5pB6+fw6Y9Ur7lMHpegTEjY1vc19hEZL40= +github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= +github.com/polyfloyd/go-errorlint v1.0.0/go.mod h1:KZy4xxPJyy88/gldCe5OdW6OQRtNO3EZE7hXzmnebgA= +github.com/polyfloyd/go-errorlint v1.0.2/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= +github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= github.com/polyfloyd/go-errorlint v1.4.2 h1:CU+O4181IxFDdPH6t/HT7IiDj1I7zxNi1RIUxYwn8d0= github.com/polyfloyd/go-errorlint v1.4.2/go.mod h1:k6fU/+fQe38ednoZS51T7gSIGQW1y94d6TkSr35OzH8= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= +github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -1335,6 +2539,8 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -1346,28 +2552,52 @@ github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB8 github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= +github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= -github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= +github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= +github.com/quasilyte/go-ruleguard v0.1.2-0.20200318202121-b00d7a75d3d8/go.mod h1:CGFX09Ci3pq9QZdj86B+VGIdNj4VyCo2iPOGS9esB/k= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= +github.com/quasilyte/go-ruleguard v0.3.17/go.mod h1:sST5PvaR7yb/Az5ksX8oc88usJ4EGjmJv7cK7y3jyig= +github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= github.com/quasilyte/go-ruleguard v0.3.19 h1:tfMnabXle/HzOb5Xe9CUZYWXKfkS1KwRmZyPmD9nVcc= github.com/quasilyte/go-ruleguard v0.3.19/go.mod h1:lHSn69Scl48I7Gt9cX3VrbsZYvYiBYszZOZW4A+oTEw= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.19/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= +github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo= github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl980XxGFEZSS6KlBGIV0diGdySzxATTWoqaU= github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= @@ -1378,114 +2608,196 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= +github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= +github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= +github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= +github.com/rs/zerolog v1.28.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= +github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryancurrah/gomodguard v1.0.4/go.mod h1:9T/Cfuxs5StfsocWr4WzDL36HqnX0fVb9d5fSEaLhoE= +github.com/ryancurrah/gomodguard v1.1.0/go.mod h1:4O8tr7hBODaGE6VIhfJDHcwzh5GUccKSJBU0UMXJFVM= +github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= +github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= github.com/ryancurrah/gomodguard v1.3.0 h1:q15RT/pd6UggBXVBuLps8BXRvl5GPBcwVA7BJHMLuTw= github.com/ryancurrah/gomodguard v1.3.0/go.mod h1:ggBxb3luypPEzqVtq33ee7YSN35V28XeGnid8dnni50= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanrolds/sqlclosecheck v0.4.0 h1:i8SX60Rppc1wRuyQjMciLqIzV3xnoHB7/tXbr6RGYNI= github.com/ryanrolds/sqlclosecheck v0.4.0/go.mod h1:TBRRjzL31JONc9i4XMinicuo+s+E8yKZ5FN8X3G6CKQ= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= +github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= +github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= +github.com/sagikazarmark/crypt v0.8.0/go.mod h1:TmKwZAo97S4Fy4sfMH/HX/cQP5D+ijra2NyLpNNmttY= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sanposhiho/wastedassign/v2 v2.0.7 h1:J+6nrY4VW+gC9xFzUc+XjPD3g3wF3je/NsJFwFK7Uxc= github.com/sanposhiho/wastedassign/v2 v2.0.7/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= -github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= +github.com/sashamelentyev/usestdlibvars v1.13.0/go.mod h1:D2Wb7niIYmTB+gB8z7kh8tyP5ccof1dQ+SFk+WW5NtY= +github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= github.com/sashamelentyev/usestdlibvars v1.23.0 h1:01h+/2Kd+NblNItNeux0veSL5cBF1jbEOPrEhDzGYq0= github.com/sashamelentyev/usestdlibvars v1.23.0/go.mod h1:YPwr/Y1LATzHI93CqoPUN/2BzGQ/6N/cl/KwgR0B/aU= +github.com/sassoftware/go-rpmutils v0.0.0-20190420191620-a8f1baeba37b/go.mod h1:am+Fp8Bt506lA3Rk3QCmSqmYmLMnPDhdDUcosQCAx+I= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= +github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/securego/gosec v0.0.0-20200103095621-79fbf3af8d83/go.mod h1:vvbZ2Ae7AzSq3/kywjUDxSNq2SJ27RxCz2un0H3ePqE= +github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A= +github.com/securego/gosec/v2 v2.3.0/go.mod h1:UzeVyUXbxukhLeHKV3VVqo7HdoQR9MrRfFmZYotn8ME= +github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= +github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= github.com/securego/gosec/v2 v2.16.0 h1:Pi0JKoasQQ3NnoRao/ww/N/XdynIB9NRYYZT5CyOs5U= github.com/securego/gosec/v2 v2.16.0/go.mod h1:xvLcVZqUfo4aAQu56TNv7/Ltz6emAOQAEsrZrt7uGlI= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/serialx/hashring v0.0.0-20190422032157-8b2912629002/go.mod h1:/yeG0My1xr/u+HZrFQ1tOQQQQrOawfyMUH13ai5brBc= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM= +github.com/shirou/gopsutil/v3 v3.22.7/go.mod h1:s648gW4IywYzUfE/KjXxUsqrqx/T2xO5VqOXxONeRfI= +github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= 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.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= github.com/sivchari/containedctx v1.0.3 h1:x+etemjbsh2fB5ewm5FeLNi5bUjK0V8n0RB+Wwfd0XE= github.com/sivchari/containedctx v1.0.3/go.mod h1:c1RDvCbnJLtH4lLcYD/GqwiBSSf4F5Qk0xld2rBqzJ4= github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= +github.com/sivchari/tenv v1.5.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/sivchari/tenv v1.7.1 h1:PSpuD4bu6fSmtWMxSGWcvqUUgIn7k3yOJhOIzVWn8Ak= github.com/sivchari/tenv v1.7.1/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= +github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sonatard/noctx v0.0.2 h1:L7Dz4De2zDQhW8S0t+KUjY0MAQJd6SgVwhzNIc4ok00= github.com/sonatard/noctx v0.0.2/go.mod h1:kzFz+CzWSjQ2OzIm46uJZoXuBpa2+0y3T36U18dWqIo= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= +github.com/sourcegraph/go-diff v0.5.3/go.mod h1:v9JDtjCE4HHHCZGId75rg8gkKKa98RVjBcBGsVmMmak= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCpA8G0= github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= +github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= +github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= +github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.0/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= +github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= +github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= +github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= @@ -1493,19 +2805,26 @@ github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRk github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= -github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= -github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= +github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0-20230523193151-73dea436e53f h1:NJdZ+YJ9Vf2t286L20IjFK0SxGpobF1xIp5ZQlxWetk= github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0-20230523193151-73dea436e53f/go.mod h1:DJNSVK8NCYHM+aZHCFkcAqPwjzwHYAjhjSMlhAGtJ3c= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -1515,6 +2834,8 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= @@ -1522,12 +2843,24 @@ github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= +github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= +github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= +github.com/sylvia7788/contextcheck v1.0.6/go.mod h1:9XDxwvxyuKD+8N+a7Gs7bfWLityh5t70g/GjdEt2N2M= +github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c h1:+aPplBwWcHBo6q9xrfWdMrT9o4kltkmmvpemgIjep/8= github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c/go.mod h1:SbErYREK7xXdsRiigaQiQkI9McGRzYMvlKYaP3Nimdk= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= +github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= @@ -1535,106 +2868,208 @@ github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrn github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4= -github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg= -github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ= -github.com/tendermint/tendermint v0.34.10/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= -github.com/tendermint/tendermint v0.34.11/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= -github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI= -github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8= +github.com/tendermint/tendermint v0.34.14/go.mod h1:FrwVm3TvsVicI9Z7FlucHV6Znfd5KBc/Lpp69cCwtk0= +github.com/tendermint/tendermint v0.34.20/go.mod h1:KtOwCLYJcsS1ymtAfnjjAtXfXClbqcqjdqzFt2Em1Ac= +github.com/tendermint/tendermint v0.37.0-rc2/go.mod h1:uYQO9DRNPeZROa9X3hJOZpYcVREDC2/HST+EiU5g2+A= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= +github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= +github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v0.3.7/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= +github.com/tetafro/godot v0.4.2/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= 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.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= +github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e h1:MV6KaVu/hzByHP0UvJ4HcMGE/8a6A4Rggc/0wx2AvJo= github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ= github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= +github.com/timonwong/logrlint v0.1.0/go.mod h1:Zleg4Gw+kRxNej+Ra7o+tEaW5k1qthTaYKU7rSD39LU= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= +github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= +github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= +github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= +github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck/v2 v2.6.1/go.mod h1:Eo+Opt6pyMW1b6cNllOcDSSoHO0aTJ+iF6BfCUbHltA= +github.com/tomarrell/wrapcheck/v2 v2.6.2/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= +github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= github.com/tomarrell/wrapcheck/v2 v2.8.0 h1:qDzbir0xmoE+aNxGCPrn+rUSxAX+nG6vREgbbXAR81I= github.com/tomarrell/wrapcheck/v2 v2.8.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/tommy-muehle/go-mnd v1.1.1/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= +github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= +github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/tonistiigi/fsutil v0.0.0-20201103201449-0834f99b7b85/go.mod h1:a7cilN64dG941IOXfhJhlH0qB92hxJ9A1ewrdUmJ6xo= +github.com/tonistiigi/fsutil v0.0.0-20220115021204-b19f7f9cb274/go.mod h1:oPAfvw32vlUJSjyDcQ3Bu0nb2ON2B+G0dtVN/SZNJiA= +github.com/tonistiigi/go-actions-cache v0.0.0-20220404170428-0bdeb6e1eac7/go.mod h1:qqvyZqkfwkoJuPU/bw61bItaoO0SJ8YSW0vSVRRvsRg= +github.com/tonistiigi/go-archvariant v1.0.0/go.mod h1:TxFmO5VS6vMq2kvs3ht04iPXtu2rUT/erOnGFYfk5Ho= +github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea/go.mod h1:WPnis/6cRcDZSUvVmezrxJPkiO87ThFYsoUiMwWNDJk= +github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f/go.mod h1:ulncasL3N9uLrVann0m+CDlJKWsIAP34MPcOJF6VRvc= +github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= +github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= +github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= +github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= +github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= +github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= +github.com/vdemeester/k8s-pkg-credentialprovider v1.17.4/go.mod h1:inCTmtUdr5KJbreVojo06krnTgaeAz/Z7lynpPk/Q2c= +github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= +github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= +github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= -github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= +github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= +github.com/xanzy/go-gitlab v0.31.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= +github.com/xanzy/go-gitlab v0.32.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.5/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= +go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= +go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= +go.etcd.io/etcd/client/v2 v2.305.5/go.mod h1:zQjKllfqfBVyVStbt4FaosoX2iYd8fV/GRy/PbowgP4= +go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= +go.etcd.io/etcd/client/v3 v3.5.5/go.mod h1:aApjR4WGlSumpnJ2kloS75h6aHUmAyaPLjHMxpc7E7c= +go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= +go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= +go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= +go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= +go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= +go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= +go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= +go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= +go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A= +go.opencensus.io v0.19.2/go.mod h1:NO/8qkisMZLZ1FCsKNqtJPwc8/TaclWyY0B6wcYNg9M= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -1646,17 +3081,69 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.29.0/go.mod h1:LsankqVDx4W+RhZNA5uWarULII/MBhF5qwCYxTuyXjs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.33.0/go.mod h1:y/SlJpJQPd2UzfBCj0E9Flk9FDCtTyqUmaCB41qFrWI= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= +go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.29.0/go.mod h1:vHItvsnJtp7ES++nFLLFBzUWny7fJQSvTlxFcqQGUr4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.29.0/go.mod h1:tLYsuf2v8fZreBVwp9gVMhefZlLFZaUiNVSq8QxXRII= +go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= +go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= +go.opentelemetry.io/otel v1.4.0/go.mod h1:jeAqMFKy2uLIxCtKxoFj0FAL5zAPKQagc3+GtBWakzk= +go.opentelemetry.io/otel v1.4.1/go.mod h1:StM6F/0fSwpd8dKWDCdRr7uRvEPYdW0hBSlbdTiUde4= +go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM= +go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= +go.opentelemetry.io/otel/exporters/jaeger v1.4.1/go.mod h1:ZW7vkOu9nC1CxsD8bHNHCia5JUbwP39vxgd1q4Z5rCI= +go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.4.1/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.4.1/go.mod h1:o5RW5o2pKpJLD5dNTCmjF1DorYwMeFJmb/rKr5sLaa8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.4.1/go.mod h1:c6E4V3/U+miqjs/8l950wggHGL1qzlp0Ypj9xoGrPqo= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.4.1/go.mod h1:VwYo0Hak6Efuy0TXsZs8o1hnV3dHDPNtDbycG0hI8+M= +go.opentelemetry.io/otel/internal/metric v0.27.0/go.mod h1:n1CVxRqKqYZtqyTh9U/onvKapPGv7y/rpyOTI+LFNzw= +go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= +go.opentelemetry.io/otel/metric v0.27.0/go.mod h1:raXDJ7uP2/Jc0nVZWQjJtzoyssOYWu/+pjZqRzfvZ7g= +go.opentelemetry.io/otel/metric v0.32.3/go.mod h1:pgiGmKohxHyTPHGOff+vrtIH39/R9fiO/WoenUQ3kcc= +go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= +go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= +go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= +go.opentelemetry.io/otel/sdk v1.4.1/go.mod h1:NBwHDgDIBYjwK2WNu1OPgsIc2IJzmBXNnvIJxJc8BpE= +go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= +go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= +go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= +go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= +go.opentelemetry.io/otel/trace v1.4.0/go.mod h1:uc3eRsqDfWs9R7b92xbQbU42/eTNz4N+gLP8qJCi4aE= +go.opentelemetry.io/otel/trace v1.4.1/go.mod h1:iYEVbroFCNut9QkwEczV9vMRPHNKSSwYZjulEtsmhFc= +go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaTBoTCh2zIFI4= +go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= +go.opentelemetry.io/proto/otlp v0.12.0/go.mod h1:TsIjwGWIx5VFYv9KGVlOpxoBl5Dy+63SUguV7GGvlSQ= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= 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.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.1.12/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.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= @@ -1664,38 +3151,74 @@ go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U= +go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= +gocloud.dev v0.19.0/go.mod h1:SmKwiR8YwIMMJvQBKLsC3fHNyMwXLw3PMDO+VVteJMI= golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= +golang.org/x/build v0.0.0-20190314133821-5284462c4bec/go.mod h1:atTaCNAy0f16Ah5aV1gMSwgiKVHwu/JncqDpuRr7lS4= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220313003712-b769efc7c000/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1703,8 +3226,8 @@ golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= @@ -1713,16 +3236,27 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= +golang.org/x/exp v0.0.0-20221019170559-20944726eadf/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= +golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20220613132600-b0d781184e0d/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230213192124-5e25df0256eb h1:WGs/bGIWYyAY5PVgGGMXqGGCxSJz4fpoUExb/vgqNCU= golang.org/x/exp/typeparams v0.0.0-20230213192124-5e25df0256eb/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -1736,30 +3270,35 @@ golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mobile v0.0.0-20200801112145-973feb4309de/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= +golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181108082009-03003ca0c849/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1773,11 +3312,16 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1795,11 +3339,12 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -1807,30 +3352,57 @@ golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220726230323-06994584191e/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= +golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221017152216-f25eb7ecb193/go.mod h1:RpDiru2p0u2F0lLpEoqnP2+7xs0ifAuOcJ442g6GU2s= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1845,6 +3417,7 @@ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= @@ -1853,14 +3426,19 @@ golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7Lm golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1868,22 +3446,28 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/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.1.0/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-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1891,27 +3475,46 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190620070143-6f217b454f45/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1923,23 +3526,38 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200917073148-efd3b9a0ff20/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201013081832-0aaa2718063a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210313202042-bd2e13477e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1949,11 +3567,13 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1961,12 +3581,23 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211031064116-611d5d643895/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211113001501-0c823b97ae02/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1975,23 +3606,36 @@ golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220727055044-e65921a090b8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1999,12 +3643,22 @@ golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220919170432-7a66f970e087/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2016,54 +3670,88 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113232020-e2727e816f5a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200102140908-9497f49d5709/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204192400-7124308813f3/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -2073,25 +3761,43 @@ golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200331202046-9d5940d49312/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200502202811-ed308ab3e770/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -2103,13 +3809,21 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11-0.20220513221640-090b14e8501f/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= +golang.org/x/tools v0.1.12-0.20220628192153-7743d1d949f1/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2123,15 +3837,28 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3j golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.2.0/go.mod h1:IfRCZScioGtypHNTlz3gFk67J8uePVW7uDTBzXuIkhU= +google.golang.org/api v0.3.0/go.mod h1:IuvZyQh8jgscv8qWfQ4ABd8m7hEudgBFM/EdhA3BnXw= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.6.0/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= +google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -2141,6 +3868,7 @@ google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/ google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.25.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= @@ -2158,7 +3886,9 @@ google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6 google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= @@ -2168,6 +3898,7 @@ google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69 google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= @@ -2176,35 +3907,53 @@ google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaE google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190620144150-6af8c5fc6601/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -2212,7 +3961,6 @@ google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -2220,14 +3968,17 @@ google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201111145450-ac7456db90a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -2255,8 +4006,14 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211101144312-62acf1d99145/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= @@ -2268,6 +4025,7 @@ google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= @@ -2276,6 +4034,7 @@ google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= @@ -2283,6 +4042,7 @@ google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljW google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= @@ -2300,16 +4060,34 @@ google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53B google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230202175211-008b39050e57/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -2317,11 +4095,13 @@ google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ij google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= @@ -2340,6 +4120,9 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= @@ -2349,6 +4132,10 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw= google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -2362,16 +4149,21 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.2-0.20230208135220-49eaa78c6c9c/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -2380,19 +4172,32 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= +gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -2400,18 +4205,30 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 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 v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +gotest.tools/v3 v3.1.0/go.mod h1:fHy7eyTmJFO5bQbUsEGQ1v4m2J3Jz9eWL54TP2/ZuYQ= +gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= +gotest.tools/v3 v3.3.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/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= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -2419,20 +4236,114 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +honnef.co/go/tools v0.3.1/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= +honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= honnef.co/go/tools v0.4.3 h1:o/n5/K5gXqk8Gozvs2cnL0F2S1/g1vcGCAx2vETjITw= honnef.co/go/tools v0.4.3/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA= +k8s.io/api v0.0.0-20180904230853-4e7be11eab3f/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= +k8s.io/api v0.17.4/go.mod h1:5qxx6vjmwUVG2nHQTKGlLts8Tbok8PzHl4vHtVFuZCA= +k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw= +k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= +k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= +k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= +k8s.io/api v0.22.5/go.mod h1:mEhXyLaSD1qTOf40rRiKXkc+2iCem09rWLlFwhCEiAs= +k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= +k8s.io/apimachinery v0.0.0-20180904193909-def12e63c512/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= +k8s.io/apimachinery v0.17.4/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g= +k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= +k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= +k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= +k8s.io/apimachinery v0.22.5/go.mod h1:xziclGKwuuJ2RM5/rSFQSYAj0zdbci3DH8kj+WvyN0U= +k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= +k8s.io/apiserver v0.17.4/go.mod h1:5ZDQ6Xr5MNBxyi3iUZXS84QOhZl+W7Oq2us/29c0j9I= +k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= +k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= +k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= +k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ= +k8s.io/client-go v0.0.0-20180910083459-2cefa64ff137/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s= +k8s.io/client-go v0.17.4/go.mod h1:ouF6o5pz3is8qU0/qYL2RnoxOPqgfuidYLowytyLJmc= +k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU= +k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= +k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= +k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= +k8s.io/client-go v0.22.5/go.mod h1:cs6yf/61q2T1SdQL5Rdcjg9J1ElXSwbjSrW2vFImM4Y= +k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= +k8s.io/cloud-provider v0.17.4/go.mod h1:XEjKDzfD+b9MTLXQFlDGkk6Ho8SGMpaU8Uugx/KNK9U= +k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= +k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= +k8s.io/component-base v0.17.4/go.mod h1:5BRqHMbbQPm2kKu35v3G+CpVq4K0RJKC7TRioF0I9lE= +k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= +k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= +k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= +k8s.io/component-base v0.22.5/go.mod h1:VK3I+TjuF9eaa+Ln67dKxhGar5ynVbwnGrUiNF4MqCI= +k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= +k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= +k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= +k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= +k8s.io/cri-api v0.23.1/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4= +k8s.io/cri-api v0.24.0-alpha.3/go.mod h1:c/NLI5Zdyup5+oEYqFO2IE32ptofNiZpS1nL2y51gAg= +k8s.io/csi-translation-lib v0.17.4/go.mod h1:CsxmjwxEI0tTNMzffIAcgR9lX4wOh6AKHdxQrT7L0oo= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= +k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20180731170545-e3762e86a74c/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= +k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= +k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= +k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= +k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= +k8s.io/kubernetes v1.11.10/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/legacy-cloud-providers v0.17.4/go.mod h1:FikRNoD64ECjkxO36gkDgJeiQWwyZTuBkhu+yxOc1Js= +k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= +mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= mvdan.cc/gofumpt v0.5.0 h1:0EQ+Z56k8tXjj/6TQD25BFNKQXpCvT0rnansIc7Ug5E= mvdan.cc/gofumpt v0.5.0/go.mod h1:HBeVDtMKRZpXyxFciAirzdKklDlGu8aAy1wEbH5Y9js= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= +mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7/go.mod h1:HGC5lll35J70Y5v7vCGb9oLhHoScFwkHDJm/05RdSTc= +mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= +mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d h1:3rvTIIM22r9pvXk+q3swxUQAQOxksVMGK7sml4nG57w= mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d/go.mod h1:IeHQjmn6TOD+e4Z3RFiZMMsLVL+A96Nvptar8Fj71is= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= +pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= +pgregory.net/rapid v0.5.2/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +pgregory.net/rapid v0.5.3/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= @@ -2440,7 +4351,21 @@ rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= +sourcegraph.com/sqs/pbtypes v1.0.0/go.mod h1:3AciMUv4qUuRHRHhOG4TZOB+72GdPVz5k+c648qsFS4= From 3c8663d13cc9202407affaff077522a7ed445f51 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Wed, 25 Oct 2023 18:37:18 +0530 Subject: [PATCH 80/90] bandoracle cdc changed --- x/bandoracle/types/codec.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x/bandoracle/types/codec.go b/x/bandoracle/types/codec.go index c189264a3..4faf682ab 100644 --- a/x/bandoracle/types/codec.go +++ b/x/bandoracle/types/codec.go @@ -21,5 +21,6 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { var ( Amino = codec.NewLegacyAmino() - ModuleCdc = codec.NewAminoCodec(Amino) + // ModuleCdc = codec.NewAminoCodec(Amino) + ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) ) From 0c11574c4ebd66f926e1d67c7d4bbb1436680adf Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Fri, 27 Oct 2023 12:36:30 +0530 Subject: [PATCH 81/90] proto unmarshall code commented --- x/bandoracle/module_ibc.go | 85 +++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 38 deletions(-) diff --git a/x/bandoracle/module_ibc.go b/x/bandoracle/module_ibc.go index f4ff885ff..5092fccc7 100644 --- a/x/bandoracle/module_ibc.go +++ b/x/bandoracle/module_ibc.go @@ -1,7 +1,6 @@ package bandoracle import ( - "fmt" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -132,16 +131,18 @@ func (im IBCModule) OnRecvPacket( return oracleAck } - var modulePacketData types.BandoraclePacketData - if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { - return channeltypes.NewErrorAcknowledgement(sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error())) - } + //TODO: review commented code + // var modulePacketData types.BandoraclePacketData + // if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { + // return channeltypes.NewErrorAcknowledgement(sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error())) + // } - // Dispatch packet - switch packet := modulePacketData.Packet.(type) { - default: - return channeltypes.NewErrorAcknowledgement(sdkerrors.Wrapf(types.ErrUnrecognisedPacket, "unrecognized %s packet type: %T", types.ModuleName, packet)) - } + // // Dispatch packet + // switch packet := modulePacketData.Packet.(type) { + // default: + // return channeltypes.NewErrorAcknowledgement(sdkerrors.Wrapf(types.ErrUnrecognisedPacket, "unrecognized %s packet type: %T", types.ModuleName, packet)) + // } + return nil // NOTE: acknowledgement will be written synchronously during IBC handler execution. } @@ -158,26 +159,31 @@ func (im IBCModule) OnAcknowledgementPacket( return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet acknowledgement: %v", err) } - sdkResult, err := im.handleOracleAcknowledgment(ctx, ack, modulePacket) + _, err := im.handleOracleAcknowledgment(ctx, ack, modulePacket) if err != nil { return err } - if sdkResult != nil { - sdkResult.Events = ctx.EventManager().Events().ToABCIEvents() - return nil - } - - var modulePacketData types.BandoraclePacketData - if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error()) - } - - // Dispatch packet - switch packet := modulePacketData.Packet.(type) { - default: - errMsg := fmt.Sprintf("unrecognized %s packet type: %T", types.ModuleName, packet) - return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, errMsg) - } + //TODO: review commented code + // if sdkResult != nil { + // sdkResult.Events = ctx.EventManager().Events().ToABCIEvents() + // return nil + // } + + // var modulePacketData types.BandoraclePacketData + // if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { + // fmt.Println("err in OnAcknowledgementPacket------------------") + // return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error()) + // } + // fmt.Println("OnAcknowledgementPacket data", modulePacketData) + // fmt.Println("OnAcknowledgementPacket------------------ end") + + // // Dispatch packet + // switch packet := modulePacketData.Packet.(type) { + // default: + // errMsg := fmt.Sprintf("unrecognized %s packet type: %T", types.ModuleName, packet) + // return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, errMsg) + // } + return nil } // OnTimeoutPacket implements the IBCModule interface. @@ -186,17 +192,20 @@ func (im IBCModule) OnTimeoutPacket( modulePacket channeltypes.Packet, relayer sdk.AccAddress, ) error { - var modulePacketData types.BandoraclePacketData - if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error()) - } - - // Dispatch packet - switch packet := modulePacketData.Packet.(type) { - default: - errMsg := fmt.Sprintf("unrecognized %s packet type: %T", types.ModuleName, packet) - return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, errMsg) - } + //TODO: review commented code + // fmt.Println("modulePacket.GetData(on timout reaal data)", modulePacket) + // var modulePacketData types.BandoraclePacketData + // if err := modulePacketData.Unmarshal(modulePacket.GetData()); err != nil { + // return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error()) + // } + + // // Dispatch packet + // switch packet := modulePacketData.Packet.(type) { + // default: + // errMsg := fmt.Sprintf("unrecognized %s packet type: %T", types.ModuleName, packet) + // return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, errMsg) + // } + return nil } func (am AppModule) NegotiateAppVersion(ctx sdk.Context, order channeltypes.Order, connectionID string, portID string, counterparty channeltypes.Counterparty, proposedVersion string) (version string, err error) { From 2c139be7641fa0d918506019fc7050d0e0babf52 Mon Sep 17 00:00:00 2001 From: Pratik Date: Fri, 27 Oct 2023 19:26:42 +0530 Subject: [PATCH 82/90] fix testcase --- x/auctionsV2/keeper/msg_server_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x/auctionsV2/keeper/msg_server_test.go b/x/auctionsV2/keeper/msg_server_test.go index c6a2d1b04..b38b75ff3 100644 --- a/x/auctionsV2/keeper/msg_server_test.go +++ b/x/auctionsV2/keeper/msg_server_test.go @@ -754,25 +754,25 @@ func (s *KeeperTestSuite) TestDebtAuctionBid() { }, { Name: "bidding amount is greater than maximum bidding amount", - Msg: *auctionsV2types.NewMsgPlaceMarketBid(bidder, 1, sdk.NewCoin("uasset2", sdk.NewInt(53000000))), + Msg: *auctionsV2types.NewMsgPlaceMarketBid(bidder, 1, sdk.NewCoin("uasset3", sdk.NewInt(53000000))), ExpErr: auctionsV2types.ErrorMaxBidAmount, ExpResp: nil, }, { Name: "success valid case", - Msg: *auctionsV2types.NewMsgPlaceMarketBid(bidder, 1, sdk.NewCoin("uasset2", sdk.NewInt(200000))), + Msg: *auctionsV2types.NewMsgPlaceMarketBid(bidder, 1, sdk.NewCoin("uasset3", sdk.NewInt(200000))), ExpErr: nil, ExpResp: &auctionsV2types.MsgPlaceMarketBidResponse{}, }, { Name: "bid should be less than or equal to 180000", - Msg: *auctionsV2types.NewMsgPlaceMarketBid(bidder, 1, sdk.NewCoin("uasset2", sdk.NewInt(200000))), + Msg: *auctionsV2types.NewMsgPlaceMarketBid(bidder, 1, sdk.NewCoin("uasset3", sdk.NewInt(200000))), ExpErr: fmt.Errorf("bid should be less than or equal to 180000 : not found"), ExpResp: nil, }, { Name: "success valid case 2", - Msg: *auctionsV2types.NewMsgPlaceMarketBid(bidder, 1, sdk.NewCoin("uasset2", sdk.NewInt(180000))), + Msg: *auctionsV2types.NewMsgPlaceMarketBid(bidder, 1, sdk.NewCoin("uasset3", sdk.NewInt(180000))), ExpErr: nil, ExpResp: &auctionsV2types.MsgPlaceMarketBidResponse{}, }, From 3a7b68a2d621fa0c6faadf05dee6ac577e0b0558 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Fri, 27 Oct 2023 23:05:50 +0530 Subject: [PATCH 83/90] discard height added for bandoracle --- app/app.go | 2 +- app/upgrades/testnet/v13/upgrades.go | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index 3845a41fd..32560eb3c 100644 --- a/app/app.go +++ b/app/app.go @@ -1471,7 +1471,7 @@ func (a *App) registerUpgradeHandlers() { case upgradeInfo.Name == tv13.UpgradeName: a.UpgradeKeeper.SetUpgradeHandler( tv13.UpgradeName, - tv13.CreateUpgradeHandlerV13(a.mm, a.configurator, a.cdc, a.keys[capabilitytypes.ModuleName], a.CapabilityKeeper, a.WasmKeeper, a.ParamsKeeper, a.ConsensusParamsKeeper, *a.IbcKeeper, a.GovKeeper, *a.StakingKeeper, a.MintKeeper, a.SlashingKeeper), + tv13.CreateUpgradeHandlerV13(a.mm, a.configurator, a.cdc, a.keys[capabilitytypes.ModuleName], a.CapabilityKeeper, a.WasmKeeper, a.ParamsKeeper, a.ConsensusParamsKeeper, *a.IbcKeeper, a.GovKeeper, *a.StakingKeeper, a.MintKeeper, a.SlashingKeeper, a.BandoracleKeeper), ) } diff --git a/app/upgrades/testnet/v13/upgrades.go b/app/upgrades/testnet/v13/upgrades.go index 0b1e69ac9..b46db93d2 100644 --- a/app/upgrades/testnet/v13/upgrades.go +++ b/app/upgrades/testnet/v13/upgrades.go @@ -21,6 +21,7 @@ import ( exported "github.com/cosmos/ibc-go/v7/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" ibctmmigrations "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/migrations" + bandoraclemodulekeeper "github.com/comdex-official/comdex/x/bandoracle/keeper" ) func CreateUpgradeHandlerV13( @@ -37,6 +38,7 @@ func CreateUpgradeHandlerV13( StakingKeeper stakingkeeper.Keeper, MintKeeper mintkeeper.Keeper, SlashingKeeper slashingkeeper.Keeper, + bandoracleKeeper bandoraclemodulekeeper.Keeper, ) upgradetypes.UpgradeHandler { return func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { ctx.Logger().Info("Applying test net upgrade - v.13.0.0") @@ -112,6 +114,13 @@ func CreateUpgradeHandlerV13( wasmKeeper.SetParams(ctx, wasmParams) logger.Info(fmt.Sprintf("updated wasm params to %v", wasmParams)) + // update discard BH of oracle + bandData := bandoracleKeeper.GetFetchPriceMsg(ctx) + if bandData.Size() > 0 { + bandData.AcceptedHeightDiff = 6000 + bandoracleKeeper.SetFetchPriceMsg(ctx, bandData) + logger.Info(fmt.Sprintf("updated bandData to %v", bandData)) + } return vm, err } } From ae4f50069de2c9433de9b533217dda019bcbc75a Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Mon, 30 Oct 2023 00:14:13 +0530 Subject: [PATCH 84/90] error handling added --- x/lend/client/cli/tx.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/x/lend/client/cli/tx.go b/x/lend/client/cli/tx.go index 9528bb1f0..034be0a5e 100644 --- a/x/lend/client/cli/tx.go +++ b/x/lend/client/cli/tx.go @@ -1403,6 +1403,9 @@ func CmdDepreciatePoolsProposal() *cobra.Command { return err } txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } txf =txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewDepreciatePools(clientCtx, txf, cmd.Flags()) @@ -1462,6 +1465,9 @@ func CmdAddEModePairsProposal() *cobra.Command { return err } txf, err := tx.NewFactoryCLI(clientCtx, cmd.Flags()) + if err != nil { + return err + } txf =txf.WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) txf, msg, err := NewAddEModePairs(clientCtx, txf, cmd.Flags()) From 83336d13a3b5144c7dfd72fd3281220c15ab5ca5 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Tue, 31 Oct 2023 01:34:58 +0530 Subject: [PATCH 85/90] wasmd to 41 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 2ebff17b6..68dee2bc5 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.20 require ( cosmossdk.io/api v0.3.1 cosmossdk.io/math v1.1.2 - github.com/CosmWasm/wasmd v0.40.2 + github.com/CosmWasm/wasmd v0.41.0 github.com/CosmWasm/wasmvm v1.3.0 github.com/bandprotocol/bandchain-packet v0.0.3 github.com/cometbft/cometbft v0.37.2 diff --git a/go.sum b/go.sum index cc4671bf4..e11b81db1 100644 --- a/go.sum +++ b/go.sum @@ -547,8 +547,8 @@ github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbi 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.40.2 h1:GSDHIaeJI7fcDF5mkzSXQI5IZLtvpNq5t3TjJ9bDpPw= -github.com/CosmWasm/wasmd v0.40.2/go.mod h1:vqI238yb4D6aNuigS8mCqTyyCV9HN5eBEZARKRoK3ts= +github.com/CosmWasm/wasmd v0.41.0 h1:fmwxSbwb50zZDcBaayYFRLIaSFca+EFld1WOaQi49jg= +github.com/CosmWasm/wasmd v0.41.0/go.mod h1:0Sds1q2IsPaTN1gHa3BNOYcUFgtGvxH7CXEXPgoihns= github.com/CosmWasm/wasmvm v1.3.0 h1:x12X4bKlUPS7TT9QQP45+fJo2sp30GEbiSSgb9jsec8= github.com/CosmWasm/wasmvm v1.3.0/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= From 944092652f5b9cd29948a07d51741ffa259c4fc4 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Tue, 31 Oct 2023 01:35:36 +0530 Subject: [PATCH 86/90] todo removed --- app/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index 32560eb3c..895fd73e8 100644 --- a/app/app.go +++ b/app/app.go @@ -904,7 +904,7 @@ func New( if err != nil { panic(fmt.Sprintf("error while reading wasm config: %s", err)) } - supportedFeatures := "iterator,staking,stargate,comdex,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_3" //TODO: cosmwasm_1_3 juno has added but its not there in wasmd changelog + supportedFeatures := "iterator,staking,stargate,comdex,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_3" wasmOpts = append(cwasm.RegisterCustomPlugins(&app.LockerKeeper, &app.TokenmintKeeper, &app.AssetKeeper, &app.Rewardskeeper, &app.CollectorKeeper, &app.LiquidationKeeper, &app.AuctionKeeper, &app.EsmKeeper, &app.VaultKeeper, &app.LendKeeper, &app.LiquidityKeeper, &app.MarketKeeper), wasmOpts...) From 80d4764ff5b991a76c9b53be1e387e1df75a5267 Mon Sep 17 00:00:00 2001 From: vishnukumavat Date: Thu, 2 Nov 2023 01:55:01 +0530 Subject: [PATCH 87/90] utils updated --- types/utils.go | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/types/utils.go b/types/utils.go index 099e80d07..278507222 100644 --- a/types/utils.go +++ b/types/utils.go @@ -12,21 +12,22 @@ import ( "strings" "time" + sdkmath "cosmossdk.io/math" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" ) // GetShareValue multiplies with truncation by receiving int amount and decimal ratio and returns int result. -func GetShareValue(amount sdk.Int, ratio sdk.Dec) sdk.Int { - return sdk.NewDec(amount.Int64()).MulTruncate(ratio).TruncateInt() +func GetShareValue(amount sdkmath.Int, ratio sdkmath.LegacyDec) sdkmath.Int { + return sdkmath.LegacyNewDec(amount.Int64()).MulTruncate(ratio).TruncateInt() } -type StrIntMap map[string]sdk.Int +type StrIntMap map[string]sdkmath.Int // AddOrSet Set when the key not existed on the map or add existed value of the key. -func (m StrIntMap) AddOrSet(key string, value sdk.Int) { +func (m StrIntMap) AddOrSet(key string, value sdkmath.Int) { if _, ok := m[key]; !ok { m[key] = value } else { @@ -57,12 +58,12 @@ func DateRangeIncludes(startTime, endTime, targetTime time.Time) bool { } // ParseDec is a shortcut for sdk.MustNewDecFromStr. -func ParseDec(s string) sdk.Dec { - return sdk.MustNewDecFromStr(strings.ReplaceAll(s, "_", "")) +func ParseDec(s string) sdkmath.LegacyDec { + return sdkmath.LegacyMustNewDecFromStr(strings.ReplaceAll(s, "_", "")) } // ParseDecP is like ParseDec, but it returns a pointer to sdk.Dec. -func ParseDecP(s string) *sdk.Dec { +func ParseDecP(s string) *sdkmath.LegacyDec { d := ParseDec(s) return &d } @@ -114,15 +115,15 @@ func ParseTime(s string) time.Time { // DecApproxEqual returns true if a and b are approximately equal, // which means the diff ratio is equal or less than 0.1%. -func DecApproxEqual(a, b sdk.Dec) bool { +func DecApproxEqual(a, b sdkmath.LegacyDec) bool { if b.GT(a) { a, b = b, a } - return a.Sub(b).Quo(a).LTE(sdk.NewDecWithPrec(1, 3)) + return a.Sub(b).Quo(a).LTE(sdkmath.LegacyNewDecWithPrec(1, 3)) } // DecApproxSqrt returns an approximate estimation of x's square root. -func DecApproxSqrt(x sdk.Dec) (r sdk.Dec) { +func DecApproxSqrt(x sdkmath.LegacyDec) (r sdkmath.LegacyDec) { var err error r, err = x.ApproxSqrt() if err != nil { @@ -132,13 +133,13 @@ func DecApproxSqrt(x sdk.Dec) (r sdk.Dec) { } // RandomInt returns a random integer in the half-open interval [min, max). -func RandomInt(r *rand.Rand, min, max sdk.Int) sdk.Int { - return min.Add(sdk.NewIntFromBigInt(new(big.Int).Rand(r, max.Sub(min).BigInt()))) +func RandomInt(r *rand.Rand, min, max sdkmath.Int) sdkmath.Int { + return min.Add(sdkmath.NewIntFromBigInt(new(big.Int).Rand(r, max.Sub(min).BigInt()))) } // RandomDec returns a random decimal in the half-open interval [min, max). -func RandomDec(r *rand.Rand, min, max sdk.Dec) sdk.Dec { - return min.Add(sdk.NewDecFromBigIntWithPrec(new(big.Int).Rand(r, max.Sub(min).BigInt()), sdk.Precision)) +func RandomDec(r *rand.Rand, min, max sdkmath.LegacyDec) sdkmath.LegacyDec { + return min.Add(sdkmath.LegacyNewDecFromBigIntWithPrec(new(big.Int).Rand(r, max.Sub(min).BigInt()), sdkmath.LegacyPrecision)) } // GenAndDeliverTx generates a transactions and delivers it. From 1726d2e1645457155fc2e51f295476c7f478bc39 Mon Sep 17 00:00:00 2001 From: vishnukumavat Date: Thu, 2 Nov 2023 02:14:06 +0530 Subject: [PATCH 88/90] swap test fixed --- x/liquidity/keeper/swap_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/liquidity/keeper/swap_test.go b/x/liquidity/keeper/swap_test.go index aedab890c..8d08fe5a5 100644 --- a/x/liquidity/keeper/swap_test.go +++ b/x/liquidity/keeper/swap_test.go @@ -2334,7 +2334,7 @@ func (s *KeeperTestSuite) TestExhaustRangedPool() { ammPool := pool.AMMPool(rx.Amount, ry.Amount, sdkmath.Int{}) s.Require().True(coinEq(rx, utils.ParseCoin("997231denom2"))) s.Require().True(coinEq(ry, utils.ParseCoin("984671denom1"))) - s.Require().True(decEq(ammPool.Price(), utils.ParseDec("1.003719250732340754"))) + s.Require().True(decEq(ammPool.Price(), utils.ParseDec("1.003719250732340753"))) s.Require().True(coinsEq(utils.ParseCoins("31534denom2"), s.getBalances(sdk.MustAccAddressFromBech32(params.DustCollectorAddress)))) s.Require().True(coinsEq(utils.ParseCoins("12546884denom1,12666562denom2"), s.getBalances(orderer))) From 8addfa1083dbf4b8dde6a37b5952fb5cca14a5fb Mon Sep 17 00:00:00 2001 From: vishnukumavat Date: Thu, 2 Nov 2023 13:12:40 +0530 Subject: [PATCH 89/90] test cases fixed --- x/liquidity/amm/pool_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/liquidity/amm/pool_test.go b/x/liquidity/amm/pool_test.go index 7f8e02229..5031eb42e 100644 --- a/x/liquidity/amm/pool_test.go +++ b/x/liquidity/amm/pool_test.go @@ -613,7 +613,7 @@ func TestCreateRangedPool(t *testing.T) { utils.ParseDec("1.0"), utils.ParseDec("1.001"), utils.ParseDec("1.0005"), "", - sdkmath.NewInt(1_000000000000000000), sdkmath.NewInt(999000936633614182), + sdkmath.NewInt(1_000000000000000000), sdkmath.NewInt(999000936633622179), }, { "small x asset", From 55abd9df81e1e01c7dcb6e3410acb702a1d0ed63 Mon Sep 17 00:00:00 2001 From: Chandragupta Singh Date: Thu, 2 Nov 2023 13:42:14 +0530 Subject: [PATCH 90/90] test yml fix --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index abe696c52..8918b1055 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -64,4 +64,4 @@ jobs: ${{ runner.os }}-go-${{ matrix.go-version }}- - name: Run all tests - run: make test-unit \ No newline at end of file + run: make test \ No newline at end of file